← R 실습 — 손으로 돌려 보기 차례
4편Basic Descriptives
기초 지표 — 크기·밀도·상호성·전이성
R 실습 — 손으로 돌려 보기STAGED+ 스터디
4.1 크기와 밀도 (Size and Density)
밀도는 "있을 수 있는 관계 중 실제로 있는 비율"이다. 방향 네트워크에서 가능한 관계는 개다 (자기 자신 제외, 방향이 다르면 다른 관계).
| 양 | 기호 | 값 | 어디서 |
|---|---|---|---|
| 학생 수 | 26 | nrow(adj) | |
| 지명 수 | 88 | sum(adj) | |
| 가능한 방향 관계 | 26 × 25 = 650 | 손 계산 | |
| 밀도 | 88 / 650 = 0.1354 | sna::gden(adj) | |
| 평균 지명 수 | 88 / 26 = 3.385 | 손 계산 |
sna::gden(adj)
[1] 0.1353846
igraph::edge_density(g)
[1] 0.1353846 # 두 패키지가 일치
교실 해석 — 밀도 0.135는 "한 학생이 나머지 25명 중 평균 3.4명을 지명했다"는 뜻이다.
밀도만으로 좋다·나쁘다를 판단할 수 없다.
지명 개수를 몇 개로 제한했느냐에 따라 밀도는 얼마든지 달라지기 때문이다.
이 조사는 최대 6명까지 적게 했다(
max(rowSums(adj)) = 6).
밀도는 같은 방식으로 조사한 다른 학급과 비교할 때만 의미가 있다.
4.2 상호성 — 짝맞춤 세기 (Reciprocity and the Dyad Census)
두 사람 사이에 있을 수 있는 상태는 셋뿐이다.
- 상호(Mutual, M) — 서로 지명.
- 비대칭(Asymmetric, A) — 한쪽만 지명
- 없음(Null, N) — 둘 다 안 함
sna::dyad.census(adj)
Mut Asym Null
[1,] 22 44 259
22 + 44 + 259
[1] 325 # = choose(26, 2), 모든 쌍의 수
합이 와 맞는지 확인하는 습관을 들이면 자료 오류를 일찍 잡는다.
grecip()은 measure=에 따라 값이 완전히 달라진다.
초보자가 "상호성이 0.86이래요"라고 말할 때 십중팔구 기본값을 그대로 쓴 것이다.
measure= | 정의 | 손 계산 | 값 | 뜻 |
|---|---|---|---|---|
"dyadic"(기본값) | (22+259)/325 | 0.8646 | "짝이 맞는" 비율. 아무 관계 없는 쌍(N)도 "맞았다"고 세므로 성긴 네트워크에서는 항상 크게 나온다 | |
"dyadic.nonnull" | 22/(22+44) = 22/66 | 0.3333 | 관계가 있는 쌍만 놓고 볼 때 서로 지명한 비율 | |
"edgewise" | 44/88 | 0.5000 | 내 지명이 되돌아올 확률. 교실 해석에는 이게 제일 자연스럽다 |
sna::grecip(adj, measure = "dyadic") [1] 0.8646154
sna::grecip(adj, measure = "dyadic.nonnull") [1] 0.3333333
sna::grecip(adj, measure = "edgewise") [1] 0.5
igraph::reciprocity(g) [1] 0.5 # igraph 기본 = edgewise
교실 해석 — 지명 88개 중 44개가 짝을 이룬다. 정확히 절반이다.
바꿔 말하면 학생이 "친하다"고 적은 이름 두 개 중 하나는 짝사랑이다.
9세 학급에서 0.5는 상당히 높은 편이고, 관계가 안정적으로 자리 잡았다는 신호로 읽는다.
4.3 전이성 — 친구의 친구 (Transitivity)
"내 친구의 친구도 내 친구인가"를 재는 값이다. , 인 경로가 있을 때 도 있는 비율.
sna::gtrans(adj)
[1] 0.4570447
igraph::transitivity(g, type = "global")
[1] 0.4732394
값이 다르다. 버그가 아니다.
igraph::transitivity()는 방향을 무시하고 계산한다.
확인해 보면 바로 드러난다.
gu <- igraph::as_undirected(g, mode = "collapse")
igraph::transitivity(gu, type = "global")
[1] 0.4732394 # 방향 그래프와 똑같다 → 방향을 안 본다
sna::gtrans(sna::symmetrize(adj, rule = "weak"))
[1] 0.4732394 # sna도 무방향으로 주면 같은 값
방향을 살린 전이성이 필요하면 sna::gtrans()를 쓴다.
"A가 B를 좋아하고 B가 C를 좋아하면 A도 C를 좋아하는가"는 방향이 있는 질문이다.
교실 해석 — 0.457은 친구의 친구가 내 친구일 확률이 46%라는 뜻이다.
밀도 0.135에 비하면 3배 넘게 높다. 우연이 아니라 학생들이 무리를 짓고 있다는 증거다.
이 "밀도보다 훨씬 높은 전이성"이 사람 네트워크의 거의 보편적인 특징이다.
4.4 연결성과 고립 (Connectivity and Isolates)
sna::isolates(adj)
[1] 8 # 8번째 정점
rownames(adj)[sna::isolates(adj)]
[1] "1024"
sna::components(adj, connected = "weak") [1] 2
sna::components(adj, connected = "strong") [1] 9
sna::component.dist(adj, connected = "weak")$csize
[1] 25 1
| 개념 | 정의 | 이 학급 |
|---|---|---|
| 약한 컴포넌트 weak | 화살표 방향을 무시하고 이어져 있으면 한 덩어리 | 2개 — 25명 덩어리 + 1024 혼자 |
| 강한 컴포넌트 strong | 화살표 방향을 지켜서 서로 왕복할 수 있어야 한 덩어리 | 9개 — 14명 / 3명 / 3명 / 1명 × 6 |
교실 해석 — 이 그림이 이 안내서에서 가장 실용적인 장면이다.
- 1024는 아무도 지명하지 않았고 아무에게도 지명받지 않았다. 설문에 성의 없이 답했을 수도 있고, 결석했을 수도 있고, 정말 고립됐을 수도 있다. 네트워크 자료만으로는 구분할 수 없다. 확인이 필요한 학생이다.
- 1030과 1036은 성격이 다르다. 이들은 친구를 지명했다 — 관계를 맺으려 했다. 그런데 돌아온 지명이 하나도 없다. 그림에서 이 둘이 화살표를 밖으로만 내보내고 있는 게 보인다. 담임이 실제로 먼저 봐야 할 학생은 오히려 이쪽인 경우가 많다.
- 강한 컴포넌트가 9개라는 건, 방향을 지키면 서로 오갈 수 있는 핵심 무리가 14명뿐이라는 뜻이다. 나머지 12명은 그 핵심에 한 방향으로만 붙어 있다.