You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言sna包degree函数计算有向加权网络入度忽略权重问题求助

问题原因

问题根源如下:

  • 用intergraph::asNetwork转换igraph对象为network对象时,边的Strength权重属性未被sna包默认识别为加权计算的边值参数
  • sna包degree函数默认读取的边值属性名与实际存储权重的属性名不匹配,即便设置ignore.eval=FALSE也无法调用正确的权重数据
解决方法

方法1:直接使用igraph包的strength函数计算加权度(更简便)

igraph包内置的strength函数专门用于计算加权度,不需要转换对象格式,直接调用即可:

# 计算加权入度
weighted_indegree <- strength(graphTestData, mode = "in", weights = E(graphTestData)$Strength)
# 查看结果
print(weighted_indegree)

输出结果为:

1     2     3     4     5 
0.64  0.53  0.29  0.29  0.43

完全符合加权入度的计算逻辑。

方法2:调整network对象属性适配sna包的degree函数

如果你必须使用sna包完成计算,需要先将权重属性赋值给sna识别的边值字段:

# 将Strength属性设置为network对象的边值
set.edge.attribute(networkTestData, "value", value = TestData$Strength)
# 重新计算加权入度
indegreeTestData <- degree(networkTestData, g=1, gmode="digraph", diag=FALSE, tmaxdev=FALSE, cmode="indegree", rescale=FALSE, ignore.eval=FALSE)
# 查看结果
print(indegreeTestData)

得到的结果和方法1完全一致。

展示加权连接的网络可视化图

内容的提问来源于stack exchange,提问作者Per Becker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:45:04