1. Network-level Measures
setwd("D:/R_Labs")
data<- "sample_adjmatrix.csv"
el<-read.table(data, header=T, row.names=1, sep=",")
m=as.matrix(el)
gplot(m, displaylabels=TRUE)

Network-level Measures: Connectivity, Dyad census, Triad census, and path/cycle census
# Network Connectivity
component.dist(m)
## $membership
## [1] 1 1 1 1 1 1 1
##
## $csize
## [1] 7
##
## $cdist
## [1] 0 0 0 0 0 0 1
component.largest(m)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
# Network-level measure
sna::dyad.census(m)
## Mut Asym Null
## [1,] 10 0 11
sna::triad.census(m)
## 003 012 102 021D 021U 021C 111D 111U 030T 030C 201 120D 120U 120C 210
## [1,] 6 0 13 0 0 0 0 0 0 0 11 0 0 0 0
## 300
## [1,] 5
sna::kpath.census(m)
## $path.count
## Agg 23732 23778 23824 23871 58009 58098 58256
## 1 20 6 8 2 8 4 10 2
## 2 52 26 30 6 32 16 38 8
## 3 90 60 70 18 74 40 80 18
sna::kcycle.census(m)
## $cycle.count
## Agg 23732 23778 23824 23871 58009 58098 58256
## 2 10 3 4 1 4 2 5 1
## 3 10 6 6 0 8 2 8 0
cc<-kcycle.census(m,maxlen=5,tabulate.by.vertex=FALSE, cycle.comembership="bylength")
cc$cycle.count #Examine cycle counts
## 2 3 4 5
## 10 10 10 4
cc$cycle.comemb[1,,] #Co-membership for 2-cycles
## 23732 23778 23824 23871 58009 58098 58256
## 23732 3 1 0 1 0 1 0
## 23778 1 4 1 1 0 1 0
## 23824 0 1 1 0 0 0 0
## 23871 1 1 0 4 1 1 0
## 58009 0 0 0 1 2 1 0
## 58098 1 1 0 1 1 5 1
## 58256 0 0 0 0 0 1 1
cc$cycle.comemb[2,,] #Co-membership for 3-cycles
## 23732 23778 23824 23871 58009 58098 58256
## 23732 6 4 0 4 0 4 0
## 23778 4 6 0 4 0 4 0
## 23824 0 0 0 0 0 0 0
## 23871 4 4 0 8 2 6 0
## 58009 0 0 0 2 2 2 0
## 58098 4 4 0 6 2 8 0
## 58256 0 0 0 0 0 0 0
cc$cycle.comemb[3,,] #Co-membership for 4-cycles
## 23732 23778 23824 23871 58009 58098 58256
## 23732 8 6 0 8 2 8 0
## 23778 6 8 0 8 2 8 0
## 23824 0 0 0 0 0 0 0
## 23871 8 8 0 10 4 10 0
## 58009 2 2 0 4 4 4 0
## 58098 8 8 0 10 4 10 0
## 58256 0 0 0 0 0 0 0
Network-level Measures: Centralization, Density, Reciprocity, and Transitivity
g1=graph.adjacency(m,mode="undirected",weighted=NULL)
igraph::graph.density(g1) # Density
## [1] 0.4761905
igraph::reciprocity(g1) # Reciprocity
## [1] 1
igraph::transitivity(g1) # Transitivity
## [1] 0.5769231
centr_degree(g1)$centralization # Centralization according to degree centrality
## [1] 0.3571429
centr_eigen(g1)$centralization # Centralization according to eigenvector centrality
## [1] 0.4580906
Network-level Measures: Network diameter, Average path length (APL)
diameter(g1) # Network diameter
## [1] 3
shortest.paths(g1, mode="out") # Shortest paths between vertices
## X23732 X23778 X23824 X23871 X58009 X58098 X58256
## X23732 0 1 2 1 2 1 2
## X23778 1 0 1 1 2 1 2
## X23824 2 1 0 2 3 2 3
## X23871 1 1 2 0 1 1 2
## X58009 2 2 3 1 0 1 2
## X58098 1 1 2 1 1 0 1
## X58256 2 2 3 2 2 1 0
average.path.length(g1)
## [1] 1.619048
2. Two-mode networks
setwd("D:/R_Labs")
data<- "mag_act96.csv"
magact96<-read.table(data, header=T, row.names=1, sep=",")
magact96<-magact96[1:100, 1:23]
data<- "mag_act97.csv"
magact97<-read.table(data,header=T, row.names=1, sep=",")
magact97<-magact97[1:100, 1:23]
data<- "mag_act98.csv"
magact98<-read.table(data,header=T, row.names=1, sep=",")
magact98<-magact98[1:100, 1:23]
# (2) Create the attribute data.
magattrib = magact96[,1:3]
# (3) Drop columns so we have a square incidence matrix for each year
g96 = as.matrix(magact96[,-(1:3)]) # 100x 20 matrix
# Now load in these two-mode graphs into igraph.
i96 <- graph.incidence(g96, mode=c("all"))
V(i96);vcount(i96)
## + 120/120 vertices, named:
## [1] 101498 104452 104456 104462 104471 105215 106517 106569 106572 106587
## [11] 106592 106604 106606 106609 106621 106709 106732 109492 109493 113047
## [21] 113050 113053 113060 113105 113107 113122 113123 113127 113137 113140
## [31] 113168 113204 113211 113214 113243 113429 113433 113479 113694 113719
## [41] 113939 113958 114002 114010 114015 114025 114037 114071 114073 114076
## [51] 114078 114085 114097 114111 114126 114134 114144 114148 114187 114189
## [61] 114227 114233 114235 114239 114240 114242 114248 114493 114671 114679
## [71] 114684 114746 114841 114843 114844 114849 114850 114875 114885 114920
## [81] 114934 114945 114977 114988 114992 115075 115094 115101 115166 115180
## [91] 115182 115212 115229 115383 115433 115460 115477 115782 115805 115830
## + ... omitted several vertices
## [1] 120
V(i96)$color[1:100] = rgb(red = 1, green = 0, blue = 0, alpha = .5) # students
V(i96)$color[101:120] = rgb(red = 0, green = 1, blue = 0, alpha = .5) # clubs
V(i96)$label = V(i96)$name
V(i96)$label.color = rgb(0,0,.2,.5)
V(i96)$label.cex = .4
V(i96)$size = 6
V(i96)$frame.color = V(i96)$color
E(i96)$color = "black"
plot(i96, layout=layout.fruchterman.reingold)

# removing isolates
i96 = delete.vertices(i96, V(i96)[degree(i96)==0 ])
V(i96);vcount(i96)
## + 63/63 vertices, named:
## [1] 101498 104452 104456 104462 106604 106609 106709 109493 113047 113053
## [11] 113122 113127 113137 113140 113168 113211 113214 113429 113694 113719
## [21] 113939 114037 114071 114073 114076 114078 114085 114097 114126 114134
## [31] 114187 114189 114671 114679 114849 114850 114920 114934 114977 114992
## [41] 115101 115180 115229 115460 115477 115805 C1 C2 C3 C4
## [51] C5 C6 C7 C8 C9 C10 C11 C12 C16 C17
## [61] C18 C19 C20
## [1] 63
E(i96)$width = .5
E(i96)$color = "black"
plot(i96, layout=layout.kamada.kawai)

# co-event matrices
(g96e = t(g96) %*% g96)
## C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19 C20
## C1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C2 0 2 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1
## C3 0 0 12 1 0 0 1 0 5 2 2 0 0 0 0 0 0 1 1 0
## C4 0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C5 0 0 0 0 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C6 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C7 0 0 1 0 0 0 5 1 1 0 0 0 0 0 0 2 2 3 0 0
## C8 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0
## C9 0 1 5 0 0 0 1 0 17 1 1 0 0 0 0 2 1 2 0 1
## C10 0 1 2 0 0 0 0 0 1 6 4 0 0 0 0 0 0 1 0 0
## C11 0 1 2 0 0 0 0 0 1 4 4 0 0 0 0 0 0 1 0 0
## C12 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
## C13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## C16 0 0 0 0 0 0 2 1 2 0 0 0 0 0 0 5 3 5 0 0
## C17 0 0 0 0 0 0 2 1 1 0 0 0 0 0 0 3 6 5 0 0
## C18 0 0 1 0 0 0 3 1 2 1 1 0 0 0 0 5 5 8 0 0
## C19 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
## C20 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 2
i96e = graph.adjacency(g96e, mode = "undirected")
E(i96e)$weight <- count.multiple(i96e)
i96e <- simplify(i96e)
plot(i96e)

# Set vertex attributes
V(i96e)$label = V(i96e)$name
V(i96e)$label.color = "blue"
V(i96e)$label.cex = .8
V(i96e)$size = 12
V(i96e)$color ="grey"
V(i96e)$frame.color = V(i96e)$color
# Set edge attributes
egalpha = log(E(i96e)$weight)
E(i96e)$color = "black"
E(i96e)$width = egalpha
i96e_layout <- layout.fruchterman.reingold(i96e)
plot(i96e, main = "Co-event Network", layout=i96e_layout)

write.graph(i96e, file='i96e.txt', format="edgelist")
ol96 = g96e/diag(g96e) # Group Overlap Networks: 20 x 20 matrix
diag(ol96)<-0
round(ol96, 2)
## C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15
## C1 0 0.00 0.00 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C2 0 0.00 0.00 0.00 0 0.00 0.00 0.00 0.50 0.50 0.50 0 0 0 0
## C3 0 0.00 0.00 0.08 0 0.00 0.08 0.00 0.42 0.17 0.17 0 0 0 0
## C4 0 0.00 0.33 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C5 0 0.00 0.00 0.00 0 0.17 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C6 0 0.00 0.00 0.00 1 0.00 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C7 0 0.00 0.20 0.00 0 0.00 0.00 0.20 0.20 0.00 0.00 0 0 0 0
## C8 0 0.00 0.00 0.00 0 0.00 1.00 0.00 0.00 0.00 0.00 0 0 0 0
## C9 0 0.06 0.29 0.00 0 0.00 0.06 0.00 0.00 0.06 0.06 0 0 0 0
## C10 0 0.17 0.33 0.00 0 0.00 0.00 0.00 0.17 0.00 0.67 0 0 0 0
## C11 0 0.25 0.50 0.00 0 0.00 0.00 0.00 0.25 1.00 0.00 0 0 0 0
## C12 0 0.00 0.00 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C13 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0 NaN NaN
## C14 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0 NaN
## C15 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0
## C16 0 0.00 0.00 0.00 0 0.00 0.40 0.20 0.40 0.00 0.00 0 0 0 0
## C17 0 0.00 0.00 0.00 0 0.00 0.33 0.17 0.17 0.00 0.00 0 0 0 0
## C18 0 0.00 0.12 0.00 0 0.00 0.38 0.12 0.25 0.12 0.12 0 0 0 0
## C19 0 0.00 1.00 0.00 0 0.00 0.00 0.00 0.00 0.00 0.00 0 0 0 0
## C20 0 0.50 0.00 0.00 0 0.00 0.00 0.00 0.50 0.00 0.00 0 0 0 0
## C16 C17 C18 C19 C20
## C1 0.00 0.00 0.00 0.00 0.00
## C2 0.00 0.00 0.00 0.00 0.50
## C3 0.00 0.00 0.08 0.08 0.00
## C4 0.00 0.00 0.00 0.00 0.00
## C5 0.00 0.00 0.00 0.00 0.00
## C6 0.00 0.00 0.00 0.00 0.00
## C7 0.40 0.40 0.60 0.00 0.00
## C8 1.00 1.00 1.00 0.00 0.00
## C9 0.12 0.06 0.12 0.00 0.06
## C10 0.00 0.00 0.17 0.00 0.00
## C11 0.00 0.00 0.25 0.00 0.00
## C12 0.00 0.00 0.00 0.00 0.00
## C13 NaN NaN NaN NaN NaN
## C14 NaN NaN NaN NaN NaN
## C15 NaN NaN NaN NaN NaN
## C16 0.00 0.60 1.00 0.00 0.00
## C17 0.50 0.00 0.83 0.00 0.00
## C18 0.62 0.62 0.00 0.00 0.00
## C19 0.00 0.00 0.00 0.00 0.00
## C20 0.00 0.00 0.00 0.00 0.00
iol96 = graph.adjacency(ol96, mode = "undirected", weighted=TRUE)
plot(iol96, edge.width=E(iol96)$weight*5 ,edge.color="black",vertex.color = "grey", main = "Group Overlap Network", layout=i96e_layout)
