程序随机产生连接网络,网络里有两个聚类,改变随机数种子可以改变网络,最后程序画了个3D版的网络图。
#buid woman-event matrix
library(igraph)
nEvent<-14;
nWoman<-18;
set.seed(4)#fix the random numbers
cross.m<-matrix(rep(0,nEvent*nWoman),nrow=nWoman)
w<-rep(0,nWoman)
for (i in 1:nWoman)
w<-round(runif(1,1,4)); # ith woman attends w number of events
#simulate two groups of weman attend two groups of events
for (i in 1:nWoman/2){
ind<-round(runif(w,1,6));
cross.m[i,ind]<-1 #rep(1,length(ind));
}
#group2,
for (i in (nWoman/2+1):nWoman){
ind<-round(runif(w,nEvent/2-2,nEvent));
cross.m[i,ind]<-1 #rep(1,length(ind));
}
#calculate the adjacency matrix for events with comman attendance
adj.m<-t(cross.m)%*%cross.m
print(adj.m)
#diagnal is non-zero. but it is ok
#for (i in 1:n_event)
# connection_m[i,i]=0;
g<-graph.adjacency(adj.m,mode="undirected",weighted=TRUE,diag=FALSE)
V(g)$label=paste("e",1:14,sep="")
V(g)$color="green"
V(g)$size=8
V(g)$label.dist=0.6
V(g)$label.font=2
V(g)$label.degree=pi/2
V(g)$frame.color="gray"
plot(g,layout=layout.fruchterman.reingold,edge.width=E(g)$weight,
vertex.shape="square")
#3d network plot, just for fun. it requires rgl packege
library(rgl)
rglplot(g,layout=layout.fruchterman.reingold(g,dim=3),
edge.width=E(g)$weight)