igraph (R) 如何仅使用强相关系数创建相关网络

6
我正在尝试使用graph.adjacency来创建一个图,使用相关矩阵(值为-1到1),但仅包括最强相关的边,即小于-0.8或大于0.8的边。
以下是成功给我提供完整数据集网络的代码:
corrdata<-read.csv("spearmancorr.csv",header=FALSE)
cor_mat<-as.matrix(corrdata)
diag(cor_mat)<-0
graph<-graph.adjacency(cor_mat,weighted=TRUE,mode="lower")

我尝试使用delete.edges来缩小网络至至少>0.8以进行测试,但生成的文件仍显示边权重低于0.8。

graph.copy <- delete.edges(graph, which(E(graph)$weight !<0.8)-1)
write.graph(graph.copy, file="gsig80.graphml", format="graphml")

如何获取我想要的图形文件?有什么建议吗?


2
请提供一个可重现的示例,包括数据,这样我就可以将您的代码粘贴到我的控制台中并运行它,而不会出现错误信息。 - bdemarest
1
我认为你需要修改邻接矩阵。 - Tyler Rinker
1个回答

7

如果需要,您可以删除图中的边缘,或者在第一时间从矩阵中删除它们。例如:

cor_mat[ cor_mat < .8 ] <- 0
diag(cor_mat) <- 0
graph <- graph.adjacency(cor_mat, weighted=TRUE, mode="lower")

以下是创建图表后如何从中删除它们的方法:
graph <- delete.edges(graph, E(graph)[ weight < 0.8 ])

这两种方法似乎都有效,因为文件大小有所减小。然而,当我使用 E(graph)$weights 检查权重时,边的权重不再是 r 值,而是矩阵文件中 A 列的 ID。 - user2988430
我在原始问题中添加了一个可重现的矩阵,谢谢。 - user2988430
1
我看不到任何矩阵。另外,spearmancorr.csv在哪里?请参见https://dev59.com/eG025IYBdhLWcg3whGSx。谢谢。 - Gabor Csardi
抱歉关于无法重现的例子。不过我已经找到了问题出现的地方。我用一个较小的矩阵(10x10)测试了您的答案,它运行良好。我的实际数据集有一个 5395x5395 的矩阵。当使用大矩阵时,“delete.edges”会剥夺所有边缘文件,仅保留 2 条边缘(这是不正确的)。是否有一种代码可以处理更大的文件? - user2988430
我甚至更不理解......所以如果矩阵很小,代码可以工作,如果它很大,那么边缘权重将被一些矩阵的行ID替换?再次,请添加一个可重现的示例。它不必很小,如果您认为问题在于矩阵太大,请设置随机种子并创建一个随机矩阵。这是可重复的。 - Gabor Csardi
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接