在进行R语言的网络分析方面,我相对熟悉igraph
,但对sna
不熟悉。
我的问题是:
这两个库是否兼容? 即能否将从
igraph
创建的图应用到sna
中并反之亦然?是否有某些任务在一个包中比另一个包更高效地执行?
哪个库具有更易理解的操作范围?
总体而言,使用
igraph
或sna
在R中进行网络分析有没有什么强有力的原因?
附:这些包中是否有任何一个允许多层(多重)网络分析?
igraph
更适合于图论和网络数学模型,而sna
更适合于(主要是社交)网络统计模型。我认为,igraph
的创建者主要背景是计算机科学,而sna
的人员则是社会学家和统计学家。我主要在 sna
中工作(以及包括 statnet
套件中的相关包),但也经常同时使用 igraph
,有时在同一脚本中使用。igraph
中的函数在sna
中具有相同的名称,这会导致冲突。一个igraph
网络不能用于sna
函数。创建了intergraph
包,使在sna
和igraph
之间轻松切换。因此,我可以通过将其传递给intergraph
来将igraph
网络发送到sna
函数 - 例如 sna::evcent(intergraph::asNetwork(g))
,假设g是igraph
网络。如果您在脚本中同时使用两个包,则需要在运行函数时特别调用包,或根据需要加载和卸载。
2)在我的经验中,我没有发现一个比另一个更有效。两个都是经过良好开发和维护的软件包。我认为igraph
有点更适合于大型图形 - 它具有一些函数,在处理大型图形时会节省计算时间。但我在这方面没有直接的经验。虽然我会说igraph
通常更擅长可视化。3) 我认为两者在全面性方面没有优劣之分。两者都可以完成主要的网络分析工作(如中心性和网络拓扑),它们在更“高级”的功能上有所不同。可以看到我想表达的主要观点 - 它们针对重叠但不同的网络分析问题。在sna
中有很多东西是在igraph
中不可用的(例如与统计推断相关的内容,如 QAP 回归 [netlm
/netlogit
] 或网络自相关模型 [lnam
]),反之亦然(例如社区检测函数 cluster_fast_greedy
)。sna
由许多兼容的包扩展,这些包可以执行潜在空间模型和指数随机图模型等操作。
4) 其他条件不变,不需要。对我来说,选择主要是需求驱动的。如果您对统计推断感兴趣,则需要使用sna
进行工作。如果没有,则igraph
通常足够。根据在Stack Overflow上的提问,igraph
似乎更受欢迎,但这当然可能是由于选择偏差。仅凭这个原因,如果我不需要对网络进行统计建模,我可能会主要使用igraph
。再次强调,两个软件包都非常优秀,满足了不同但有重叠的需求。
我不确定您所说的“多层网络分析”是什么意思,但是igraph
和sna
都可以处理多重网络。你可以在sna
中分析多重网络和多级别网络。(这里,多重意味着具有各种关系类型(例如友谊和建议)的网络,而多级别则是指来自同一人口的多个网络(术语此时有点混乱)。)这取决于您想要做什么,并且通常需要一些调整,但在一定程度上是可能的。