igraph vs sna:一个人可以做好另一件事,另一个不能或做得不好吗?
igraph vs sna: can one do something well the other can't or does poorly?
说到 R 中的网络分析,我对 igraph
比较熟悉,但对 sna
完全不熟悉。
我的问题是:
这两个库兼容吗?即我可以将 sna
中的操作应用于在 igraph
中创建的图形,反之亦然吗?
有没有在一个包中执行效率更高的任务
比另一个?
哪个库的运算范围更广?
总的来说,是否有充分的理由在 R 中使用 igraph
或 sna
进行网络分析?
ps。这些软件包中的任何一个都允许多层(多重)网络分析吗?
我对这两个软件包之间差异的总体看法是,igraph
更适合图论和网络数学模型,而 sna
更适合 (主要是社交)网络。 igraph
的创建者(我认为)大多具有计算机科学背景,而 sna
的人是社会学家和统计学家。我主要从事 sna
(以及包含 statnet
软件包套件的相关软件包——我在社会科学领域),但也经常使用 igraph
,有时在同一个脚本中.
回答您的具体问题:
1) 不,他们不是。 igraph
中的许多函数在 sna
中具有相同的名称,这会导致冲突。 igraph
图形不能用在 sna
函数中。创建包 intergraph
是为了方便在 sna
和 igraph
之间切换。所以我可以通过先传递给 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" 是什么意思,但是 igraph
和 sna
都可以使用 multiplex 网络。 sna
你当然可以分析多路复用网络和多级网络。 (在这里,多路复用意味着具有多种关系类型(例如友谊和建议)的网络,多级意味着嵌套网络或来自同一人口的多个网络(此时术语有点混乱)。)这取决于你想做,并且经常需要一些争论,但在一定程度上是可能的。
说到 R 中的网络分析,我对 igraph
比较熟悉,但对 sna
完全不熟悉。
我的问题是:
这两个库兼容吗?即我可以将
sna
中的操作应用于在igraph
中创建的图形,反之亦然吗?有没有在一个包中执行效率更高的任务 比另一个?
哪个库的运算范围更广?
总的来说,是否有充分的理由在 R 中使用
igraph
或sna
进行网络分析?
ps。这些软件包中的任何一个都允许多层(多重)网络分析吗?
我对这两个软件包之间差异的总体看法是,igraph
更适合图论和网络数学模型,而 sna
更适合 (主要是社交)网络。 igraph
的创建者(我认为)大多具有计算机科学背景,而 sna
的人是社会学家和统计学家。我主要从事 sna
(以及包含 statnet
软件包套件的相关软件包——我在社会科学领域),但也经常使用 igraph
,有时在同一个脚本中.
回答您的具体问题:
1) 不,他们不是。 igraph
中的许多函数在 sna
中具有相同的名称,这会导致冲突。 igraph
图形不能用在 sna
函数中。创建包 intergraph
是为了方便在 sna
和 igraph
之间切换。所以我可以通过先传递给 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" 是什么意思,但是 igraph
和 sna
都可以使用 multiplex 网络。 sna
你当然可以分析多路复用网络和多级网络。 (在这里,多路复用意味着具有多种关系类型(例如友谊和建议)的网络,多级意味着嵌套网络或来自同一人口的多个网络(此时术语有点混乱)。)这取决于你想做,并且经常需要一些争论,但在一定程度上是可能的。