ฉันใช้การวิเคราะห์ชั้นแฝงเพื่อจัดกลุ่มตัวอย่างของการสังเกตตามชุดของตัวแปรไบนารี ฉันใช้ R และแพคเกจ poLCA ใน LCA คุณต้องระบุจำนวนกลุ่มที่คุณต้องการค้นหา ในทางปฏิบัติผู้คนมักใช้โมเดลหลายแบบแต่ละคนระบุจำนวนคลาสที่แตกต่างกันแล้วใช้เกณฑ์ต่าง ๆ เพื่อกำหนดว่าคำอธิบายใดที่ "ดีที่สุด" ของข้อมูล
ฉันมักจะพบว่ามันมีประโยชน์มากที่จะมองข้ามแบบจำลองต่างๆเพื่อพยายามทำความเข้าใจว่าการสังเกตที่จำแนกในโมเดลที่มี class = (i) นั้นถูกกระจายโดยโมเดลที่มี class = (i + 1) อย่างไร อย่างน้อยที่สุดบางครั้งคุณสามารถค้นหากลุ่มที่แข็งแกร่งมากซึ่งมีอยู่โดยไม่คำนึงถึงจำนวนคลาสในโมเดล
ฉันต้องการวิธีสร้างกราฟความสัมพันธ์เหล่านี้เพื่อสื่อสารผลลัพธ์ที่ซับซ้อนเหล่านี้ในเอกสารและเพื่อนร่วมงานที่ไม่ได้มุ่งเน้นเชิงสถิติได้ง่ายขึ้น ฉันคิดว่านี่เป็นเรื่องง่ายมากที่จะทำใน R โดยใช้แพ็คเกจกราฟิกเครือข่ายแบบง่าย ๆ แต่ฉันก็ไม่รู้เหมือนกัน
ใครช่วยกรุณาชี้ฉันในทิศทางที่ถูกต้อง ด้านล่างเป็นรหัสในการทำซ้ำชุดข้อมูลตัวอย่าง เวกเตอร์ xi แต่ละอันแสดงถึงการจำแนก 100 การสังเกตการณ์ในแบบจำลองที่มีคลาสที่เป็นไปได้ ฉันต้องการกราฟวิธีการสังเกต (แถว) ย้ายจากชั้นหนึ่งไปอีกชั้นข้ามคอลัมน์
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)
ฉันจินตนาการว่ามีวิธีในการสร้างกราฟที่มีการจัดประเภทโหนดและขอบสะท้อน (โดยน้ำหนักหรือสีอาจ)% ของการสังเกตย้ายจากการจำแนกจากแบบจำลองหนึ่งไปยังอีก เช่น
UPDATE: มีความคืบหน้ากับแพคเกจ igraph เริ่มจากรหัสด้านบน ...
ผลลัพธ์ poLCA จะรีไซเคิลหมายเลขเดิมเพื่ออธิบายความเป็นสมาชิกของคลาสดังนั้นคุณต้องทำการบันทึกใหม่
N<-ncol(results)
n<-0
for(i in 2:N) {
results[,i]<- (results[,i])+((i-1)+n)
n<-((i-1)+n)
}
จากนั้นคุณต้องได้รับตารางไขว้ทั้งหมดและความถี่ของมันแล้วโยงมันเป็นเมทริกซ์เดียวเพื่อกำหนดขอบทั้งหมด อาจมีวิธีที่สง่างามกว่านี้มาก
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)
ใช้เวลาในการเล่นมากขึ้นด้วยตัวเลือก igraph ฉันเดา