Мне понадобится некоторая помощь для кластеризации моего binary values
в моей матрице. Это двоичная матрица, вот пример:
G1 G2 G3 G4 G5 G6 G7 G8 G9 G10 G11 G12
Sp1 0 0 0 0 0 0 0 0 0 0 0 0
Sp2 1 1 1 1 1 0 0 0 0 0 0 0
Sp3 0 0 0 0 0 0 0 0 0 1 1 1
SP4 0 0 0 0 0 0 0 0 0 1 1 1
SP5 1 1 1 1 1 1 1 1 1 0 1 0
SP6 1 1 1 1 1 1 1 1 1 0 0 0
SP7 0 0 0 0 0 0 0 0 0 0 0 0
SP8 0 0 0 0 0 0 0 0 0 0 0 0
SP9 0 1 0 1 0 1 1 0 1 0 0 0
И я бы хотел кластеризовать the columns
, а не строки.
Идея состоит в том, чтобы получить наилучшее из возможных представлений групп точек, которые похожи. Вот в этом примере это должно выглядеть примерно так:
G8 G1 G3 G5 G9 G2 G4 G11 G10 G12
Sp1 0 0 0 0 0 0 0 0 0 0
Sp2 0 1 1 1 0 1 1 0 0 0
Sp3 0 0 0 0 0 0 0 1 1 1
SP4 0 0 0 0 0 0 0 1 1 1
SP5 1 1 1 1 1 1 1 1 0 0
SP6 1 1 1 1 1 1 1 0 0 0
SP7 0 0 0 0 0 0 0 0 0 0
SP8 0 0 0 0 0 0 0 0 0 0
SP9 0 0 0 0 1 1 1 0 0 0
Я попробовал следующее:
#get the best k value wich is the number of groups
library(fpc)
pamk.best <- pamk(t(test_matrix_bis))
k= pamk.best$nc
matbis<-t(test_matrix_bis)
dist_mat <- dist(matbis, method = 'binary')
hclust_avg <- hclust(dist_mat, method = 'ward.D')
cut_avg <- cutree(hclust_avg, k = k)
test_matrix=setDT(as.data.frame(t(test_matrix)), keep.rownames = TRUE)[]
test_matrix=test_matrix %>%
mutate(cluster = cut_avg)
rownames(test_matrix) <- test_matrix$rn
test_matrix$rn <-NULL
test_matrix=test_matrix[order(test_matrix$cluster, decreasing = TRUE), ]
Результат не так плох, но, возможно, есть лучший подход для этого вида вопрос?