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

无法为sna类二分网络添加属性,ERGM建模求助

解决二分网络中添加节点属性的"Not a graph object"错误

问题根源

你创建的是一个二分网络,包含两类节点:30个投票事件节点(前30个)和10个政客节点(后10个),总共有40个节点。但你尝试添加的gender向量只有10个元素,且没有指定要给哪类节点赋值,导致set.vertex.attribute无法正确识别目标节点,进而抛出了有点误导性的"Not a graph object"错误。

解决方案

你需要明确指定要给**第二类节点(政客)**添加属性,下面是两种可行的方法:

方法1:指定节点索引赋值

利用二分网络的bipartite属性获取第一类节点的数量,然后定位到政客节点的索引范围,再赋值:

# 获取第一类节点(事件)的数量
num_bipartite_first <- net %n% "bipartite"
# 政客节点的索引是从num_bipartite_first+1到总节点数
politician_indices <- (num_bipartite_first + 1):network.size(net)
# 给政客节点添加Gender属性
set.vertex.attribute(net, "Gender", index = politician_indices, value = gender)

方法2:创建全节点属性向量后赋值

如果需要给两类节点都添加属性(事件节点可以设为NA或其他标识),可以先构建对应所有节点的向量:

# 事件节点设为NA,政客节点用gender向量
full_gender <- c(rep(NA, num_events), gender)
# 整体赋值
set.vertex.attribute(net, "Gender", value = full_gender)

更简洁的%v%操作符写法

statnet支持用%v%操作符直接赋值,同样需要指定索引:

# 给政客节点赋值
net %v% "Gender"[(net %n% "bipartite" + 1):network.size(net)] <- gender

验证属性是否添加成功

你可以用以下代码检查:

# 查看所有节点的Gender属性
get.vertex.attribute(net, "Gender")
# 只查看政客节点的属性
get.vertex.attribute(net, "Gender")[(net %n% "bipartite" + 1):network.size(net)]

这样处理后,你的二分网络就能正常添加节点属性,后续也可以顺利运行ERGM模型了。

内容的提问来源于stack exchange,提问作者S Front

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:40