Saya menggunakan analisis kelas laten untuk mengelompokkan sampel pengamatan berdasarkan satu set variabel biner. Saya menggunakan R dan paket poLCA. Di LCA, Anda harus menentukan jumlah cluster yang ingin Anda temukan. Dalam praktiknya, orang biasanya menjalankan beberapa model, masing-masing menentukan jumlah kelas yang berbeda, dan kemudian menggunakan berbagai kriteria untuk menentukan mana yang merupakan "terbaik" penjelasan data.
Saya sering merasa sangat berguna untuk melihat berbagai model untuk mencoba memahami bagaimana pengamatan diklasifikasikan dalam model dengan kelas = (i) didistribusikan oleh model dengan kelas = (i + 1). Paling tidak Anda kadang-kadang dapat menemukan kelompok yang sangat kuat yang ada terlepas dari jumlah kelas dalam model.
Saya ingin cara membuat grafik hubungan-hubungan ini, untuk lebih mudah mengomunikasikan hasil-hasil yang rumit ini dalam makalah dan kepada rekan-rekan yang tidak berorientasi secara statistik. Saya membayangkan ini sangat mudah dilakukan di R menggunakan beberapa jenis paket grafik jaringan yang sederhana, tetapi saya tidak tahu caranya.
Adakah yang bisa mengarahkan saya ke arah yang benar? Di bawah ini adalah kode untuk mereproduksi contoh dataset. Setiap vektor xi mewakili klasifikasi 100 pengamatan, dalam model dengan kelas yang mungkin. Saya ingin menggambarkan bagaimana pengamatan (baris) bergerak dari satu kelas ke kelas lainnya di seluruh kolom.
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)
Saya membayangkan ada cara untuk menghasilkan grafik di mana node adalah klasifikasi dan ujung-ujungnya mencerminkan (dengan bobot, atau warna mungkin)% dari pengamatan bergerak dari klasifikasi dari satu model ke model berikutnya. Misalnya
UPDATE: Memiliki beberapa kemajuan dengan paket igraph. Mulai dari kode di atas ...
Hasil poLCA mendaur ulang angka yang sama untuk menggambarkan keanggotaan kelas, jadi Anda perlu melakukan sedikit pengodean ulang.
N<-ncol(results)
n<-0
for(i in 2:N) {
results[,i]<- (results[,i])+((i-1)+n)
n<-((i-1)+n)
}
Maka Anda perlu mendapatkan semua tabulasi silang dan frekuensinya, dan mengikatnya menjadi satu matriks yang mendefinisikan semua sisi. Mungkin ada cara yang jauh lebih elegan untuk melakukan ini.
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)
Waktu untuk bermain lebih banyak dengan opsi igraph kurasa.
sumber
Jawaban:
Sejauh ini, opsi terbaik yang saya temukan, berkat saran Anda, adalah ini:
Selesai dengan igraph
Dilakukan dengan ggparallel
Masih terlalu kasar untuk dibagikan dalam jurnal, tetapi saya pasti menemukan ini sangat berguna.
Ada juga opsi yang memungkinkan dari pertanyaan ini pada stack overflow , tetapi saya belum memiliki kesempatan untuk mengimplementasikannya; dan kemungkinan lain di sini .
sumber