단원 5-8QAP Logistic Regression and Putting It Together
실전 — QAP 로지스틱과 5단계 종합
- 오늘의 질문 (The Question)
- QAP 로지스틱이란 무엇인가 (What QAP Logistic Regression Is)
- 손 계산 ① — 6명 학급의 2×2 표 (Hand Calculation I: A 2×2 Table)
- 세 도구가 같은 계수를 낸다 (Three Tools, One Estimate)
- 손 계산 ② — 순열 20가지를 전부 (Hand Calculation II: All 20 Permutations)
- 같은 수를 재는 두 개의 자 (Two Rulers for the Same Number)
- R 검증 ① — 효과가 0인데 몇 번이나 유의하다고 하는가 (Verification I: Type I Error Rate)
- QAP가 못 하는 일 (What QAP Cannot Do)
- R 검증 ② — FMH에서 두 도구 맞대기 (Verification II: Both Tools on FMH)
- 뭉침을 넣으면 동질성이 줄어든다 (Adding Clustering Shrinks Homophily)
- R 검증 ③ —
gof()로 채점 (Verification III: Grading with GOF) - 세 도구를 언제 쓰는가 (Which Tool When)
- 교실 데이터 적용 설계 (Designing a Classroom Study)
- 5단계 정리 (Stage 5 Wrap-up)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 오늘의 질문 (The Question)
5단계 내내 우리는 ergm() 하나만 썼다. 그런데 사회network 문헌에는
훨씬 오래된 도구가 하나 더 있다 — QAP 로지스틱 회귀(sna::netlogit).
쓰는 법도 훨씬 간단하다. 쌍 하나를 관측치 하나로 보고 그냥 로지스틱 회귀를 돌린 뒤,
p값만 순열 검정으로 바꾼다.
같은 자료에
netlogit()과 ergm()을 돌리면 무엇이 같고 무엇이 다른가?둘이 다르면 어느 쪽을 믿어야 하는가?
그리고 5-4~5-7에서 배운 것을 전부 합치면, 우리 반 자료로 무엇을 어떻게 해야 하는가?
결론부터 말하면 답이 재미있다. 계수는 소수점 여섯째 자리까지 똑같이 나온다. 다른 것은 p값이고, 그리고 ERGM만 할 수 있는 일이 따로 있다.
2. QAP 로지스틱이란 무엇인가 (What QAP Logistic Regression Is)
발상은 단순하다. 무향 망에서 쌍은 개다. 쌍 하나를 자료 한 줄로 놓는다.
| 줄 | 쌍 | 결과 | 설명변수 | 설명변수 |
|---|---|---|---|---|
| 1 | (1,2) | 성별 같으면 1 | 학년 차이 | |
| 2 | (1,3) | … | … | |
| ⋮ | ||||
| … | … | |||
그리고 보통의 로지스틱 회귀를 돌린다.
edges의
변화 통계량은 언제나 1, nodematch("Sex")의 변화 통계량은 두 사람 성별이
같으면 1 아니면 0. 즉 위의 와 글자 그대로 같은 것이다.
그러면 QAP는 어디에 붙는가 (Where QAP Comes In)
QAP는 Quadratic Assignment Procedure, 계수를 구하는 방법이 아니라 p값을 구하는 방법이다. 절차는 이렇다.
- 원자료로 계수 을 구한다.
- 사람들의 이름표를 무작위로 섞는다. 망 는 그대로 두고 속성만 섞거나, 속성을 두고 의 행·열을 같은 순열로 섞는다 (둘은 수학적으로 같다).
- 섞은 자료로 계수를 다시 구한다. 이것을 수천 번 반복한다.
- 이렇게 얻은 영 분포에서 이 얼마나 극단적인지를 센다.
"이름표를 섞는다"가 핵심이다. 이 조작은 망의 구조는 하나도 건드리지 않는다. 차수 분포도, 삼각형 수도, 덩어리 모양도 그대로다. 오직 누가 누구인지만 지운다.
3. 손 계산 ① — 6명 학급의 2×2 표 (Hand Calculation I: A 2×2 Table)
여학생 1·2·3, 남학생 4·5·6인 6명 학급을 놓자. 친구 관계는 6개다.
쌍은 개다. 15줄을 전부 쓰자. 설명변수는 (동성) 하나뿐이다.
| # | 쌍 | 성별 | 동성 | 간선 | # | 쌍 | 성별 | 동성 | 간선 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | (1,2) | 여·여 | 1 | 1 | 9 | (2,6) | 여·남 | 0 | 0 |
| 2 | (1,3) | 여·여 | 1 | 1 | 10 | (3,4) | 여·남 | 0 | 1 |
| 3 | (1,4) | 여·남 | 0 | 0 | 11 | (3,5) | 여·남 | 0 | 0 |
| 4 | (1,5) | 여·남 | 0 | 0 | 12 | (3,6) | 여·남 | 0 | 0 |
| 5 | (1,6) | 여·남 | 0 | 0 | 13 | (4,5) | 남·남 | 1 | 1 |
| 6 | (2,3) | 여·여 | 1 | 1 | 14 | (4,6) | 남·남 | 1 | 0 |
| 7 | (2,4) | 여·남 | 0 | 0 | 15 | (5,6) | 남·남 | 1 | 1 |
| 8 | (2,5) | 여·남 | 0 | 0 | — (표는 두 단으로 접었다) | ||||
세어 보면 2×2 표가 나온다.
| 간선 없음 | 간선 있음 | 합 | |
|---|---|---|---|
| 이성 쌍 | 9 | ||
| 동성 쌍 | 6 | ||
| 합 | 9 | 6 | 15 |
닫힌 형태 최대가능도 추정 (Closed-Form MLE)
설명변수가 이진 하나뿐이면 모형이 포화(saturated)된다 — 모수 2개로 확률 2개 ()를 자유롭게 맞출 수 있다. 그래서 답이 손으로 나온다. 로그가능도는
이고 에 대해 미분해 0으로 놓으면 각각
이다. 로그오즈로 바꾸면 — 여기가 이 절의 전부다.
| 양 | 정의 | 값의 전개 | 결과 |
|---|---|---|---|
| 이성 쌍 오즈 | 0.125 | ||
| 동성 쌍 오즈 | 5 | ||
| 오즈비 (OR) | 40 | ||
| (절편) | |||
| (동성) | |||
| 1.524795 | |||
| 1.060660 | |||
| Wald | 2.4193 | ||
| Wald (양측) | 0.01555 |
4. 세 도구가 같은 계수를 낸다 (Three Tools, One Estimate)
y <- A[upper.tri(A)]; x <- M[upper.tri(M)] # M = 동성이면 1
glm(y ~ x, family = binomial)
netlogit(A, M, mode = "graph", nullhyp = "qapy", reps = 2000)
ergm(nw ~ edges + nodematch("sex"), estimate = "MPLE")
ergm(nw ~ edges + nodematch("sex")) # MLE
| 도구 | (edges) | (nodematch) | |
|---|---|---|---|
| 손 계산 (닫힌 형태) | 1.5247951 | ||
glm | 1.5247773 | ||
netlogit | 1.5247773 | ||
ergm MPLE | 1.5247891 | ||
ergm MLE | 1.5247891 |
MPLE와 MLE의 계수 차이는 — 부동소수점 잡음이다. 우연이 아니라 정리다.
① 5-6에서 본 대로 MPLE는 를 최대화한다. 쌍 독립 모형에서는 조건부가 조건에 안 걸린다 — 나머지를 알든 모르든 확률이 같다. 그러면 유사가능도 진짜 가능도이므로 MPLE MLE다.
② 그 가능도는 각 쌍이 로 독립인 베르누이 곱이다. 이것은 설계행렬이 인 로지스틱 회귀의 가능도와 글자 그대로 같은 식이다.
③
nodematch의 변화 통계량은 "같으면 1"이므로 QAP가 쓰는 와 같은 열이다.→ 세 도구는 같은 함수를 최대화하고 있다. 다를 수가 없다.
gwesp가 있으면
MPLE ≠ MLE이고(5-6에서 확인), QAP는 아예 그런 항을 넣을 수조차 없다(§8).
"세 도구가 같다"는 것은 쌍 독립 모형에서만 성립하는 이야기다.
5. 손 계산 ② — 순열 20가지를 전부 (Hand Calculation II: All 20 Permutations)
이제 p값을 QAP 방식으로 구해 보자. 이름표를 섞는다는 것은 6명 중 누가 "여"인지를 다시 뽑는다는 뜻이다. 3명을 고르는 방법은 가지뿐이다. 손으로 다 셀 수 있다.
먼저 중요한 관찰 하나. 어느 분할을 쓰든 여 3명·남 3명이므로 동성 쌍의 수는 항상
이고, 간선 수도 항상 6개다. 그러면 2×2 표가 (동성 간선 수) 하나로 완전히 결정된다: . 따라서 은 의 증가함수이고, 에 대한 순열 검정은 그냥 에 대한 순열 검정이다.
간선 6개는 (1,2)(1,3)(2,3)(3,4)(4,5)(5,6)이다. 각 분할마다 양 끝이 같은 조에 들어간 간선을 센다. 스무 줄 전부:
| # | "여"로 지정 | (1,2) | (1,3) | (2,3) | (3,4) | (4,5) | (5,6) | |
|---|---|---|---|---|---|---|---|---|
| 1 | 1,2,3 | ✓ | ✓ | ✓ | · | ✓ | ✓ | 5 |
| 2 | 1,2,4 | ✓ | · | · | · | · | ✓ | 2 |
| 3 | 1,2,5 | ✓ | · | · | ✓ | · | · | 2 |
| 4 | 1,2,6 | ✓ | · | · | ✓ | ✓ | · | 3 |
| 5 | 1,3,4 | · | ✓ | · | ✓ | · | ✓ | 3 |
| 6 | 1,3,5 | · | ✓ | · | · | · | · | 1 |
| 7 | 1,3,6 | · | ✓ | · | · | ✓ | · | 2 |
| 8 | 1,4,5 | · | · | ✓ | · | ✓ | · | 2 |
| 9 | 1,4,6 | · | · | ✓ | · | · | · | 1 |
| 10 | 1,5,6 | · | · | ✓ | ✓ | · | ✓ | 3 |
| 11 | 2,3,4 | · | · | ✓ | ✓ | · | ✓ | 3 |
| 12 | 2,3,5 | · | · | ✓ | · | · | · | 1 |
| 13 | 2,3,6 | · | · | ✓ | · | ✓ | · | 2 |
| 14 | 2,4,5 | · | ✓ | · | · | ✓ | · | 2 |
| 15 | 2,4,6 | · | ✓ | · | · | · | · | 1 |
| 16 | 2,5,6 | · | ✓ | · | ✓ | · | ✓ | 3 |
| 17 | 3,4,5 | ✓ | · | · | ✓ | ✓ | · | 3 |
| 18 | 3,4,6 | ✓ | · | · | ✓ | · | · | 2 |
| 19 | 3,5,6 | ✓ | · | · | · | · | ✓ | 2 |
| 20 | 4,5,6 | ✓ | ✓ | ✓ | · | ✓ | ✓ | 5 |
분포를 세면 이 4가지, 가 8가지, 이 6가지, 가 2가지다 (합 20 ✓). 관측값은 이므로
3명/3명 분할은 "누가 여자냐"를 뒤집어도 같은 분할이다. 그래서 20가지 중 서로 다른 분할은 10가지뿐이고, 그중 하나가 관측된 분할 자신이다. 순열 검정은 관측값을 항상 포함하므로 는 아무리 작아도 밑으로 못 내려간다.
→ 이 작으면 QAP는 5% 유의를 구조적으로 낼 수 없다. 20명 학급이면 가지라 이 문제는 사라진다.
720개 순열로 확인 (Checking All 720 Permutations)
P <- allp(1:6) # 6! = 720
tt <- apply(P, 1, function(p) { s <- sex[p]; sum(y * (outer(s,s,"==")*1)[up]) })
table(tt)
# 1 2 3 5
# 144 288 216 72 ← 20가지 × (3!·3! = 36) = 720 ✓
mean(tt >= 5)
# [1] 0.1
6. 같은 수를 재는 두 개의 자 (Two Rulers for the Same Number)
둘의 차이가 어디서 오는지 정확히 짚자. 두 검정 모두 같은 통계량 를 본다. 다른 것은 "가 우연히 얼마나 흔들리는가"를 재는 방식이다.
| 고전 로지스틱 | QAP | |
|---|---|---|
| 우연이란 | 간선 6개를 15쌍에 무작위로 흩뿌리는 것 | 망은 그대로 두고 이름표를 섞는 것 |
| 보존되는 것 | 간선 수, 동성 쌍 수 | 간선 수, 동성 쌍 수, + 차수 분포·삼각형·덩어리 모양 전부 |
| 의 분포 | 초기하 | 20가지 분할의 분포 |
초기하 쪽은 공식이 있다. 쌍, 간선 , 동성 쌍 일 때
순열 쪽은 §5의 720개 값에서 직접 구한다.
, — 1.157배.
같은 를 재는데 , .
고전은 자를 짧게 잡아서 같은 거리를 더 멀다고 읽는다.
여기서는 순열 쪽 분산이 더 컸다. 하지만 이것이 언제나 그런 것은 아니다 — 그게 §7의 주제다.
7. R 검증 ① — 효과가 0인데 몇 번이나 유의하다고 하는가 (Verification I: Type I Error Rate)
"어느 쪽이 옳으냐"는 말로 정할 문제가 아니다. 참 효과가 0인 자료를 일부러 만들어서 검정을 돌려 보면 된다. 로 검정했으면 100번 중 5번만 "유의"가 나와야 한다.
설계 (Design)
망 는 가라테(34명, 78간선)로 고정한다. 설명변수 도 망으로 놓는다 ("이 두 사람이 다른 관계로도 이어져 있는가"). 참 효과를 0으로 만들려면 가 와 아무 상관이 없어야 한다.
gx <- sample_degseq(d, method = "vl") # 가라테와 차수가 같은 무작위 망
B <- as.matrix(as_adjacency_matrix(gx))
p <- sample(34); B <- B[p, p] # ★ 이름표까지 섞는다
sample_degseq는 각 사람의 차수를 그대로
유지한다. 그러면 가라테에서 차수 17인 34번은 에서도 차수 17이고, 두 망은
"허브가 같은 자리에 있다"는 진짜 관계를 갖는다. 실제로 이름표를 안 섞으면 겹침 의
평균이 10.84가 아니라 26.95가 나오고 두 검정 모두 100% 가까이 기각한다 —
1종 오류가 아니라 옳은 기각이다. 이 실험을 처음 짤 때 여기서 한 번 틀렸다.
결과 (Results)
| 의 종류 | 실제 sd | 고전 가정 sd | 비 | 고전 기각률 | QAP 기각률 |
|---|---|---|---|---|---|
| 허브 있는 망 (차수 보존 + 이름표 섞음) | 3.6059 | 2.8378 | 1.271 | 12.6% | 3.6% |
| 허브 없는 망 | 2.7649 | 2.8378 | 0.974 | 4.0% | 2.6% |
반대로 허브가 없는 끼리는 sd 비가 0.974로 거의 1이고, 고전 기각률도 4.0%로 정상이다.
왜 허브가 문제인가? 고전 로지스틱은 561개 쌍을 독립 관측치로 센다. 하지만 사람 34명이 561개 쌍을 만든다 — 한 사람이 33개 쌍에 등장한다. 차수가 큰 사람 하나가 있으면 그 사람이 걸린 33개 쌍이 한꺼번에 움직인다. 자유도가 561이 아니라 훨씬 작은 셈이고, 그래서 분산이 커진다. 가라테의 2-경로 수 이 그 의존의 크기다.
정직하게 — 반대 방향으로 틀리는 경우도 있다 (In Fairness: It Can Err the Other Way)
같은 실험을 노드 속성(§3처럼 "같은 조인가")으로 하면 이야기가 달라진다. 가라테 망은 그대로 두고 16/18 무작위 분할을 4000번 뽑았다.
| 설명변수 | 실제 sd | 고전 가정 sd | 비 | 고전 기각률 | QAP 기각률 |
|---|---|---|---|---|---|
| 노드 속성 (16/18 분할) | 3.7926 | 4.0996 | 0.925 | 2.6% | 3.8% |
→ 어느 쪽으로 틀릴지는 자료 구조에 달려 있고 미리 알 수 없다. 그래서 짐작하지 말고 순열로 직접 재는 것이다.
덤 — netlogit()의 를 그대로 믿지 말 것
(Aside: Don't Trust the Printed p-Value)
netlogit()의 pgreq는 작은 망에서 정확한 순열 와 어긋난다.
연습 1의 7명 자료(§15)로 reps=20000을 돌리면 pgreq = 0.0337이 나오는데
전수 계산으로 얻는 정확한 값은 이다.원인을 추적해 보면:
nl$dist에는 계수가 아니라 통계량이 들어 있고,
관측값과 똑같은 2×2 표를 주는 순열이 20000번 중 1161번(=0.058, 정확값 0.0571과 일치) 나오는데,
glm의 반복 계산이 자료 순서에 따라 마지막 3비트를 다르게 내는 바람에
그 1161개가 10개의 서로 다른 값으로 갈라지고 674개만 관측 이상으로 셈된다
(). 즉 동점 처리가 부동소수점에 맡겨져 있다.→ 망이 작아 같은 표가 반복되는 상황(학급 자료가 딱 그렇다)에서는 순열을 직접 세라. §5처럼 열 줄이면 된다.
8. QAP가 못 하는 일 (What QAP Cannot Do)
p값 이야기만 하면 QAP가 더 나아 보인다. 하지만 QAP에는 구조적인 한계가 있다.
회귀식 의 오른쪽에는 망 자신이 등장할 수 없다. 에 를 넣으면 자기 자신을 설명하는 꼴이 된다.
그런데 5-6~5-7에서 배운
triangle·gwesp는 바로 그런 항이다 —
"이 쌍에 공통 친구가 몇 명인가"는 를 봐야 안다.→ QAP로는 전이성을 모형에 넣을 수 없다. 통제할 수도, 추정할 수도 없다.
| 할 수 있는 일 | QAP 로지스틱 | ERGM |
|---|---|---|
| 속성 효과(동질성·활동성) 추정 | 가능 | 가능 |
| 전이성·뭉침을 모형에 넣기 | 불가 | 가능 |
망을 모의 생성(simulate) | 불가 | 가능 |
gof()로 채점 | 없음 | 가능 |
| 의존 구조를 자료에서 지우지 않고 다루기 | 지운다(잡음 취급) | 모형에 넣는다 |
"우리 반 아이들이 끼리끼리 뭉치는가"가 연구 질문 자체인 교실 연구에서는 QAP가 그 질문을 아예 물을 수 없다.
9. R 검증 ② — FMH에서 두 도구 맞대기 (Verification II: Both Tools on FMH)
이제 실제 크기의 자료로. FMH(Faux Magnolia High)는 1461명, 974간선, 쌍 1,066,530개다. 5-5에서 만든 종합 모형을 두 도구로 각각 적합했다.
## ERGM (쌍 독립 항만)
f5 <- ergm(fmh ~ edges + nodematch("Grade") + absdiff("Grade") +
nodematch("Sex") + nodefactor("Sex") + nodematch("Race"))
## QAP 로지스틱 — 같은 설계행렬을 손으로 만들어서
X <- list(sameGrade = outer(gr,gr,"==")*1, absGrade = abs(outer(gr,gr,"-")),
sameSex = outer(sx,sx,"==")*1, maleCnt = outer((sx=="M")*1,(sx=="M")*1,"+"),
sameRace = outer(rc,rc,"==")*1)
netlogit(Y, xa, mode = "graph", nullhyp = "classical")
| 항 | ergm 계수 | netlogit 계수 | 차이 | ergm SE | netlogit SE |
|---|---|---|---|---|---|
edges (절편) | 0.2121519 | 0.2121396 | |||
nodematch.Grade | 0.1943669 | 0.1943508 | |||
absdiff.Grade | 0.1302517 | 0.1301841 | |||
nodematch.Sex | 0.0712314 | 0.0712376 | |||
nodefactor.Sex.M | 0.0394505 | 0.0394517 | |||
nodematch.Race | 0.0814647 | 0.0814680 |
glm과 ergm의 수렴 허용오차 차이일 뿐이다.
SE도 수준에서 일치한다.→ §4에서 손으로 증명한 "세 도구는 같은 함수를 최대화한다"가 실물 자료에서 그대로 확인됐다. 쌍 독립 모형만 쓸 것이라면 어느 도구를 쓰든 계수는 같다.
10. 뭉침을 넣으면 동질성이 줄어든다 (Adding Clustering Shrinks Homophily)
여기서부터가 ERGM만 할 수 있는 일이다. 같은 모형에 gwesp(0.25) 하나를 더한다.
f6 <- ergm(fmh ~ edges + nodematch("Grade") + absdiff("Grade") +
nodematch("Sex") + nodefactor("Sex") + nodematch("Race") +
gwesp(0.25, fixed = TRUE),
control = control.ergm(MCMLE.maxit = 40, seed = 1))
28.5초 만에 수렴했다(수렴 , 5-7 기준대로 작아야 좋다). MCMC 표본 2870개, 번인 65536, 간격 2048, ESS 215~1704, Geweke 최대 1.44 — 5-7의 네 조건을 모두 통과한다.
| 항 | 쌍 독립 | +gwesp | 크기 변화 | 쌍 독립 | +gwesp |
|---|---|---|---|---|---|
| 학년 일치 | 1.51306 | 1.14663 | |||
| 학년 차이 | |||||
| 성별 일치 | 0.85831 | 0.74821 | |||
| 남학생 수 | 0.00018 | 0.023 | |||
| 인종 일치 | 1.19085 | 0.90350 | |||
gwesp(0.25) | — | 1.77361 | — | — | |
| AIC | 12952.30 | 12049.92 | BIC 13023.58 → 12133.08 | ||
gwesp가 들어와 그 몫을 가져가면 학년의 몫이 줄어든다.회귀에서 빠뜨린 변수 편향과 똑같은 구조다. 다만 여기서 빠진 변수는 다른 속성이 아니라 망 자신의 구조다.
11. R 검증 ③ — gof()로 채점 (Verification III: Grading with GOF)
5-7에서 배운 규칙대로 모형에 안 넣은 특성으로 채점한다. (모형 통계량은 두 모형 모두 ~0.96으로 통과한다 — 적률 방정식이 강제하므로 당연하고, 아무 의미도 없다.)
ESP — 쌍 독립의 참패 (ESP: Where Dyadic Independence Collapses)
| ESP | 관측 | 쌍 독립 모형 | +gwesp 모형 | ||||
|---|---|---|---|---|---|---|---|
| 평균 | 최소~최대 | 평균 | 최소~최대 | ||||
| 0 | 626 | 943.52 | 885~1008 | 0.00 | 606.64 | 533~660 | 0.54 |
| 1 | 232 | 6.22 | 0~18 | 0.00 | 310.68 | 208~390 | 0.06 |
| 2 | 83 | 0.04 | 0~1 | 0.00 | 31.64 | 11~65 | 0.00 |
| 3 | 24 | 0.00 | 0~0 | 0.00 | 2.54 | 0~9 | 0.00 |
| 4 | 8 | 0.00 | 0~0 | 0.00 | 0.11 | 0~2 | 0.00 |
공통 친구가 한 명이라도 있는 간선이 관측 348개인데, 쌍 독립 모형은
100번 모의해서 최대 19개를 만들었다. 삼각형으로 보면 더 극적이다 —
관측 169개, 쌍 독립 모의 평균 1.89개(범위 0~7), .
gwesp를 넣으면 평균 139.4(114~172), 로 내려온다.
차수 — gwesp가 거의 다 고쳤다 (Degree: GWESP Nearly Fixes It)
| 차수 | 관측 | 쌍 독립 평균 | +gwesp 평균 | ||
|---|---|---|---|---|---|
| 0 (외톨이) | 524 | 434.42 | 0.00 | 553.62 | 0.24 |
| 1 | 403 | 492.97 | 0.00 | 404.53 | 1.00 |
| 2 | 271 | 310.37 | 0.00 | 246.48 | 0.12 |
| 3 | 128 | 142.54 | 0.22 | 130.37 | 0.80 |
| 4 | 85 | 55.37 | 0.00 | 65.46 | 0.02 |
| 5 | 30 | 17.64 | 0.02 | 32.48 | 0.80 |
| 6 | 13 | 5.68 | 0.00 | 15.49 | 0.66 |
| 7 | 5 | 1.65 | 0.02 | 7.26 | 0.56 |
gwesp를 넣으니 차수 4 한 칸()만 남는다.5-7 가라테에서는
gwesp가 차수를 전혀 못 고쳤다(차수 2 칸이 ).
같은 항이 자료에 따라 다르게 작동한다 — 그래서 매번 채점해야 한다.
gwesp를 넣어도 여전히 이다
(관측 83/24/8 vs 모의 31.6/2.5/0.1). 뭉침의 양은 맞췄지만 진한 뭉침은 못 만든다.
② 거리 분포는 3~14가 ~0.04로 여전히 어긋난다.
③ 연결되지 않은 쌍이 관측 969,152개인데 쌍 독립 모의는 851,835개 — 모형이 망을 너무 많이 잇는다.FMH는 아직 "잘 맞는 모형"이 아니다. AIC가 902 줄었다는 것은 "더 나아졌다"이지 "이제 맞다"가 아니다.
12. 세 도구를 언제 쓰는가 (Which Tool When)
| QAP 로지스틱 | ERGM (쌍 독립) | ERGM (+의존 항) | |
|---|---|---|---|
| 계수 | 완전히 같다 ( 이내) | 다르다 (동질성 ~) | |
| 값의 근거 | 이름표 순열 | 모형 기반 Wald | MCMC 기반 Wald |
| 허브가 많을 때 | 안전 | 1종 오류 12.6% | 의존을 모형화 |
| 작은 학급() | 의 해상도 한계 | 가능 | 퇴화 위험 |
| 뭉침·소외 재현 | 불가 | 불가 | 가능 |
| 모의·gof | 없음 | 가능 | 가능 |
| 계산 시간(FMH) | QAP 100회 수십 분 | 수 초 | 28.5초 |
| 쓸 자리 | 망↔망 회귀 ("친한 사이가 같은 모둠인가") | 속성 효과만 빠르게 (탐색·초기 확인) | 보고서에 실을 최종 모형 |
① 쌍 독립 ERGM으로 빠르게 계수를 본다(= QAP와 같은 값이다).
②
gof()를 돌려 ESP·차수·거리를 채점한다. 여기서 거의 반드시 실패한다.③ 실패한 칸에 맞는 의존 항(
gwesp, gwdegree, isolates)을 넣고 다시 적합한다.④ 계수가 얼마나 움직였는지 확인한다 — 많이 움직였다면 ①의 결론은 폐기다.
⑤ 망↔망 회귀처럼 ERGM으로 표현하기 어려운 질문이 남으면 그때 QAP를 쓴다.
13. 교실 데이터 적용 설계 (Designing a Classroom Study)
· 관계: "요즘 가장 자주 어울리는 친구를 3~5명 적어 주세요"(지명 상한을 두면 차수 분포가 잘려서
gwdegree 해석이 왜곡된다 — 상한을 적어 둘 것).· 속성: 성별, 이전 학년 반, 통학 구역, 방과후 프로그램, 학업 수준대 등 동질성 후보. 5-4·5-5에서 본 대로
nodematch(끼리끼리)와
nodefactor(활동성)를 반드시 같이 넣어야 서로의 계수를 오염시키지 않는다.· 반이 25명이면 쌍은 300개다. 계수 5~6개까지가 무리 없는 한계다.
1.
edges만 → 밀도 확인2.
+ nodematch류 → 동질성 (5-4)3.
+ nodefactor·absdiff → 활동성·거리 (5-5)4.
gof() → 무엇이 안 맞는지 본다 (5-7)5.
+ gwesp(0.25~0.5, fixed=TRUE) → 뭉침 (5-6). triangle은 절대 쓰지 않는다
— 25명 학급에서 임계값은 로 아주 낮다.6. 외톨이가 안 맞으면
+ isolates 또는 gwdegree7. 4번으로 돌아가 재채점 — 고치다 통과했던 칸이 깨지지 않았는지
□ did not mix / constant 경고가 없었는가
□ 궤적이 0 주변에서 진동하는가 · ESS ≥ 100 · Geweke
□ 안 넣은 특성의 gof를 봤는가 (모형 통계량 는 무시)
□ 차수 0 칸을 확인했는가 (소외 학생 이야기의 근거)
□
seed를 기록했는가 · 계수는 소수 둘째 자리까지만□ [오늘] 의존 항을 넣기 전후로 동질성 계수가 얼마나 움직였는가
□ [오늘] 허브(인기 학생)가 뚜렷하면 쌍 독립 값을 믿지 말 것
· 계수 대신 오즈비로: "같은 이전 반 출신끼리는 친구가 될 오즈가 3.1배입니다."
· gof가 통과한 영역 안에서만: "뭉치는 정도와 친구 수 분포는 잘 재현하지만, 공통 친구가 셋 이상인 진한 무리는 못 만듭니다. 그 부분 해석은 조심해야 합니다."
· 의존 항 전후 비교를 밝힌다: "뭉침을 함께 고려하면 성별 효과가 절반으로 줄어듭니다. 즉 '남학생이 친구가 적다'기보다 '남학생 무리가 덜 뭉친다'에 가깝습니다."
· 모형은 사람 이름을 말하지 않는다: 외톨이가 몇 명인지는 재현해도 "누가 외톨이가 될지"는 예측하지 않는다. 개별 학생 판단은 관찰과 상담의 몫이다.
14. 5단계 정리 (Stage 5 Wrap-up)
| 단원 | 한 문장 |
|---|---|
| 5-1 | 만드는 일(4단계)에서 추정하는 일로 — 자료가 먼저 있고 모형을 맞춘다. |
| 5-2 | . 는 거의 언제나 계산 불가. |
| 5-3 | 계수를 읽는 유일한 올바른 방법은 변화 통계량 와 조건부 로그오즈. |
| 5-4 | nodematch — 동질성. 계수 → 오즈비. 3-7의 E-I 지수를 회수한다. |
| 5-5 | nodefactor·absdiff — 활동성과 선택성은 서로의 계수를 오염시킨다. |
| 5-6 | triangle은 퇴화한다. 를 넘으면 완전망. 대안은 gwesp. |
| 5-7 | 를 못 더해도 비(比)는 계산된다(MCMC). gof의 절반(모형 통계량)은 읽을 가치가 없다. |
| 5-8 | 쌍 독립이면 QAP=ERGM. 다른 건 값. 의존 항을 넣으면 동질성이 24~55% 줄어든다. |
망 자료에서 "무엇이 무엇에 영향을 주는가"를 말하려면, 사람의 속성과 망 자신의 구조를 동시에 모형에 넣어야 한다. 둘 중 하나를 빼면 빠진 쪽의 몫이 남은 쪽 계수로 흘러들어 간다 — 그리고 그 크기는 오늘 본 대로 결론을 바꿀 만큼 크다.
15. 연습문제 (Exercises)
여학생 1·2·3·4, 남학생 5·6·7. 친구 관계 7개: (1,2) (1,3) (2,3) (2,4) (5,6) (5,7) (4,5).
(가) 쌍은 몇 개인가? 그중 동성 쌍은 몇 개인가? 2×2 표를 만들어라.
(나) , , 오즈비, , Wald 를 닫힌 형태로 구하라.
(다) 이름표를 섞는 방법은 몇 가지인가? (동성 간선 수)의 순열 분포를 구해 정확한 QAP 를 내라. (힌트: §5처럼 동성 쌍 수가 항상 같은지 먼저 확인할 것.)
(라) 초기하 분포로 와 를 구하고, 과 를 비교하라. 6명 예제(§6)와 어느 쪽이 더 큰가가 같은가?
§16 해설
(가) 학년 일치 계수 , 인종 일치 을 오즈비로 바꾸고, 오즈비가 몇 % 줄었는지 구하라. 계수의 감소율()과 오즈비의 감소율이 왜 다른가?
(나) 남학생 수 계수가 이다. 남·남 쌍이 여·여 쌍에 비해 갖는 오즈의 배수를 두 모형에서 각각 구하라(힌트:
nodefactor의 변화 통계량은
그 쌍의 남학생 수이므로 남·남이면 2다).(다) 학부모 협의회에 어느 모형의 숫자를 보고할 것인가. 한 문단으로 근거를 쓰되, §11의 gof 결과에서 말하면 안 되는 것도 한 가지 지적하라.
§16 해설 먼저 풀고 나서 §16 해설과 맞춰 볼 것.
어떤 연구자가 "QAP가 정말 필요한가"를 확인하려고 이런 실험을 했다.
① 우리 반 친구망 를 관측한다. ② 같은 반 아이들의 같은 모둠 여부 행렬을 로 만든다. ③ 의 행·열을 무작위 순열로 섞어 를 만든다. ④ 를 에 회귀하면 참 효과가 0이므로, 고전 가 5%보다 크게 나오면 "고전 검정도 괜찮다"고 결론짓는다. (가) 이 설계는 §7에서 내가 처음에 저지른 실수를 피했는가? 이유는?
(나) 그런데도 이 실험으로는 "고전 검정이 괜찮다"를 일반적으로 결론지을 수 없다. 왜인가? §7의 두 줄짜리 표를 근거로 답하라.
(다) 이 연구자가 실제로 확인해야 할 것은 무엇인가? 한 줄로 절차를 고쳐 써라.
§16 해설 먼저 풀고 나서 §16 해설과 맞춰 볼 것.
16. 해설과 답 (Solutions)
연습 1 해설 (Exercise 1)
(가) 21쌍을 전부 쓴다. . 동성 쌍은 개, 이성 쌍은 개다(합 21 ✓).
| # | 쌍 | 성별 | # | 쌍 | 성별 | # | 쌍 | 성별 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | (1,2) | 여여 | 1 | 1 | 8 | (2,5) | 여남 | 0 | 0 | 15 | (5,6) | 남남 | 1 | 1 |
| 2 | (1,3) | 여여 | 1 | 1 | 9 | (3,5) | 여남 | 0 | 0 | 16 | (1,7) | 여남 | 0 | 0 |
| 3 | (2,3) | 여여 | 1 | 1 | 10 | (4,5) | 여남 | 0 | 1 | 17 | (2,7) | 여남 | 0 | 0 |
| 4 | (1,4) | 여여 | 1 | 0 | 11 | (1,6) | 여남 | 0 | 0 | 18 | (3,7) | 여남 | 0 | 0 |
| 5 | (2,4) | 여여 | 1 | 1 | 12 | (2,6) | 여남 | 0 | 0 | 19 | (4,7) | 여남 | 0 | 0 |
| 6 | (3,4) | 여여 | 1 | 0 | 13 | (3,6) | 여남 | 0 | 0 | 20 | (5,7) | 남남 | 1 | 1 |
| 7 | (1,5) | 여남 | 0 | 0 | 14 | (4,6) | 여남 | 0 | 0 | 21 | (6,7) | 남남 | 1 | 0 |
| 간선 없음 | 간선 있음 | 합 | |
|---|---|---|---|
| 이성 쌍 | 12 | ||
| 동성 쌍 | 9 | ||
| 합 | 14 | 7 | 21 |
(나) 닫힌 형태. 전개를 전부 쓰면:
| 양 | 전개 | 값 | 왜 그 값인가 |
|---|---|---|---|
| 이성 오즈 | 0.0909091 | 이성 12쌍 중 친구가 1쌍뿐 | |
| 동성 오즈 | 2 | 동성 9쌍 중 6쌍이 친구 | |
| 오즈비 | 22 | 2 ÷ 0.0909091 = 22 | |
| 이성 쌍의 기준 로그오즈 | |||
| 동성이면 더해지는 양 | |||
| 1.2613124 | 네 항 중 이 혼자 63%를 차지한다 | ||
| Wald | 2.450656 | ||
| Wald | 0.014260 | "유의하다"고 말한다 |
glm·ergm MPLE 모두 같은 값을 낸다(넷째 자리까지 일치).
(다) 순열. 여 4명을 고르는 방법은 가지. 어느 분할이든 동성 쌍 수는 로 항상 같다(§5의 확인 절차). 간선도 7개 고정이므로 2×2 표가 하나로 결정되고, 은 의 증가함수다. 35가지를 세면:
| 1 | 2 | 3 | 4 | 5 | 6 | 합 | |
|---|---|---|---|---|---|---|---|
| 가짓수 | 2 | 10 | 15 | 4 | 2 | 2 | 35 |
Wald 의 4배다. 6명 예제와 방향이 같다 — 고전이 더 유의하다고 말한다.
그리고 여기서도 가능한 최소 는 이다(관측 분할과 그 여집합). 7명 학급에서는 QAP로 5% 유의를 낼 수 없다.
(라) 두 자의 비교. , , :
순열 쪽은 (다)의 분포에서:
, — 1.069배.
, .
방향은 6명 예제와 같다(순열 쪽이 더 넓다). 다만 배수는 1.157 → 1.069로 줄었다 — 사람이 늘수록 쌍 사이의 의존이 상대적으로 옅어지기 때문이다.
연습 2 해설 (Exercise 2)
(가) 오즈비. 계수는 로그오즈비이므로 를 씌운다.
| 항 | 쌍 독립 | +gwesp | 계수 감소율 | 오즈비 감소율 |
|---|---|---|---|---|
| 학년 일치 | ||||
| 인종 일치 |
왜 감소율이 다른가: 는 비선형이다. 오즈비의 비는 로 계수의 차가 지배하지 계수의 비가 지배하지 않는다. 학년은 차가 라 (), 인종은 차가 라 (). 계수 감소율이 둘 다 로 같았던 것은 우연이다.
(나) 남·남 쌍. nodefactor("Sex")는 기준(여)을 빼고
그 쌍의 남학생 수를 변화 통계량으로 갖는다. 여·여면 0, 여·남이면 1, 남·남이면 2다.
따라서 여·여 쌍 대비 로그오즈 차이는 다.
| 쌍 | 변화 통계량 | 쌍 독립: | +gwesp: |
|---|---|---|---|
| 여·여 (기준) | 0 | 1 | 1 |
| 여·남 | 1 | ||
| 남·남 | 2 |
말로 바꾸면 "남학생끼리는 친구가 될 오즈가 25.6% 낮다" → "12.3% 낮다"로 효과가 반토막이다. 그리고 도 0.00018 → 0.023으로 올라가, 흔한 보정(예: 항 7개에 대한 Bonferroni )을 적용하면 유의하지 않게 된다.
(다) 무엇을 보고할 것인가.
① gof: 쌍 독립 모형은 관측 삼각형 169개에 대해 평균 1.89개()를 만들고 차수 여덟 칸 중 일곱 칸이 어긋난다. 이 학교를 닮지 않은 모형의 계수다.
② AIC 12952 → 12050().
③ 계수가 크게 움직였다는 사실 자체가 쌍 독립 모형이 뭉침의 몫을 속성 계수로 떠넘기고 있었다는 증거다(§10).
다만 보고할 때 "우리 모형이 이 학교를 잘 재현한다"고 말하면 안 된다. §11에서 확인했듯 +gwesp 모형도 ESP 2 이상(관측 83/24/8 vs 모의 31.6/2.5/0.1)과 거리 3~14를 여전히 못 맞춘다. 정확히는 "친구 수 분포와 뭉침의 총량은 재현하지만, 공통 친구가 셋 이상인 진한 무리와 전체 도달 거리는 재현하지 못한다"까지 말해야 한다.
연습 3 해설 (Exercise 3)
sample_degseq가 각 사람의 차수를 그대로 두는 바람에
와 가 "허브가 같은 자리에 있다"는 진짜 관계를 갖게 된 것이었다
(겹침 의 평균이 10.84가 아니라 26.95로 나왔다).이 연구자는 ③에서 행·열을 무작위 순열로 섞었으므로 사람 이름표가 지워졌고, 와 의 참 연관은 정확히 0이다. 설계 자체는 옳다.
· 허브 있는 망끼리: 기각률 12.6% (고전이 무너짐)
· 허브 없는 끼리: 기각률 4.0% (고전이 멀쩡함)
로 정반대 결론을 낸다. 게다가 노드 속성(16/18 분할)에서는 2.6%로 오히려 보수적이었다.
"우리 반 모둠 행렬"은 대개 블록 구조(모둠 안은 전부 1, 밖은 전부 0)라 차수가 균질하다 — §7의 두 번째 줄에 가까운 조건이다. 그래서 이 실험은 "고전이 괜찮다"가 나올 가능성이 높은 쪽만 골라 본 것이고, 인기 학생이 뚜렷한 친구망끼리의 회귀에는 그 결론을 옮길 수 없다.
실제 와 를 그대로 두고 이름표만 수천 번 섞어 순열 분포를 만든 뒤, 그 sd를 고전 SE와 비교한다 — 비가 1에서 멀면 고전 를 버리고 순열 를 쓴다. 이것은 실험이 아니라 그 자료에 대한 QAP 그 자체다. 즉 "QAP가 필요한가"를 미리 시험할 필요가 없다 — QAP를 돌리면 답이 같이 나온다. §7 그림 75(가)가 바로 그 비교이고, 6명 예제에서는 1.157배, 7명에서는 1.069배, 가라테 망끼리에서는 1.271배였다.
STUDY_PLAN.md의
다음 단계로 넘어가기 전에, 5단계 전체를 우리 반 자료 한 벌로 처음부터 끝까지 돌려 보는 것을 권한다.
오늘 §13의 설계표가 그 지도다.