====== Centrality ====== ''Centrality'' (중심성: 개인(node)의 위치가 전체에서 어디를 차지하는가? 얼마나 중요한가?) vs. ''Centralization'' (중앙(화)성: 얼마나 뭉쳐져 있는가?) ===== Closeness ===== setwd("D:/Users/Hyo/Cs-Kant/CS/Classes/sna_examples/sna_in_r") # Social Network Analysis: Closeness Centrality library(sna) # The nearly linear network L <- matrix(c(0,0,0,1,0,0,0,0,0, 0,0,0,1,0,0,0,0,0, 0,0,0,1,0,0,0,0,0, 1,1,1,0,1,0,0,0,0, 0,0,0,1,0,1,0,0,0, 0,0,0,0,1,0,1,0,0, 0,0,0,0,0,1,0,1,0, 0,0,0,0,0,0,1,0,1, 0,0,0,0,0,0,0,1,0),byrow=T,nrow=9) gplot(L, displaylabels = T, vertex.cex = 1, label.cex = 2, edge.col="blue", boxed.labels = F, arrowhead.cex = 1, mode = "kamadakawai") {{centrality_suzuki.png}} Node 1 은 다른 node와 얼마나 가까운가? = sum of geodesic distance to others / n = (2 + 2 + 1 + 2 + 3 + 4 + 5 + 6) / 8 = 25 / 8 의 역수 => 8 / 25 = 0.32 Node 4 은 다른 node들과 얼마나 가까운가? = sum of geodesic distance to others / n = (1 + 1 + 1 + 1 + 2 + 3 + 4 + 5) / 8 = 18 / 8 의 역수 (가까운 거리의 합이 작으므로 이를 크게 하기 위해서) => 8 / 18 = 0.44 Node 1 과 Node 4 중 어느 것이 중심성이 높은가? 위의 방법으로 각 노드의 중심성 (closesness) 구하기: round(closeness(L),2) # Type 1 closeness [1] 0.32 0.32 0.32 0.44 0.47 0.44 0.38 0.31 0.24 다른 방법의 closesness round(closeness(L,cmode="suminvundir"),2) # Type 2 closeness [1] 0.43 0.43 0.43 0.66 0.57 0.54 0.51 0.46 0.35 # Knoke's information network (Hanneman and Riddle, 2005) knoke.infor <- as.matrix(read.table("knoke-infor.txt",header=T)) rownames(knoke.infor) <- colnames(knoke.infor) gplot(knoke.infor, displaylabels=T, vertex.cex=2, edge.col="blue", boxed.labels=F, arrowhead.cex=1.25) {{knoke_info.png}} - COUN: county government - COMM: chamber of commerce - EDUC: board of education - INDU: Industry development agency - MAYR: Mayor - WRO: Women Right Organization group - NEWS: Newspaper - WAY: United Way (private organization) - WELF: Welfare - WEST: West group (private organization) for out link (information out) round(closeness(knoke.infor,cmode="suminvdir"),2) [1] 0.70 0.89 0.83 0.70 0.94 0.63 0.65 0.81 0.65 0.78 for in link (information in) round(closeness(t(knoke.infor),cmode="suminvdir"),2) [1] 0.76 0.94 0.72 0.78 0.94 0.46 1.00 0.59 0.78 0.61 ===== Betweenness ===== 노드 k에 대해서 노드 i 과 j 의 최단 경로 사이에 끼이게 되는 경우의 총합 # Social Network Analysis: Betweenness Centrality library(sna) # The nearly linear network L <- matrix(c(0,0,0,1,0,0,0,0,0, 0,0,0,1,0,0,0,0,0, 0,0,0,1,0,0,0,0,0, 1,1,1,0,1,0,0,0,0, 0,0,0,1,0,1,0,0,0, 0,0,0,0,1,0,1,0,0, 0,0,0,0,0,1,0,1,0, 0,0,0,0,0,0,1,0,1, 0,0,0,0,0,0,0,1,0),byrow=T,nrow=9) gplot(L, displaylabels=T, vertex.cex=1, label.cex=1, edge.col="red", boxed.labels=F, arrowhead.cex=1, mode="kamadakawai") betweenness(L) [1] 0 0 0 36 32 30 24 14 0 # The star network S <- matrix(c(0,1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0),byrow=T,nrow=9) gplot(S, displaylabels=T, vertex.cex=1, label.cex=1, edge.col="red", boxed.labels=F, arrowhead.cex=1, mode="kamadakawai") {{star_between.png}} betweenness(S) [1] 56 0 0 0 0 0 0 0 0 # Two stars network twostars <- matrix(0,13,13) edges <- matrix(c(1,2,1,3,1,4,1,5,1,6, 6,7,7,8,8,13,9,13,10,13,11,13,12,13), byrow=T,ncol=2) twostars[edges] <- 1 twostars <- twostars + t(twostars) - twostars * t(twostars) gplot(twostars, displaylabels=T, vertex.cex=1, label.cex=1, edge.col="red", boxed.labels=F, arrowhead.cex=1, mode="kamadakawai") betweenness(twostars) closeness(twostars) {{two_star_network.png}} >> betweenness(twostars) [1] 76 0 0 0 0 70 72 70 0 0 0 0 76 > round(closeness(twostars),2) [1] 0.35 0.27 0.27 0.27 0.27 0.39 0.40 0.39 0.27 0.27 0.27 0.27 0.35 ===== Eigenvector ===== __Eigenvector Centrality__ * 중요한 노드에 연결된 노드가 중요하다는 관점 rownames(knoke.infor) > rownames(knoke.infor) [1] "COUN" "COMM" "EDUC" "INDU" "MAYR" "WRO" "NEWS" "UWAY" "WELF" "WEST" round(evcent(knoke.infor),2) > round(evcent(knoke.infor),2) [1] 0.25 0.41 0.36 0.26 0.47 0.15 0.22 0.35 0.21 0.33 round(evcent(t(knoke.infor)),2) > round(evcent(t(knoke.infor)),2) [1] 0.30 0.45 0.21 0.34 0.45 0.04 0.46 0.18 0.28 0.13