r - 由于 igraph 包,R 中的社区检测
问题描述
我有一个数据框,其中包含 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"
由于我的 OTUs 表和基因的 EMBL-EBI 数据库,我检查了 OTU 和每个组件的不同基因。我可以确定每个重建的基因组是否有意义。
我还检查了文档,发现了许多其他社区检测方法:edge-betweenness、louvain、multi-level ...我想知道我使用的命令行之间的主要区别是什么(这让我回过头来非常有意义组件)和这些算法(这也给了我组件)?
谢谢
解决方案
如果您希望您希望找到的集群在您的图表中彼此弱断开,则使用组件搜索将起作用。如果您希望集群之间存在连接,这些将在完整性搜索中组合在一起。
Louvain 和 edge-betweeness 没有这个限制,它们试图通过分别最大化目标、模块化和中介来找到最佳的分区/社区分配/聚类。模块化方法受到分辨率限制:在足够大的图中永远无法识别非常小的但不同的社区。如果您希望找到许多较小的集群,请记住这一点。
推荐阅读
- swift - UITabBarButton 没有使用accessibilityIdentifier
- python - Python - 在 OSX 上启用 TLS1.2
- node.js - 如何从承载令牌中提取令牌字符串?
- wordpress - WooCommerce 页面结帐页面在 Safari 浏览器中无法正常工作?
- python - Django - 无法从媒体文件夹中的文件夹显示图像
- python - heroku推送错误python 3-6
- arduino - Arduino 草图示例工作正常,当导出到 Atmel Studio 7 解决方案时,出现错误:“WDT”未在此范围内声明
- linux - Linux 事务事件记录
- angular-material-5 - 角度材料为表格中的不同行生成垫子自动完成
- elixir - 如何在 Elixir 中运行迁移文件?