카테고리 보관물: 다층분석

Chap03. 다층모형(Multilevel Model)의 우도 추정(Likelihood Estimation)

안녕하세요!

오늘은 다층모형(Multilevel Model)의 우도 추정(Likelihood Estimation)과 그 적용에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

분석 도구로는 jamovi의 사용법을 설명하되, jamovi의 기반이 되는 R 코드를 함께 제시하여 모의 데이터 생성부터 분석, 시각화까지 완벽하게 구현해 드리겠습니다.


1. 다층모형, 왜 필요한가요? (직관적 이해)

1.1 피셔(Fisher)의 형제들 이야기

통계학의 아버지라 불리는 Fisher(1925)는 아주 오래전, 형제(brother) 쌍의 데이터를 분석하면서 급내상관계수(Intraclass Correlation Coefficient, ICC)라는 개념을 도입했습니다.

  • 상황: 형제들은 유전적 특징과 가정환경을 공유합니다. 따라서 형 A의 키가 크면, 동생 B의 키도 클 확률이 높습니다.
  • 문제: 일반적인 회귀분석은 모든 데이터가 서로 독립적(남남)이라고 가정합니다. 하지만 형제 데이터는 서로 ‘의존적’입니다. 이를 무시하면 통계적으로 오류가 발생합니다.

1.2 학교 현장으로의 확장

이 개념을 오늘날 학교로 가져와 볼까요?

  • 형제 = 같은 반 학생들: 같은 선생님, 같은 교실 분위기, 같은 급식을 공유합니다.
  • 가정 = 학급(Class): 학생들은 학급 안에 내재(Nested)되어 있습니다.

우리는 이것을 2수준(2-level) 모형이라고 부릅니다.

  • 1수준 (Level 1): 학생 개인 (형제 중 한 명)
  • 2수준 (Level 2): 학급 (형제 쌍)

이 구조를 무시하면, 마치 학생들의 성적이 온전히 개인의 노력만으로 결정되는 것처럼 착각하게 되어, 교사나 학교의 효과를 과소평가하거나 통계적 유의성을 과대포장하는 실수를 범하게 됩니다.


2. 분석 시나리오 및 데이터 생성

이론을 실제처럼 느끼기 위해 가상의 데이터를 만들어 보겠습니다.

📖 시나리오: ‘행복초등학교’ 수학 성취도 분석

  • 대상: 20개 학급, 총 500명의 6학년 학생.
  • 종속변수(YY): 기말고사 수학 점수.
  • 설명변수(XX): 수학 불안감 (0~10점, 높을수록 불안).
  • 연구문제: 수학 불안감이 수학 점수에 미치는 영향은 학급마다 다른가?

2.1 R을 이용한 모의 데이터 생성 (jamovi에서 열기 가능)

R

# R 코드: 다층모형 데이터 생성
set.seed(123)

# 1. 기본 설정
n_classes <- 20       # 2수준: 학급 수
n_students <- 25      # 1수준: 학급당 학생 수 (균형 설계 가정)
N <- n_classes * n_students

# 2. 2수준(학급) 효과 생성
class_id <- rep(1:n_classes, each = n_students)
# 학급별 평균 성적의 차이 (절편의 변동): u0j ~ N(0, 25)
u0j <- rnorm(n_classes, mean = 0, sd = 5) 
# 학급별 불안감 효과의 차이 (기울기의 변동): u1j ~ N(0, 1)
u1j <- rnorm(n_classes, mean = 0, sd = 1)

# 데이터 프레임 확장을 위해 학급 효과를 학생 수만큼 반복
u0_expanded <- rep(u0j, each = n_students)
u1_expanded <- rep(u1j, each = n_students)

# 3. 1수준(학생) 변수 및 오차 생성
# 수학 불안감 (X): 평균 5, 표준편차 2인 정규분포
Anxiety <- rnorm(N, mean = 5, sd = 2)
# 학생 개인 오차 (eij): eij ~ N(0, 36) -> 표준편차 6
eij <- rnorm(N, mean = 0, sd = 6)

# 4. 고정 효과(Fixed Effects) 설정
beta_0 <- 70  # 전체 평균 수학 점수 (절편)
beta_1 <- -3  # 불안감이 1점 오를 때 수학 점수 변화 (기울기)

# 5. 종속변수(Y) 생성: 수학 점수
# Y_ij = (beta_0 + u0j) + (beta_1 + u1j) * X_ij + e_ij
Math_Score <- (beta_0 + u0_expanded) + (beta_1 + u1_expanded) * Anxiety + eij

# 데이터 프레임 생성
data <- data.frame(
  Class_ID = factor(class_id),
  Student_ID = 1:N,
  Anxiety = Anxiety,
  Math_Score = Math_Score
)

# 데이터 확인
head(data)

# CSV 저장 (jamovi에서 불러오기 위함)
write.csv(data, "chap03.csv", row.names = FALSE)

3. 다층모형의 추정 논리: IGLS 알고리즘

우리가 이 데이터를 jamovi나 R에 넣고 “분석해 줘”라고 할 때, 컴퓨터 내부에서는 어떤 일이 일어날까요? Goldstein 교수는 IGLS (Iterative Generalized Least Squares, 반복 일반화 최소자승법)를 핵심 알고리즘으로 소개합니다.

3.1 탁구 치기 (Ping-Pong) 비유

IGLS는 마치 탁구를 치듯 두 단계 과정을 반복하며 정답을 찾아갑니다.

  1. 고정 효과(β\beta) 추정: “일단 학급 차이는 무시하고(또는 현재 추정된 차이를 감안하고) 전체 평균 회귀선을 그어보자.”
  2. 랜덤 효과(θ\theta) 추정: “방금 그은 선에서 실제 점수들이 얼마나 떨어져 있지? 이 잔차(Residuals)를 가지고 학급 간 분산(σu2\sigma^2_u)과 학생 간 분산(σe2\sigma^2_e)을 계산해보자.”
  3. 반복: 2번에서 구한 분산 정보를 이용해 가중치를 조절하여 다시 1번(회귀선)을 더 정교하게 그립니다. 이 과정을 값이 더 이상 변하지 않을 때까지(수렴) 계속합니다.

3.2 수리적 표현 (Strict)

기본적인 2수준 모형은 다음과 같습니다.

yij=β0+β1xij+uj+ϵijy_{ij} = \beta_0 + \beta_1 x_{ij} + u_j + \epsilon_{ij}

  • ujN(0,σu2)u_j \sim N(0, \sigma^2_u): 학급 효과 (2수준 잔차)
  • ϵijN(0,σϵ2)\epsilon_{ij} \sim N(0, \sigma^2_\epsilon): 학생 효과 (1수준 잔차)

IGLS는 이 모수들을 추정할 때, 편향(Bias)이 발생할 수 있는데, 이를 보정한 것이 바로 우리가 흔히 쓰는 REML (Restricted Maximum Likelihood) 입니다. 데이터 수가 적은 학교 현장 연구에서는 REML이 더 권장됩니다.


4. jamovi 및 R을 활용한 단계별 분석

이제 생성된 데이터를 바탕으로 분석을 수행해보겠습니다. jamovi에서는 Linear Models > Mixed Models 메뉴를 사용합니다.

단계 1: 시각화 (기초선 파악)

먼저 데이터를 눈으로 확인해야 합니다. 학급마다 성적 분포가 다른지 봅니다.

R

# R 시각화 코드
library(ggplot2)
ggplot(data, aes(x = Anxiety, y = Math_Score, group = Class_ID)) +
  geom_point(alpha = 0.3) +
  geom_smooth(method = "lm", se = FALSE, aes(color = Class_ID), size = 0.5) +
  theme_minimal() +
  labs(title = "학급별 수학 불안감과 성취도의 관계",
       subtitle = "학급마다 회귀선(기울기와 절편)이 다름을 볼 수 있습니다.")

이 그래프를 보면, 어떤 반은 전체적으로 점수가 높고(절편 차이), 어떤 반은 불안감이 커져도 점수가 덜 떨어지는(기울기 차이) 패턴을 볼 수 있습니다.

단계 2: 무선형 (Null Model)과 ICC 확인

아무런 설명변수 없이, 오직 학급에 따른 점수 차이만 봅니다.

yij=β0+uj+ϵijy_{ij} = \beta_0 + u_j + \epsilon_{ij}

  • jamovi 설정:
    • Dependent Variable: Math_Score
    • Cluster Variable: Class_ID
    • Covariates: 없음
  • 해석:
    • σu2\sigma^2_u (Level 2 분산): 학급 간 점수 차이.
    • σe2\sigma^2_e (Level 1 분산): 학급 내 학생 간 점수 차이.
    • ICC (급내상관계수) ρ=σu2σu2+σe2\rho = \frac{\sigma^2_u}{\sigma^2_u + \sigma^2_e}: 전체 분산 중 학급이 설명하는 비율. 보통 0.05~0.1 이상이면 다층모형이 필요합니다.

단계 3: 랜덤 절편 모형 (Random Intercept Model)

“모든 반에서 불안감이 성적에 미치는 영향(기울기)은 같지만, 반마다 평균 성적(절편)은 다르다”고 가정합니다.

  • jamovi 설정:
    • Covariates에 Anxiety 추가.
    • Random Effects에 Intercept | Class_ID 체크.
  • 수식: yij=β0+β1xij+u0j+ϵijy_{ij} = \beta_0 + \beta_1 x_{ij} + u_{0j} + \epsilon_{ij}.

단계 4: 랜덤 기울기 모형 (Random Slope Model)

“반마다 평균 성적도 다르고, 불안감이 성적에 미치는 충격도 다르다”고 가정합니다.

  • jamovi 설정:
    • Random Effects에 Anxiety를 추가 (즉, Intercept + Anxiety | Class_ID).
  • 수식: yij=β0+β1xij+u0j+u1jxij+ϵijy_{ij} = \beta_0 + \beta_1 x_{ij} + u_{0j} + u_{1j}x_{ij} + \epsilon_{ij}.
    • 여기서 u1ju_{1j}가 바로 학급별 기울기의 차이입니다.
    • 만약 이 모형이 랜덤 절편 모형보다 적합하다면(예: -2 Log Likelihood 차이 검증), 학급별로 맞춤형 지도가 필요함을 시사합니다.

분석 결과 예시표 (jamovi 스타일 재구성)

효과 (Effects)모수 (Parameter)추정치 (Estimate)의미
고정 효과절편 (β0\beta_0)70.21전체 학생의 평균적인 수학 기초 점수
불안감 (β1\beta_1)-3.05불안감이 1점 오를 때 평균 점수 변화
랜덤 효과학급 분산 (σu02\sigma^2_{u0})26.50학급 간 평균 성적의 차이 (큼)
기울기 분산 (σu12\sigma^2_{u1})1.12학급 간 불안감 영향력의 차이
잔차 분산 (σe2\sigma^2_{e})35.80설명되지 않는 학생 개인의 변동

5. 잔차(Residuals)와 진단: 셜록 홈즈가 되어보자

다층모형을 돌리고 나면, 우리는 각 학교나 학급의 성적표(잔차, uju_j)를 얻을 수 있습니다.

5.1 축소 추정량 (Shrunken Residuals)

단순히 그 반의 평균을 쓰는 게 아니라, 전체 평균 쪽으로 살짝 당겨진(Shrinkage) 값을 사용합니다.

  • 왜? 학생 수가 적은 학급은 우연에 의해 점수가 튀었을 수 있기 때문입니다. 신뢰도가 낮은(학생 수가 적은) 학급의 추정치를 전체 평균 쪽으로 보정해 줍니다. 이를 통해 더 안정적인 추정이 가능합니다.
  • 수식적으로는 u^j=E(uj|Y,β,θ)\hat{u}_j = E(u_j | Y, \beta, \theta)로 계산됩니다.

5.2 모형 진단

잔차들이 정규분포를 따르는지 확인해야 합니다.

  • Caterpillar Plot (애벌레 그림): 각 학급의 잔차(uju_j)를 순서대로 나열하여 신뢰구간을 봅니다. 0을 포함하지 않는 학급은 평균보다 유의하게 높거나 낮은 학급입니다.
  • QQ Plot: 잔차들이 대각선 직선 위에 잘 놓이는지 확인하여 정규성을 검증합니다.

6. 심화: 복잡한 학교 현실 반영하기

현실은 단순히 ‘반’에만 속하지 않을 수 있습니다. Goldstein 교수는 이를 위한 확장 모형을 제시합니다.

6.1 교차 분류 (Cross-classified) 모형

학생이 ‘학교’에도 속하고, 방과후 ‘학원’에도 속한다면 어떨까요?

  • 학교와 학원은 위계 관계가 아닙니다. (A학교 학생이 모두 B학원에 다니는 게 아님).
  • 이때는 yi(jk)=(Xβ)+uj(school)+uk(academy)+eiy_{i(jk)} = (X\beta) + u_{j}^{(school)} + u_{k}^{(academy)} + e_i 처럼 두 개의 2수준을 동시에 고려해야 합니다.
  • 이때 uju_juku_k를 분리하여 어느 쪽 영향이 더 큰지 분석할 수 있습니다.

6.2 다중 소속 (Multiple Membership) 모형

한 학생이 학기 중에 1반에서 2반으로 전학을 갔다면요?

  • 이 학생은 1반의 영향(50%)과 2반의 영향(50%)을 모두 받았습니다.
  • 가중치(ww)를 사용하여 yi=(Xβ)+wjuj+eiy_i = (X\beta) + \sum w_{j} u_{j} + e_i 형태로 모델링합니다. 이를 무시하면 학교 효과가 과소추정될 수 있습니다.

7. 결론 및 제언

오늘 우리는 Fisher의 형제 연구부터 시작하여 현대의 다층모형(IGLS/MLE)까지 살펴보았습니다.

  • 핵심: 교육 데이터는 계층적(Nested)이며, 이를 무시하면 오류가 발생합니다.
  • 방법: IGLS/MLE 알고리즘은 고정 효과와 랜덤 효과를 탁구 치듯 반복 추정하여 최적의 값을 찾습니다.
  • 확장: jamovi와 R을 통해 랜덤 절편, 랜덤 기울기 모형뿐만 아니라 교차 분류 모형 등으로 확장이 가능합니다.

이 분석 방법을 통해 여러분은 단순히 “어느 학교가 공부를 잘하나?”를 넘어, “어떤 학교 환경이 학생의 불안감을 완충해 주는가?”와 같은 깊이 있는 교육적 질문에 답할 수 있게 됩니다.


참고문헌 (APA Style)

  • Fisher, R. A. (1925). Statistical methods for research workers. London: Oliver and Boyd.
  • Goldstein, H. (1986). Multilevel mixed model analysis using iterative generalized least squares. Biometrika, 73(1), 43–56.
  • Goldstein, H. (2011). Multilevel statistical models (4th ed.). Chichester: Wiley.
  • Goldstein, H., Rasbash, J., Yang, M., Woodhouse, G., Pan, H., Nuttall, D., & Thomas, S. (1993). A multilevel analysis of school examination results. Oxford Review of Education, 19(4), 425–433.
  • Lindley, D. V., & Smith, A. F. M. (1972). Bayes estimates for the linear model. Journal of the Royal Statistical Society: Series B (Methodological), 34(1), 1–41.

Chap02. 다층모형의 표기법과 분석(Multilevel Model Notation and Analysis)

안녕하세요!

오늘은 “다층모형의 표기법과 분석(Multilevel Model Notation and Analysis)”에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

분석 도구로는 jamovi의 사용법을 설명하되, jamovi의 기반이 되는 R 코드를 함께 제시하여 모의 데이터 생성부터 분석, 시각화까지 완벽하게 구현해 드리겠습니다.


1. 들어가며: 다층모형, 도대체 왜 표기법이 중요한가?

다층모형(Multilevel Models, MLM)은 교육학, 생물학, 사회학 등 다양한 분야에서 활용됩니다. 하지만 교재마다, 소프트웨어마다 수식을 쓰는 방식이 달라서 학생들이 처음 접할 때 큰 혼란을 겪습니다.

어떤 책은 회귀분석 식을 하나로 길게 쓰고(복합 표기법), 어떤 책은 1수준 식과 2수준 식을 따로 씁니다(위계적 표기법). 하지만 걱정하지 마세요. 이들은 결국 같은 개념을 다른 그릇에 담은 것일 뿐입니다. 오늘 우리는 가상의 초등학교 데이터를 통해 이 표기법들이 실제 분석에서 어떻게 연결되는지 아주 쉽게 파헤쳐 보겠습니다.


2. 분석 시나리오: 행복초등학교의 수학 성취도

우리는 다음과 같은 교육적 가설을 검증하고자 합니다.

  • 연구 문제: 학생의 수학 불안(Math Anxiety)수학 성취도(Math Achievement)에 부정적인 영향을 미치는가? 그리고 이 관계는 학교의 교사 지지(Teacher Support) 분위기에 따라 달라지는가?
  • 데이터 구조:
    • 1수준 (학생, ii): 50개 학교, 총 1,000명의 학생.
    • 2수준 (학교, jj): 각 학교의 교사 지지 점수.
  • 변수:
    • YijY_{ij}: 수학 성취도 (종속변수)
    • XijX_{ij}: 수학 불안 (1수준 독립변수, AnxietyAnxiety)
    • WjW_{j}: 교사 지지 (2수준 독립변수, SupportSupport)

이 시나리오를 바탕으로 R을 이용해 실제와 유사한 데이터를 생성해 보겠습니다.

[R Code] 모의 데이터 생성

R

# 필요한 패키지 로드
library(MASS)
library(lme4)
library(tidyverse)

set.seed(2026)

# 1. 파라미터 설정
J <- 50          # 학교 수
N_per_J <- 20    # 학교당 학생 수 (총 1000명)
gamma_00 <- 50   # 전체 평균 성취도
gamma_10 <- -5   # 수학 불안의 주효과 (불안 높으면 성적 하락)
gamma_01 <- 10   # 교사 지지의 주효과 (지지 높으면 성적 상승)
gamma_11 <- 3    # 상호작용 효과 (교사 지지가 높으면 불안의 부정적 효과 완화)

tau_0 <- 15      # 절편의 학교 간 분산 (SD)
tau_1 <- 5       # 기울기의 학교 간 분산 (SD)
sigma <- 10      # 학생 개인 오차 (SD)

# 2. 데이터 생성
schools <- data.frame(school_id = 1:J, 
                      support = rnorm(J, 0, 1)) # 교사 지지 (표준화 점수)

# 학교별 랜덤 효과 (절편 u0, 기울기 u1) 생성 (상관관계 0.3 가정)
cov_matrix <- matrix(c(tau_0^2, 0.3*tau_0*tau_1, 
                       0.3*tau_0*tau_1, tau_1^2), 2, 2)
random_effects <- mvrnorm(J, mu = c(0, 0), Sigma = cov_matrix)
schools$u0j <- random_effects[,1]
schools$u1j <- random_effects[,2]

# 학생 데이터 생성 및 병합
data <- expand.grid(student_id = 1:N_per_J, school_id = 1:J) %>%
  left_join(schools, by = "school_id") %>%
  mutate(
    anxiety = rnorm(n(), 0, 1), # 수학 불안 (표준화 점수)
    e_ij = rnorm(n(), 0, sigma), # 개인 오차
    # 다층모형 수식 적용 (데이터 생성의 핵심)
    math_score = (gamma_00 + u0j + gamma_01 * support) + 
                 (gamma_10 + u1j + gamma_11 * support) * anxiety + e_ij
  )

head(data)

# CSV 저장 (jamovi에서 불러오기 위함)
write.csv(data, "chap02.csv", row.names = FALSE)

3. 다층모형의 표기법 완전 정복

이 데이터를 분석하기 위해 모형을 세울 때, 크게 두 가지 방식이 있습니다.

3.1. 위계적 표기법 (Hierarchical/Level Notation)

HLM 소프트웨어나 WinBUGS 같은 베이지안 도구에서 주로 사용합니다. 직관적으로 “수준(Level)”을 나누어 생각하기 좋습니다.

  • 1수준 (학생 수준): 학생 개인의 성적은 그 학교의 평균(β0j\beta_{0j})과 불안이 미치는 영향(β1j\beta_{1j})에 의해 결정됩니다.
    Yij=β0j+β1j(Anxiety)ij+ϵijY_{ij} = \beta_{0j} + \beta_{1j}(Anxiety)_{ij} + \epsilon_{ij}
  • 2수준 (학교 수준): 1수준의 계수들(β\beta)이 학교 특성(교사 지지)에 따라 어떻게 변하는지 설명합니다.
    β0j=γ00+γ01(Support)j+u0j\beta_{0j} = \gamma_{00} + \gamma_{01}(Support)_j + u_{0j}
    β1j=γ10+γ11(Support)j+u1j\beta_{1j} = \gamma_{10} + \gamma_{11}(Support)_j + u_{1j}

WaurimaL의 팁: 이 표기법의 장점은 각 수준에서 어떤 변수가 영향을 미치는지 명확히 보여준다는 점입니다. 특히 “배경 변수”와 “효과”를 구분하기 좋습니다.

3.2. 복합 표기법 (Composite Notation)

SAS(PROC MIXED), SPSS, Stata(xtmixed), R(lmer), jamovi 등이 채택한 방식입니다. 위계적 표기법의 식을 대입하여 하나로 합친 것입니다.

Yij=[γ00+γ01(Support)j+γ10(Anxiety)ij+γ11(Support×Anxiety)ij]+[u0j+u1j(Anxiety)ij+ϵij]Y_{ij} = [\gamma_{00} + \gamma_{01}(Support)_j + \gamma_{10}(Anxiety)_{ij} + \gamma_{11}(Support \times Anxiety)_{ij}] + [u_{0j} + u_{1j}(Anxiety)_{ij} + \epsilon_{ij}]

  • 고정 효과(Fixed Effects): 앞의 대괄호 부분. 전체 평균적인 효과를 의미합니다.
  • 랜덤 효과(Random Effects): 뒤의 대괄호 부분. 학교마다, 학생마다 달라지는 오차(변동)를 의미합니다.

WauriamL의 팁: jamovi나 R을 사용할 때는 이 복합 표기법의 논리를 이해해야 “어떤 변수를 Fixed에 넣고, 어떤 변수를 Random에 넣을지” 결정할 수 있습니다.


4. 단계별 분석 및 jamovi/R 실습

분석은 보통 무조건 모형(기초) \to 랜덤 절편 모형 \to 랜덤 기울기 및 상호작용 모형 순서로 진행합니다.

단계 1: 무조건 평균 모형 (Unconditional Means Model)

아무런 설명 변수 없이, 성적의 변동이 “학교 간 차이” 때문인지 “학생 간 차이” 때문인지만 봅니다.

  • jamovi 실습:
    1. Analyses > Linear Models > Mixed Model 선택
    2. Dependent Variable: math_score
    3. Cluster Variable: school_id
    4. Random Effects: Intercept | school_id 체크 (기본값)
  • R Code:
Rmodel1 <- lmer(math_score ~ 1 + (1 | school_id), data = data)summary(model1)
  • 해석: 결과에서 급내상관계수(ICC)를 계산합니다.
    ρ=σu02σu02+σϵ2\rho = \frac{\sigma_{u0}^2}{\sigma_{u0}^2 + \sigma_{\epsilon}^2}. 만약 ICC가 0.2(20%)라면 성적 차이의 20%는 학교 차이로 설명된다는 뜻입니다.

단계 2: 랜덤 절편 모형 (Random Intercept Model)

학생 수준의 ‘수학 불안’과 학교 수준의 ‘교사 지지’를 투입합니다. 단, 수학 불안의 효과(기울기)는 모든 학교에서 동일하다고 가정합니다.

  • 표기법적 의미: 위계적 표기법에서 β1j=γ10\beta_{1j} = \gamma_{10}으로 두어 학교별 차이(u1ju_{1j})를 없앤 것입니다.
  • jamovi 실습:
    1. Covariates에 anxiety, support 추가.
    2. Fixed Effects에 anxiety, support 이동.
    3. Random Effects에는 여전히 Intercept | school_id만 존재.
  • 변동의 설명(Targeting Variance): ‘교사 지지’는 학교 수준 변수이므로 학교 간 분산(σu02\sigma_{u0}^2)을 줄이고, ‘수학 불안’은 학생 수준 변수이므로 잔차 분산(σϵ2\sigma_{\epsilon}^2)을 줄일 것으로 기대합니다.

단계 3: 랜덤 기울기 및 층위 간 상호작용 모형 (Full Model)

이제 “학교마다 수학 불안의 영향력이 다를 수 있다(u1ju_{1j})”는 가정과, “교사 지지가 그 차이를 설명한다(상호작용)”는 가설을 검증합니다.

  • 수식:
    Yij=γ00+γ01Sup+γ10Anx+γ11(Sup×Anx)+u0j+u1jAnx+ϵijY_{ij} = \gamma_{00} + \gamma_{01}Sup + \gamma_{10}Anx + \gamma_{11}(Sup \times Anx) + u_{0j} + u_{1j}Anx + \epsilon_{ij}
  • jamovi 실습:
    1. Fixed Effects: anxiety, support, 그리고 anxiety * support 상호작용항 추가.
    2. Random Effects: anxietyschool_id 아래로 이동시켜 Random Slope 설정. (즉, u1ju_{1j} 추가).
  • R Code:
Rmodel3 <- lmer(math_score ~ anxiety * support + (1 + anxiety | school_id), data = data) summary(model3)

5. 결과의 해석과 시각화

5.1. 주요 결과 해석

분석 결과표를 볼 때 가장 중요한 것은 고정 효과의 유의성랜덤 효과의 분산 성분입니다.

  1. 고정 효과 (Fixed Effects):
    • Intercept (γ00\gamma_{00}): 평균적인 수학 성취도
    • Support (γ01\gamma_{01}): 교사 지지가 높을수록 성취도가 높아지는가? (주효과)
    • Anxiety (γ10\gamma_{10}): 불안이 높을수록 성취도가 낮아지는가? (주효과)
    • Interaction (γ11\gamma_{11}): 교사 지지가 높은 학교에서는 불안이 성적에 미치는 부정적 영향이 줄어드는가? (조절효과)
  2. 랜덤 효과 (Variance Components):
    • σu02\sigma_{u0}^2 (Intercept Variance): 교사 지지를 고려하고도 남은 학교 간 성적 차이
    • σu12\sigma_{u1}^2 (Slope Variance): 학교마다 ‘불안의 효과’가 얼마나 들쑥날쑥한가? 이 값이 유의하면 학교마다 불안에 대처하는 양상이 다르다는 뜻입니다.

5.2. 시각화 (R을 이용한 개념도)

결과를 이해하기 쉽게 시각화해 보겠습니다. 아래 그래프는 교사 지지(Support)가 높고 낮은 두 학교 유형에서 수학 불안(Anxiety)성취도(Math Score)의 관계가 어떻게 다른지를 보여줍니다.

R

# 필요한 패키지 로드
if(!require(ggplot2)) install.packages("ggplot2")
library(ggplot2)

# 1. 데이터 생성 (앞서 Python 코드의 로직을 그대로 R로 구현)
set.seed(2026)

# X축 데이터: 수학 불안 (Centered) -2에서 +2까지 생성
anxiety <- seq(-2, 2, length.out = 100)

# 시나리오에 따른 예측값 생성
# 학교 A (높은 교사 지지): 기울기 완만 (-2), 절편 높음 (55)
score_high_support <- 55 - 2 * anxiety

# 학교 B (낮은 교사 지지): 기울기 급격 (-8), 절편 낮음 (45)
score_low_support <- 45 - 8 * anxiety

# 메인 효과(두 학교 유형)를 담을 데이터프레임 만들기
main_effects <- data.frame(
  anxiety = rep(anxiety, 2),
  score = c(score_high_support, score_low_support),
  support_type = rep(c("High Teacher Support", "Low Teacher Support"), each = 100)
)

# 랜덤 효과 (배경에 깔릴 20개 개별 학교들의 회귀선) 데이터 생성
n_schools <- 20
random_lines <- data.frame()

for(i in 1:n_schools) {
  # Python 예시와 동일한 분포 사용: 절편 ~ N(50, 5), 기울기 ~ N(-5, 2)
  intercept <- rnorm(1, 50, 5)
  slope <- rnorm(1, -5, 2)
  
  y_values <- intercept + slope * anxiety
  
  temp_df <- data.frame(
    school_id = factor(i),
    anxiety = anxiety,
    score = y_values
  )
  random_lines <- rbind(random_lines, temp_df)
}

# 2. ggplot2를 이용한 시각화 그리기
ggplot() +
  # [Layer 1] 배경: 개별 학교들의 회귀선 (랜덤 효과) - 회색으로 흐리게 처리
  geom_line(data = random_lines, aes(x = anxiety, y = score, group = school_id), 
            color = "gray", alpha = 0.3) +
  
  # [Layer 2] 전경: 교사 지지 수준별 평균 회귀선 (고정 효과 + 상호작용) - 굵고 선명하게
  geom_line(data = main_effects, aes(x = anxiety, y = score, color = support_type, linetype = support_type), 
            linewidth = 1.5) +
  
  # [Layer 3] 색상 및 선 스타일 지정 (파란색 실선 vs 빨간색 점선)
  scale_color_manual(values = c("blue", "red")) +
  scale_linetype_manual(values = c("solid", "dashed")) +
  
  # [Layer 4] 라벨 및 제목 설정
  labs(
    title = "Cross-Level Interaction: Teacher Support x Math Anxiety",
    subtitle = "The moderating effect of teacher support on the anxiety-achievement relationship",
    x = "Math Anxiety (Centered)",
    y = "Math Achievement",
    color = "School Context",
    linetype = "School Context"
  ) +
  
  # [Layer 5] 테마 적용 (깔끔한 논문 스타일)
  theme_bw() +
  theme(
    plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
    plot.subtitle = element_text(size = 12, hjust = 0.5, margin = margin(b = 20)),
    legend.position = "bottom",
    legend.title = element_text(face = "bold"),
    axis.title = element_text(size = 12)
  )

High Support 학교(파란선)에서는 불안이 높아져도 성적이 완만하게 떨어지지만, Low Support 학교(빨간선)에서는 급격하게 떨어지는 것을 볼 수 있습니다. 이것이 바로 γ11\gamma_{11} 상호작용 효과입니다.


6. 결론 및 요약

오늘 우리는 다층모형의 표기법과 분석 방법을 “행복초등학교” 예시를 통해 살펴보았습니다. 핵심을 정리해 드립니다.

  1. 표기법은 결국 하나다: 위계적 표기법(HLM)은 교육적 층위를 이해하기 좋고, 복합 표기법(R, jamovi)은 수리적 모델링에 편리합니다. 두 식은 수학적으로 완전히 동일합니다.
  2. 분산의 설명: 학교 변수는 학교 간 분산(τ00\tau_{00})을, 학생 변수는 학생 내 분산(σ2\sigma^2)을 설명하는 것을 목표로 합니다.
  3. 소프트웨어 활용: jamovi나 R은 복합 표기법을 따르므로, 고정 효과와 랜덤 효과를 구분하여 입력하는 것이 중요합니다.

다층모형은 복잡해 보이지만, “맥락(Context)이 개인(Individual)에게 미치는 영향”을 분석하는 가장 강력한 도구입니다. 이 강의가 여러분의 연구에 도움이 되기를 바랍니다.


References

  • Browne, W. J., Goldstein, H., & Rasbash, J. (2001). Multiple membership multiple classification (MMMC) models. Statistical Modelling, 1(2), 103-124.
  • Bryk, A. S., & Raudenbush, S. W. (1992). Hierarchical linear models: Applications and data analysis methods. Sage.
  • Fitzmaurice, G. M., Ware, J. H., & Laird, N. M. (2004). Applied longitudinal analysis. Wiley-Interscience.
  • Gelman, A., & Hill, J. (2007). Data analysis using regression and multilevel/hierarchical models. Cambridge University Press.
  • Goldstein, H. (1995). Multilevel statistical models. Edward Arnold.
  • Hox, J. (2002). Multilevel analysis: Techniques and applications. Erlbaum.
  • Pinheiro, J. C., & Bates, D. M. (2000). Mixed-effects models in S and S-PLUS. Springer.
  • Scott, M. A., Shrout, P. E., & Weinberg, S. L. (2013). Multilevel model notation: Establishing the commonalities. In The SAGE Handbook of Multilevel Modeling (pp. 21-38). Sage.
  • Singer, J. D. (1998). Using SAS PROC MIXED to fit multilevel models, hierarchical models, and individual growth models. Journal of Educational and Behavioral Statistics, 23(4), 323-355.
  • Singer, J. D., & Willett, J. B. (2003). Applied longitudinal data analysis: Modeling change and event occurrence. Oxford University Press.
  • Snijders, T. A. B., & Bosker, R. (1999). Multilevel analysis: An introduction to basic and advanced multilevel modeling. Sage.

Chap01. The Multilevel Model Framework

안녕하세요!

오늘은 다층모형의 가장 핵심적이고 기초적인 내용인 다층모델 프레임워크에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

분석 도구로는 jamovi의 사용법을 설명하되, jamovi의 기반이 되는 R 코드를 함께 제시하여 모의 데이터 생성부터 분석, 시각화까지 완벽하게 구현해 드리겠습니다.


제1장. 다층모형(Multilevel Models)의 세계: 교실 속 아이들, 학교 속 교실

1. 서론: 왜 우리는 ‘층(Level)’을 고려해야 할까요?

우리가 교육 현장에서 마주하는 데이터는 결코 독립적인 섬처럼 존재하지 않습니다. 전통적인 통계 분석(예: 단순 회귀분석)은 모든 학생이 서로 아무런 관계없이 독립적으로 존재한다고 가정합니다. 하지만 현실은 어떤가요?

“학생은 학급에 속해 있고, 학급은 학교에 속해 있으며, 학교는 교육청(지역)에 속해 있습니다.”

이것이 바로 위계적 구조(Hierarchical Structure) 또는 내재된 구조(Nested Structure)입니다. 만약 우리가 이 구조를 무시하고 분석한다면 어떻게 될까요?

  • 통계적 오류: 같은 반 아이들은 같은 선생님, 같은 분위기를 공유하기 때문에 서로 비슷할 가능성이 큽니다. 이를 무시하면 표준오차(Standard Error)가 잘못 계산되어, 효과가 없는데도 있다고 착각하는(1종 오류) 심각한 실수를 범하게 됩니다.
  • 잘못된 해석: 개인의 특성(지능)과 집단의 특성(학교 풍토)을 뒤섞어 버려, 현상을 제대로 설명하지 못하게 됩니다.

따라서 우리는 개인(1수준)과 집단(2수준)을 동시에 고려하는 다층모형(Multilevel Modeling)을 사용해야 합니다.

이제부터 ‘행복 초등학교’의 가상 데이터를 통해 이 문제를 해결하는 다층모형의 마법을 살펴보겠습니다.


2. 모의 데이터 생성: 행복 초등학교 이야기

우리의 연구 문제는 다음과 같습니다.

  • 연구 문제: “학생의 독서 즐거움(Enjoyment)학업 성취도(Achievement)에 영향을 미치는가? 그리고 이 관계는 담임 선생님의 경력(Teacher Experience)에 따라 달라지는가?”

이 데이터를 생성하기 위해 R 코드를 사용하겠습니다. (jamovi에서는 Rj 에디터를 쓰거나, 이 코드로 생성된 CSV를 불러와서 분석한다고 가정하면 됩니다.)

R

# [R Code: 모의 데이터 생성]
set.seed(2026)

# 1. 구조 설정
n_schools <- 20    # 학교 수 (Level 2)
n_students <- 30   # 학교당 학생 수 (Level 1)
N <- n_schools * n_students

# 2. 학교(Level 2) 변수 생성
school_id <- rep(1:n_schools, each = n_students)
teacher_exp <- rep(rnorm(n_schools, mean = 10, sd = 5), each = n_students) # 교사 경력
# 학교마다 출발점(절편)과 독서 효과(기울기)가 다름을 가정
u0 <- rep(rnorm(n_schools, mean = 0, sd = 5), each = n_students) # 학교별 절편 차이 (Random Intercept)
u1 <- rep(rnorm(n_schools, mean = 0, sd = 2), each = n_students) # 학교별 기울기 차이 (Random Slope)

# 3. 학생(Level 1) 변수 생성
enjoyment <- rnorm(N, mean = 50, sd = 10) # 독서 즐거움
error <- rnorm(N, mean = 0, sd = 5)       # 개인 오차

# 4. 종속변수 생성 (다층 구조 반영)
# 성취도 = 전체평균 + (전체기울기 * 즐거움) + 학교별절편 + (학교별기울기 * 즐거움) + (상호작용: 교사경력 * 즐거움) + 오차
beta0 <- 40 # 기본 절편
beta1 <- 0.5 # 독서 즐거움의 기본 효과
beta2 <- 0.3 # 교사 경력의 조절 효과 (Cross-level interaction)

achievement <- (beta0 + u0) + (beta1 + u1 + beta2 * teacher_exp) * enjoyment + error

# 데이터프레임 생성
data <- data.frame(SchoolID = as.factor(school_id), 
                   Achievement = achievement, 
                   Enjoyment = enjoyment, 
                   TeacherExp = teacher_exp)

# 데이터 확인 (상위 5개)
head(data)

# CSV 저장 (jamovi에서 불러오기 위함)
write.csv(data, "chap01.csv", row.names = FALSE)

이 데이터에서 학생(ii)은 학교(jj)에 내재되어 있습니다(iji \subset j).


3. 다층모형의 기초: 고정효과와 무선효과

다층모형을 이해하려면 두 가지 핵심 단어를 구별해야 합니다.

  1. 고정효과 (Fixed Effects): 전체 데이터에 공통적으로 적용되는 평균적인 효과입니다. “일반적으로 독서를 좋아하면 성적이 오른다”라는 명제에서 ‘오른다’의 평균값입니다.
  2. 무선효과 (Random Effects): 집단(학교)마다 달라지는 고유한 특성입니다. 어떤 학교는 평균보다 성적이 더 높고(절편의 차이), 어떤 학교는 독서의 효과가 더 강력합니다(기울기의 차이). 이 차이를 확률분포(주로 정규분포)로 가정합니다.

모형 1: 무선 절편 모형 (Random Intercept Model)

가장 기초적인 모형입니다. 우리는 먼저 “어떤 학교는 애초에 성적이 더 잘 나오는가?”를 묻습니다. 이를 그림으로 그리면 모든 학교의 기울기는 같지만, 출발점(절편)의 높낮이가 다른 평행선들이 나타납니다.

수식으로는 다음과 같습니다.

Level 1 (학생):yij=β0j+β1xij+ϵijLevel 2 (학교):β0j=β0+u0j\begin{aligned} \text{Level 1 (학생):} & \quad y_{ij} = \beta_{0j} + \beta_{1}x_{ij} + \epsilon_{ij} \\ \text{Level 2 (학교):} & \quad \beta_{0j} = \beta_{0} + u_{0j} \end{aligned}

  • yijy_{ij}: jj학교 ii학생의 성취도
  • β0j\beta_{0j}: jj학교의 평균 성취도 (학교마다 다름)
  • β0\beta_{0}: 전체 학교의 평균 성취도 (고정효과)
  • u0ju_{0j}: jj학교가 전체 평균에서 얼마나 벗어났는가? (무선효과, 잔차)

[jamovi 분석 방법]

  1. Linear Models -> Linear Mixed Model 선택
  2. Dependent Variable: Achievement
  3. Covariates: Enjoyment
  4. Cluster Variable (Grouping): SchoolID
  5. Random Effects: Intercept | SchoolID 체크

이 분석을 통해 우리는 급내상관계수(ICC)를 구할 수 있습니다. 이는 전체 성적 차이 중 학교 간 차이가 얼마나 되는지를 보여줍니다. 만약 ICC가 0에 가깝다면 굳이 다층모형을 쓸 필요가 없겠지만, 학교 데이터에서는 보통 0.1~0.3 정도가 나옵니다.

모형 2: 무선 기울기 모형 (Random Slope Model)

이제 더 흥미로운 질문을 던집니다. “독서의 즐거움이 성적에 미치는 영향이 학교마다 다른가?”

어떤 학교에서는 독서를 좋아하면 성적이 쑥쑥 오르지만, 어떤 학교에서는 별 차이가 없을 수 있습니다. 즉, 기울기가 학교마다 다릅니다.

수식이 조금 더 복잡해집니다.

Level 1:yij=β0j+β1jxij+ϵijLevel 2:β0j=β0+u0j(절편도 다름)β1j=β1+u1j(기울기도 다름)\begin{aligned} \text{Level 1:} & \quad y_{ij} = \beta_{0j} + \beta_{1j}x_{ij} + \epsilon_{ij} \\ \text{Level 2:} & \quad \beta_{0j} = \beta_{0} + u_{0j} \quad (\text{절편도 다름}) \\ & \quad \beta_{1j} = \beta_{1} + u_{1j} \quad (\text{기울기도 다름}) \end{aligned}

이 모형은 아래 그림처럼 각 학교의 회귀선들이 출발점도 다르고 기울기도 제각각인 ‘스파게티’ 같은 모양을 띱니다.

[jamovi 분석 방법]

  • 위의 설정에서 Random EffectsEnjoyment 변수를 추가하여 Slope를 허용합니다. (Enjoyment + Intercept | SchoolID)

4. 설명변수의 추가와 상호작용 (Contextual Effects)

이제 데이터의 계층 구조를 완전히 활용해 봅시다.

“왜 어떤 학교는 독서 효과(기울기)가 더 클까?”

우리는 그 이유가 ‘선생님의 경력(TeacherExp)’ 때문이라고 가설을 세웠습니다. 이것은 학교 수준(Level 2)의 변수입니다.

이것을 수식에 넣으면 놀라운 일이 벌어집니다. 2수준 변수(교사 경력)가 1수준 변수(독서 즐거움)의 기울기를 설명하게 되는데, 이를 ‘층간 상호작용(Cross-level Interaction)’이라고 합니다.

yij=β0+β1xij+β2Wj+β3(xij×Wj)+(u0j+u1jxij+ϵij)y_{ij} = \beta_{0} + \beta_{1}x_{ij} + \beta_{2}W_{j} + \beta_{3}(x_{ij} \times W_{j}) + (u_{0j} + u_{1j}x_{ij} + \epsilon_{ij})

여기서 xijx_{ij}는 독서 즐거움, WjW_{j}는 교사 경력입니다. β3\beta_{3}가 유의미하다면, “교사의 경력이 많을수록 학생의 독서 즐거움이 성적에 미치는 긍정적 효과가 더 커진다”고 해석할 수 있습니다.

library(lme4)
library(lmerTest) # p-value 확인용
library(ggplot2)

# 모형 적합: 성취도 ~ 독서*경력 + (1+독서|학교)
# * 기호를 쓰면 주효과와 상호작용 효과가 모두 포함됩니다.
full_model <- lmer(Achievement ~ Enjoyment * TeacherExp + (1 + Enjoyment | SchoolID), 
                   data = data)

# 결과 요약
summary(full_model)

# --- 시각화: 상호작용 효과 확인 ---
# 교사 경력을 '고경력'과 '저경력' 집단으로 구분 (시각화 목적)
data$ExpGroup <- ifelse(data$TeacherExp > mean(data$TeacherExp), 
                        "High Experience", "Low Experience")
data$pred <- predict(full_model)

ggplot(data, aes(x = Enjoyment, y = pred, color = ExpGroup)) +
  geom_point(alpha = 0.1) + # 개별 학생 점수 (흐릿하게)
  geom_smooth(method = "lm", se = FALSE, linewidth = 1.5) + # 집단별 회귀선 (굵게!)
  theme_minimal() +
  scale_color_manual(values = c("blue", "orange")) +
  labs(title = "교사 경력이 독서 효과를 조절하는가?",
       subtitle = "High Experience 집단의 기울기가 더 가파르다면 조절효과가 있는 것입니다.",
       x = "독서 즐거움", y = "예측된 학업 성취도")

[jamovi 분석 방법]

  • ★ 핵심: 상호작용 항 만들기 (Fixed Effects):
    • Fixed Effects 탭을 엽니다.
    • 왼쪽 변수 목록에서 EnjoymentTeacherExp동시에 선택(Ctrl/Shift 클릭)합니다.
    • 가운데 [Interaction] 버튼을 누릅니다.
    • 오른쪽 박스에 Enjoyment ✻ TeacherExp 항목이 생성되었는지 확인합니다.
  • 결과 확인:
    • Fixed Effects Parameter Estimates 표에서 상호작용 항(Enjoyment ✻ TeacherExp)의 p-value가 0.05 미만인지 확인합니다.
  • 그래프 그리기:
    • Estimated Marginal Means 탭에서 Enjoyment ✻ TeacherExp 항을 선택하여 아래로 내립니다.

5. 결과의 해석과 교훈

분석 결과를 보면 다음과 같은 패턴을 발견할 수 있습니다.

  1. Intercept (절편): 학교 간 성적 차이가 존재합니다. (ICC > 0)
  2. Enjoyment (주효과): 독서를 좋아할수록 성적이 오릅니다. (기울기 > 0)
  3. Interaction (상호작용): 교사 경력이 높은 학교일수록 독서의 효과(기울기)가 더 가파릅니다. 즉, 노련한 선생님은 독서를 좋아하는 아이들의 잠재력을 더 크게 성적으로 연결해 줍니다.

6. 풀링(Pooling)의 미학: 정보의 줄다리기

다층모형은 “완전 결합(Fully Pooled)”과 “비결합(Fully Unpooled)” 사이의 타협점입니다. 이 개념이 아주 중요합니다.

1) 완전 결합 (Complete Pooling)

  • 개념: “학교 차이는 없어!” 하고 모든 데이터를 한 통에 넣고 분석하는 것입니다.
  • 문제: 학교 간의 고유한 특성을 완전히 무시합니다.

2) 비결합 (No Pooling)

  • 개념: “학교는 완전히 달라!” 하고 각 학교마다 따로따로 회귀분석을 20번 돌리는 것입니다.
  • 문제: 학생 수가 적은 학교는 데이터가 부족해 결과가 엉망이 됩니다(과적합).

3) 부분 결합 (Partial Pooling) = 다층모형

  • 개념: 다층모형은 이 둘의 중간입니다. 학교별 특성을 인정하되, 전체 데이터의 경향성도 빌려옵니다.
  • 수축 효과 (Shrinkage): 학생 수가 적거나 데이터가 불안정한 학교의 추정치는 전체 평균 쪽으로 살짝 당겨집니다. 이것은 마치 “잘 모를 때는 남들이 하는 만큼은 한다고 치자”는 지혜와 같습니다. 이를 통해 훨씬 안정적이고 정확한 추정치를 얻습니다.

7. 시각화: R을 이용한 그래프

R

library(ggplot2)
library(lme4)

# 모형 적합 (Random Slope Model)
model <- lmer(Achievement ~ Enjoyment + (1 + Enjoyment | SchoolID), data = data)

# 예측값 생성
data$pred <- predict(model)

# 시각화
ggplot(data, aes(x = Enjoyment, y = Achievement, group = SchoolID)) +
  geom_point(alpha = 0.3, color = "gray") + # 실제 데이터 점
  geom_line(aes(y = pred, color = as.factor(SchoolID)), size = 0.8) + # 학교별 회귀선 (Random Slopes)
  geom_abline(intercept = fixef(model)[1], slope = fixef(model)[2], 
              color = "black", size = 1.5, linetype = "dashed") + # 전체 고정효과 (평균선)
  theme_minimal() +
  labs(title = "다층모형 분석 결과: 학교별 독서 즐거움과 성취도",
       subtitle = "검은 점선은 전체 평균(Fixed Effect), 색깔 선은 학교별 특성(Random Effects)",
       x = "독서 즐거움", y = "학업 성취도", color = "학교 ID") +
  theme(legend.position = "none")

8. 확장과 적용: 더 복잡한 세상으로

다층모형은 여기서 멈추지 않습니다. 현실은 더 복잡하니까요.

  • 3수준 모형: 학생 \subset 학급 \subset 학교 \subset지역구… 이렇게 계속 확장할 수 있습니다.
  • 교차 분류 (Cross-classified) 모형: 학생이 ‘학교’에도 속하지만 동시에 ‘거주 지역(동네)’에도 속할 때, 학교와 동네는 서로 완전히 포함관계가 아닐 수 있습니다(예: A학교에 사는 애들이 1동, 2동에 섞여 삼). 이럴 때도 다층모형은 유연하게 대처합니다.
  • 일반화 선형 혼합모형 (GLMM): 종속변수가 점수가 아니라 ‘합격/불합격(0/1)’인 경우(로지스틱)에도 다층모형을 적용할 수 있습니다.

9. 맺음말

다층모형은 단순히 통계 기법이 아닙니다. 세상을 바라보는 ‘관점’입니다. 개인이 처한 환경(Context)을 무시하지 않고, 개인과 환경의 상호작용을 있는 그대로 존중하며 분석하는 방법입니다.

여러분도 jamovi와 R을 통해 교실 속 아이들, 그리고 그 아이들을 감싸고 있는 학교의 이야기를 숫자로 풀어내는 즐거움을 느껴보시길 바랍니다.

참고문헌 (References)

Gill, J., & Womack, A. J. (2014). The Multilevel Model Framework. In The SAGE Handbook of Multilevel Modeling (pp. 3–20). SAGE Publications Ltd.


[WaurimaL의 팁]

jamovi에서 lmer (Linear Mixed Effects Regression) 결과를 해석할 때, Fixed Effects Parameter Estimates 표는 전체적인 경향성을, Random Components 표의 Variance(분산)는 집단 간의 차이 크기를 나타낸다는 점을 꼭 기억하세요!

다층모형의 기초 – 회귀분석을 넘어 데이터의 ‘맥락’을 읽다

안녕하세요? 다층모형(Multilevel Modeling) 강의에 오신 여러분을 환영합니다. 저는 이번 다층모형 시리즈를 여러분과 함께 헤쳐나갈 WaurimaL입니다.

오늘 우리는 단순히 통계 공식을 외우는 것이 아니라, 왜 우리가 다층모형이라는 렌즈를 통해 세상을 봐야 하는지를 아주 기초적인 원리부터 다뤄보려 합니다. 초등학생도 이해할 수 있도록 쉬운 비유를 섞어가며, 하지만 대학원 수준의 깊이까지 놓치지 않고 설명해 드리겠습니다.

우리가 다룰 교재의 서론(Introduction) 부분을 바탕으로, 실제 학교 현장의 데이터를 가정한 실습까지 진행해 봅시다.


1. 서론: 우리는 왜 ‘다층’적인가?

여러분이 교육학 연구자라고 가정해 봅시다. 여러분은 “학생의 학습 동기가 학업 성취도에 미치는 영향”을 알고 싶습니다. 데이터를 모으기 위해 전국의 초등학교를 돌아다니며 설문조사를 했죠. 그런데 여기서 중요한 질문이 하나 생깁니다.

“서울 강남의 A 초등학교 학생들과 시골 분교의 B 초등학교 학생들이 완전히 똑같은 환경에 있을까요?”

당연히 아닙니다. 같은 학교, 같은 반 친구들은 담임 선생님의 지도 방식, 학교의 분위기, 급식의 맛(?)까지 공유합니다. 즉, 학생들은 독립적인 섬(Island)이 아니라, ‘학급’이나 ‘학교’라는 집단(Cluster) 안에 내재되어(Nested) 있습니다.

전통적인 통계 방법은 이 ‘내재구조’를 무시했습니다. 다층모형은 바로 이 맥락(Context)을 통계적으로 정교하게 모델링하기 위해 탄생했습니다.


2. 전통적 회귀분석의 한계: ‘모든 사람은 섬이다?’

가장 널리 쓰이는 통계 방법인 회귀분석(Regression Analysis)을 떠올려 봅시다.

기본 식은 다음과 같습니다.

yi=β0+β1x1i+ϵiy_{i} = \beta_{0} + \beta_{1}x_{1i} + \epsilon_{i}

여기서 ϵi\epsilon_{i}(오차항)는 평균이 0이고 분산이 σ2\sigma^{2}인 정규분포를 따른다고 가정합니다. 이 가정의 핵심은 “모든 데이터(ii)는 서로 독립적이다”라는 믿음입니다.

🚩 무엇이 문제인가요?

학교 데이터를 예로 들어봅시다.

  • 현실: 같은 반 학생들의 성적은 서로 비슷할 가능성이 높습니다(담임 선생님의 영향 등).
  • 문제: 이렇게 되면 오차들(ϵi\epsilon_{i})끼리 서로 상관관계(Correlation)를 가지게 되어, “오차는 독립적이어야 한다”는 회귀분석의 대전제가 깨집니다. 결과적으로 통계적 추정이 부정확해집니다.

3. ANOVA와 변량효과(Random Effects): 집단을 바라보는 두 가지 시선

이 문제를 해결하기 위해 우리는 집단을 어떻게 처리할지 고민해야 합니다.

(1) 고정효과(Fixed Effects) 모형: ANOVA의 접근

만약 우리가 “A반, B반, C반 딱 이 세 반만 비교하고 싶다”면, 각 반을 하나의 고유한 특성으로 보고 더미 변수(Dummy variable) 등을 이용해 분석합니다. 이를 일원분산분석(One-way ANOVA) 모형이라고 합니다.

yij=μ+αj+ϵijy_{ij} = \mu + \alpha_{j} + \epsilon_{ij}

  • yijy_{ij}: jj번째 반의 ii번째 학생 점수(또는 성취도)
  • αj\alpha_{j}: jj번째 반의 고유한 효과 (고정효과)

이 방법은 그 특정 반들에 대한 예측은 정확할지 몰라도(yj\bar{y}_j), 이 결과를 다른 학교나 반으로 일반화하기 어렵다는 단점이 있습니다.

(2) 변량효과(Random Effects) 모형: 다층모형의 시작

하지만 보통 연구자들은 “A반 그 자체”보다는 “일반적인 학급 간의 차이”에 관심이 많습니다. 즉, 우리가 뽑은 학급들이 전체 학급 모집단에서 무작위로 추출된 표본이라고 보는 것이죠.

yij=μ+uj+ϵijy_{ij} = \mu + u_{j} + \epsilon_{ij}

  • uju_{j}: jj번째 반의 효과. 하지만 이번엔 고정된 값이 아니라, 평균이 0이고 분산이 σu2\sigma_{u}^{2}인 확률변수입니다.

이 모형의 가장 큰 특징은 분산을 두 개로 쪼갠다는 점입니다.

  1. 집단 내 분산(σ2\sigma^{2}): 같은 반 학생들끼리의 성적 차이
  2. 집단 간 분산(σu2\sigma_{u}^{2}): 반 평균 성적끼리의 차이

(3) 급내상관계수(ICC)와 ‘정보 빌려오기’

여기서 아주 중요한 개념인 ICC(Intraclass Correlation, ρ\rho)가 등장합니다.

ρ=σu2σu2+σ2\rho = \frac{\sigma_{u}^{2}}{\sigma_{u}^{2} + \sigma^{2}}

  • 의미: 전체 성적 차이 중에서 “학교(반)가 달라서 생기는 차이”가 몇 %인가?를 나타냅니다.
  • 또한, 같은 반 학생 두 명을 뽑았을 때 그들의 성적이 얼마나 비슷할지를 나타내는 상관계수이기도 합니다.

💡 부분 풀링(Partial Pooling)의 마법

다층모형은 ‘부분 풀링(Partial Pooling)’ 전략을 씁니다.

  • 완전 풀링(Complete Pooling): 반 차이를 무시하고 전체 평균으로 퉁침.
  • 풀링 없음(No Pooling): 각 반을 완전히 별개로 보고 각 반 평균만 믿음.
  • 부분 풀링(다층모형): 표본이 적은 반의 결과는 전체 평균 쪽으로 살짝 당겨줍니다(Shrinkage). 즉, “데이터가 부족한 반은 다른 반들의 정보(Strength)를 좀 빌려와서 추정하자”는 아주 합리적인 타협안입니다.

4. 다층모형(Multilevel Model)의 완성

이제 위에서 본 회귀분석과 변량효과 모형을 합쳐봅시다. 이것이 바로 우리가 배울 임의 절편 모형(Random Intercept Model)입니다.

yij=β0+β1x1ij++u0j+ϵijy_{ij} = \beta_{0} + \beta_{1}x_{1ij} + \dots + u_{0j} + \epsilon_{ij}

  • β0+β1x1ij\beta_{0} + \beta_{1}x_{1ij}: 고정효과 부분 (일반 회귀식과 동일)
  • u0ju_{0j}: 임의 절편(Random Intercept). jj번째 학교가 전체 평균보다 얼마나 더 잘하거나 못하는지를 나타내는 그 학교만의 ‘고유한 특성’ (오차)
  • ϵij\epsilon_{ij}: 학생 개인의 오차

이 식은 “학생의 성적(yy)은 전체 평균적인 경향(β\beta)에다가, 그 학생이 속한 학교의 특성(uu)을 더하고, 학생 개인의 운이나 특성(ϵ\epsilon)을 더해서 결정된다”라고 해석할 수 있습니다.


5. 실습: jamovi를 활용한 다층분석 시뮬레이션

이제 이론을 바탕으로 가상의 데이터를 생성하고 직접 분석해 보겠습니다. jamovi는 R 기반의 무료 통계 소프트웨어로, 클릭만으로 다층모형을 쉽게 돌릴 수 있습니다.

(1) 가상의 시나리오: 수원시 초등학생 학업성취도 연구

  • 상황: 수원시에 있는 20개 초등학교를 대상으로, ‘사교육 시간(시간/주)’‘수학 성취도’에 미치는 영향을 연구합니다.
  • 가설: 사교육 시간이 길수록 성취도가 높을 것이다. 하지만 학교마다 기본 학력 수준(절편)은 다를 것이다.

(2) 데이터 생성 (R 코드)

jamovi에서 불러올 데이터를 생성하기 위해 R 코드를 작성해 드립니다. (이 코드는 실제 데이터와 매우 유사한 구조를 만듭니다.)

R

# R 코드: 다층모형 실습 데이터 생성
set.seed(2026) # 재현성을 위해 시드 설정

# 설정
n_schools <- 20    # 학교 수 (Level 2)
n_students <- 30   # 학교당 학생 수 (Level 1)
total_n <- n_schools * n_students

# 파라미터 (참값)
grand_intercept <- 50       # 전체 평균 수학 점수
slope_private_edu <- 3      # 사교육 시간 1시간 증가당 점수 상승분
sigma_u <- 10              # 학교 간 차이 (표준편차) -> 꽤 큼
sigma_e <- 5               # 학생 개인 오차 (표준편차)

# 데이터 생성
school_id <- rep(1:n_schools, each = n_students)
student_id <- 1:total_n

# 학교별 효과 (Random Intercept) 생성
u_j <- rnorm(n_schools, mean = 0, sd = sigma_u)
school_effect <- rep(u_j, each = n_students)

# 독립변수: 주당 사교육 시간 (0~10시간, 정규분포 + 약간의 학교별 차이 반영)
# 부촌 학교는 사교육 시간이 더 길 수 있으므로 학교 효과와 약간의 상관관계 부여
private_edu <- pmax(0, rnorm(total_n, mean = 4 + 0.1*school_effect, sd = 2))

# 종속변수: 수학 점수 생성 (다층모형 식 적용)
# Score = 50 + 3*Time + School_Effect + Error
math_score <- grand_intercept + slope_private_edu * private_edu + school_effect + rnorm(total_n, 0, sigma_e)

# 데이터프레임 생성
data <- data.frame(
  School = factor(school_id),
  Student = factor(student_id),
  Private_Edu = private_edu,
  Math_Score = math_score
)

# CSV 저장 (jamovi에서 불러오기 위함)
write.csv(data, "Suwon_Math_Study.csv", row.names = FALSE)

(위 코드를 실행하면 Suwon_Math_Study.csv 파일이 생성됩니다. 이 파일을 jamovi에서 엽니다.)

(3) jamovi 분석 가이드

자, 이제 생성된 데이터를 가지고 jamovi에서 분석하는 절차를 단계별로 설명합니다. 우리는 GAMLj 모듈(jamovi의 강력한 혼합모형 모듈)이나 기본 Linear Models를 사용할 수 있습니다. 여기서는 기본 내장된 기능을 기준으로 설명합니다.

단계 1: 기초 모형 (Null Model) – 학교 효과 확인하기

아무런 설명 변수 없이, 단지 “성적이 학교에 따라 얼마나 다른가?”만 확인합니다.

  1. 메뉴: Analyses > Linear Models > Mixed Model 선택
  2. 변수 설정:
    • Dependent Variable (종속변수): Math_Score
    • Cluster Variables (집단 변수): School
  3. 결과 확인 (Random Effects Table):
    • School (Intercept)의 분산(Variance)과 Residual (Error)의 분산을 확인합니다.
    • ICC 계산: jamovi 결과표 아래에 ICC가 자동으로 출력됩니다.
    • School 분산이 146.583, Residual 분산이 58.083이라면, ICC=146.583/(146.583+58.083)=0.716ICC = 146.583 / (146.583+58.083) = 0.716. 즉, 성적 차이의 71.6%는 학교 차이 때문입니다! (우리 시뮬레이션에서는 대략 0.8 정도로 높게 설정했습니다.)

단계 2: 임의 절편 모형 (Random Intercept Model)

이제 ‘사교육 시간’이 미치는 영향을 봅니다.

  1. Covariates (공변량): Private_Edu를 추가합니다.
  2. Fixed Effects (고정 효과): Private_Edu를 오른쪽으로 옮깁니다. (전체적인 사교육 효과를 보겠다는 뜻)
  3. Random Effects (변량 효과): Intercept | School이 기본으로 설정되어 있을 겁니다. 이는 “학교마다 출발점(평균 점수)은 다르다”는 것을 허용한다는 뜻입니다.

(4) 결과 해석 (가상)

효과 (Effect)추정치 (Estimate)의미
Intercept (절편)57.326사교육을 전혀 안 했을 때의 전체 평균 점수
Private_Edu (사교육)3.024사교육 시간이 1시간 늘 때마다 수학 점수가 약 3.024점 오름
Random Effect (School)Variance \approx 97.085학교 간 평균 점수 차이가 매우 큼

결론: 수원시 초등학생들의 수학 성취도에는 사교육 시간이 유의미한 긍정적 영향을 미칩니다(β3\beta \approx 3). 하지만, 학교 간의 편차(σu2\sigma_u^2)가 매우 크므로, 어떤 학교에 다니느냐가 성적에 큰 영향을 미치고 있음을 알 수 있습니다. 만약 일반 회귀분석을 했다면, 이 거대한 ‘학교 효과’를 무시하여 사교육의 효과를 과대/과소 추정하거나 유의성 검정에 오류가 있었을 것입니다.


6. 요약 및 다음 단계

오늘 우리는 왜 다층모형이 필요한지 배웠습니다.

  1. 데이터의 구조: 학생은 학교에, 환자는 병원에 ‘내재(Nested)’되어 있습니다.
  2. 독립성 위반: 이를 무시하면 통계적 오류가 발생합니다.
  3. 해결책: 변량효과(Random Effect)를 도입하여 집단 간 차이와 집단 내 차이를 분리하고, 더 정확한 추정을 합니다.

참고문헌 (References)

  • Aitkin, M., & Longford, N. (1986). Statistical modeling issues in school effectiveness studies. Journal of the Royal Statistical Society, Series A, 149, 1-43.
  • Chatterjee, S., & Simonoff, J. S. (2013). Handbook of regression analysis. Hoboken, NJ: John Wiley and Sons.
  • Gelman, A., & Hill, J. (2007). Data analysis using regression and multilevel/hierarchical models. Cambridge: Cambridge University Press.
  • Laird, N. M., & Ware, J. H. (1982). Random effects models for longitudinal data. Biometrics, 38, 963-974.
  • Raudenbush, S. W., & Bryk, A. S. (2002). Hierarchical linear models: Applications and data analysis methods (2nd ed.). Newbury Park, CA: Sage.
  • Simonoff, J. S., Scott, M. A., & Marx, B. D. (2013). The SAGE handbook of multilevel modeling. SAGE Publications.