Rの比較的新しい人として、forループの作成に問題があります。forループから複数のベクトルを出力するR
私は、9000の観測値と25のカテゴリ変数を持つ非常に大きなデータセットを持っています。これは、バイナリデータとあらかじめ作成された階層的クラスタリングに変換されています。今度は、kmodes$withindiff
から出力される「クラスタ内単純マッチング距離」を使用してK-Modesクラスタリングを試してエルボープロットを作成します。私はk in 1:8
クラスタごとにこれを合計して、エルボープロットを得ることができます。
library(klaR)
for(k in 1:8)
{
WCSM[k] <- sum(kmodes(data,k,iter.max=100)$withindiff)
}
plot(1:8,WCSM,type="b", xlab="Number of Clusters",ylab="Within-Cluster
Simple-Matching Distance Summed", main="K-modes Elbow Plot")
私の問題は、kモードからさらに出力したいということです。それぞれについてk in 1:8
私はkmodes$cluster
によって与えられた各オブジェクトが割り当てられているクラスターを示す整数のベクトルを取得したいと思います。私は、それぞれのループを作成する必要がありますk in 1:8
と出力のそれぞれを8つの別々のベクトルに保存します。しかし、私はどのようにそのようなループを行うか分からない。私はちょうど8行のコードを別々に走らせることができますが、それぞれiter.max=10
を実行するのに15分かかるので、これをiter.max=100
に増やすとループが有効になるように夜間実行する必要があります。
cl.kmodes2=kmodes(data, 2,iter.max=100)
cl.kmodes3=kmodes(data, 3,iter.max=100)
cl.kmodes4=kmodes(data, 4,iter.max=100)
cl.kmodes5=kmodes(data, 5,iter.max=100)
cl.kmodes6=kmodes(data, 6,iter.max=100)
cl.kmodes7=kmodes(data, 7,iter.max=100)
cl.kmodes8=kmodes(data, 8,iter.max=100)
は最終的に私が調整ランドインデックスを取得することにより、K-モードクラスタリングに階層的バイナリクラスタリングの結果を比較したいです。例えば、階層的クラスタのためk=4
で木を切断し、K-モードから4クラスタソリューションにこれを比較する:
dist.binary = dist(data, method="binary")
cl.binary = hclust(dist.binary, method="complete")
hcl.4 = cutree(cl.binary, k = 4)
tab = table(hcl.4, cl.kmodes4$cluster)
library(e1071)
classAgreement(tab)
これがうまく機能している限り期待通りにはかかりませんでした。セーブのヒントも非常に便利でした。 – PennyR