0

我有一个相当复杂的网络。该网络有 91 个节点和 3453 条边。有十二种边缘类型。为了构建网络,我创建了 12 个独立的自我网络,使用边缘属性作为单独的节点,然后删除边缘属性节点,最后将 12 个图合并在一起。

节点有 5 个属性:谁、请求日期、响应日期、请求中的从属关系和类别。

我想使用 ERGM 根据节点属性预测形成平局(任何平局,以及特定的“边缘类型”平局)的可能性。我曾尝试使用“nodematch”,但 R 抛出以下错误:“ergm​​.getnetwork(formula) 中的错误:无效网络。公式的左侧是否正确?”

我想知道这个问题是否源于我建立相当复杂的网络的方式。

任何人都可以帮忙吗?欢迎提出建议。

非常感谢你。

下面的代码:

DIDPel<-read.csv("DIDPEdgeListv2.csv", header=TRUE, stringsAsFactors = FALSE) #read edges

library(reshape2)
library(igraph)
library(statnet)
m.el<-melt(DIDPel, 'Req.ID') #create an edge list
m.el<-subset(m.el, value==1) #get rid of non-existant edges
types<-levels(m.el$variable)
m.vert<-data.frame(id=unique(c(t(m.el[,c(1,2)])))) # Create a list of node IDs
m.vert$type<-m.vert$id %in% m.el$variable #Highlight request retrictions vs request ids

m.net<-graph.data.frame(m.el, vertices=m.vert, directed=FALSE) #create a network
plot(m.net, vertex.color=V(m.net)$type) #take a looksee

egos<-make_ego_graph(m.net, 1, V(m.net)$type==TRUE) #Make an ego network for every request type
plot(egos[[1]]) #One ego network
egos.con<-lapply(egos, function(x) connect(x, 2))
plot(egos.con[[1]]) #one connected ego network 

for(i in 1:length(types)){
  egos.con[[i]]<-set.edge.attribute(egos.con[[i]], name=types[[i]], value=TRUE)}     #identify type of edge
egos.con[[1]]
plot(egos.con[[1]], edge.label=E(egos.con[[1]])$a..Confidential.government.information)

egos.con<-lapply(egos.con, function(x) delete.vertices(x, V(x)$type==TRUE))                 #delete the restriction node
plot(egos.con[[1]])
ego.base<- egos.con[[1]] #establish a base graph
for(i in 2:length(egos.con)){
  ego.base <- ego.base + egos.con[[i]] #merge everything together
}
plot(ego.base)
ego.m.df<-get.data.frame(ego.base)
head(ego.m.df)
ego.m.df
ego.m.df<-melt(ego.m.df, id=c('from', 'to')) #melt it back down to one column
ego.m.df<-subset(ego.m.df, value==TRUE) #only keep actual edges
head(ego.m.df)
ego.m.df
nodes<-read.csv('DIDPNodeList.csv')
head(nodes)

final.net<-graph.data.frame(ego.m.df, vertices=nodes, directed=FALSE)
#Plot network
l<-layout.grid(final.net)
plot(final.net, edge.color=factor(E(final.net)$variable))
summary (final.net)

#ERG model
erg.net<- ergm(final.net ~ edges + nodematch("Category"), control=control.ergm(seed=1))       
erg.net
summary(erg.net)
4

1 回答 1

1

它似乎final.net是库中的一个graph对象igraph,但ergm需要它的输入才能成为一个network对象。您可能可以network使用network()函数和对象构造ego.m.df对象,或者使用包intergraphgraphnetwork

于 2015-12-01T21:37:00.730 回答