← SNA 입문 · R로 시작하기 차례
8편Attributes and Weights
속성과 가중치 — 동질성, 그리고 호감도 살리기
SNA 입문 · R로 시작하기STAGED+ 스터디
7. 속성과 연결하기 — 동질성 (Attributes and Homophily)
6.3절에서 눈으로 본 것을 숫자 하나로 만들어 보자. E-I 지수는 가장 널리 쓰이는 동질성 척도다.
범위는 (완전 동질) ~ (완전 이질), 0이면 무작위다.
fem <- setNames(nod$female, nod$name)
table(from = ifelse(fem[el$from], "여", "남"),
to = ifelse(fem[el$to], "여", "남"))
to
from 남 여
남 40 2
여 5 41
| 항 | 어느 칸 | 계산 | 값 |
|---|---|---|---|
| — 같은 성별 | 남→남 + 여→여 | 40 + 41 | 81 |
| — 다른 성별 | 남→여 + 여→남 | 2 + 5 | 7 |
| 합 | 전체 간선 | 81 + 7 | 88 ✔ |
| E-I 지수 | (7 − 81) / 88 = −74 / 88 | −0.8409 |
# igraph의 assortativity로도 같은 이야기를 확인할 수 있다
igraph::assortativity_nominal(g, as.integer(factor(igraph::V(g)$female)))
[1] 0.8411 # 부호가 반대 방향으로 정의됨: +면 동질
igraph::assortativity_degree(g)
[1] -0.0996
두 지표의 부호 규칙이 반대다.
E-I는 음수가 동질(같은 편끼리 뭉침), assortativity는 양수가 동질이다.
값도 −0.8409와 +0.8411로 크기까지 거의 같아 헷갈리기 딱 좋다.
어느 쪽을 쓰든 "음수가 뭉침인가 양수가 뭉침인가"를 문서에 명시해야 한다.
교실 해석
- E-I = −0.84 — 거의 한계값(−1)에 가깝다. 지명 88개 중 성별을 넘어간 것이 단 7개다. "남녀가 좀 갈려 있다"가 아니라 "사실상 두 개의 학급"에 가깝다.
- 7개가 워낙 적으니 그냥 다 들여다볼 수 있다. 이게 작은 학급 분석의 이점이다.
성별을 넘는 지명 7개에 관여한 학생은 8명뿐이고, 나머지 18명은 경계를 한 번도 넘지 않았다. 1006 ↔ 1042는 유일한 상호 지명인데 호감도가 1점과 2점으로 가장 낮다 — "친하다"기보다 "서로 안다"에 가깝다. 이 둘이 매개 1·2위인 이유가 여기 있다. 반대로 1027 → 1051은 5점 만점인데 되돌아오지 않았다.
지명 방향 호감도 1027(여) → 1051(남) 여→남 5 1036(남) → 1006(여) 남→여 4 1063(여) → 1042(남) 여→남 3 1069(여) → 1051(남) 여→남 3 1027(여) → 1048(남) 여→남 2 1042(남) → 1006(여) 남→여 2 1006(여) → 1042(남) 여→남 1 - 남→여 2개 vs 여→남 5개 — 여학생 쪽에서 건너가는 지명이 두 배 이상 많다. 표본이 작아 단정할 수는 없지만, 눈여겨볼 비대칭이다.
- 차수 동류성 −0.0996 — 거의 0이다. 인기 있는 학생끼리 특별히 뭉치지도, 인기 학생이 주변 학생을 특별히 챙기지도 않는다. "인기 서열"은 없다는 뜻으로, 나쁘지 않은 신호다.
8. 가중치 다루기 (Weighted Networks)
이 자료의 liking은 1~5점이다. 지금까지는 이걸 버리고 0/1로만 봤다. 가중치를 살리면 무엇이 달라지는지 확인해 보자.
table(el$liking)
1 2 3 4 5
15 17 22 22 12
mean(el$liking)
[1] 2.988636
gw <- igraph::graph_from_data_frame(el, directed = TRUE, vertices = nod)
sw <- igraph::strength(gw, mode = "in", weights = igraph::E(gw)$liking)
names(sw) <- igraph::V(gw)$name
sort(sw, decreasing = TRUE)[1:5]
1018 1078 1009 1051 1042
28 28 26 26 22
| 순위 | 비가중 (indegree) | 가중 (strength) |
|---|---|---|
| 1 | 1051 (10) | 1018 · 1078 (28) 공동 |
| 2 | 1018 (9) | 1009 · 1051 (26) 공동 |
| 3 | 1042 (9) | 1042 (22) |
| 4 | 1078 (8) | — |
| 5 | 1006 (7) | — |
ind2 <- igraph::degree(gw, mode = "in")
cor(rank(-sw), rank(-ind2), method = "spearman")
[1] 0.9119
순위 상관 0.91 — 거의 같지만 완전히 같지는 않다.
1위가 바뀌었다. 1051은 지명 개수가 제일 많았지만(10개),
1078은 지명 개수는 8개인데 받은 점수 합이 더 높다(28점).
1078을 지명한 학생들이 더 높은 호감도를 줬다는 뜻이다.
실무 판단: 가중치는 중심성 순위를 크게 바꾸지 않는다.
그러니 처음 분석은 0/1로 시작하고, 가중치는 "1위가 뒤집히는지"를 확인하는 용도로 나중에 쓴다.
매개·근접에 가중치를 넣으면 "가중치 = 거리인가 강도인가"를 뒤집어야 해서 실수하기 쉽다
(igraph의 weights=는 매개·근접에서 거리로 해석한다 — 호감도를 그대로 넣으면
"좋아할수록 멀다"가 된다).