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