단원 5-5Activity and Difference Effects
nodefactor · nodecov · absdiff — 활동성과 차이 효과
- 오늘의 질문 (The Question)
- 활동성과 선택성 — 서로 다른 두 질문 (Activity vs. Selectivity)
- 정의 ①
nodefactor— 집단의 차수 합 (Definition I) - 완전 공선성 — 왜 한 수준을 버려야 하는가 (Perfect Collinearity)
- 손 계산 ① — 10명 학급, 세 칸 포화 모형 (A Saturated Three-Cell Model)
- R 검증 ① — 10명 학급 (Verification I)
- 교란 — 5-4의 5.5배는 어디로 갔는가 (Confounding)
- 정의 ②
nodecov— 연속 속성의 활동성 (Definition II) - 정의 ③
absdiff— 연속 속성의 거리 (Definition III) - 손 계산 ② — 6명 미니 학급, 15쌍 전부 (All 15 Dyads by Hand)
- R 검증 ② — 6명 미니 학급 (Verification II)
- 는 여전히 닫히는가 (Does the Normalizing Constant Still Close?)
- R 검증 ③ — FMH 1461명 실전 (Verification III: Real Data)
- 교실 적용 (Classroom Application)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 오늘의 질문 (The Question)
5-4의 nodematch는 강력했지만 이분법 하나밖에 몰랐다. 두 학생이
같은가 다른가. 그 하나만 물었다. 그런데 교실에서 실제로 나오는 질문은 대개 이 두 가지다.
질문 B — “학업 성취도가 비슷한 학생끼리 친한가? 얼마나 비슷해야 하는가?”
nodematch로는 둘 다 답할 수 없다. 질문 A는 같고 다름이 아니라
누구인가를 묻고, 질문 B는 같고 다름이 아니라 얼마나 차이 나는가를 묻기 때문이다.
7학년과 8학년, 7학년과 12학년 — nodematch에게는 둘 다 똑같은 “다름”이다.
오늘 배울 세 항이 각각 이 빈틈을 메운다.
| 항 | 속성 종류 | 재는 것 | 변화 통계량 |
|---|---|---|---|
nodefactor | 범주형 | 집단별 활동성 | |
nodecov | 연속형 | 값이 클수록 활동적인가 | |
absdiff | 연속형 | 거리에 따른 선택성 | |
nodematch (5-4) | 범주형 | 같고 다름에 따른 선택성 |
그리고 셋 다 망을 보지 않는다. 를 계산할 때 다른 간선을 하나도 참조하지 않으므로
쌍 독립이 유지되고, 따라서 5-4에서 얻은 모든 좋은 성질(가 닫힘, MPLE = MLE)이
그대로 살아 있다. 쌍 독립이 깨지는 것은 5-6의 gwesp부터다.
2. 활동성과 선택성 — 서로 다른 두 질문 (Activity vs. Selectivity)
오늘 배울 세 항은 두 종류로 갈린다. 이 구분이 오늘의 뼈대다.
가 의 속성과 의 속성을 따로따로 보고 더한다.
nodefactor, nodecov선택성 (selectivity) — 쌍 수준의 질문. “이 학생이 어떤 상대를 고르는가?”
가 와 의 속성을 맞대어 비교한다.
nodematch, absdiff
수식으로 보면 차이가 선명하다. 어떤 함수 에 대해
활동성 항은 의 몫과 의 몫으로 쪼개진다. 그래서 간선 전체에 대해 합하면 자연스럽게 차수의 합이 된다(§3에서 확인). 선택성 항은 쪼개지지 않는다 — 나 는 한쪽만 봐서는 값을 알 수 없다.
5-4에서 우리는 10명 학급의 동질성 오즈비를 5.5배라고 읽었다. 그런데 그 모형에는 활동성 항이 없었다. 만약 여학생이 남학생보다 활동적이라면, “여여 쌍에 간선이 많다”는 사실 중 일부는 동질성이 아니라 활동성 때문일 수 있다. §7에서 이 5.5배가 실제로 얼마나 움직이는지 손으로 확인한다.
3. 정의 ① nodefactor — 집단의 차수 합
(Definition I: nodefactor)
범주형 속성 와 그 한 수준 에 대해
즉 각 간선마다, 그 간선의 두 끝점 중 수준 인 것이 몇 개인지 세어 더한다. 변화 통계량은 정의상 바로 읽힌다.
왜 이것이 “활동성”인가 — 차수 합과 같다 (Why This Is Activity: It Equals the Degree Sum)
합의 순서를 바꾸면 정체가 드러난다. 간선 하나는 자기 끝점 중 인 것마다 1씩 기여한다. 그러니 간선을 기준으로 세는 대신 정점을 기준으로 세면, 수준 인 정점 하나가 자기에게 붙은 간선 개수(= 차수)만큼 기여한다.
nodefactor 통계량은 그 집단의 차수 합이다.
집단 크기로 나누면 그 집단의 평균 차수다. 그래서 “이 집단이 친구를 많이 만드는가”를
그대로 재는 통계량이 된다.
10명 학급에서 두 경로로 확인 (Two Routes, Same Number)
3-7·5-4에서 계속 쓴 10명 학급을 그대로 쓴다. 남학생 1~6번, 여학생 7~10번, 간선 15개.
경로 ① 간선을 기준으로 — 간선 15개를 종류별로 분류한다.
| 간선 | (1,2) | (1,3) | (2,3) | (3,4) | (4,5) | (4,6) | (5,6) | (3,7) | (3,8) | (3,9) | (6,10) | (7,8) | (7,10) | (8,9) | (9,10) | 합 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 종류 | 남남 7개 | 교차 4개 | 여여 4개 | 15 | ||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 12 | |
| 2 | 2 | 2 | 2 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 18 | |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 11 | |
경로 ② 정점을 기준으로 — 여학생 4명의 차수를 더한다. 차수 벡터는 이므로
남학생 쪽도 마찬가지다. 이고, 간선 기준으로도 이다.
4. 완전 공선성 — 왜 한 수준을 버려야 하는가 (Perfect Collinearity)
위 표에서 이상한 점을 눈치챘을 것이다. . 우연이 아니다. 모든 간선은 끝점이 정확히 2개이고, 각 끝점은 남 아니면 여이므로
모든 쌍에서 항상 2다. 따라서 간선 전체에 대해 합하면
그래서 ergm은 한 수준을 자동으로 버린다(기준 수준, baseline).
기본값은 정렬 순서로 첫 번째 수준이다. 남/여에서는 “남”이 버려지고
nodefactor.sex.여 하나만 추정된다. FMH의 Sex(F, M)에서는 F가 버려지고
nodefactor.Sex.M이 남는다.
summary(nw ~ edges + nodefactor("sex", levels=TRUE)) # 통계량만 볼 때는 전부 볼 수 있다
# edges nodefactor.sex.남 nodefactor.sex.여
# 15 18 12 18 + 12 = 30 = 2 x 15
5. 손 계산 ① — 10명 학급, 세 칸 포화 모형 (A Saturated Three-Cell Model)
이제 모형을 세운다.
5-1. 쌍은 세 종류뿐이다 (Only Three Kinds of Dyads)
10명이므로 쌍은 개. 이 45개를 값으로 분류하면 세 가지밖에 나오지 않는다.
| 칸 | 쌍 개수 | 간선 수 | 조건부 로그오즈 | ||
|---|---|---|---|---|---|
| 남남 | 7 | 1 | 0 | ||
| 여여 | 4 | 1 | 2 | ||
| 교차 | 4 | 0 | 1 | ||
| 합 | 45 | 15 | |||
충분통계량 세 개를 이 표에서 다시 확인한다.
5-2. 세 칸의 관측 로짓 (Three Observed Logits)
각 칸에서 오즈 = (간선 있는 쌍)/(간선 없는 쌍)이다.
5-3. 연립방정식을 푼다 (Solving the 3×3 System)
1단계 — (iii) (i). 와 이 함께 지워지고 만 남는다.
2단계 — (ii)에 대입.
3단계 — (i)에 대입.
5-4. 정확한 닫힌 식 (Exact Closed Forms)
소수점 대신 분수로 끝까지 밀면 놀랍도록 깨끗하다.
검산 — 세 칸의 오즈를 계수로 되조립해 본다.
| 칸 | 계수 조합 | 계산 | 결과 | 관측 오즈 |
|---|---|---|---|---|
| 남남 | ✓ | |||
| 여여 | ✓ | |||
| 교차 | ✓ |
6. R 검증 ① — 10명 학급 (Verification I)
library(ergm); library(network)
mkA <- function(n,E){A <- matrix(0,n,n); for(e in E){A[e[1],e[2]] <- 1; A[e[2],e[1]] <- 1}; A}
E10 <- list(c(1,2),c(1,3),c(2,3),c(3,4),c(3,7),c(3,8),c(3,9),
c(4,5),c(4,6),c(5,6),c(6,10),c(7,8),c(7,10),c(8,9),c(9,10))
nw <- network(mkA(10,E10), directed=FALSE)
nw %v% "sex" <- c(rep("남",6), rep("여",4))
summary(nw ~ edges + nodematch("sex") + nodefactor("sex"))
# edges nodematch.sex nodefactor.sex.여
# 15 11 12 <- §3, §5 손 계산과 일치
summary(ergm(nw ~ edges + nodematch("sex") + nodefactor("sex")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# edges -2.0227772 0.7446236 -2.717 0.00660
# nodematch.sex 1.8892458 0.7446236 2.537 0.01117
# nodefactor.sex.여 0.4133393 0.5044445 0.819 0.41256
estimate="MPLE"로 돌려도 같은 값이 나온다.
가 망을 보지 않으므로 쌍 독립이고, 쌍 독립이면 유사가능도 = 가능도이기 때문이다.
계수를 읽는 문장 (Reading the Coefficients)
| 계수 | 값 | 읽는 문장 | |
|---|---|---|---|
| 남남 교차도 아니고 여학생도 안 낀 가상의 기준 쌍의 오즈 (해석하지 말 것 — 기준점일 뿐) | |||
| 활동성을 통제한 뒤, 같은 성별이면 친구일 오즈가 6.61배 | |||
| 끝점 중 여학생이 하나 늘 때마다 오즈가 1.51배. 여여 쌍이면 배 |
7. 교란 — 5-4의 5.5배는 어디로 갔는가 (Confounding: Where Did the 5.5 Go?)
같은 학급, 같은 데이터에 네 모형을 얹어 본다.
| 모형 | logLik | AIC | ||||
|---|---|---|---|---|---|---|
edges | — | — | — | 59.29 | ||
edges+nodematch (5-4) | — | 5.500 | 54.69 | |||
edges+nodefactor | — | — | 61.29 | |||
edges+nodematch+nodefactor (5-5) | 6.614 | 55.99 |
7-1. 왜 nodefactor 단독은 정확히 0인가 (Why nodefactor Alone Is Exactly Zero)
세 번째 줄의 은 반올림이 아니다. R이 돌려준 값은 , 즉 수치 오차 범위의 진짜 0이다. 손으로 이유를 확인할 수 있다.
간선만 있는 모형에서 모든 쌍의 확률은 밀도 이다. 학생 하나당 짝지을 상대는 9명이므로 기대 차수는 이고, 여학생 4명의 기대 차수 합은
그런데 관측값도 정확히 12다. 지수족의 MLE는 “충분통계량의 기댓값 = 관측값”을 푸는 것인데, 에서 이미 두 통계량(간선 15, 활동성 12)이 모두 맞아떨어진다. 그러니 움직일 이유가 없다. 그래서 AIC도 정확히 — 모수 하나가 아무 일도 하지 않고 벌점만 먹었다.
7-2. 그런데 nodematch를 넣으면 가 살아난다 (Adding nodematch Revives It)
동질성만 넣은 모형(m2)에서 적합 확률은 , 이다. 이 모형이 예측하는 기대 차수를 손으로 계산해 보자. 핵심은 기회 구조가 성별마다 다르다는 것이다.
| 같은 성별 짝 | 다른 성별 짝 | 기대 차수 | |
|---|---|---|---|
| 남학생 1명 | 5명 | 4명 | |
| 여학생 1명 | 3명 | 6명 |
남학생과 여학생의 평균 차수는 3으로 똑같다(18/6 = 3, 12/4 = 3). 그런데도 가 0이 아닌 이유는, 동질성 모형이 여학생에게 같은 성별 짝을 3명밖에 주지 않기 때문이다. 같은 기회로는 차수 3이 나올 수 없는데 실제로는 3이 나왔다 — 즉 주어진 기회 대비 여학생 쪽이 더 활발했다는 뜻이다.
nodefactor는 “차수가 많다”가 아니라 “기회 구조를 감안했을 때 간선이 더 잘 붙는다”를 잰다.
7-3. 그래서 동질성 계수가 움직인다 (And So the Homophily Coefficient Moves)
활동성을 통제하자 동질성이 더 강해졌다. 여학생의 높은 활동성이 교차 간선도 함께 늘려 놓았기 때문에, 그 몫을 가 가져가고 나면 “같은 성별이라서” 붙은 몫은 더 커진다.
8. 정의 ② nodecov — 연속 속성의 활동성
(Definition II: nodecov)
연속형(또는 수치형) 속성 에 대해
nodefactor와 완전히 같은 모양이다. 실제로 로 두면
가 가 된다.
nodefactor는 nodecov의 특수한 경우다.
“속성값이 0/1인 더미변수에 nodecov를 건 것” = “그 수준에 nodefactor를 건 것”.
그래서 §3의 차수 합 항등식도 그대로 일반화된다.
증명은 §3과 똑같다 — 간선 는 와 를 하나씩 내놓고, 정점 는 자기 간선 개에 를 하나씩 내놓는다. 같은 것을 두 번 세는 방식이 다를 뿐이다.
계수 의 뜻: 속성값이 1 늘어난 학생은 끝점 하나마다 오즈가 배가 된다. 양수면 “값이 큰 학생이 친구가 많다”.
9. 정의 ③ absdiff — 연속 속성의 거리
(Definition III: absdiff)
이번엔 쪼개지지 않는다. 는 꼴로 쓸 수 없다.
그래서 이것은 활동성이 아니라 선택성 항이다 — nodematch의 연속형 사촌이다.
nodematch와 반대다.nodematch: 계수가 양수면 동질성(같으면 붙는다).absdiff: 계수가 음수면 동질성(멀수록 안 붙는다).가 “같음의 지표”에서 “다름의 크기”로 바뀌었으니 부호도 뒤집힌다. 3-7의 E-I 지수와 5-4의 가 부호 규약이 달랐던 것과 같은 종류의 함정이다.
계수 의 뜻: 속성이 1단위 더 벌어질 때마다 오즈에 배. 이것은 로그오즈가 거리에 선형이라는 강한 가정이다. “1학년 차이”의 벌점과 “5학년 차이 중 마지막 1학년”의 벌점이 같다고 보는 것이다. §13에서 이 가정이 실제 데이터에서 얼마나 맞는지 검사한다.
10. 손 계산 ② — 6명 미니 학급, 15쌍 전부 (All 15 Dyads by Hand)
5-4에서 쓴 6명 미니 학급을 그대로 쓰되, 이번엔 성별이 아니라 연속 속성을 얹는다. 간선은 (1,2), (1,3), (2,3), (3,4), (4,5), (5,6) 여섯 개이고, 속성 는 “지난 학기 읽은 책 수”로 라 하자.
absdiff는 간선의 세로 길이가 된다.
오른쪽 — 15쌍을 에 대해 늘어놓으면 간선(파랑)이 왼쪽에, 비간선(빨강)이 오른쪽에 몰린다.10-1. 15쌍 전부 (The Full Enumeration)
| # | 쌍 | |||||||
|---|---|---|---|---|---|---|---|---|
| 1 | (1,2) | 12 | 10 | 22 | 2 | 1 | 22 | 2 |
| 2 | (1,3) | 12 | 9 | 21 | 3 | 1 | 21 | 3 |
| 3 | (1,4) | 12 | 8 | 20 | 4 | 0 | 0 | 0 |
| 4 | (1,5) | 12 | 6 | 18 | 6 | 0 | 0 | 0 |
| 5 | (1,6) | 12 | 4 | 16 | 8 | 0 | 0 | 0 |
| 6 | (2,3) | 10 | 9 | 19 | 1 | 1 | 19 | 1 |
| 7 | (2,4) | 10 | 8 | 18 | 2 | 0 | 0 | 0 |
| 8 | (2,5) | 10 | 6 | 16 | 4 | 0 | 0 | 0 |
| 9 | (2,6) | 10 | 4 | 14 | 6 | 0 | 0 | 0 |
| 10 | (3,4) | 9 | 8 | 17 | 1 | 1 | 17 | 1 |
| 11 | (3,5) | 9 | 6 | 15 | 3 | 0 | 0 | 0 |
| 12 | (3,6) | 9 | 4 | 13 | 5 | 0 | 0 | 0 |
| 13 | (4,5) | 8 | 6 | 14 | 2 | 1 | 14 | 2 |
| 14 | (4,6) | 8 | 4 | 12 | 4 | 0 | 0 | 0 |
| 15 | (5,6) | 6 | 4 | 10 | 2 | 1 | 10 | 2 |
| 합 | 53 | 6 | 103 | 11 | ||||
초록 줄이 간선 6개, 빨간 줄이 비간선 9개다. 0인 항도 모두 적었다 — 비간선 9개는 이므로 곱이 전부 0이고, 이것이 “간선만 세는” 통계량의 정의 그대로다.
10-2. 두 번째 경로 — 차수 합으로 다시 세기 (A Second Route: Recounting by Degree Sums)
차수는 이다(합 12 = 2×6 ✓). 를 전개하면
전혀 다른 순서로 더했는데 같은 103이 나왔다. §8의 항등식이 손에서 확인된다.
10-3. 값의 의미 (What the Numbers Say)
| 쌍 수 | 평균 | ||
|---|---|---|---|
| 간선 | 6 | 11 | |
| 비간선 | 9 | ||
| 전체 | 15 | 53 |
친구인 쌍의 독서량 차이(1.83권)가 아닌 쌍(4.67권)의 절반도 안 된다. 이것이 연속 속성에서의 동질성이다 — “같은 값”이 아니라 “가까운 값”끼리 붙는다.
11. R 검증 ② — 6명 미니 학급 (Verification II)
E6 <- list(c(1,2),c(1,3),c(2,3),c(4,5),c(5,6),c(3,4))
nw6 <- network(mkA(6,E6), directed=FALSE); nw6 %v% "book" <- c(12,10,9,8,6,4)
summary(nw6 ~ edges + nodecov("book") + absdiff("book"))
# edges nodecov.book absdiff.book
# 6 103 11 <- §10 손 계산과 일치
summary(ergm(nw6 ~ edges + absdiff("book")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# edges 5.9312083 3.1419532 1.888 0.0591
# absdiff.book -2.2277591 1.1776170 -1.892 0.0585
# 쌍 독립이므로 평범한 로지스틱 회귀와 같은 문제다
coef(glm(y ~ d_abs, data=tb6, family=binomial))
# (Intercept) d_abs
# 5.9312083 -2.2277591 <- ergm 과 자리 하나까지 동일
. 독서량이 1권 더 벌어질 때마다 친구일 오즈가 0.108배 (약 9.3분의 1)로 줄어든다. 부호가 음수이므로 동질성이다.
6명·15쌍이라 표준오차가 크고 로 아슬아슬하다. 손 계산용 예제이지 결론용 예제가 아니다.
11-1. 활동성도 같이 넣으면 (Adding Activity as Well)
summary(ergm(nw6 ~ edges + nodecov("book") + absdiff("book")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# edges 4.5295294 4.4403538 1.020 0.3077
# nodecov.book 0.0965267 0.2308907 0.418 0.6759
# absdiff.book -2.3057380 1.2767873 -1.806 0.0709
은 “책을 1권 더 읽은 학생은 끝점 하나마다 오즈가 1.10배”라는 뜻이지만 으로 전혀 유의하지 않다. 활동성을 넣어도 는 로 거의 움직이지 않았다 — 이 자료에서는 교란이 작다는 뜻이다.
12. 는 여전히 닫히는가 (Does the Normalizing Constant Still Close?)
5-4에서 가 닫힌 식이 된 이유는 딱 하나였다 — 가 에 의존하지 않는다. 오늘의 세 항도 마찬가지이므로, 증명은 글자 하나 바꾸지 않고 그대로 굴러간다.
여기서 분배법칙이 통한다. 각 쌍의 가 0/1을 독립적으로 고를 수 있고 어느 쌍의 항도 다른 쌍의 값을 참조하지 않으므로, 합과 곱의 순서를 바꿀 수 있다.
12-1. 전수 검증 (Brute-Force Check)
6명 학급은 쌍이 15개이므로 가능한 망이 개다. 전부 더해서 대조할 수 있다.
th <- c(-0.41, 0.07, -0.33) # edges, nodecov, absdiff — 아무 값
lin <- numeric(2^15)
for (cd in 0:(2^15-1)) {
b <- as.integer(intToBits(cd))[1:15]
lin[cd+1] <- th[1]*sum(b) + th[2]*sum(b*dcov) + th[3]*sum(b*dabs)
}
M <- max(lin); brute <- M + log(sum(exp(lin - M))) # 32768개 전부 더하기
closed <- sum(log(1 + exp(th[1] + th[2]*dcov + th[3]*dabs))) # 닫힌 식
# 전수 log kappa = 8.387615706
# 닫힌식 log kappa = 8.387615706
# 차이 = -2.4869e-14 <- 부동소수 오차
12-2. 5-4와 달라진 점 — 2×2 표는 사라졌다 (What Changed from 5-4: The 2×2 Table Is Gone)
오늘은 가 라서 값이 여러 가지다. 6명 학급에서는 일곱 종류. 뭉치는 칸이 늘어난 만큼 2×2 표 공식은 더 이상 없다. 대신 남는 것이 정확히 이것이다 — 쌍을 관측 단위로 하는 평범한 로지스틱 회귀. 개의 0/1 응답을 로 설명하는
glm(..., family=binomial)과 완전히 같은 문제다(§11에서 확인).바뀌지 않은 것: 쌍 독립 · 가 닫힘 · MPLE = MLE. 바뀐 것은 “손으로 푸는 공식이 있느냐”뿐이고, §5처럼 칸 수와 모수 수가 같으면(포화) 그때는 다시 손으로 풀린다.
13. R 검증 ③ — FMH 1461명 실전 (Verification III: Real Data)
이제 진짜 자료다. faux.magnolia.high — 학생 1461명, 간선 974개.
nodematch만(주황 점선)은 에서 평평하고,
absdiff만(하늘 파선)은 의 큰 낙차를 못 만들어 뒤로 갈수록 과대하게 떨어진다.
둘 다 넣은 mC(초록)만 관측을 따라간다.
오른쪽 — 여학생 평균 차수가 남학생보다 높고, nodefactor가 그것을 잡아낸다.13-1. 성별 활동성 — nodefactor가 유의하다 (Activity by Sex: nodefactor Is Significant)
| 인원 | 차수 합 | 평균 차수 | |
|---|---|---|---|
| 여학생 F | 768 | 1145 | 1.4909 |
| 남학생 M | 693 | 803 | 1.1587 |
| 합 | 1461 | 1948 ✓ | 1.3333 |
summary(ergm(fmh ~ edges + nodematch("Sex") + nodefactor("Sex")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# edges -7.3809565 0.07112797 -103.770 0.00e+00
# nodematch.Sex 0.8530734 0.07112797 11.994 3.84e-33
# nodefactor.Sex.M -0.1508384 0.03935149 -3.833 1.27e-04
# 5-4의 모형(활동성 없음)과 비교
# edges -7.5317949 nodematch.Sex 0.8796026 AIC 15412.89
# 위 모형 0.8530734 AIC 15399.88
그런데 동질성 계수는 로 거의 안 움직였다(오즈비 2.410 → 2.347). §7의 10명 학급에서는 5.50 → 6.61로 크게 움직였는데 왜 다를까? 두 집단의 크기가 비슷하기 때문이다(768 대 693). 기회 구조가 거의 대칭이면 활동성과 선택성이 서로 잘 분리된다. 10명 학급은 6 대 4로 치우쳐 있었다.
13-2. 학년 — nodematch와 absdiff는 둘 다 필요하다 (Grade: You Need Both nodematch and absdiff)
학년은 7~12의 순서 있는 수치다. 여기서 오늘의 두 도구가 정면으로 부딪힌다.
| 모형 | 항 | nodematch | absdiff | AIC | |
|---|---|---|---|---|---|
| mA | 같다/다르다만 | (오즈비 25.48) | — | 13500.36 | |
| mB | 몇 학년 차인가만 | — | (0.1206배/학년) | 13448.01 | |
| mC | 둘 다 | (오즈비 4.49) | (0.3505배/학년) | 13397.54 |
왜 둘 다 필요한지는 관측 로짓을 학년 차이별로 늘어놓으면 즉시 보인다.
| 학년 차이 | 쌍 수 | 간선 수 | 관측 로짓 | 직전과의 낙차 | mC 예측 로짓 | mC 기대 간선 수 |
|---|---|---|---|---|---|---|
| 0 | 185,026 | 820 | — | 820.00 | ||
| 1 | 326,647 | 114 | 113.48 | |||
| 2 | 260,611 | 31 | 31.74 | |||
| 3 | 170,466 | 7 | 7.28 | |||
| 4 | 88,075 | 2 | 1.32 | |||
| 5 | 35,705 | 0 | — | 0.19 |
의 낙차는 으로 유독 크고, 그 뒤로는 으로 거의 일정하다. 즉 학년에는 “같은 학년이라는 계단”과 “학년당 일정한 기울기”가 둘 다 있다.
absdiff만으로는 계단을 못 만들고, nodematch만으로는 기울기를 못 만든다.mC의 예측 낙차를 손으로 확인해 보자. 의 로짓은 , 은 이므로 관측 과 거의 같다. 그리고 구간의 낙차는 로, 관측 과 잘 맞는다.
기대 간선 수 열을 보면 mC의 적합이 얼마나 좋은지 더 분명하다 — 820 대 820.00, 114 대 113.48, 31 대 31.74, 7 대 7.28. 에서 2 대 1.32로 살짝 벌어지지만 기대 간선이 한두 개인 칸이라 우연의 폭 안이다.
13-3. nodecov는 여기서 실패한다 (Where nodecov Fails)
summary(ergm(fmh ~ edges + nodecov("Grade")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# nodecov.Grade -0.0159449 0.01451214 -1.099 0.272 <- 유의하지 않음
# AIC 비교
# edges 만 15582.21
# + nodecov("Grade") 15583.00 <- 더 나빠졌다
# + nodefactor("Grade") 15550.98 <- 크게 좋아졌다
학년별 평균 차수를 보면 이유가 명백하다.
| 학년 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|
| 인원 | 185 | 210 | 317 | 299 | 257 | 193 |
| 평균 차수 | 1.2811 | 1.7095 | 1.1167 | 1.2876 | 1.4942 | 1.1865 |
nodecov는 “학년이 1 오를 때마다 활동성이 만큼”이라는 직선만 그릴 수 있으므로
이 오르내림을 표현할 방법이 없고, 결국 “기울기 거의 0”으로 주저앉는다.nodefactor는 학년을 범주로 보고 학년마다 따로 계수를 주므로 이 패턴을 잡아낸다
(8학년 , 오즈 1.335배 / 9학년 , 0.872배).교훈 — 수치형 속성이라고 자동으로
nodecov가 아니다.
선형인지 먼저 확인하고, 아니면 nodefactor로 범주 취급할 것.
13-4. 종합 모형 (Putting It Together)
ergm(fmh ~ edges + nodematch("Grade") + absdiff("Grade") +
nodematch("Sex") + nodefactor("Sex") + nodematch("Race"))
# Estimate Std. Error z value exp(계수)
# edges -8.1426308 0.21215186 -38.381 0.000291
# nodematch.Grade 1.5130565 0.19436694 7.785 4.541
# absdiff.Grade -1.0399630 0.13025175 -7.984 0.353
# nodematch.Sex 0.8583060 0.07123142 12.050 2.359
# nodefactor.Sex.M -0.1476605 0.03945048 -3.743 0.863
# nodematch.Race 1.1908515 0.08146466 14.618 3.290
# AIC 12952.30
5-4의 세 nodematch 모형(AIC 13034 부근)에서 크게 개선됐고,
여섯 계수가 모두 유의하다. 5-4에서 “같은 학년 오즈비 25.5배”라고 읽었던 값이
여기서는 4.54배로 줄었다 — 나머지 20배쯤은 “같은 학년”이 아니라
“학년이 가깝다”가 설명하고 있었던 것이다.
14. 교실 적용 (Classroom Application)
14-1. 두 질문을 분리해서 물어라 (Ask the Two Questions Separately)
① “여학생이 친구가 많다” → 활동성 →
nodefactor② “여학생이 여학생끼리 뭉친다” → 선택성 →
nodematch①과 ②는 다른 현상이고, 대응도 다르다. ①이면 남학생 쪽 관계 형성을 도와야 하고, ②면 성별 혼합 모둠을 늘려야 한다. 둘을 한 모형에 같이 넣어야 어느 쪽인지 갈린다.
14-2. 집단 크기가 작은 쪽을 조심하라 (Beware the Smaller Group)
14-3. nodefactor는 집단의 지표이지 개인의 지표가 아니다 (nodefactor Measures Groups, Not Individuals)
14-4. 연속 속성엔 absdiff를 — 다만 선형성을 확인하고 (Use absdiff for Continuous Attributes, but Check Linearity)
nodematch)는 거의 의미가 없다.
“가까운 점수끼리 친한가”가 옳은 질문이고 그것이 absdiff다.단, §13-2처럼 차이별로 로짓을 실제로 찍어 보고 직선인지 확인할 것. 계단(같음 특권)이 따로 있으면
nodematch도 같이 넣어야 한다.
14-5. 학년·학기처럼 순서 있는 범주는 두 항을 함께 (Ordered Categories Need Both Terms)
nodematch(v) + absdiff(v) 두 줄이 기본이라고 생각하면 된다.
14-6. 동료·학부모에게 설명하는 문장 (Sentences for Colleagues and Parents)
❌ “nodematch 계수가 1.89입니다”
⭕ “학생마다 친구를 만드는 정도가 다른 것을 감안하고 나서도, 같은 성별인 두 학생이 친구일 가능성이 다른 성별인 두 학생의 약 6.6배였습니다.”
❌ “absdiff.Grade가 −1.04입니다”
⭕ “학년이 한 학년 벌어질 때마다 친구가 될 가능성이 약 3분의 1로 줄었습니다. 같은 학년이면 거기에 더해 4.5배의 추가 이점이 있었고요.”
15. 연습문제 (Exercises)
nodefactor와 포화 모형 (Exercise 1)5-4 연습 1에서 쓴 8명 학급을 그대로 쓴다. A집단 = {1,2,3,4,5}, B집단 = {6,7,8}, 간선 8개는 다음과 같다.
(b) 세 칸(AA, BB, 교차)의 쌍 수 과 간선 수 을 구하고, 각 칸의 관측 로짓을 계산하라.
(c) 모형
edges + nodematch + nodefactor(B)의 세 계수를 §5처럼 연립방정식으로 손으로 풀어라.(d) 5-4에서 활동성 없이 구한 와 비교하라. 어느 방향으로 움직였는가?
먼저 풀고 §16 해설과 맞춰 볼 것.
absdiff의 부호 (Exercise 2)§10의 6명 미니 학급을 그대로(간선도 그대로) 두고, 속성만 바꾼다. 이번엔 “하루 스마트폰 사용 시간(시간)”이 이라 하자. 간선은 여전히 (1,2), (1,3), (2,3), (3,4), (4,5), (5,6)이다.
(a) 15쌍을 전부 적어 와 를 구하라. 는 로도 검산할 것.
(b) 간선 6개의 평균 와 비간선 9개의 평균 를 비교하라. §10의 독서량 자료(1.833 대 4.667)와 방향이 같은가, 반대인가?
(c) 그렇다면
edges + absdiff를 적합했을 때 의 부호는
양수인가 음수인가? 그 부호를 교실 문장으로 옮겨 쓰라.먼저 풀고 §16 해설과 맞춰 볼 것.
16. 해설과 답 (Solutions)
문제 1 해설 (Solution to Problem 1)
(a) 차수와 두 경로
먼저 각 학생에게 붙은 간선을 세어 차수를 구한다.
| 학생 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 합 |
|---|---|---|---|---|---|---|---|---|---|
| 집단 | A | A | A | A | A | B | B | B | |
| 붙은 간선 | 1-2,1-3 | 1-2,2-3 | 1-3,2-3,3-4 | 3-4,4-5 | 4-5,5-6 | 5-6,6-7 | 6-7,7-8 | 7-8 | |
| 차수 | 2 | 2 | 3 | 2 | 2 | 2 | 2 | 1 | 16 |
차수 합 경로:
간선 경로 — 간선 8개를 종류별로 분류하고 를 붙인다. 0인 항도 모두 적는다.
| 간선 | 1–2 | 1–3 | 2–3 | 3–4 | 4–5 | 6–7 | 7–8 | 5–6 | 합 |
|---|---|---|---|---|---|---|---|---|---|
| 종류 | AA 5개 | BB 2개 | 교차 1개 | 8 | |||||
| 2 | 2 | 2 | 2 | 2 | 0 | 0 | 1 | 11 | |
| 0 | 0 | 0 | 0 | 0 | 2 | 2 | 1 | 5 | |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 7 | |
(b) 세 칸
A 5명, B 3명이므로 쌍은 개이고 세 칸으로 갈린다.
| 칸 | 쌍 수 | 간선 수 | 간선 없는 쌍 | 왜 그 값인가 | 관측 로짓 |
|---|---|---|---|---|---|
| AA | 5 | 5 | 1-2,1-3,2-3,3-4,4-5 | ||
| BB | 2 | 1 | 6-7,7-8 (6-8은 없음) | ||
| 교차 | 1 | 14 | 5-6 하나뿐 | ||
| 합 | 28 | 8 | 20 | ||
(c) 연립방정식
B를 활동성 수준으로 잡으면 는 AA에서 0, 교차에서 1, BB에서 2다.
1단계 (iii) (i):
2단계 (ii)에 대입:
3단계 (i)에 대입:
검산 — 세 칸의 오즈를 되조립한다.
| 칸 | 계수 조합 | 계산 | 관측 오즈 |
|---|---|---|---|
| AA | ✓ | ||
| BB | ✓ | ||
| 교차 | ✓ |
summary(ergm(nw8 ~ edges + nodematch("g") + nodefactor("g")))$coefficients
# Estimate Std. Error
# edges -2.9856309 1.2434667
# nodematch.g 2.9856309 1.2434667
# nodefactor.g.B 0.3465736 0.6892024 <- 손 계산과 완전 일치
와 이 부호만 다르고 크기가 같은 것은 우연이 아니다 — AA 칸의 간선 수와 비간선 수가 5개로 같아서 이 되었고, (i)이 를 강제하기 때문이다.
(d) 5-4와 비교
| 모형 | ||||
|---|---|---|---|---|
5-4 edges+nodematch | 16.333 | — | ||
5-5 +nodefactor(B) | 19.799 |
이유도 같다. B집단은 3명뿐이라 같은 집단 짝이 2명밖에 없는데(A는 4명), 그런 불리한 기회 구조에서도 BB 간선이 2개나 나왔다. 그 “기회 대비 초과분”을 가 가져가고 나면, 남은 동질성 몫이 더 커진다.
일반 규칙: 작은 집단이 상대적으로 활발하면, 활동성을 통제할 때 동질성 계수는 커진다.
문제 2 해설 (Solution to Problem 2)
(a) 15쌍 전부
, 간선은 (1,2), (1,3), (2,3), (3,4), (4,5), (5,6).
| # | 쌍 | |||||||
|---|---|---|---|---|---|---|---|---|
| 1 | (1,2) | 1 | 5 | 6 | 4 | 1 | 6 | 4 |
| 2 | (1,3) | 1 | 2 | 3 | 1 | 1 | 3 | 1 |
| 3 | (1,4) | 1 | 6 | 7 | 5 | 0 | 0 | 0 |
| 4 | (1,5) | 1 | 3 | 4 | 2 | 0 | 0 | 0 |
| 5 | (1,6) | 1 | 7 | 8 | 6 | 0 | 0 | 0 |
| 6 | (2,3) | 5 | 2 | 7 | 3 | 1 | 7 | 3 |
| 7 | (2,4) | 5 | 6 | 11 | 1 | 0 | 0 | 0 |
| 8 | (2,5) | 5 | 3 | 8 | 2 | 0 | 0 | 0 |
| 9 | (2,6) | 5 | 7 | 12 | 2 | 0 | 0 | 0 |
| 10 | (3,4) | 2 | 6 | 8 | 4 | 1 | 8 | 4 |
| 11 | (3,5) | 2 | 3 | 5 | 1 | 0 | 0 | 0 |
| 12 | (3,6) | 2 | 7 | 9 | 5 | 0 | 0 | 0 |
| 13 | (4,5) | 6 | 3 | 9 | 3 | 1 | 9 | 3 |
| 14 | (4,6) | 6 | 7 | 13 | 1 | 0 | 0 | 0 |
| 15 | (5,6) | 3 | 7 | 10 | 4 | 1 | 10 | 4 |
| 합 | 44 | 6 | 43 | 19 | ||||
검산 — 차수는 로 §10과 같다(망을 안 바꿨으니까).
(b) 두 평균 비교
| 쌍 수 | 평균 | §10 독서량 자료 | ||
|---|---|---|---|---|
| 간선 | 6 | 19 | 1.8333 | |
| 비간선 | 9 | 4.6667 |
(c) 부호
간선인 쌍이 더 벌어진 값을 갖고 있으므로, 가 커질수록 간선일 확률이 높아지는 쪽으로 적합된다. 따라서 는 양수다.
nw6 %v% "ph" <- c(1,5,2,6,3,7)
summary(nw6 ~ edges + nodecov("ph") + absdiff("ph"))
# edges nodecov.ph absdiff.ph
# 6 43 19 <- (a) 손 계산과 일치
summary(ergm(nw6 ~ edges + absdiff("ph")))$coefficients
# Estimate Std. Error z value Pr(>|z|)
# edges -0.8513248 1.1227243 -0.758 0.448
# absdiff.ph 0.1501150 0.3292684 0.456 0.648 <- 양수, 그러나 유의하지 않음
교실 문장: “스마트폰 사용 시간이 1시간 더 벌어질 때마다 두 학생이 친구일 오즈가 약 1.16배 늘었다 — 즉 사용 시간이 비슷한 학생끼리가 아니라 다른 학생끼리 친한 경향(이질성)이 나타났다.”
단, 로 전혀 유의하지 않다. 6명 학급에서는 어떤 결론도 내릴 수 없다.
그러니 의 부호는 망의 성질이 아니라 “그 속성이 망과 어떻게 맞물리는가”를 잰다. 한 학급의 교우관계를 놓고도 성적으로는 동질성, 성격으로는 이질성이 동시에 나올 수 있다는 뜻이다. 속성을 바꿔 가며 여러 번 물어봐야 교실이 보인다.
gwesp와 모형 퇴화5-1부터 오늘까지, 우리가 넣은 모든 항은 망을 보지 않았다. 는 정점의 속성만 읽었고, 그래서 쌍 독립이 유지됐고, 가 닫혔고, MPLE = MLE였고, 손으로 풀 수 있었다.
그런데 교실에서 가장 중요한 질문 하나가 아직 남아 있다 — “내 친구의 친구는 내 친구가 되는가?” 삼각형이다. 이 질문의 는 “와 의 공통 친구가 몇 명인가”이고, 이것은 다른 간선을 봐야만 알 수 있다. 쌍 독립이 그 순간 깨진다.
그러면 는 닫히지 않고, MPLE ≠ MLE가 되고, MCMC가 필요해지고 — 그리고 모형 퇴화(degeneracy)라는 ERGM 최대의 함정이 나타난다. 단순한
triangle 항을 넣으면 모형이 “빈 망 아니면 완전 망”으로 붕괴한다.
5-6에서는 왜 그런지 손으로 확인하고, 그 해결책인 gwesp(기하가중 간선별 공유 파트너)가
무엇을 어떻게 눌러 주는지 본다.