← SNA 입문 · R로 시작하기 차례
5편Degree and Closeness Centrality
중심성 ① 연결정도와 근접
SNA 입문 · R로 시작하기STAGED+ 스터디
중심성은 하나가 아니다. "중요하다"를 무엇으로 정의하느냐에 따라 답이 달라진다. 네 가지를 순서대로 보고, 마지막에 얼마나 다른 답을 주는지를 확인한다.
5.1 연결정도 중심성 (Degree Centrality)
가장 단순하다. 몇 명과 연결돼 있는가. 방향이 있으면 두 가지로 갈린다.
ind <- sna::degree(adj, cmode = "indegree") # 받은 지명 = 인기
oud <- sna::degree(adj, cmode = "outdegree") # 보낸 지명 = 사교성
names(ind) <- rownames(adj)
sort(ind, decreasing = TRUE)[1:5]
1051 1018 1042 1078 1006
10 9 9 8 7
names(ind)[ind == 0]
[1] "1024" "1030" "1036"
range(oud)
[1] 0 6
indegree와 outdegree는 뜻이 전혀 다르다.
- indegree(받은 지명) — 남이 나를 어떻게 보는가. 내가 통제할 수 없다. 그래서 "인기"의 지표로 쓴다.
- outdegree(보낸 지명) — 내가 남을 어떻게 보는가. 내가 정한다. 조사에서 개수를 제한하면 이 값은 인위적으로 눌린다.
# igraph는 인자 이름이 다르다 — mode, cmode 아님
igraph::degree(g, mode = "in")
max(abs(sna::degree(adj, cmode = "indegree") - igraph::degree(g, mode = "in")))
[1] 0 # 값은 완전히 같다
5.2 근접 중심성과 무한거리 함정 (Closeness and the Disconnection Trap)
모두에게 평균적으로 가까운가. 정의는 최단거리 합의 역수다.
문제는 가 도달 불가능하면 라는 것이다. 합에 가 하나만 끼어도 전체가 가 되고, 역수는 0이 된다.
sna::closeness(adj, gmode = "digraph")
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
전부 0이다. 계산이 틀린 게 아니라 정의대로 나온 결과다.
1024가 고립돼 있으므로 모든 학생에게 도달 불가능한 상대가 최소 한 명씩 있다.
해결책: cmode="suminvdir" —
거리의 합을 뒤집는 대신 거리마다 역수를 먼저 취해서 더한다.
이므로 도달 불가능한 상대는 그냥 0점으로 기여하고, 나머지는 살아남는다.
clo <- sna::closeness(adj, gmode = "digraph", cmode = "suminvdir")
names(clo) <- rownames(adj)
round(sort(clo, decreasing = TRUE)[1:5], 4)
1063 1066 1021 1027 1069
0.3967 0.3813 0.3713 0.3700 0.3700
igraph 쪽은 조용히 넘어가지 않고 경고를 낸다.
igraph::closeness(g, mode = "out")
Warning: At vendor/cigraph/src/paths/... : closeness centrality is not
well-defined for disconnected graphs
# 값은 나오지만 각 정점이 "도달 가능한 상대까지만" 계산된 것이고,
# 1024는 NaN이 된다. 서로 다른 정점의 값을 비교하기 어렵다.
근접 1위 1063은 인기 1위(1051)도, 매개 1위(1042)도 아니다. 왜 그런지는 다른 지표를 나란히 놓으면 바로 보인다.
| 학생 | 성별 | outdegree (보낸 지명) | indegree (받은 지명) | 근접 | 매개 |
|---|---|---|---|---|---|
| 1063 | 여 | 4 | 2 | 0.3967 | 6.2 |
| 1066 | 여 | 4 | 2 | 0.3813 | 6.2 |
| 1021 | 여 | 5 | 2 | 0.3713 | 10.8 |
| 1027 | 여 | 6 | 2 | 0.3700 | 27.4 |
| 1069 | 여 | 3 | 2 | 0.3700 | 4.0 |
| 1042 | 남 | 4 | 9 | 0.3333 | 128.3 |
근접 상위 5명은 전원 받은 지명이 2개뿐이고, 보낸 지명은 많다.
우연이 아니다. 순위상관을 보면 확실해진다.
cor(rank(-oud), rank(-clo), method = "spearman") [1] 0.805 # 보낸 지명과 강한 관계
cor(rank(-ind), rank(-clo), method = "spearman") [1] 0.190 # 받은 지명과는 거의 무관
cmode="suminvdir"는 내가 남에게 나가는 거리를 잰다.
그러니 많이 지명한 학생, 그리고 지명한 상대들이 서로 다른 무리에 퍼져 있는 학생이 높게 나온다.
"근접 = 인기"가 아니다.
교실 해석 — 1063이 지명한 4명은 1006(여, 다른 무리), 1042(남), 1066·1069(자기 무리)다.
여학생 본진과 남학생 쪽에 각각 한 발씩 걸쳐 놓았다.
같은 무리인 1066·1069도 마찬가지여서, 이 셋은 학급 어느 쪽으로든 두세 다리면 닿는다.
다만 매개는 6.2로 26명 중 16위다 — 남들이 1063을 지나가지는 않는다. 근접과 매개는 전혀 다른 것을 잰다. 1063은 자기가 사방으로 잘 나가는 학생이고, 1042는 남들이 지나가는 통로다.
학급 소식을 퍼뜨릴 때는 1063 같은 학생에게 말하는 게 빠르고, 두 무리 사이를 잇는 일에는 1042가 필요하다. 쓰임이 다르다.