igraph vs sna:一个人可以做好另一件事,另一个不能或做得不好吗?

igraph vs sna: can one do something well the other can't or does poorly?

说到 R 中的网络分析,我对 igraph 比较熟悉,但对 sna 完全不熟悉。

我的问题是:

  1. 这两个库兼容吗?即我可以将 sna 中的操作应用于在 igraph 中创建的图形,反之亦然吗?

  2. 有没有在一个包中执行效率更高的任务 比另一个?

  3. 哪个库的运算范围更广?

  4. 总的来说,是否有充分的理由在 R 中使用 igraphsna 进行网络分析?

ps。这些软件包中的任何一个都允许多层(多重)网络分析吗?

我对这两个软件包之间差异的总体看法是,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) 我想说两者在综合性方面都没有优势。两者都进行所有主要的网络分析工作(中心性、网络拓扑)。它们的不同之处在于更多 "advanced" 功能。请参阅我的一般观点——它们适用于网络分析中重叠但不同的问题。 sna 中有很多 igraph 中没有的内容(例如与统计推断相关的内容,如 QAP 回归 [netlm / netlogit] 或网络自相关模型 [lnam]),反之亦然(社区检测功能,例如 cluster_fast_greedy)。 sna 由许多兼容的软件包扩展,这些软件包可以执行潜在 space 模型和指数随机图模型等操作。

4) Ceterius paribus,没有。对我来说,选择主要是需求驱动的。如果你对统计推断感兴趣,你需要在sna工作。如果没有,通常 igraph 服务。根据 stack overflow 上的问题,igraph 似乎更受欢迎,但这当然可能是由于选择偏差造成的。仅出于这个原因,如果我不需要对网络进行统计建模,我可能主要使用 igraph。同样,这两个包都很棒,服务重叠,但需求略有不同。

不确定您所说的 "multilayer network analysis" 是什么意思,但是 igraphsna 都可以使用 multiplex 网络。 sna 你当然可以分析多路复用网络和多级网络。 (在这里,多路复用意味着具有多种关系类型(例如友谊和建议)的网络,多级意味着嵌套网络或来自同一人口的多个网络(此时术语有点混乱)。)这取决于你想做,并且经常需要一些争论,但在一定程度上是可能的。