SNA 입문 · R로 시작하기 차례

9편Interpretation and Common Pitfalls

담임이 읽는 법과 흔한 함정

SNA 입문 · R로 시작하기STAGED+ 스터디

9. 담임이 읽는 법 — 해석 종합 (Putting It Together)

지금까지 계산한 것을 학급에 대한 다섯 문장으로 압축한다. 분석의 목적은 표를 만드는 게 아니라 여기까지 오는 것이다.

발견근거 숫자실천
① 남녀가 거의
완전히 갈렸다
E-I = −0.84 (성별 넘는 지명 88개 중 7개). 커뮤니티 5개가 모두 성별 순수. Q = 0.43879세에서는 전형적. 다만 성별 섞은 모둠이 겉도는 이유를 설명해 준다. 섞으려면 아래 ③의 다리 학생을 지렛대로 쓴다
② 절대 강자는
없다
연결정도 중심화 0.275, 차수 동류성 −0.0996인기가 흩어져 있고 서열이 없다. 건강한 편
③ 두 무리를 잇는
통로가 두 명
매개 1042 = 128.3, 1006 = 102.0. 단, 절단점은 0개 — 누가 빠져도 학급은 안 쪼개지고 평균 거리만 2.27 → 2.42~2.48로 늘어난다모둠 편성 때 이 둘을 어디 두느냐가 지렛대. 다만 "이 학생이 없으면 학급이 무너진다"고 말할 근거는 없다 — 대체 통로가 서로에게 있다
④ 관계가 이미
안정적이다
상호성(edgewise) 0.5, 전이성 0.457 (밀도 0.135의 3.4배), 4-코어 16명(61%)대부분의 학생이 두꺼운 핵심 안에 있다. 학기 초라면 관계 형성이 잘 진행된 것
⑤ 확인이 필요한
학생 3명
1024(완전 고립), 1030·1036(지명 0개 수신)셋을 같이 묶어 보면 안 된다 — 아래 참조
⑤에 대해 — 이 안내서에서 실무적으로 가장 중요한 구분
  • 1024: 지명 0개 보냄 / 0개 받음. 데이터 자체를 먼저 의심한다. 결석·미응답·설문 거부일 수 있다. 네트워크 분석이 아니라 출석부 확인이 먼저다.
  • 1030 · 1036: 지명을 했는데 하나도 못 받았다. 이건 데이터 문제가 아니다. 관계를 맺으려는 시도가 있었고 응답이 없었다는 관측이다. 그림 3에서 화살표가 밖으로만 나가는 게 보인다.
  • 1033: indegree가 0은 아니라 지표상 눈에 안 띈다. 그런데 연결이 딱 두 개다 — 받은 지명은 1036 하나뿐(호감도 2)이고, 보낸 지명은 1051 하나뿐(호감도 1점, 최저). 1036과 함께 2-코어에 있다. 1036이 전학 가면 1033의 indegree는 0이 되어 위 두 학생과 같은 처지가 된다. (연결이 끊기지는 않는다 — 1051 쪽 지명이 남는다.)
"고립 지표가 0"이라는 같은 결과가 완전히 다른 세 상황에서 나온다. 숫자를 사람으로 되돌려 읽는 이 단계가 분석의 전부다.
마지막으로, 하면 안 되는 것 — 이 표를 그대로 학생·학부모에게 보여 주면 안 된다. "1024는 고립아"라는 라벨은 자기충족적 예언이 된다. 소시오그램은 교사가 자기 관찰을 점검하는 도구이지 진단서가 아니다. 그리고 이 자료는 한 시점의 한 질문일 뿐이다 — 지명 개수를 5개로 제한했다면 그림은 달라졌을 것이다.

10. 초보자가 자주 걸리는 함정 (Common Pitfalls)

증상원인해결
unused argument
(cmode = ...)
igraph가 sna 함수를 가림sna::closeness(...)처럼 ::를 붙인다
근접 중심성이
전부 0
고립자가 있어 d=d = \inftycmode = "suminvdir"
정점이 1000개
넘게 생김
ID를 숫자로 읽음colClasses = "character"
고립자가 사라짐엣지리스트만 줌graph_from_data_frame(..., vertices = nod)
성별이 엉뚱한
학생에게 붙음
행렬 순서 ≠ 노드표 순서identical(rownames(adj), nod$name) 확인
그릴 때마다
그림이 달라짐
배치가 무작위 초기값set.seed() + 좌표를 변수에 저장해 재사용
한글이 □□quartz 장치 폰트 문제ragg::agg_png()를 쓴다
커뮤니티 결과가
매번 바뀜
Louvain은 비결정적cluster_walktrap() 또는 cluster_edge_betweenness()
전이성이 두 패키지에서
다르게 나옴
igraph는 방향 무시방향을 살리려면 sna::gtrans()
중심화가 두 패키지에서
다르게 나옴
centr_degree()loops=TRUE 기본값loops = FALSE로 맞춘다
identical()
FALSE
값은 같고 타입만 integer/doubleall(x == y) 또는 all.equal()
상호성이 0.86이라
이상하게 높음
grecip() 기본값이 "dyadic"measure = "edgewise"
습관 하나만 들인다면새 함수를 쓰기 전에 args()를 찍어 본다.
args(sna::closeness)
function (dat, g = 1, nodes = NULL, gmode = "digraph", diag = FALSE,
    tmaxdev = FALSE, cmode = "directed", geodist.precomp = NULL,
    rescale = FALSE, ignore.eval = TRUE)

위 함정 표의 절반이 기본값을 확인하지 않아서 생긴 것이다. cmode="directed", loops=TRUE, measure="dyadic" — 전부 args() 한 줄이면 미리 보인다.