问题描述
首先,我想说我对 R 完全陌生,我只是想完成这一项任务。 所以,我想要做的是我想从一个加权矩阵创建一个网络图。我举了个例子:
CSV 是一个简单的相关矩阵,如下所示:
,A,B,C,D,E,F,G
A,1,0.9,0.64,0.43,0.38,0.33,0.33
B,0.38
C,0.59,0.69,0.64
D,0.28,0.23,0.28
E,0.95,0.9
F,0.9
G,1
更准确地说,我先画图,然后用尺子记下距离,计算一个方程来获得权重并制作CSV表格。
值越大,两个点越接近。
然而,无论我做什么,我得到的最好结果是这样的:
这就是我尝试使用this教程来完成它的方式:
首先,我导入我的矩阵:
> matrix <- read.csv(file = 'test_dataset.csv')
但是在用 head() 打印出矩阵之后,这已经以某种方式切割了矩阵的最后一行:
> head(matrix)
ï.. A B C D E F G
1 A 1.00 0.90 0.64 0.43 0.38 0.33 0.33
2 B 0.90 1.00 0.64 0.33 0.43 0.38 0.38
3 C 0.64 0.64 1.00 0.59 0.69 0.64 0.64
4 D 0.43 0.33 0.59 1.00 0.28 0.23 0.28
5 E 0.38 0.43 0.69 0.28 1.00 0.95 0.90
6 F 0.33 0.38 0.64 0.23 0.95 1.00 0.90
> dim(matrix)
[1] 7 8
然后我继续删除第一列,使矩阵再次变成正方形...
> matrix <- data.matrix(matrix)[,-1]
> head(matrix)
A B C D E F G
[1,] 1.00 0.90 0.64 0.43 0.38 0.33 0.33
[2,] 0.90 1.00 0.64 0.33 0.43 0.38 0.38
[3,] 0.64 0.64 1.00 0.59 0.69 0.64 0.64
[4,] 0.43 0.33 0.59 1.00 0.28 0.23 0.28
[5,] 0.38 0.43 0.69 0.28 1.00 0.95 0.90
[6,] 0.33 0.38 0.64 0.23 0.95 1.00 0.90
> dim(matrix)
[1] 7 7
然后我创建图表并尝试绘制它:
> network <- graph_from_adjacency_matrix(matrix,weighted=T,mode="undirected",diag=F)
> plot(network)
出现上面的结果...
所以,在花了最后几个小时在谷歌上搜索并尝试了更多的东西之后,这是我能找到的最接近的。
所以我请求你的帮助,非常感谢!
解决方法
这一切都很好。
head()
只打印出矩阵或数据框的前 6 行,如果您想查看所有行,请使用 print()
或仅打印矩阵变量的名称。
graph_from_adjacency_matrix
会在两个节点之间生成链接。这就是为什么您要让每个节点都链接到每个其他节点。
要了解该教程正在做什么,您需要添加一行
matrix[matrix<0.5] <- 0
在创建图形之前删除截止点以下的相关边。
它仍然不会产生像您手绘的图表(其中的接近度大致是相关性),如果它们的相关性高于 0.5,只需将它们聚集在一起。