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)