Tôi đang sử dụng phân tích lớp tiềm ẩn để phân cụm một mẫu quan sát dựa trên một tập hợp các biến nhị phân. Tôi đang sử dụng R và gói poLCA. Trong LCA, bạn phải chỉ định số lượng cụm bạn muốn tìm. Trong thực tế, mọi người thường chạy một số mô hình, mỗi mô hình chỉ định một số lớp khác nhau và sau đó sử dụng các tiêu chí khác nhau để xác định đâu là giải thích "tốt nhất" của dữ liệu.
Tôi thường thấy rất hữu ích khi xem qua các mô hình khác nhau để cố gắng hiểu cách các quan sát được phân loại trong mô hình với class = (i) được phân phối bởi mô hình với class = (i + 1). Ít nhất đôi khi bạn có thể tìm thấy các cụm rất mạnh tồn tại bất kể số lượng các lớp trong mô hình.
Tôi muốn có một cách để vẽ biểu đồ cho các mối quan hệ này, để dễ dàng truyền đạt những kết quả phức tạp này trong các bài báo và cho các đồng nghiệp không định hướng thống kê. Tôi tưởng tượng điều này rất dễ thực hiện trong R bằng cách sử dụng một số loại gói đồ họa mạng đơn giản, nhưng tôi đơn giản là không biết làm thế nào.
Bất cứ ai có thể xin vui lòng chỉ cho tôi đi đúng hướng. Dưới đây là mã để sao chép một tập dữ liệu mẫu. Mỗi vector xi đại diện cho việc phân loại 100 quan sát, trong một mô hình với i các lớp có thể. Tôi muốn vẽ biểu đồ cách các quan sát (hàng) di chuyển từ lớp này sang lớp khác qua các cột.
x1 <- sample(1:1, 100, replace=T)
x2 <- sample(1:2, 100, replace=T)
x3 <- sample(1:3, 100, replace=T)
x4 <- sample(1:4, 100, replace=T)
x5 <- sample(1:5, 100, replace=T)
results <- cbind (x1, x2, x3, x4, x5)
Tôi tưởng tượng có một cách để tạo ra một biểu đồ trong đó các nút là phân loại và các cạnh phản ánh (theo trọng số hoặc màu sắc có thể)% các quan sát chuyển từ phân loại từ mô hình này sang mô hình tiếp theo. Ví dụ
CẬP NHẬT: Có một số tiến bộ với gói igraph. Bắt đầu từ đoạn mã trên ...
Kết quả poLCA tái chế các số giống nhau để mô tả tư cách thành viên của lớp, vì vậy bạn cần thực hiện một chút mã hóa lại.
N<-ncol(results)
n<-0
for(i in 2:N) {
results[,i]<- (results[,i])+((i-1)+n)
n<-((i-1)+n)
}
Sau đó, bạn cần lấy tất cả các bảng chéo và tần số của chúng, và gắn chúng vào một ma trận xác định tất cả các cạnh. Có lẽ có một cách thanh lịch hơn nhiều để làm điều này.
results <-as.data.frame(results)
g1 <- count(results,c("x1", "x2"))
g2 <- count(results,c("x2", "x3"))
colnames(g2) <- c("x1", "x2", "freq")
g3 <- count(results,c("x3", "x4"))
colnames(g3) <- c("x1", "x2", "freq")
g4 <- count(results,c("x4", "x5"))
colnames(g4) <- c("x1", "x2", "freq")
results <- rbind(g1, g2, g3, g4)
library(igraph)
g1 <- graph.data.frame(results, directed=TRUE)
plot.igraph(g1, layout=layout.reingold.tilford)
Thời gian để chơi nhiều hơn với các tùy chọn igraph tôi đoán.