2015-11-25 2 views
0

J'ai un réseau plutôt compliqué. Le réseau a 91 nœuds et 3453 bords. Il y a douze types de bords. Pour construire le réseau, j'ai créé 12 réseaux ego distincts, en utilisant les attributs de bord comme des nœuds individuels, puis supprimé les nœuds d'attribut de bord, et finalement fusionné les 12 graphiques ensemble.ERGM sur un réseau avec douze types de front

Les nœuds ont 5 attributs: Qui, Date de la demande, Date de réponse, Affiliation dans la demande et Catégorie. Je voudrais utiliser des ERGM pour prédire la probabilité de former une cravate (des cravates, et des liens de type "edge"), basés sur les attributs de noeud. J'ai essayé d'utiliser 'nodematch', mais R renvoie l'erreur suivante: "Erreur dans ergm.getnetwork (formule): Réseau invalide Le côté gauche de la formule est-il correct?" Je me demande si ce problème provient de la façon dont j'ai construit mon réseau plutôt compliqué.

Quelqu'un peut-il aider? Les suggestions sont les bienvenues.

Merci beaucoup d'avance.

code ci-dessous:

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) 

Répondre

1

il apparaît que final.net est un objet de la bibliothèque igraph, mais ergm nécessite son entrée à être un objet network. Vous pouvez probablement construire l'objet network en utilisant la fonction network() et votre objet ego.m.df, ou peut-être utiliser le package intergraph pour convertir le à un network