igraph与sna:它们之间是否存在一个做得好而另一个做不好或做得不好的事情?

8

在进行R语言的网络分析方面,我相对熟悉igraph,但对sna不熟悉。

我的问题是:

  1. 这两个库是否兼容? 即能否将从igraph创建的图应用到sna中并反之亦然?

  2. 是否有某些任务在一个包中比另一个包更高效地执行?

  3. 哪个库具有更易理解的操作范围?

  4. 总体而言,使用igraphsna在R中进行网络分析有没有什么强有力的原因?

附:这些包中是否有任何一个允许多层(多重)网络分析?

1个回答

11
我的大局观认为,igraph 更适合于图论和网络数学模型,而sna 更适合于(主要是社交)网络统计模型。我认为,igraph 的创建者主要背景是计算机科学,而sna 的人员则是社会学家和统计学家。我主要在 sna 中工作(以及包括 statnet 套件中的相关包),但也经常同时使用 igraph ,有时在同一脚本中使用。
回答您的具体问题: 1)不,它们不相互兼容。许多igraph中的函数在sna中具有相同的名称,这会导致冲突。一个igraph网络不能用于sna函数。创建了intergraph包,使在snaigraph之间轻松切换。因此,我可以通过将其传递给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。再次强调,两个软件包都非常优秀,满足了不同但有重叠的需求。

我不确定您所说的“多层网络分析”是什么意思,但是igraphsna都可以处理多重网络。你可以在sna中分析多重网络和多级别网络。(这里,多重意味着具有各种关系类型(例如友谊和建议)的网络,而多级别则是指来自同一人口的多个网络(术语此时有点混乱)。)这取决于您想要做什么,并且通常需要一些调整,但在一定程度上是可能的。


1
“多层网络”指的是多重网络,其中有不同的层,不同层之间只有一些节点是共同的。我已在问题中澄清了这一点。@paqmo,你的回答很好,谢谢。已点赞!当我们有更多其他人的贡献时,我会稍后奖励这个答案。 - rafa.pereira

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