dplyr とほうきを使用して、データの kmeans を計算しています。私のデータには、X 座標と Y 座標のテストとトレーニングのセットが含まれており、いくつかのパラメーター値 (この場合はラムダ) によってグループ化されています。
mds.test = data.frame()
for(l in seq(0.1, 0.9, by=0.2)) {
new.dist <- run.distance.model(x, y, lambda=l)
mds <- preform.mds(new.dist, ndim=2)
mds.test <- rbind(mds.test, cbind(mds$space, design[,c(1,3,4,5)], lambda=rep(l, nrow(mds$space)), data="test"))
}
> head(mds.test)
Comp1 Comp2 Transcripts Genes Timepoint Run lambda data
7A_0_AAGCCTAGCGAC -0.06690476 -0.25519106 68125 9324 Day 0 7A 0.1 test
7A_0_AAATGACTGGCC -0.15292848 0.04310200 28443 6746 Day 0 7A 0.1 test
7A_0_CATCTCGTTCTA -0.12529445 0.13022908 27360 6318 Day 0 7A 0.1 test
7A_0_ACCGGCACATTC -0.33015913 0.14647857 23038 5709 Day 0 7A 0.1 test
7A_0_TATGTCGGAATG -0.25826098 0.05424976 22414 5878 Day 0 7A 0.1 test
7A_0_GAAAAAGGTGAT -0.24349387 0.08071162 21907 6766 Day 0 7A 0.1 test
head
上記のテスト データセットがありますが、トレーニング データの座標を含む という名前のデータセットもありますmds.train
。ここでの私の最終的な目標は、ラムダでグループ化された両方のセットに対して k-means を実行し、トレーニング センターのテスト データの within.ss、 between.ss 、および total.ss を計算することです。ほうきに関する優れたリソースのおかげで、次のようにするだけで、テスト セットのラムダごとに kmeans を実行できます。
test.kclusts = mds.test %>%
group_by(lambda) %>%
do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
次に、各ラムダ内の各クラスターについて、このデータの中心を計算できます。
test.clusters = test.kclusts %>%
group_by(lambda) %>%
do(tidy(.$kclust[[1]]))
これは私が立ち往生しているところです。リファレンス ページ(例kclusts %>% group_by(k) %>% do(augment(.$kclust[[1]], points.matrix))
) に同様に示されているように、機能の割り当てを計算するにはどうすればpoints.matrix
よいですか? また、トレーニング セットのセンターを使用して、テストの割り当てに基づいて統計を計算する方法はありますか?mds.test
length(unique(mds.test$lambda))
glance()
どんな助けでも大歓迎です!ありがとうございました!
編集:進行状況を更新しています。テスト/トレーニングの割り当てを集計する方法を理解しましたが、両方のセット (テスト センターでのトレーニングの割り当てとトレーニング センターでのテストの割り当て) から kmeans 統計を計算しようとすると、まだ問題が発生します。更新されたコードは以下のとおりです。
test.kclusts = mds.test %>% group_by(lambda) %>% do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
test.clusters = test.kclusts %>% group_by(lambda) %>% do(tidy(.$kclust[[1]]))
test.clusterings = test.kclusts %>% group_by(lambda) %>% do(glance(.$kclust[[1]]))
test.assignments = left_join(test.kclusts, mds.test) %>% group_by(lambda) %>% do(augment(.$kclust[[1]], cbind(.$Comp1, .$Comp2)))
train.kclusts = mds.train %>% group_by(lambda) %>% do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
train.clusters = train.kclusts %>% group_by(lambda) %>% do(tidy(.$kclust[[1]]))
train.clusterings = train.kclusts %>% group_by(lambda) %>% do(glance(.$kclust[[1]]))
train.assignments = left_join(train.kclusts, mds.train) %>% group_by(lambda) %>% do(augment(.$kclust[[1]], cbind(.$Comp1, .$Comp2)))
test.assignments$data = "test"
train.assignments$data = "train"
merge.assignments = rbind(test.assignments, train.assignments)
merge.assignments %>% filter(., data=='test') %>% group_by(lambda) ... ?
この時点までの私の進捗状況を示す以下のプロットを添付しました。繰り返しますが、テスト割り当て/座標 (中心が見えるプロット) でトレーニング データ センターの kmeans 統計 (平方和、平方和の合計、および平方和の間) を計算したいと思います。