在R中进行网络分析时,我对igraph
比较熟悉,但对sna
一点都不熟悉。
我的问题是:
这两个库是否兼容?即我可以将sna
的操作应用于igraph
中创建的图表,反之亦然吗?
是否在一个包中执行的任务更有效 比另一个?
哪个库具有更易理解的操作范围?
总体而言,是否有充分理由使用igraph
或sna
在R中进行网络分析?
PS。这些软件包中是否允许进行多层(多路)网络分析?
答案 0 :(得分:7)
我对这两个软件包之间差异的全局描述是igraph
更适合图论和网络数学模型,sna
更适合于统计模型(主要是社交)网络。 igraph
(我认为)的创造者大多具有计算机科学的背景,而sna
人是社会学家和统计学家。我主要在sna
(以及构成statnet
套件的相关软件包 - 我在社会科学中)工作,但也经常使用igraph
,有时在同一个脚本中。
回答您的具体问题:
1)不,他们不是。 igraph
中的许多函数在sna
中具有相同的名称,这会导致冲突。 igraph
函数无法使用sna
图表。创建了一个包intergraph
,以便在sna
和igraph
之间轻松切换。因此,我可以首先转到igraph
来向sna
函数发送intergraph
图表,例如sna::evcent(intergraph::asNetwork(g))
,假设g
是igraph
网络。如果在脚本中同时使用它们,则需要在运行函数时专门调出包,或根据需要加载和卸载。
2)根据我的经验,我没有发现一个比另一个更有效率。两者都是很好的开发和维护包。我相信igraph
更适合大型图形 - 它有一些功能可以修改,以节省在大型图形上运行时的计算时间。但我没有直接经验。虽然我会说igraph
在可视化方面通常更好。
3)我会说,两者都没有全面的优势。两者都做主要的网络分析(中心,网络拓扑)。它们的“高级”功能不同。请参阅我的一般观点 - 它们适用于网络分析中的重叠但不同的问题。 sna
中有很多内容在igraph
中不可用(例如与统计推断相关,如QAP回归[netlm
/ netlogit
]或网络自相关模型[{ {1}}]),反之亦然(例如,lnam
等社区检测功能)。 cluster_fast_greedy
由许多兼容的软件包扩展,这些软件包可用于潜在空间模型和指数随机图模型。
sna
中工作。如果没有,sna
通常会发挥作用。基于堆栈溢出的问题,igraph
似乎更受欢迎,但这当然可能是由于选择偏差。仅仅因为这个原因,如果我不需要统计模拟网络,我可能大多使用igraph
。同样,两个包都很棒,服务重叠,但需求略有不同。
不确定“多层网络分析”是什么意思,但igraph
和igraph
都使用多路复用网络。您当然可以在sna
中分析多路复用网络和多级网络。 (这里,多路复用意味着具有各种关系类型的网络(例如友谊和建议)和多层意味着嵌套网络或来自同一群体的多个网络(此时术语有点混淆)。)这取决于你的内容我想做,并经常采取一些争吵,但在一定程度上是可能的。