无法为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
相关产品推荐
相关产品推荐

