단원 1-4Degree: Row Sums & Column Sums
연결정도 — 행합과 열합
- 오늘의 질문 (Today's Question)
- 세 가지 연결정도의 정의 (Out-, In-, Total Degree)
- 손 계산 ① 외향 연결정도 = 행합 (Out-Degree by Hand)
- 손 계산 ② 내향 연결정도 = 열합 (In-Degree by Hand)
- 두 합이 같다 — 악수 정리 (Sum of Degrees = Number of Ties)
- 평균 연결정도 (Mean Degree)
- 헷갈리는 이웃 지표들 (Degree vs Related Quantities)
- R 검증 (Verification in R)
- 교실 해석 (Classroom Interpretation)
- 연습문제 (Exercises)
- 연습문제 해설과 답 (Solutions)
1. 오늘의 질문 (Today's Question)
단원 1-2·1-3에서는 행렬을 곱했다. 오늘부터는 더한다. 곱셈이 "몇 걸음 걸어 닿는가"를 세는 연산이라면, 덧셈은 "한 사람에게 화살표가 몇 개 붙어 있는가"를 센다.
답은 행을 따라 더하느냐, 열을 따라 더하느냐에 달려 있고, 이 둘은 전혀 다른 질문이다. 방향 네트워크에서 행과 열을 혼동하면 "친구를 많이 사귀려 하는 학생"과 "친구들이 좋아하는 학생"이 뒤섞인다.
네트워크는 계속 같은 학생 5명이다. 지명 7건:
M1→M2 M1→M3 M1→M5 M2→M3 M3→M1 M3→M4 M5→M1
2. 세 가지 연결정도의 정의 (Out-, In-, Total Degree)
정의. 단원 1-1의 약속대로 은 "가 를 지명함"이다.
의 합에서 움직이는 첨자는 (열 번호)이고 는 고정, 의 합에서 움직이는 첨자는 (행 번호)이고 는 고정이다. 어느 첨자가 움직이는지만 보면 행합인지 열합인지 바로 안다.
| 이름 | 계산 | 세는 것 | 교실 언어 |
|---|---|---|---|
| 외향 연결정도 out-degree | 행합 | 내가 지명한 사람 수 | 내가 좋아한다고 말한 친구 수 |
| 내향 연결정도 in-degree | 열합 | 나를 지명한 사람 수 | 인기 — 친구들이 나를 고른 횟수 |
| 전체 연결정도 total degree | 행합 + 열합 | 붙어 있는 화살표 총수 | 관계에 얼마나 얽혀 있는가 |
"인기"는 내향 연결정도다. 자기가 친구를 많이 적어 낸 학생(외향 큼)과 친구들이 많이 적어 준 학생(내향 큼)은 다른 학생일 수 있다. 오늘 예제에서 실제로 갈린다.
3. 손 계산 ① 외향 연결정도 = 행합 (Out-Degree by Hand)
은 의 1행을 가로로 훑으며 다 더한다. 0인 항도 빼지 않고 다섯 항 전부 쓴다:
다섯 학생 모두 같은 방식으로. 각 항이 어느 지명인지까지 적는다:
| 합 | 어떤 지명인가 | ||||||
|---|---|---|---|---|---|---|---|
| M1 | 0 | 1 | 1 | 0 | 1 | 3 | M1→M2 M1→M3 M1→M5 |
| M2 | 0 | 0 | 1 | 0 | 0 | 1 | M2→M3 |
| M3 | 1 | 0 | 0 | 1 | 0 | 2 | M3→M1 M3→M4 |
| M4 | 0 | 0 | 0 | 0 | 0 | 0 | 없음 — 아무도 지명하지 않았다 |
| M5 | 1 | 0 | 0 | 0 | 0 | 1 | M5→M1 |
이 뜻하는 것. 단원 1-3에서 의 M4 행이 전부 0이었던 이유가 바로 이 한 숫자다. 나가는 화살표가 없으면 어떤 길이의 걷기도 시작할 수 없다. 행합 0 ⟺ 어떤 에서도 그 행은 0.
4. 손 계산 ② 내향 연결정도 = 열합 (In-Degree by Hand)
이번에는 열을 세로로 훑는다. 은 "M1을 지명한 사람이 몇 명인가":
첫 항의 첨자가 로 앞자리가 변한다는 점을 눈으로 확인할 것. §3에서는 뒷자리가 변했다.
| 합 | 누가 지명했나 | ||||||
|---|---|---|---|---|---|---|---|
| M1 | 0 | 0 | 1 | 0 | 1 | 2 | M3, M5 |
| M2 | 1 | 0 | 0 | 0 | 0 | 1 | M1 |
| M3 | 1 | 1 | 0 | 0 | 0 | 2 | M1, M2 |
| M4 | 0 | 0 | 1 | 0 | 0 | 1 | M3 |
| M5 | 1 | 0 | 0 | 0 | 0 | 1 | M1 |
두 벡터를 나란히 놓고 읽기 (Reading Both Together)
| 학생 | 내가 지명 | 나를 지명 (인기) | 읽기 | |
|---|---|---|---|---|
| M1 | 3 | 2 | 5 | 가장 활발하고 인기도 최고 — 중심 인물 |
| M2 | 1 | 1 | 2 | 조용한 편, 균형 |
| M3 | 2 | 2 | 4 | M1과 함께 인기 1위 (2표), 지명도 함 |
| M4 | 0 | 1 | 1 | 지명받았지만 본인은 아무도 지명 안 함 |
| M5 | 1 | 1 | 2 | M1과만 연결 — 주변부 |
5. 두 합이 같다 — 악수 정리 (Sum of Degrees = Number of Ties)
두 벡터의 합을 각각 구해 보면:
우연이 아니다. 둘 다 행렬의 모든 칸을 한 번씩 더한 것이기 때문이다. 더하는 순서만 다르다:
그리고 그 값은 1의 개수 = 지명(엣지)의 총 개수 = 7이다. "가로로 먼저 더하고 세로로 합치기"와 "세로로 먼저 더하고 가로로 합치기"가 같다는, 아주 단순하지만 검산에 유용한 사실이다.
검산 습관. 손으로 연결정도를 구한 뒤 두 벡터의 합이 서로 같은지 확인하라. 다르면 어딘가에서 칸을 빼먹었거나 두 번 셌다는 뜻이다. 무방향 네트워크에서는 이 값이 엣지 수의 2배가 되는데(단원 1-8), 사람 수만큼 악수를 세면 악수마다 두 번 세어지기 때문이다 — 그래서 악수 정리라 부른다.
6. 평균 연결정도 (Mean Degree)
§5의 항등식 때문에 외향 평균과 내향 평균은 언제나 같다. "평균적으로 한 학생이 1.4명을 지명했고, 평균적으로 1.4표를 받았다"는 같은 사실의 두 표현이다. 따라서 평균 연결정도는 방향을 구별하지 못한다 — 학급의 활발함 정도를 나타내는 한 숫자일 뿐이다. 누가 인기 있는지는 반드시 벡터를 봐야 한다.
참고로 이 값은 다음 단원의 밀도와 직결된다: , 가능한 최대 지명 수는 명이므로 — 이것이 곧 밀도다. → 단원 1-5에서 다룸
7. 헷갈리는 이웃 지표들 (Degree vs Related Quantities)
연결정도와 비슷해 보이지만 다른 것을 세는 값들을 한 표에 모아 구별해 둔다. 지금까지 배운 것이 전부 여기 모인다:
| 값 | 계산 | M1의 값 | 세는 것 |
|---|---|---|---|
| 의 1행 합 | 3 | M1이 지명한 사람 수 | |
| 의 1열 합 | 2 | M1을 지명한 사람 수 | |
| 의 대각 | 2 | 상호 지명 수 (M1↔M3, M1↔M5) | |
| 의 대각 | 1 | M1이 참여한 삼각 순환 수 | |
| 의 1행 합 | 4 | 2걸음 걷기의 수 (사람 수가 아님) |
의 행합은 "친구의 친구 수"가 아니다. 의 1행은 이고 합은 4이지만, 이 4는 걷기의 개수다. 단원 1-3에서 본 대로 그중 2개는 제자리로 돌아오는 걷기다. "몇 명과 2걸음 안에 이어지는가"를 세려면 도달 가능한 사람 수를 세야 한다. → 단원 1-7 도달가능성
8. R 검증 (Verification in R)
A <- matrix(c(0,1,1,0,1,
0,0,1,0,0,
1,0,0,1,0,
0,0,0,0,0,
1,0,0,0,0), 5, 5, byrow = TRUE)
dimnames(A) <- list(paste0("M",1:5), paste0("M",1:5))
rowSums(A) # M1 M2 M3 M4 M5 → 3 1 2 0 1 외향
colSums(A) # M1 M2 M3 M4 M5 → 2 1 2 1 1 내향
rowSums(A) + colSums(A) # 5 2 4 1 2 전체
sum(A) # 7 ← 지명 총수
sum(rowSums(A)) == sum(colSums(A)) # TRUE ← §5 검산
mean(rowSums(A)) # 1.4
# sna 패키지는 cmode 인자로 세 가지를 한 함수로 처리한다
library(sna)
degree(A, cmode = "outdegree") # 3 1 2 0 1
degree(A, cmode = "indegree") # 2 1 2 1 1
degree(A, cmode = "freeman") # 5 2 4 1 2 ← 기본값, 전체 연결정도
함정. sna::degree(A)를 인자 없이 부르면 전체 연결정도(freeman)가 나온다.
"인기"를 보려 했는데 외향+내향이 섞인 값을 보게 되므로, 방향 데이터에서는
항상 cmode를 명시하는 습관이 안전하다.
igraph에서는 degree(g, mode = "in") / "out" / "all"이다.
9. 교실 해석 (Classroom Interpretation)
① 인기는 열합으로만 본다. 설문지를 걷어 "친구 이름을 많이 쓴 학생"을 세는 것은 외향 연결정도이고, 이는 성실성·사교성·설문 이해도에 좌우된다. 학생의 사회적 위치를 보려면 내향 연결정도(받은 표)를 봐야 한다. M1과 M3이 각각 2표로 인기 1위인데, M1은 3명을 지명했고 M3은 2명을 지명했다 — 인기 순위와는 무관하다.
② 외향 0은 "고립"이 아니다. M4는 이다. M3이 M4를 지명했으므로 친구가 없는 학생이 아니다. 다만 본인이 아무 이름도 적지 않았다. 설문 미응답, 이름 쓰기를 꺼림, 실제로 특정 친구를 고르지 못함 — 모두 가능하다. 숫자로는 구별되지 않으니 담임의 확인이 필요한 지점이다.
③ 진짜 고립 후보는 내향 0이다. 아무도 지명하지 않은 학생, 즉 인 열이 전부 0인 학생이 사회적 고립 위험군이다. 우리 예제에는 없다(모두 최소 1표). 실제 학급 데이터에서는 이 열합 0인 학생을 가장 먼저 확인한다.
④ 외향과 내향의 차이가 말해 주는 것. 를 보면 M1은 (지명을 더 많이 함), M4는 (받기만 함)이다. 차이가 크게 양수인 학생은 관계를 원하지만 아직 받지 못하는 상태일 수 있고 (일방 지명이 많다는 뜻 — 단원 1-2의 로 확인), 크게 음수인 학생은 주변의 관심은 받지만 본인은 관계 표현을 안 하는 상태다.
⑤ 평균 1.4의 의미. "친구 3명을 적어라"고 했는데 평균이 1.4라면 많은 학생이 3명을 채우지 못했다는 뜻이다. 학급 전체의 관계 밀도가 낮거나, 설문 상황이 편안하지 않았을 수 있다. 평균은 개인이 아니라 학급을 진단하는 숫자다.
10. 연습문제 (Exercises)
문제 1. 아래 상황을 반영해 지명 한 건을 추가한 행렬 을 생각하자 — M4가 M1을 지명했다 (즉 , 나머지는 와 같다). 이때 ① 와 두 벡터를 다시 구하고 ② 지명 총수와 평균 연결정도가 어떻게 바뀌는지 쓰고 ③ 단원 1-3에서 "M4 행이 전부 0이라 의 M4 행도 0"이었던 사실이 이제 어떻게 되는지 판단하시오.
문제 2. 원래 행렬 에서 이 가장 큰 학생은 M1과 M3(각 2표)로 동점이다. "인기 1위"를 하나만 뽑아야 한다면 어떤 추가 근거를 볼 수 있는지, 지금까지 배운 값 (, , , ) 중에서 골라 각각 M1·M3의 값을 비교해 판단하시오. 정답이 하나로 정해지지 않아도 좋다 — 어떤 값을 근거로 삼았는지를 쓰는 것이 문제의 목적이다.
먼저 스스로 풀고 §11 해설과 맞춰 볼 것.
11. 연습문제 해설과 답 (Solutions)
11-1. 문제 1 — 지명 한 건이 바꾸는 것 (Adding One Tie)
무엇이 달라지는가. 로 M4 행에 1이 하나 생긴다:
① 두 벡터 다시 구하기. 바뀌는 칸은 하나뿐이므로, 그 칸이 속한 4행과 1열만 다시 더하면 된다:
| 무엇 | 전개 | 이전 | 이후 |
|---|---|---|---|
| 0 | 1 | ||
| 2 | 3 | ||
| 나머지 | 해당 행·열에 변화 없음 | 그대로 | |
답 ① ,
답 ② 지명 총수 , 평균 연결정도 . 검산: , — 두 합이 같다(§5). ✓
답 ③ 더 이상 0이 아니다. 이 되었으므로 M4에서 출발하는 걷기가 생긴다. 예를 들어 M4→M1→M3→M4는 3걸음이고, 세 학생이 모두 달라 삼각 순환이다. 즉 이 되어 M4가 순환에 참여하게 된다.
11-2. 문제 2 — 동점을 가르는 근거 (Breaking a Tie)
M1과 M3의 값을 지금까지 배운 모든 지표로 나란히 놓는다(단원 1-2·1-3에서 구한 값):
| 근거 | M1 | M3 | 무엇을 재는가 | 동점을 가르는가 |
|---|---|---|---|---|
| 2 | 2 | 받은 표 | 동점 | |
| 3 | 2 | 내가 지명한 수 | M1 우세 | |
| 5 | 4 | 붙은 화살표 총수 | M1 우세 | |
| 2 | 1 | 상호 지명 수 | M1 우세 | |
| 1 | 1 | 삼각 순환 참여 | 동점 | |
| 행합 | 4 | 3 | 2걸음 걷기 수 | M1 우세 |
답 어떤 근거를 써도 M1이 M3보다 우세하거나 동점이므로, 하나를 뽑아야 한다면 M1이 타당하다. 다만 근거를 밝혀야 한다 — 가장 설득력 있는 것은 : 상호 지명 수 (M1은 2건, M3은 1건)다.
왜 상호 지명이 더 나은 근거인가. 의 2표 안에는 일방 지명(짝사랑)이 섞여 있을 수 있다. M3이 받은 2표는 M1과 M2에게서 온 것인데, M1↔M3은 상호지만 M2→M3은 일방이다(M3은 M2를 지명하지 않았다). 반면 M1이 받은 2표는 M3과 M5에게서 왔고 둘 다 상호다. "서로 친구라고 답한 관계"가 "한쪽만 좋아하는 관계"보다 안정적이므로, 같은 2표라도 질이 다르다.
주의 — 은 인기의 근거가 아니다. "M1이 3명을 지명했으니 더 인기 있다"는 논리는 틀렸다. 자기가 이름을 많이 적은 것은 자신의 행동이지 남들의 평가가 아니다. 위 표에서 ·이 M1 우세로 나오지만, 이것은 인기의 근거가 아니라 활발함의 근거다. 동점을 가를 때 무엇을 재는 값인지 반드시 확인해야 한다.
# 문제 1 검증
Ap <- A; Ap[4,1] <- 1
rowSums(Ap) # 3 1 2 1 1
colSums(Ap) # 3 1 2 1 1
sum(Ap) # 8 → 평균 8/5 = 1.6
diag(Ap %*% Ap %*% Ap) # 2 1 2 1 0 ← 4번째 값이 0에서 1로 (M4가 순환에 참여)
# 문제 2 검증 — 원래 A
diag(A %*% A) # 2 0 1 0 1 ← 상호 지명: M1은 2, M3은 1
rowSums(A %*% A) # 4 2 3 0 3
다음 단원 — 1-5: 밀도(density) — 방향 vs 무방향 .
오늘 구한 평균 1.4를 "가능한 최대"로 나누면 밀도가 된다.
· 이 문서: notes/04_단원1-4_연결정도_행합과_열합.html