潜在クラス分析を使用して、バイナリ変数のセットに基づいて観測値のサンプルをクラスター化しています。私はRとパッケージpoLCAを使用しています。LCAでは、検索するクラスターの数を指定する必要があります。実際には、人々は通常、それぞれが異なる数のクラスを指定する複数のモデルを実行し、さまざまな基準を使用して、データの「最良の」説明を決定します。
さまざまなモデルを調べて、class =(i)のモデルに分類された観測値がclass =(i + 1)のモデルによってどのように分布されるかを理解しようとすることが非常に役立つことがよくあります。少なくとも、モデル内のクラスの数に関係なく、非常に堅牢なクラスターが見つかることがあります。
これらの関係をグラフ化し、これらの複雑な結果をより簡単に論文で伝えたり、統計学に向いていない同僚に伝えたりしたいのですが。これは、Rである種の単純なネットワークグラフィックパッケージを使用して非常に簡単に実行できると思いますが、その方法がわかりません。
誰かが私を正しい方向に向けてくれませんか?以下は、サンプルデータセットを再現するコードです。各ベクトルxiは、可能性のあるi個のクラスを持つモデルで、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)
ノードが分類であり、エッジが(重みまたは色によって)モデル間で分類から移動する観測の%を反映するグラフを作成する方法があると思います。例えば
更新:igraphパッケージでいくつかの進歩があります。上記のコードから始めます...
poLCAの結果は、クラスメンバーシップを説明するために同じ番号をリサイクルするため、少し再コーディングする必要があります。
N<-ncol(results)
n<-0
for(i in 2:N) {
results[,i]<- (results[,i])+((i-1)+n)
n<-((i-1)+n)
}
次に、すべてのクロス集計とその頻度を取得し、それらをすべてのエッジを定義する1つの行列に変換する必要があります。これを行うには、おそらくもっとエレガントな方法があるでしょう。
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オプションでもっと遊ぶ時間。