借助igraph软件包,R中的社区检测

时间:2019-06-12 11:02:47

标签: r cluster-analysis igraph detection

我有一个data.frame,其中包含OTU和基因之间的相关性。这些相关性将使我能够构建基因组。此data.frame有1105854行。

      var1                var2  corr
1  OTU3978 UniRef90_A0A010P3Z8 0.846
2  OTU4011 UniRef90_A0A010P3Z8 0.855
3  OTU4929 UniRef90_A0A010P3Z8 0.829
4  OTU4317 UniRef90_A0A011P550 0.850
5  OTU4816 UniRef90_A0A011P550 0.807
6  OTU3902 UniRef90_A0A011QPQ2 0.836
7  OTU3339 UniRef90_A0A011RKI6 0.835
8  OTU1359 UniRef90_A0A011RLA7 0.801
9  OTU2085 UniRef90_A0A011RLA7 0.843
10 OTU3542 UniRef90_A0A011RLA7 0.866
11 OTU0473 UniRef90_A0A011TDE1 0.807

我使用igraph库构建图形对象。

g<-graph.data.frame(df)

然后,我想提取该图的成分以构建基因组:我的意思是,一个成分将对应一个基因组。

我尝试了以下命令:genomes<-split(names(V(g)),components(g)$membership)

它给了我几个组成部分,例如:

> genomes[[4]]
[1] "OTU2417"             "UniRef90_A0A076H0Q4" "UniRef90_A0A2E8T3F8"
[4] "UniRef90_G5ZY43"

我要检查OTU和每个组件的不同基因,这要归功于我的OTU表和EMBL-EBI数据库中的基因。我可以确定每个重建的基因组是否有意义。

我还检查了文档,发现了许多其他的社区检测方法:边缘间,鲁汶,多级...我想知道我使用的命令行之间的主要区别是什么(这给了我返回非常有意义的组件)和这些算法(也为我提供了组件)?

谢谢

1 个答案:

答案 0 :(得分:0)

如果您希望希望发现的簇在图中彼此之间微弱地断开,则可以使用组件搜索。如果您希望集群之间存在连接,则这些连接将在完整性搜索中分组在一起。

Louvain和Edge-betweeness没有这个限制,他们试图通过最大化目标,模块化和betweeness来找到最佳的分区/社区分配/集群。模块化方法受分辨率限制的困扰:很小但独特的社区永远不会在足够大的图中被识别。如果您希望找到许多较小的群集,请记住这一点。