Setup

library(igraph)
## 
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
## 
##     decompose, spectrum
## The following object is masked from 'package:base':
## 
##     union
teacher_friendship <- read.csv("School28_MooDal_Friends.csv", header = TRUE, row.names = 1)
teacher_friend_nodes <- read.csv("School28_MooDal_attr-1.csv", header = TRUE, as.is = T)

Creating a graph object

teacher_friendship <- as.matrix(teacher_friendship)
teacherlinks <- graph_from_adjacency_matrix(teacher_friendship, mode = "directed")

Measures of centrality

# Components
teacher_components <- components(teacherlinks)
teacher_scomponents <- components(teacherlinks, mode = "strong")

# Density
E(teacherlinks)
## + 39/39 edges from 3a11555 (vertex names):
##  [1] AA->AL AA->AX AB->AX AD->AE AD->AY AE->AD AE->AW AE->AY AF->AU AG->AB
## [11] AG->AX AI->AD AI->AM AI->AT AL->AA AL->AE AL->AU AN->AP AN->BI AP->AN
## [21] AP->BB AU->AF AW->AE AW->AZ AX->AB AY->AD AY->AE AZ->AW BA->AX BA->BK
## [31] BC->AM BD->BA BD->BG BE->AF BE->AU BG->AA BG->AM BG->BD BI->AN
V(teacherlinks)
## + 31/31 vertices, named, from 3a11555:
##  [1] AA AB AC AD AE AF AG AH AI AK AL AM AN AP AR AS AT AU AW AX AY AZ BA BB BC
## [26] BD BE BF BG BI BK
edge_density(teacherlinks, loops=FALSE)
## [1] 0.04193548
# Compactness
compactness <- function(teacherlinks) {
  gra.geo <- distances(teacherlinks)
  gra.rdist <- 1/gra.geo
  diag(gra.rdist) <- NA
  gra.rdist[gra.rdist == Inf] <- 0
  comp.igph <- mean(gra.rdist, na.rm = TRUE)
  return (comp.igph)
}
compactness(teacherlinks)
## [1] 0.181275
# Dyadic reciprocity
dyad_census(teacherlinks)
## $mut
## [1] 11
## 
## $asym
## [1] 17
## 
## $null
## [1] 437
reciprocity(teacherlinks, mode = c("ratio"))
## [1] 0.3928571
# Global Clustering Coefficient
transitivity(teacherlinks, type="global")
## [1] 0.2
# In-degree
teacher_indeg <- degree(teacherlinks, mode="in")

# Betweenness 
teacher_between <- betweenness(teacherlinks, directed = TRUE, normalized=FALSE)
teacher_between_norm <- betweenness(teacherlinks, directed=TRUE, normalized=TRUE)

Plots

# Creating a data frame
teacher_df <- data.frame(teacher_indeg, teacher_between, teacher_between_norm)

# Color item
colrs <- c("gray80", "tomato", "gold")

# Plot 1
par(mfrow=c(1,2))
set.seed(2022)
plot(teacherlinks, edge.arrow.width = 1, edge.color = "gray50", 
     edge.arrow.size = .25, vertex.label.color = "black", vertex.label.cex = .8,
     vertex.label = teacher_friend_nodes$ï..ID, vertex.size = teacher_indeg*6,
     vertex.frame.color = "gray50", vertex.color = colrs[teacher_friend_nodes$Gradelevel], 
     sub="Nodes weighted by in-degree")
legend (x=-1, y=-1.3, c("Fourth Grade", "Fifth Grade", "Principal"), pch=21,
        col="#777777", pt.bg=colrs, pt.cex=1.25, cex=.8, bty="n", ncol=1)

# Plot 2
set.seed (2022)
plot(teacherlinks, edge.arrow.width = 2, edge.color="gray50", 
     edge.arrow.size = .25, vertex.label.color = "black", vertex.label.cex = .75, 
     vertex.label = teacher_friend_nodes$ï..ID, vertex.size = teacher_between, 
     vertex.frame.color = "gray50", vertex.color = colrs[teacher_friend_nodes$Gradelevel], 
     sub="Nodes weighted by betweenness centrality")

# Title
mtext("Teacher Friendship Network", side = 3, line = -2.5, outer = TRUE, cex = 2)