SNA 이론 · 단계별 학습 차례

들어가기Adjacency Matrix & Basic Measures

인접행렬과 기본 지표 개관

SNA 이론 · 단계별 학습STAGED+ 스터디
이 문서의 위치. 1단계 첫 세션에서 교재 simple example 1.r을 통째로 실행하며 기본 지표를 한 바퀴 둘러본 개관(오리엔테이션) 노트다. 여기 나오는 개념 하나하나는 미시 단원(1-1 ~ 1-9)에서 손 계산으로 다시 파고든다. 행렬 곱셈 A2A^2는 이미 단원 1-2 노트에서 완전 전개했다.

1. 오늘의 네트워크 (Today's Network)

학생 5명(M1,,M5M_1,\dots,M_5)에게 "친하게 지내는 친구"를 지명하게 한 방향 네트워크. 지명 7건:

M1→M2 M1→M3 M1→M5 M2→M3 M3→M1 M3→M4 M5→M1

5명 방향 네트워크
양방향 화살표(M1↔M3, M1↔M5)는 상호 지명, 단방향은 일방 지명. M4는 지명을 받기만 하고 하지 않는다.

2. 인접행렬 (Adjacency Matrix) → 단원 1-1

행 = 지명하는 사람, 열 = 지명받는 사람. A[i,j]=1    iA[i,j]=1 \iff ijj를 지명. 자기 지명 없음(A[i,i]=0A[i,i]=0).

A=M1M2M3M4M5M101101M200100M310010M400000M510000 A=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 0 & 0 & 1 & 0 & 0\\ M_3 & 1 & 0 & 0 & 1 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array}

방향 네트워크는 비대칭일 수 있다: A[1,2]=1A[1,2]=1이지만 A[2,1]=0A[2,1]=0 — 이 어긋남(일방 지명) 자체가 관계 인식의 불일치라는 정보다.

3. 연결정도 (Degree) → 단원 1-4

outdegree(i)=jA[i,j]  (i행의 합),indegree(j)=iA[i,j]  (j열의 합) \text{outdegree}(i)=\sum_{j} A[i,j] \;(i\text{행의 합}), \qquad \text{indegree}(j)=\sum_{i} A[i,j] \;(j\text{열의 합}) indegree = 인기(선택받는 정도), outdegree = 사교적 적극성(선택하는 정도).
M1M2M3M4M5
outdegree (지명함)31201
indegree (지명받음)21211
합계52412

M1은 관계의 허브(out 3, in 2). M4는 out 0 — 스스로 관계를 만들지 않는 학생. 위축인지 만족인지는 수치가 아니라 관찰로 판단할 문제다.

4. 밀도 (Density) → 단원 1-5

방향 네트워크에서 가능한 지명 수는 n(n1)n(n-1)이므로 Δ  =  Ln(n1)  =  75×4  =  0.35(L=실제 엣지 수) \Delta \;=\; \frac{L}{n(n-1)} \;=\; \frac{7}{5\times4} \;=\; 0.35 \qquad (L = \text{실제 엣지 수})
학급 크기가 다르면 밀도를 직접 비교하면 안 된다. 한 사람이 유지할 수 있는 관계 수에는 한계가 있어 nn이 클수록 분모 n(n1)n(n-1)만 커지고 밀도는 자연히 낮아진다. 같은 반의 학기 초 vs 학기 말 비교처럼 같은 크기끼리 쓰는 지표.

5. 측지거리 (Geodesic Distance) → 단원 1-6

d(i,j)d(i,j) = ii에서 jj로 가는 최단 경로의 길이(지명 방향을 따라감). 도달 불가면 \infty.

D=M1M2M3M4M5M101121M220123M312012M40M512230 D=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 2 & 1\\ M_2 & 2 & 0 & 1 & 2 & 3\\ M_3 & 1 & 2 & 0 & 1 & 2\\ M_4 & \infty & \infty & \infty & 0 & \infty\\ M_5 & 1 & 2 & 2 & 3 & 0 \end{array}
  • d(2,5)=3d(2,5)=3: M2→M3→M1→M5 — M2의 소식이 M5까지 가려면 세 다리.
  • M4의 행이 전부 \infty: M4가 지명한 사람이 없으니 M4에게서 출발하는 정보는 아무에게도 못 간다. 반대로 M4의 열은 유한 — 남들은 M4에게 닿을 수 있다.

6. 도달가능성과 컴포넌트 (Reachability & Components) → 단원 1-7

도달가능성 행렬: R[i,j]=1    d(i,j)<R[i,j]=1 \iff d(i,j)<\infty.

기준정의이 네트워크의 결과
약한 연결방향 무시하고 이어져 있으면 같은 덩어리전원 1개 컴포넌트
강한 연결서로 오갈 수 있어야 같은 덩어리{M1,M2,M3,M5}\{M_1,M_2,M_3,M_5\} + {M4}\{M_4\}
개관 세션에서 가장 중요한 발견: 소시오그램이 겉보기에 다 이어져 있어도(약한 연결 1덩어리), 방향을 존중하면 관계의 '흐름'에서 빠져 있는 학생(M4)이 드러난다. 그림만 보지 않고 분석을 하는 이유가 여기에 있다.

7. 행렬 거듭제곱 A2A^2 (Matrix Powers) → 단원 1-2 (완료)

(A2)[i,j]=kA[i,k]A[k,j](A^2)[i,j]=\sum_k A[i,k]A[k,j] = ii에서 jj로 가는 2단계 경로의 수. 대각선 (A2)[i,i](A^2)[i,i]는 각자의 상호 지명 수가 된다:

diag(A2)=(2,0,1,0,1),상호 쌍 수=12i(A2)[i,i]=2쌍 (M1–M3, M1–M5) \operatorname{diag}(A^2)=(2,\,0,\,1,\,0,\,1), \qquad \text{상호 쌍 수}=\tfrac{1}{2}\textstyle\sum_i (A^2)[i,i] = 2\text{쌍 (M1–M3, M1–M5)}

항별 완전 전개와 모든 경로 목록은 단원 1-2 노트 참고.

8. sna ↔ igraph 문법 대조 (Syntax Comparison)

교재(2010)는 sna 중심이지만 현재 표준은 igraph라 둘을 병행한다. 두 패키지의 결과가 일치함을 확인했다.

개념snaigraph 현대 문법igraph 구식(교재)
행렬→그래프행렬 그대로 사용graph_from_adjacency_matrix()graph.adjacency()
연결정도degree(A, cmode="indegree")degree(g, mode="in")동일
밀도gden(A)edge_density(g)graph.density()
최단거리geodist(A)$gdistdistances(g, mode="out")shortest.paths()
컴포넌트component.dist(A, connected="strong")components(g, mode="strong")clusters()
구식 이름은 아직 동작하지만 deprecation 경고가 뜬다. 교재 코드를 읽을 줄 알되, 직접 쓸 때는 현대 이름을 쓰는 것을 원칙으로 한다.

9. 교실 적용 체크리스트 (Classroom Application Checklist)

오늘 배운 것만으로 가능한 학급 진단:
  1. 설문("친하게 지내는 친구를 적으세요") → 인접행렬 입력
  2. indegree 0인 학생 → 소외 위험 1차 스크리닝
  3. 상호 지명 비율(diag(A2)\operatorname{diag}(A^2)) → 관계의 안정성. 일방 지명이 많으면 관계 인식의 어긋남
  4. 강한 컴포넌트 분석 → 겉보기와 달리 관계 흐름에서 분리된 학생 발견
  5. 밀도 → 학기 초 vs 학기 말 비교로 학급 응집 변화 추적 (같은 반끼리만)

10. 세션 전체 R 코드 (Full R Code for the Session)

library(sna)

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), byrow=TRUE, nrow=5,
            dimnames=list(paste0("M",1:5), paste0("M",1:5)))

degree(A, cmode="outdegree")   # 3 1 2 0 1
degree(A, cmode="indegree")    # 2 1 2 1 1

gden(A)                        # 0.35  (= 7 / 20)

geodist(A)$gdist               # 측지거리 행렬 (M4행은 Inf)
reachability(A)                # 도달가능성 행렬

A %*% A                        # 2단계 경로 수 (단원 1-2)

component.dist(A, connected="weak")$membership    # 1 1 1 1 1
component.dist(A, connected="strong")$membership  # 1 1 1 2 1  ← M4만 별도

# 시각화
set.seed(7)
gplot(A, displaylabels=TRUE, label.pos=5, boxed.labels=FALSE,
      vertex.cex=2.2, vertex.col="lightblue", arrowhead.cex=1.4)

미시 단원 진행 현황은 STUDY_PLAN.md의 1단계 표 참고. 완료: 1-1, 1-2 (노트 02) · 다음: 1-3 A3A^3와 걷기 vs 경로