在 R 中手动进行简单的聚类
Make a simple clustering manually in R
我正在尝试根据点之间的距离手动进行简单的聚类(不使用任何聚类算法)。我用皮尔逊相关系数来计算距离:
c <- round(cor(t(df)), digits = 2)
d <- as.dist(1 - c)
我想聚类相关性大于特定阈值的所有点。例如 0,7。我如何在 R 中对这些数据点进行聚类?
我的数据框的第一行和第一列如下所示:(总共有 188 个条目和 31 列
| | A1 | A2 | A3 | A4 | A5 |
| --- | --- | --- | --- | --- | --- |
| U00 | 0 | 0 | 0 | 0 | 0 |
| U01 | 0 | 0 | 84 | 0 | 0 |
| U02 | 0 | 1 | 0 | 0 | 0 |
| U03 | 0 | 0 | 0 | 0 | 0 |
| U04 | 0 | 0 | 0 | 0 | 0 |
| U05 | 0 | 0 | 0 | 0 | 0 |
| U06 | 0 | 0 | 0 | 0 | 0 |
和距离:
| | U00 | U01 | U02 | U03 | U04 | U05 | U06 |
| | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| U01 | 0,05 | | | | | | |
| U02 | 1,04 | 1,05 | | | | | |
| U03 | 1,04 | 1,04 | 0,92 | | | | |
| U04 | 1,04 | 1,04 | 0,92 | 0,00 | | | |
| U05 | 1,04 | 1,04 | 0,92 | 0,00 | 0,00 | | |
| U06 | 1,04 | 1,04 | 0,92 | 0,00 | 0,00 | 0,00 | |
最后,我想在我的数据框中添加一个额外的列,其中包含集群的编号。提前致谢!
这样的事情可以使用 igraph
包来完成:
library(igraph)
threshold <- 0.7
graph_from_adjacency_matrix(abs(cor(df)) > threshold) %>%
components() %>%
membership() %>%
split(names(.), .)
注意:我取的是绝对相关,你可以去掉abs
.
我正在尝试根据点之间的距离手动进行简单的聚类(不使用任何聚类算法)。我用皮尔逊相关系数来计算距离:
c <- round(cor(t(df)), digits = 2)
d <- as.dist(1 - c)
我想聚类相关性大于特定阈值的所有点。例如 0,7。我如何在 R 中对这些数据点进行聚类?
我的数据框的第一行和第一列如下所示:(总共有 188 个条目和 31 列
| | A1 | A2 | A3 | A4 | A5 |
| --- | --- | --- | --- | --- | --- |
| U00 | 0 | 0 | 0 | 0 | 0 |
| U01 | 0 | 0 | 84 | 0 | 0 |
| U02 | 0 | 1 | 0 | 0 | 0 |
| U03 | 0 | 0 | 0 | 0 | 0 |
| U04 | 0 | 0 | 0 | 0 | 0 |
| U05 | 0 | 0 | 0 | 0 | 0 |
| U06 | 0 | 0 | 0 | 0 | 0 |
和距离:
| | U00 | U01 | U02 | U03 | U04 | U05 | U06 |
| | ------ | ------ | ------ | ------ | ------ | ------ | ------ |
| U01 | 0,05 | | | | | | |
| U02 | 1,04 | 1,05 | | | | | |
| U03 | 1,04 | 1,04 | 0,92 | | | | |
| U04 | 1,04 | 1,04 | 0,92 | 0,00 | | | |
| U05 | 1,04 | 1,04 | 0,92 | 0,00 | 0,00 | | |
| U06 | 1,04 | 1,04 | 0,92 | 0,00 | 0,00 | 0,00 | |
最后,我想在我的数据框中添加一个额外的列,其中包含集群的编号。提前致谢!
这样的事情可以使用 igraph
包来完成:
library(igraph)
threshold <- 0.7
graph_from_adjacency_matrix(abs(cor(df)) > threshold) %>%
components() %>%
membership() %>%
split(names(.), .)
注意:我取的是绝对相关,你可以去掉abs
.