태그 보관물: jamovi

Chap11. 다층연구 설계시 고려사항

안녕하세요!

오늘은 “다층 연구 설계의 최적화(Sample Size and Power Analysis in Multilevel Designs)”에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

분석 도구로는 jamovi의 기반이 되는 R 코드를 함께 제시하여 ‘최적 표본 크기 산출’부터 ‘모의 데이터 생성’, 그리고 ‘분석’까지 완벽하게 구현해 드리겠습니다. (참고: jamovi는 데이터 분석에는 강력하지만, 연구 설계 단계의 복잡한 ‘최적 표본 산출’ 기능은 제한적이므로, 이 부분은 R의 수리적 계산 기능을 활용하고 분석은 jamovi의 혼합모형 논리로 설명하겠습니다.)


1. 서론: 연구자의 영원한 딜레마, “돈이냐, 정확성이냐?”

교육 연구를 진행할 때 우리는 항상 두 가지 제약 조건 사이에서 고민합니다.

  1. 통계적 검증력(Power): 효과가 있다면 있다고 말할 수 있는 힘 (높을수록 좋음).
  2. 예산(Budget): 연구비와 시간은 한정되어 있음.

이 장에서는 다층 모형(Multilevel Modeling) 상황, 즉 학생이 학교에 소속되어 있는 구조에서 어떻게 하면 가장 적은 비용으로 가장 높은 정확성을 얻을 수 있는지, 그 최적 설계(Optimal Design) 방법을 알려드리겠습니다.

우리의 가상 시나리오를 소개합니다.

[시나리오: 프로젝트 ‘독서왕’]

교육심리학자 김 교수는 새로운 독서 프로그램이 초등학생의 ‘문해력’을 높이는지 검증하려 합니다.

  • 총 예산: 1,000만 원 (가상의 화폐 단위)
  • 비용 구조:
    • 학교 하나를 섭외하는 비용(행정 절차, 학교 보상 등): 200만 원 (c)
    • 학생 한 명을 검사하는 비용(검사지, 간식 등): 10만 원 (s)
  • 연구 질문: 몇 개의 학교를 섭외하고, 학교당 몇 명의 학생을 뽑아야 내 돈 1,000만 원 안에서 가장 정확한 결과를 얻을까요?

2. 군집 무작위 배정(Cluster Randomized Trial)의 설계

2.1 왜 다층 설계인가?

가장 쉬운 방법은 전국의 학생 명부에서 무작위로 학생을 뽑는 것입니다. 하지만 현실적으로 불가능합니다.

  • 실행 가능성: 학교 단위로 프로그램을 돌려야 합니다.
  • 오염(Contamination): 한 반에서 철수는 실험집단, 영희는 통제집단이면 서로 이야기하며 효과가 섞여버립니다.

그래서 우리는 학교(Cluster)를 통째로 실험군 혹은 대조군으로 배정하는 군집 무작위 배정(Cluster Randomized Trial)을 사용합니다.

2.2 급내상관계수(ICC)와 설계 효과

문제는 같은 학교 아이들끼리는 서로 비슷하다는 점입니다(학교 분위기, 선생님의 영향 등). 이를 급내상관계수(ICC, ρ\rho)라고 합니다.

  • ICC가 높다 = 학교 간 차이가 크다 = 같은 학교 아이들은 매우 비슷하다.
  • ICC가 높으면, 학생을 100명 더 뽑는 것보다 학교를 1개 더 섭외하는 게 훨씬 중요해집니다.

2.3 최적 표본 크기 공식 (The Magic Formula)

주어진 예산(BB) 하에서 처치 효과(β1\beta_1)의 분산(Var(β^1)Var(\hat{\beta}_1))을 최소화하는 최적의 학교 수(KK)와 학교당 학생 수(nn)는 다음과 같습니다.

noptimal=c(1ρ)sρn_{optimal} = \sqrt{\frac{c(1-\rho)}{s\rho}}

Koptimal=Bc+snK_{optimal} = \frac{B}{c + s \cdot n}

  • cc: 학교당 비용 (200)
  • ss: 학생당 비용 (10)
  • ρ\rho: ICC (가정된 값, 보통 0.05~0.10)

이 공식을 보면, ICC(ρ\rho)가 커질수록 학교당 학생 수(nn)는 줄여야 합니다. 왜냐하면 같은 학교에서 많이 뽑아봤자 정보가 중복되기 때문입니다.


3. R과 jamovi를 활용한 최적 설계 및 데이터 생성

이제 김 교수의 ‘독서왕’ 프로젝트를 위해 R을 사용하여 최적 표본을 계산하고, 이를 분석할 수 있는 모의 데이터를 생성해 보겠습니다.

3.1 최적 표본 크기 계산 (R Code)

김 교수의 상황: 예산 10,000, c=200,s=10c=200, s=10, 그리고 ICC(ρ\rho)는 선행연구를 통해 0.05로 가정합니다.

R

# [R Code] 최적 표본 크기 산출
# 파라미터 설정
B <- 10000   # 총 예산
c <- 200     # 학교(Cluster)당 비용
s <- 10      # 학생(Person)당 비용
rho <- 0.05  # 급내상관계수 (ICC)

# 1. 최적의 학생 수 (n) 계산 [cite: 120]
n_opt <- sqrt((c * (1 - rho)) / (s * rho))

# 2. 최적의 학교 수 (K) 계산 [cite: 119]
K_opt <- B / (c + s * n_opt)

# 결과 출력
cat("최적의 학교당 학생 수 (n):", round(n_opt, 2), "명\n")
cat("최적의 학교 수 (K):", round(K_opt, 2), "개교\n")

[분석 결과 해석]

  • 계산 결과, n19.49n \approx 19.49, K25.32K \approx 25.32가 나옵니다.
  • 현실적으로 반올림하여 학교당 19명, 총 26개 학교(실험 13, 통제 13)를 섭외하는 것이 최적입니다.

3.2 비용 효율성 시각화 (Design Efficiency Plot)

아래 그래프는 학교당 학생 수(nn)를 변화시킬 때, 추정의 오차(분산)가 어떻게 변하는지 보여줍니다. 우리는 분산이 가장 낮은 지점을 찾아야 합니다.

R

# [R Code] 시각화 생성
library(ggplot2)

n_seq <- seq(5, 50, by = 1) # 학생 수를 5명에서 50명까지 변화시킴
K_seq <- B / (c + s * n_seq) # 예산 제약에 따른 학교 수

# 분산 계산 공식 (단순화된 형태) [cite: 128]
# g_rho 부분과 예산 부분을 결합
design_var <- function(n, K, rho) {
  # Standard Error calculation based on Eq 11.3 & 11.6 logic relation
  # Here we look at relative variance proportional to the function
  design_effect <- 1 + (n - 1) * rho
  total_N <- n * K
  return(design_effect / total_N) 
}

var_values <- design_var(n_seq, K_seq, rho)

df_plot <- data.frame(n = n_seq, Variance = var_values)

ggplot(df_plot, aes(x = n, y = Variance)) +
  geom_line(color = "blue", linewidth = 1.2) +
  geom_vline(xintercept = 19, linetype = "dashed", color = "red") +
  annotate("text", x = 19, y = max(var_values), label = "Optimal n = 19", vjust = -1) +
  labs(title = "최적 표본 설계: 학교당 학생 수 vs. 추정 오차",
       subtitle = "예산 고정 시, 학생을 19명 뽑을 때 오차가 최소화됨",
       x = "학교당 학생 수 (n)", y = "치료 효과의 분산 (낮을수록 좋음)") +
  theme_minimal()

이 그래프를 통해 김 교수는 무작정 학생을 많이 뽑는다고 좋은 게 아니라, 학교 수와 학생 수의 황금 비율을 맞춰야 함을 알 수 있습니다.


4. 모의 데이터 생성 및 분석 (Linear Mixed Model)

이제 최적 설계(K=26,n=19K=26, n=19)에 따라 데이터를 수집했다고 가정하고, 이를 jamovi(또는 R의 lmer)에서 분석하는 방법을 보여드리겠습니다.

4.1 데이터 생성 (Backstory 포함)

  • 상황: 26개 학교를 선정, 절반은 ‘독서왕 프로그램(Treatment)’, 절반은 ‘기존 수업(Control)’ 진행.
  • 효과: 프로그램은 문해력 점수를 평균 5점 정도 높여줄 것으로 기대.
  • 변산: 학교 간 차이(ICC) 반영.

R

# [R Code] 모의 데이터 생성
set.seed(123) # 재현성을 위해 시드 설정

K <- 26       # 학교 수
n <- 19       # 학교당 학생 수
N <- K * n    # 총 학생 수

# 학교 ID 및 치료 집단 배정 (0: 통제, 1: 처치)
school_id <- rep(1:K, each = n)
treatment <- rep(c(rep(0, K/2), rep(1, K/2)), each = n)

# 랜덤 효과 생성 (학교 간 차이)
u0j <- rep(rnorm(K, mean = 0, sd = sqrt(5)), each = n) # 학교 분산 = 5

# 오차항 생성 (학생 간 차이)
# ICC = 0.05 이려면, 학교분산/(학교분산+오차분산) = 0.05
# 5 / (5 + 95) = 0.05 -> 오차 분산은 95, SD는 약 9.75
eij <- rnorm(N, mean = 0, sd = sqrt(95))

# 고정 효과 (진짜 치료 효과 = 5점)
beta0 <- 50  # 평균 점수
beta1 <- 5   # 치료 효과

# 종속 변수 (문해력 점수) 생성 
# y_ij = beta0 + beta1*x_j + u_0j + e_ij
y <- beta0 + beta1 * treatment + u0j + eij

# 데이터 프레임 생성
data_sim <- data.frame(
  SchoolID = factor(school_id),
  StudentID = 1:N,
  Treatment = factor(treatment, labels = c("Control", "Program")),
  Score = y
)

# 데이터 확인
head(data_sim)

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

4.2 jamovi 식 분석 절차 (R lme4 문법 활용)

jamovi의 Linear Mixed Models (GAMLj 모듈) 메뉴에서 분석하는 것과 동일한 R 코드입니다.

데이터 구조는 다음과 같습니다.

  • Level 1 (Person): 학생별 문해력 점수 (Score)
  • Level 2 (Cluster): 학교 (SchoolID)
  • Predictor: 처치 여부 (Treatment, Level 2 변수)

수식 모형은 다음과 같습니다15:

yij=β0+β1Treatmentj+u0j+ϵijy_{ij} = \beta_{0} + \beta_{1}Treatment_{j} + u_{0j} + \epsilon_{ij}

R

# [R Code] 다층 모형 분석
library(lme4)
library(lmerTest)

# 모형 적합: 절편에 대해서만 학교별 무선 효과(Random Intercept) 허용
model <- lmer(Score ~ Treatment + (1 | SchoolID), data = data_sim)

# 결과 요약
summary(model)

[결과 해석 방법]

  1. Fixed Effects: TreatmentProgram의 Estimate가 5에 가까운지, p-value가 0.05보다 작은지 확인합니다. (우리가 5로 설정했으므로 유의하게 나올 것입니다.)
  2. Random Effects: SchoolID의 Variance가 설계 시 가정한 분산과 유사한지 확인합니다.

5. 심화: 더 복잡한 상황들

5.1 다기관 임상시험 (Multisite Trials)

만약 김 교수가 학교 전체를 배정하는 게 아니라, 각 학교 안에서 철수는 실험반, 영희는 통제반으로 나눌 수 있다면 어떨까요?

이를 Multisite Trial이라고 합니다.

  • 장점: 학교 효과(u0ju_{0j})가 치료 효과 추정에서 사라지므로 훨씬 강력한 검증력(Power)을 가집니다.
  • 설계: 이 경우 Var(β^1)Var(\hat{\beta}_1)은 학교 분산에 영향을 받지 않으므로, 더 적은 예산으로도 유의한 결과를 얻을 수 있습니다. 하지만 ‘오염’ 문제가 없어야만 가능합니다.

5.2 반복 측정 (Longitudinal Design)

만약 김 교수가 프로그램을 1년 동안 진행하면서 학생들의 변화를 보고 싶다면 몇 번 측정해야 할까요?

  • 선형 변화(직선 성장)를 가정할 때: 시작(Baseline)과 끝(End), 딱 2번 측정하거나, 중간 지점 하나를 추가하는 것이 비용 대비 가장 효율적입니다.
  • 이차 함수(곡선 성장)를 가정할 때: 최소 3번의 측정이 필요하며, 등간격으로 측정하는 것이 좋습니다.

5.3 현실적인 문제와 해결책

  1. ICC를 모를 때: 보통 문헌 연구를 통해 보수적으로(약간 높게) 잡습니다. ICC를 실제보다 절반 정도로 낮게 잘못 예측했더라도, 최적 설계 대비 효율성 손실은 약 10% 내외로 크지 않다는 연구가 있습니다.
  2. 학교 크기가 다를 때: 모든 학교가 19명일 수는 없습니다. 학교 간 크기 편차(CV)가 0.5 정도라면, 계산된 학교 수(KK)보다 약 11% 정도 더 많은 학교를 섭외하여 이를 보정해야 합니다.

6. 결론 및 제언

오늘 살펴본 내용을 요약하면 다음과 같습니다.

  1. 학교 현장 연구에서는 학생 수만큼이나 학교 수(Cluster Number)가 중요하다.
  2. 비용 함수ICC를 고려하면, 무조건 많은 표본보다 최적의 비율을 찾는 것이 경제적이다.
  3. 학교를 통째로 배정(CRT)하는 것보다 학교 내 무선 배정(Multisite)이 통계적으로는 더 유리하나, 오염 가능성을 고려해야 한다.

참고문헌 (APA Style)

  • Maas, C. J. M., & Hox, J. J. (2005). Sufficient sample sizes for multilevel modeling. Methodology, 1(3), 86-92.
  • Moerbeek, M., & Teerenstra, S. (2011). Optimal design in multilevel experiments. In J. J. Hox & J. K. Roberts (Eds.), Handbook of Advanced Multilevel Analysis (pp. 257-281). New York: Routledge.
  • Raudenbush, S. W. (1997). Statistical analysis and optimal design for cluster randomized trials. Psychological Methods, 2(2), 173-185.
  • Snijders, T. A. B., & Bosker, R. J. (1993). Standard errors and sample sizes for two-level research. Journal of Educational Statistics, 18(3), 237-259.
  • Van Breukelen, G. J. P., & Moerbeek, M. (2013). Design considerations in multilevel studies. In M. A. Scott, J. S. Simonoff, & B. D. Marx (Eds.), The SAGE Handbook of Multilevel Modeling (pp. 183-200). SAGE Publications.

Chap10. 개체 내 오차 구조의 다층적 분석(Complexities in Error Structures Within Individuals)

안녕하세요!

오늘은 개체 내 오차 구조(Within-Individual Error Structures)의 복잡성과 모델링에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

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


우리가 학교에서 학생들의 성장을 추적할 때(종단 연구), 단순히 “평균 점수가 올랐나?”만 보는 것은 반쪽짜리 분석입니다. 학생 개개인이 어떻게 변화하는지, 그 변화의 폭(분산)은 일정한지, 어제의 성적이 오늘의 성적에 얼마나 영향을 미치는지(상관)를 파악해야 합니다. 제공해주신 텍스트는 이러한 공분산 구조(Covariance Structure)를 어떻게 모델링할 것인가에 대한 깊이 있는 통찰을 제공합니다.

1. 교육 현장의 예시: “읽기 유창성 성장 프로젝트”

이해를 돕기 위해 가상의 시나리오를 설정하겠습니다.

상황: A 초등학교에서 3학년 학생 50명을 대상으로 ‘읽기 유창성(1분당 읽은 단어 수)’을 1년 동안 4회(3월, 6월, 9월, 12월) 측정했습니다.

핵심 질문:

  1. 모든 학생의 읽기 실력 격차(분산)는 3월이나 12월이나 똑같을까요? (등분산성)
  2. 3월 성적이 좋은 학생은 6월에도 좋을까요? 12월까지 그 영향이 갈까요? (계열 상관)

2. 기본 모델과 개념 (The General Model)

우리는 데이터를 다음의 선형 회귀 모델로 표현할 수 있습니다.

y=Xβ+Zu+ϵy = X\beta + Zu + \epsilon

  • yy: 학생들의 읽기 점수 벡터
  • XβX\beta (고정 효과): 전체 학생들의 평균적인 성장 곡선 (예: 시간이 지날수록 점수가 오른다).
  • ZuZu (임의 효과): 학생 개인별 특성 (예: 어떤 학생은 시작부터 잘하고, 어떤 학생은 성장 속도가 빠르다).
  • ϵ\epsilon (오차 항): 설명되지 않는 나머지 변동. 오늘의 핵심 주제는 바로 이 ϵ\epsilon의 구조인 Σ\Sigma를 파헤치는 것입니다.

3. 데이터 시각화와 진단 (Diagnostics)

모델링을 하기 전에 눈으로 확인해야 합니다. 텍스트에서는 프로파일 도표(Profile Plot), OSM, PRISM을 추천합니다.

3.1 프로파일 도표 (Profile Plot)

학생 개개인의 성장 궤적을 그린 그래프입니다.

  • 해석: 선들이 서로 꼬이지 않고 나란히 간다면? \rightarrow 학생 내 상관이 높음(잘하던 애가 계속 잘함).
  • 분산: 시간이 갈수록 선들의 폭이 넓어진다면? \rightarrow 이분산성(Heterogeneity) 존재.

3.2 OSM (Ordinary Scatterplot Matrix)

모든 시점 간의 산점도 행렬입니다.

  • 특징: 대각선에서 멀어질수록(시간 격차가 클수록) 상관관계가 어떻게 변하는지 보여줍니다. 읽기 데이터에서는 보통 시간이 지날수록(대각선에서 멀어질수록) 상관이 낮아지는 패턴을 보입니다.

3.3 PRISM (Partial Regression-on-Intervenors Scatterplot Matrix)

이것은 저자(Zimmerman)가 강조하는 고급 도구입니다.

  • 개념: t1t_1t3t_3의 관계를 볼 때, 중간 시점인 t2t_2의 영향을 제거하고(통제하고) 봅니다.
  • 해석: 만약 t2t_2를 통제했을 때 t1t_1t3t_3의 관계가 사라진다면(무작위 산포), 이는 “조건부 독립”을 의미하며, Antedependence 모델이나 AR(1) 모델이 적합하다는 강력한 신호입니다.

4. 공분산 구조 모델링: 유연성 vs 간명성

어떤 모델을 선택해야 할까요? 너무 단순하면 현실을 반영 못 하고(과소적합), 너무 복잡하면 추정이 어렵습니다(과대적합). 이 둘 사이의 균형(Balance)이 핵심입니다.

4.1 가장 단순한 모델들 (Parsimonious)

  1. 복합 대칭 (Compound Symmetry, CS):
    • 가정: 3월의 분산 = 12월의 분산. 3월-6월 상관 = 3월-12월 상관. 모든 것이 일정함.
    • 교육적 현실: 글쎄요, 보통 고학년이 될수록 격차(분산)가 커지고, 먼 시점 간의 상관은 떨어지기 때문에 현실적이지 않을 수 있습니다.
    • 구조: σ2(1ρρρρ1ρρρρ1ρρρρ1)\sigma^2 \begin{pmatrix} 1 & \rho & \rho & \rho \\ \rho & 1 & \rho & \rho \\ \rho & \rho & 1 & \rho \\ \rho & \rho & \rho & 1 \end{pmatrix}
  2. 1차 자기회귀 (AR(1)):
    • 가정: 바로 전 시험 성적이 다음 시험에 가장 큰 영향을 줌. 시간이 멀어질수록 상관이 지수적으로 감소 (ρ,ρ2,ρ3...\rho, \rho^2, \rho^3…).
    • 교육적 현실: 성장 데이터에 매우 적합합니다. 단, 분산이 일정하다고 가정하는(Homogeneous) 한계가 있습니다.

4.2 중간 단계의 모델들 (Heterogeneous & Banded)

  1. 이분산 자기회귀 (Heterogeneous AR, ARH(1)):
    • AR(1)과 같지만, 시점별로 분산(시험 점수의 퍼짐 정도)이 다를 수 있게 허용합니다. 학년이 올라갈수록 실력 격차가 벌어지는 현상을 설명하기 좋습니다.
  2. 토플리츠 (Toeplitz, TOEP):
    • AR(1)처럼 시간이 지날수록 상관이 변하지만, 그 패턴을 ρk \rho^k 처럼 강제로 수학적 공식에 넣지 않고 자유롭게 둡니다(Band 구조). 더 유연하지만 파라미터가 많아집니다.

4.3 가장 유연한 모델들 (Flexible)

  1. 무구조 (Unstructured, UN):
    • 가정: 아무런 제약이 없습니다. 모든 시점의 분산과 상관을 각각 다 추정합니다.
    • 장단점: 가장 정확하지만, 측정 시점이 많아지면 추정해야 할 파라미터가 기하급수적으로 늘어나(n(n+1)/2n(n+1)/2) 모델이 터질 수 있습니다.
  2. Antedependence (AD) 및 Structured AD (SAD) 모델:
    • 텍스트의 핵심 제안: 1차 자기회귀(AR1)는 너무 딱딱하고, 무구조(UN)는 너무 무겁습니다.
    • AD 모델: 시점 간의 “조건부 독립”을 가정하여 파라미터를 줄이면서도, 비정상성(Non-stationarity: 분산과 상관이 변하는 성질)을 허용하는 똑똑한 모델입니다.
    • SAD 모델은 이를 더 구조화하여 파라미터 수를 O(1)O(1) 수준으로 줄여 간명성을 확보합니다.

5. 분석 실습: R과 jamovi 활용

이제 가상의 “읽기 유창성 데이터”를 생성하고, 위에서 배운 모델들을 비교 분석해 보겠습니다.

(참고: jamovi의 GAMLj 모듈이나 Linear Mixed Models는 CS, AR1, UN, Toeplitz 등을 지원하지만, PRISM 도표나 고급 AD 모델은 R이 필요합니다. 따라서 R 코드를 중심으로 설명하고 jamovi 활용법을 덧붙이겠습니다.)

5.1 R을 이용한 모의 데이터 생성 및 시각화

R

# 필요한 라이브러리 로드
library(MASS)
library(nlme)
library(lattice)
library(ggplot2)

# --- 1. 가상의 읽기 유창성 데이터 생성 (Backstory) ---
# 50명의 학생, 4회 측정 (t=1, 2, 3, 4)
# 가정: 시간이 갈수록 분산이 커지고(이분산), 상관은 멀어질수록 낮아짐(AR 구조)
set.seed(2024)
N <- 50
Time <- 4
Mean_Vector <- c(40, 55, 65, 72) # 시간별 평균 점수 상승
Sigma <- matrix(0, Time, Time)

# 공분산 행렬 생성 (ARH(1) 구조와 유사하게 설정)
# 분산은 100, 140, 180, 220으로 증가
vars <- c(100, 140, 180, 220)
cor_rho <- 0.7 # 1-lag 상관계수
for(i in 1:Time){
  for(j in 1:Time){
    Sigma[i,j] <- sqrt(vars[i]) * sqrt(vars[j]) * (cor_rho^abs(i-j))
  }
}

# 데이터 생성
data_matrix <- mvrnorm(n = N, mu = Mean_Vector, Sigma = Sigma)
colnames(data_matrix) <- c("T1", "T2", "T3", "T4")
df_wide <- data.frame(ID = 1:N, data_matrix)

# Long format으로 변환 (분석용)
df_long <- reshape(df_wide, direction = "long", varying = list(2:5), 
                   v.names = "Score", timevar = "Time", times = 1:4)
df_long <- df_long[order(df_long$ID, df_long$Time), ]

# --- 2. 진단 시각화 ---

# (1) 프로파일 도표 (Profile Plot) [cite: 65]
ggplot(df_long, aes(x = Time, y = Score, group = ID)) +
  geom_line(alpha = 0.5) +
  geom_smooth(aes(group = 1), method = "loess", color = "red", size = 1.5) +
  labs(title = "학생 읽기 유창성 프로파일 도표", subtitle = "시간에 따른 개별 성장 곡선") +
  theme_minimal()

# (2) OSM (Ordinary Scatterplot Matrix) 
splom(df_wide[,2:5], 
      main = "OSM: 시점 간 산점도 행렬",
      pscales = 0, varname.cex = 0.8)

# (3) PRISM (간략화된 개념적 구현) [cite: 127]
# T1과 T3의 관계에서 T2를 통제한 편상관을 시각적으로 확인
res_T1_T2 <- residuals(lm(T1 ~ T2, data = df_wide))
res_T3_T2 <- residuals(lm(T3 ~ T2, data = df_wide))
plot(res_T1_T2, res_T3_T2, 
     main = "PRISM 예시 (T1 vs T3 | T2)", 
     xlab = "T1 | T2 residuals", ylab = "T3 | T2 residuals")
abline(lm(res_T3_T2 ~ res_T1_T2), col="blue")
# 설명: 이 점들이 무작위로 퍼져있으면(기울기가 0에 가까우면) 조건부 독립 -> AD 모델 적합

# --- 3. 모델 적합 및 비교 (gls 함수 사용) ---

# Model 1: 복합 대칭 (Compound Symmetry) - 너무 단순함 [cite: 232]
fit_cs <- gls(Score ~ factor(Time), data = df_long,
              correlation = corCompSymm(form = ~ 1 | ID))

# Model 2: AR(1) - 등분산 가정 [cite: 250]
fit_ar1 <- gls(Score ~ factor(Time), data = df_long,
               correlation = corAR1(form = ~ 1 | ID))

# Model 3: Unstructured (무구조) - 가장 유연함 [cite: 498]
fit_un <- gls(Score ~ factor(Time), data = df_long,
              correlation = corSymm(form = ~ 1 | ID),
              weights = varIdent(form = ~ 1 | Time)) # 이분산 허용

# Model 4: ARH(1) (이분산 AR1) - 현실적 대안 
fit_arh1 <- gls(Score ~ factor(Time), data = df_long,
                correlation = corAR1(form = ~ 1 | ID),
                weights = varIdent(form = ~ 1 | Time))

# --- 4. 모델 선택 (AIC/BIC 비교) [cite: 47, 55] ---
anova(fit_cs, fit_ar1, fit_un, fit_arh1)

5.2 jamovi에서의 분석 절차

jamovi에서는 [Linear Mixed Models] 메뉴를 사용합니다.

  1. 데이터 불러오기: 위에서 생성한 데이터를 csv로 저장하여 jamovi에서 엽니다.
  2. 분석 설정:
    • Dependent Variable: Score
    • Covariates: Time (또는 Factors로 설정)
    • Cluster: ID
  3. Random Effects & Covariance Structure:
    • jamovi 옵션 중 Residual Covariance (혹은 Random Effect의 상관 구조) 설정 탭을 찾습니다.
    • 여기서 Unstructured, AR(1), Compound Symmetry 등을 선택할 수 있습니다.
  4. 모델 비교: 각 모델별로 AIC/BIC 값을 확인하여 가장 작은 값을 가진 모델을 선택합니다. (보통 교육 성장 데이터는 ARH(1)이나 Unstructured가 잘 나옵니다).

6. 결론 및 제언 (Conclusions)

이 장의 저자들(Núñez-Antón & Zimmerman)은 다음과 같이 결론짓습니다.

  1. 평균과 공분산을 함께 보라: 평균적인 성장만 보지 말고, 오차의 구조(변동성, 상관성)를 함께 모델링해야 정확한 추론이 가능합니다.
  2. 균형을 찾아라: 무조건 복잡한 모델(Unstructured)이 좋은 것이 아닙니다. 데이터의 특성(비정상성, 계열 상관 등)을 반영하되, 가능한 한 파라미터 수가 적은 모델(예: Structured Antedependence 등)을 찾는 것이 최선입니다.
  3. 시각화를 믿어라: 통계 수치(AIC/BIC)도 중요하지만, 프로파일 도표와 PRISM 등을 통해 데이터의 실제 패턴을 눈으로 확인하는 것이 강력한 진단 도구가 됩니다.

[User를 위한 다음 단계]

위의 R 코드를 복사하여 RStudio에서 실행해 보시겠습니까? 생성된 그래프(프로파일 도표, PRISM)를 통해 방금 설명한 “조건부 독립” 개념이 시각적으로 어떻게 나타나는지 직접 확인해 보시면 이해가 훨씬 빠를 것입니다.


참고문헌 (References)

  • Akaike, H. (1974). A new look at the statistical model identification. IEEE Transactions on Automatic Control, 19, 716-723.
  • Diggle, P. J., Heagerty, P. J., Liang, K.-Y., & Zeger, S. L. (2002). Analysis of longitudinal data (2nd ed.). Oxford University Press.
  • Gabriel, K. R. (1962). Ante-dependence analysis of an ordered set of variables. Annals of Mathematical Statistics, 33, 201-212.
  • Goldstein, H. (2003). Multilevel statistical model (3rd ed.). Arnold.
  • Kenward, M. G. (1987). A method for comparing profiles of repeated measurements. Applied Statistics, 36, 296-308.
  • Laird, N. M., & Ware, J. H. (1982). Random-effects models for longitudinal data. Biometrics, 38, 963-974.
  • Núñez-Antón, V., & Zimmerman, D. L. (2001). Parametric modeling of growth curve data: An overview (with discussion). Test, 10, 1-73.
  • Zimmerman, D. L. (2000). Viewing the correlation structure in longitudinal data through a PRISM. The American Statistician, 54, 310-318.
  • Zimmerman, D. L., & Núñez-Antón, V. (2010). Antedependence models for longitudinal data. Chapman & Hall/CRC.

Chap09. 종단 자료 모델링

안녕하세요!

오늘은 종단 자료 모델링(Longitudinal Data Modeling)에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

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


1. 들어가며: 스냅샷이 아닌 영화처럼

우리가 흔히 접하는 연구는 특정 시점에 학생들의 성적을 조사하는 횡단 연구(Cross-sectional Study)가 많습니다. 이건 마치 학생들의 달리기 시합 중 한 순간을 찍은 ‘사진’과 같습니다. 하지만 교육은 변화의 과정입니다. 우리가 정말 알고 싶은 건 “철수가 지난 학기보다 얼마나 성장했는가?” 혹은 “새로운 독서 프로그램이 시간이 지날수록 효과가 커지는가?”입니다.

이처럼 한 개인(subject)에 대해 시간을 두고 반복적으로 측정한 데이터종단 자료(Longitudinal Data)라고 합니다.

왜 다층모형인가요?

종단 자료는 2수준 다층 구조의 특수한 형태입니다.

  • 1수준 (Level 1): 시간(Time) 혹은 측정 시점 (예: 1학기, 2학기, 3학기…)
  • 2수준 (Level 2): 개인 (Subject, 예: 학생)

일반적인 회귀분석을 쓰면 안 되나요? 안 됩니다. 한 학생이 여러 번 시험을 봤다면, 그 점수들끼리는 서로 관련(상관)이 있겠죠? “내 점수는 서로 독립적이지 않다”는 사실 때문에 일반 회귀분석의 가정(독립성)이 위배됩니다. 그래서 우리는 다층모형을 사용해야 합니다.


2. 시나리오 및 데이터 생성: “독서 자신감 프로젝트”

이론만 보면 지루하니 가상의 학교 데이터를 만들어보겠습니다.

[시나리오]

A 초등학교에서는 200명의 학생을 대상으로 ‘독서 효능감(Reading Self-Efficacy)’이 4학기 동안 어떻게 변하는지 추적했습니다.

  • Time (시간): 0(사전), 1(1학기 후), 2(2학기 후), 3(3학기 후)
  • Group (집단): 실험군(새로운 독서 프로그램), 대조군(기존 수업)
  • Outcome (종속변수): 독서 효능감 점수 (0~100점)

이제 R을 사용하여 이 시나리오에 맞는 데이터를 생성하겠습니다. (jamovi의 R Editor 모듈이나 RStudio에서 실행 가능합니다.)

R

# 데이터 생성 R 코드
set.seed(1234)
library(MASS)
library(lme4)
library(ggplot2)

# 1. 기본 설정
n_subjects <- 200
n_timepoints <- 4
time <- 0:3

# 2. 2수준(학생) 변수 생성
ids <- 1:n_subjects
group <- sample(c("Control", "Treatment"), n_subjects, replace = TRUE)
# 실험군은 초기치는 낮으나 성장률이 더 가파르도록 설정
intercept_mean <- ifelse(group == "Treatment", 40, 45) 
slope_mean <- ifelse(group == "Treatment", 5, 2)

# 랜덤 효과 (개인별 차이): 절편과 기울기의 상관관계 설정
# 절편 분산=25, 기울기 분산=4, 상관계수=0.3
Sigma <- matrix(c(25, 3, 3, 4), 2, 2) 
random_effects <- mvrnorm(n_subjects, mu = c(0, 0), Sigma = Sigma)

# 3. 데이터 프레임 만들기
data_long <- data.frame()

for(i in 1:n_subjects) {
  # 개인별 고유한 절편과 기울기
  b0i <- intercept_mean[i] + random_effects[i, 1]
  b1i <- slope_mean[i] + random_effects[i, 2]
  
  # 오차항 (1수준)
  epsilon <- rnorm(n_timepoints, mean = 0, sd = 3)
  
  # 종속변수 생성 (선형 성장 모형)
  y <- b0i + b1i * time + epsilon
  
  temp_df <- data.frame(
    ID = factor(i),
    Time = time,
    Group = factor(group[i]),
    Score = y
  )
  data_long <- rbind(data_long, temp_df)
}

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

# 데이터 확인
head(data_long)

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

3. 선형 혼합 모형 (Linear Mixed Model) 분석

교재에서는 일반적인 다층모형 표기(jj가 상위 수준)와 달리, 종단 자료에서는 관습적으로 ii를 개인(2수준), tt를 시간(1수준)으로 표기한다고 강조합니다.

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

yit=xitβ+zitui+ϵity_{it} = x’_{it}\beta + z’_{it}u_i + \epsilon_{it}

  • xitβx’_{it}\beta: 고정 효과 (Fixed Effects) – 전체 평균적인 변화 패턴
  • zituiz’_{it}u_i: 랜덤 효과 (Random Effects) – 개인별 편차
  • ϵit\epsilon_{it}: 잔차 (Residuals) – 측정 오차

분석 단계 (jamovi & R)

1단계: 시각화 (스파게티 플롯)

데이터를 받으면 가장 먼저 그려봐야 합니다. 학생 개개인의 성장 곡선이 어떻게 생겼는지 확인합니다.

R

# 스파게티 플롯 생성
ggplot(data_long, aes(x = Time, y = Score, group = ID, color = Group)) +
  geom_line(alpha = 0.3) +
  stat_summary(aes(group = Group, color = Group), fun = mean, geom = "line", size = 1.5) +
  theme_minimal() +
  labs(title = "학생별 독서 효능감 변화 곡선")

해석: 얇은 선들은 학생 개개인이고, 굵은 선은 집단별 평균입니다. 실험군(Treatment)이 초기에는 낮지만 시간이 지날수록 빠르게 성장하는 패턴이 보이나요?

2단계: 비조건부 성장 모형 (Unconditional Growth Model)

시간에 따른 변화가 선형(직선)인지 확인하고, 개인별 성장 속도에 차이가 있는지 검증합니다.

  • jamovi 절차:
    1. Analyses > Linear Models > Linear Mixed Model 선택
    2. Dependent Variable: Score
    3. Cluster: ID (2수준 단위)
    4. Covariates: Time
    5. Fixed Effects: Time (전체 평균 기울기 확인)
    6. Random Effects:
      • Intercept | ID: 초기치(출발점)가 학생마다 다른가?
      • Time | ID: 변화율(기울기)이 학생마다 다른가?

이때 랜덤 효과의 분산-공분산 행렬 Ω\Omega는 다음과 같이 설정됩니다.

Ω=(σu02σu01σu01σu12)\Omega = \begin{pmatrix} \sigma_{u0}^2 & \sigma_{u01} \\ \sigma_{u01} & \sigma_{u1}^2 \end{pmatrix}

여기서 σu12\sigma_{u1}^2 (기울기의 분산)이 유의하다는 것은 “학생마다 성장 속도가 다르다”는 뜻입니다.

3단계: 조건부 성장 모형 (Conditional Growth Model)

이제 “왜 성장 속도가 다를까?”를 설명하기 위해 설명변수(Group)를 투입합니다.

  • jamovi 절차:
    • 위 설정에서 FactorsGroup을 추가합니다.
    • Fixed EffectsGroup, Time, 그리고 Group * Time (상호작용항)을 넣습니다.
  • 결과 해석의 핵심 (교재 기반):
    • Time 효과: 대조군의 평균 성장률.
    • Group * Time 효과: 가장 중요! 실험군이 대조군보다 시간이 지날수록 얼마나 더(또는 덜) 성장하는지를 나타냅니다. 이 값이 유의하면 “프로그램의 효과가 있다”고 말할 수 있습니다.

4. 이산형 종단 자료 (Discrete Longitudinal Data)

만약 종속변수가 점수(연속형)가 아니라, “독서 습관 형성 여부 (성공=1, 실패=0)”와 같은 이항(Binary) 변수라면 어떻게 해야 할까요? 일반적으로 두 가지 접근법이 있습니다.

4.1. 주변 모형 (Marginal Models) – GEE

  • 개념: 개인별 변화보다는 “전체 집단의 평균적인 변화”에 관심이 있을 때 사용합니다.
  • 해석: “우리 학교 전체 학생들의 독서 습관 성공률이 시간이 지남에 따라 증가했는가?” (Population-averaged interpretation).
  • 방법: GEE (Generalized Estimating Equations)를 사용합니다. 데이터의 분포 가정을 엄격하게 하지 않아도 되어 강건(Robust)합니다.
  • Jamovi 구현: Jamovi의 기본 메뉴에는 없으나, GAMLj 모듈을 설치하면 GEE와 유사한 GLM 분석이 가능하며, R의 geepack 패키지를 사용하는 것이 가장 정확합니다.

4.2. 일반화 선형 혼합 모형 (GLMM)

  • 개념: “개별 학생의 변화”와 그 안에서의 관계를 모델링합니다.
  • 해석: “철수라는 학생이 이 프로그램을 들었을 때 성공할 확률이 어떻게 변하는가?” (Subject-specific interpretation).
  • 수식: 연결 함수(Link function, 예: 로짓)를 사용하여 선형 결합을 변환합니다.
    logit(P(yit=1|ui))=xitβ+zitui\text{logit}(P(y_{it}=1|u_i)) = x’_{it}\beta + z’_{it}u_i
  • Jamovi 구현:
    1. Linear Models > Generalized Mixed Models 선택
    2. Dependent Variable: 성공 여부 (0, 1)
    3. Distribution: Binomial
    4. Link: Logit
    5. 나머지 설정은 LMM과 동일.

[WaurimaL의 팁]

교육 현장 연구에서는 보통 GLMM을 더 선호합니다. 우리는 학생 개개인의 특성과 성장에 관심이 많으니까요. 하지만 정책 입안자에게 보고서를 쓸 때는 Marginal Model의 결과가 더 직관적일 수 있습니다.


5. 결측치 (Missing Data): 피할 수 없는 골칫거리

종단 연구의 숙명은 “학생이 전학 가거나 아파서 검사를 못 받는 경우”입니다. 이를 불완전 자료(Incomplete Data)라고 합니다.

결측 메커니즘 3가지

  1. MCAR (완전 무작위): 선생님이 실수로 시험지를 잃어버림. 데이터 분석에 큰 문제 없음.
  2. MAR (무작위): 지난 시험 점수가 낮은 학생들이 이번 시험에 결석함. (관측된 데이터로 설명 가능). 다층모형(Likelihood-based)은 이를 어느 정도 보정해 줍니다.
  3. NMAR (비무작위): 공부를 안 해서(측정하지 못한 값 때문에) 시험을 안 봄. 가장 위험함. 분석 결과가 편향(Bias)될 수 있음.

대처법: 다층모형은 기본적으로 MAR 가정하에 분석을 수행하므로, 단순 반복측정 분산분석(RM-ANOVA)보다 결측치 처리에 훨씬 강력합니다. jamovi는 결측치가 있는 행을 무조건 삭제하지 않고, 가능한 정보를 최대한 활용합니다.


6. 나가며: 정리 및 다음 단계

오늘 우리는 시간을 품은 데이터, 종단 자료를 다층모형으로 분석하는 법을 배웠습니다.

  • 종단 자료는 시간(1수준)이 개인(2수준)에 내재된 구조입니다.
  • LMM을 통해 개인별 초기치와 성장 속도의 차이를 추정할 수 있습니다.
  • 종속변수가 범주형일 때는 GLMM을 사용합니다.
  • 다층모형은 결측치가 존재하는 교육 현장 데이터에 매우 유용합니다.

참고문헌 (References)

  • Fitzmaurice, G. M., Laird, N. M., & Ware, J. H. (2011). Applied longitudinal analysis (2nd ed.). Wiley.
  • Heck, R. H., Thomas, S. L., & Tabata, L. N. (2013). Multilevel and longitudinal modeling with IBM SPSS. Routledge.
  • Laird, N. M., & Fitzmaurice, G. M. (2013). Longitudinal Data Modeling. In The SAGE Handbook of Multilevel Modeling (Chap. 9). SAGE Publications.
  • Singer, J. D., & Willett, J. B. (2003). Applied longitudinal data analysis: Modeling change and event occurrence. Oxford University Press.

Chap08. 일반화 선형 혼합 모형

안녕하세요!

오늘은 일반화 선형 혼합 모형(Generalized Linear Mixed Models, GLMM)에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

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


1. 서론: 왜 ‘일반화’인가요?

우리가 지금까지 배운 ‘선형 혼합 모형(LMM)’은 데이터가 정규분포(Normal Distribution)를 따른다고 가정했습니다. 예를 들어, 학생들의 ‘키’, ‘국어 점수’, ‘지능 지수’ 같은 연속형 변수들이죠.

하지만 학교 현장의 데이터가 항상 예쁜 종 모양(정규분포)을 그릴까요? 다음의 예를 봅시다.

[상황 A] 선생님이 한 학기 동안 학생이 과제를 제출했는지(1), 안 했는지(0)를 매주 기록합니다. (이항 데이터, Binary)

[상황 B] 상담 선생님이 학급 내에서 발생하는 ‘따돌림 행동 횟수’를 관찰합니다. 0회, 1회, 2회… (카운트 데이터, Count)

이런 데이터는 정규분포를 따르지 않습니다.

  • 상황 A이항분포(Binomial Distribution)를 따르며, 결과가 0 아니면 1로 딱 떨어집니다.
  • 상황 B포아송분포(Poisson Distribution)를 따르며, 음수(-)가 나올 수 없고 오른쪽으로 긴 꼬리를 가질 확률이 높습니다.

이처럼 정규분포가 아닌 종속변수를 다루면서, 동시에 반복측정이나 학급 내 학생처럼 데이터가 위계적(Hierarchical)일 때 사용하는 분석 방법이 바로 일반화 선형 혼합 모형(GLMM)입니다.


2. 모형의 구조: 연결 고리 만들기 (Link Function)

일반적인 선형 회귀식은 Y=Xβ+eY = X\beta + e 형태입니다. 하지만 결과값 YY가 0과 1 사이의 확률(시험 통과 여부)이어야 하는데, 우변의 XβX\beta-\infty에서 ++\infty까지 값을 가진다면 말이 안 되겠죠?

그래서 우리는 연결 함수(Link Function)라는 특수한 장치를 사용합니다.

(1) 로지스틱 혼합 모형 (Binary Data)

시험 통과 여부(Pass/Fail)와 같은 이항 데이터를 분석할 때는 로짓(Logit) 연결 함수를 씁니다.

ln(Pij1Pij)=β0+β1Timeij+ui0\ln\left(\frac{P_{ij}}{1-P_{ij}}\right) = \beta_0 + \beta_1 Time_{ij} + u_{i0}

여기서 ui0u_{i0}는 학생 ii 고유의 능력(Random Intercept)을 의미합니다.

(2) 포아송 혼합 모형 (Count Data)

행동 빈도와 같은 가산 데이터를 분석할 때는 로그(Log) 연결 함수를 씁니다.

ln(λij)=β0+β1Timeij+ui0\ln(\lambda_{ij}) = \beta_0 + \beta_1 Time_{ij} + u_{i0}

여기서 λij\lambda_{ij}는 해당 시점에서의 평균 발생 횟수입니다.


3. 실습 1: 이항 결과변수 (Binary Outcome) 분석

시나리오: “기초학력 평가 통과 여부 추적”

어느 교육청에서 방과 후 보충수업 프로그램이 학생들의 기초학력 평가 통과(Pass=1, Fail=0)에 미치는 영향을 알아보기 위해, 100명의 학생을 대상으로 4학기 동안 추적 조사를 했습니다.

  • 집단: 실험군(보충수업 O), 대조군(보충수업 X)
  • 종속변수: 평가 통과 여부 (0, 1)

[Step 1] R을 이용한 모의 데이터 생성

Jamovi의 Rj Editor나 R Studio에서 다음 코드를 실행하여 데이터를 생성합니다.

R

set.seed(1234)
n_subjects <- 100 # 학생 수
n_timepoints <- 4 # 4학기 측정

# 데이터 프레임 생성
data_binary <- data.frame(
  student_id = rep(1:n_subjects, each = n_timepoints),
  time = rep(0:3, n_subjects), # 0(기초선) ~ 3학기
  group = rep(sample(c("Control", "Treatment"), n_subjects, replace = T), each = n_timepoints)
)

# 랜덤 효과 (학생 고유의 기초 학력 수준)
random_intercept <- rep(rnorm(n_subjects, mean = 0, sd = 1.5), each = n_timepoints)

# 고정 효과 설정
# Intercept: -1 (초기엔 통과 확률 낮음)
# Time: 0.2 (시간이 지날수록 조금씩 향상)
# GroupTreatment: 0.5 (실험군이 조금 더 높음)
# Time*Group: 0.4 (실험군의 향상 속도가 더 빠름)
logit_p <- -1 + 0.2 * data_binary$time + 
           0.5 * (data_binary$group == "Treatment") + 
           0.4 * data_binary$time * (data_binary$group == "Treatment") + 
           random_intercept

# 확률 계산 및 이항 데이터 생성
prob <- exp(logit_p) / (1 + exp(logit_p))
data_binary$pass <- rbinom(n = nrow(data_binary), size = 1, prob = prob)

head(data_binary)

[Step 2] Jamovi 분석 절차 (GAMLj 모듈)

Jamovi에서 GLMM을 분석하기 위해서는 GAMLj 모듈 설치가 필요합니다. (Jamovi Library -> GAMLj 추가)

  1. Analyses 탭 클릭 > GAMLj > Generalized Mixed Models 선택
  2. Dependent Variable: pass (통과 여부)
  3. Random Effect Grouping Factors: student_id
  4. Covariates: time
  5. Factors: group
  6. Model Definition:
    • Distribution: Binomial
    • Link Function: Logit
    • Fixed Effects: time, group, time * group (상호작용항)
    • Random Effects: student_id (Intercept 체크)

[Step 3] 결과 해석 및 시각화

분석 결과, 상호작용항(time * group)이 유의하다면 보충수업 집단이 대조군보다 시간이 지날수록 통과 확률이 더 가파르게 증가한다고 해석할 수 있습니다.

이때 주의할 점은 계수(β\beta)가 ‘확률’ 그 자체가 아니라 로그 오즈(Log Odds)의 변화량이라는 점입니다.


4. 실습 2: 가산 결과변수 (Count Outcome) 분석

시나리오: “수업 중 질문 횟수 변화”

토론식 수업(실험군)이 학생들의 자발적 질문 횟수를 늘리는지 확인하기 위해 10주간 데이터를 수집했습니다.

  • 데이터 특성: 질문 횟수는 0 이상의 정수이며, 대부분 적은 횟수에 몰려 있음 (포아송 분포 가정).

[Step 1] R을 이용한 모의 데이터 생성

R

set.seed(5678)
# 데이터 프레임 생성 (구조는 위와 동일)
data_count <- data.frame(
  student_id = rep(1:n_subjects, each = n_timepoints),
  time = rep(0:3, n_subjects),
  group = rep(sample(c("Lecture", "Discussion"), n_subjects, replace = T), each = n_timepoints)
)

# 랜덤 효과 (학생의 적극성)
random_intercept_c <- rep(rnorm(n_subjects, mean = 0, sd = 0.5), each = n_timepoints)

# 고정 효과 (로그 스케일)
# Discussion 그룹이 시간이 지날수록 질문이 급격히 늘어나도록 설정
log_lambda <- 0.5 + 0.1 * data_count$time + 
              0.2 * (data_count$group == "Discussion") + 
              0.3 * data_count$time * (data_count$group == "Discussion") + 
              random_intercept_c

# 포아송 데이터 생성
data_count$questions <- rpois(n = nrow(data_count), lambda = exp(log_lambda))

head(data_count)

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

[Step 2] Jamovi 분석 절차

  1. GAMLj > Generalized Mixed Models
  2. Dependent Variable: questions
  3. Model Definition:
    • Distribution: Poisson
    • Link Function: Log
    • 나머지 설정은 위와 동일.

5. 심화 분석: “개별 학생” vs “전체 평균”의 함정

GLMM에서 가장 중요한 개념이자 학생들이 가장 많이 헷갈리는 부분입니다.

“개별 학생들의 성장 곡선을 평균 낸 것”“전체 집단의 평균 성장 곡선”이 같을까요?

  • 선형 혼합 모형(LMM): 같습니다. (βRE=βM\beta^{RE} = \beta^M)
  • 일반화 선형 혼합 모형(GLMM): 다릅니다! (βREβM\beta^{RE} \neq \beta^M)

왜 다를까요?

비선형 함수(S자 곡선인 로지스틱 등)를 통과하기 때문입니다.

수식으로 보면 다음과 같은 관계가 성립합니다.

E(y)exp(Xβ)1+exp(Xβ)E(y) \neq \frac{\exp(X\beta)}{1+\exp(X\beta)}

오히려, 주변(Marginal) 효과는 개별(Subject-specific) 효과보다 절댓값이 작게(완만하게) 나타납니다.

R로 시각화하여 이해하기

이 차이를 눈으로 확인해 봅시다. 개별 학생들의 곡선(회색)과 그 평균(빨간색, 파란색)을 그려보겠습니다.

R

# 시각화 코드
library(ggplot2)

# 예측값 생성 (개별 효과 포함)
# *주의: 실제 GLMM 예측은 복잡하지만, 여기서는 개념 설명을 위해 단순화하여 시각화합니다.
data_binary$pred_prob <- predict(glm(pass ~ time * group, data=data_binary, family=binomial), type="response") 

# 그래프 그리기
ggplot(data_binary, aes(x = time, y = pred_prob, group = student_id)) +
  # 개별 학생들의 성장 곡선 (회색, 얇게)
  geom_line(alpha = 0.2, color = "gray") + 
  
  # 집단 평균 성장 곡선 (색상, 굵게)
  # *변경사항: size = 1.5 -> linewidth = 1.5
  stat_summary(aes(group = group, color = group), fun = mean, geom = "line", linewidth = 1.5) + 
  
  # 라벨 및 테마 설정
  labs(title = "개별 학생 성장 곡선(회색) vs 집단 평균 곡선(색상)",
       y = "통과 확률 (Probability)", x = "시간 (학기)") +
  theme_minimal()


6. 결론

일반화 선형 혼합 모형(GLMM)은 현실 세계의 복잡한 데이터(O/X, 횟수 등)를 통계적으로 엄밀하게 다룰 수 있는 강력한 도구입니다.

  1. 데이터가 정규분포가 아닐 때(이항, 포아송 등) 사용합니다.
  2. 연결 함수(Link Function)를 통해 선형 예측식과 결과를 연결합니다.
  3. 개별 대상(Subject-specific)의 변화에 초점을 맞추므로, 전체 평균(Population-averaged) 해석 시 주의가 필요합니다.

학교 현장에서 “우리 반 아이들의 숙제 제출 여부”나 “문제 행동 횟수”를 종단적으로 연구하고 싶다면, GLMM이 가장 적합한 친구가 되어줄 것입니다.


참고문헌

  • Breslow, N. E., & Clayton, D. G. (1993). Approximate inference in generalized linear mixed models. Journal of the American Statistical Association, 88(421), 9-25.
  • Diggle, P. J., Heagerty, P., Liang, K. Y., & Zeger, S. L. (2002). Analysis of longitudinal data (2nd ed.). Oxford University Press.
  • Faught, E., Wilder, B. J., Ramsay, R. E., Reife, R. A., Kramer, L. D., Pledger, G. W., & Karim, R. M. (1996). Topiramate placebo-controlled dose-ranging trial in refractory partial epilepsy using 200-, 400-, and 600-mg daily dosages. Neurology, 46(6), 1684-1690.
  • Liang, K. Y., & Zeger, S. L. (1986). Longitudinal data analysis using generalized linear models. Biometrika, 73(1), 13-22.
  • Molenberghs, G., & Verbeke, G. (2005). Models for discrete longitudinal data. Springer.
  • Verbeke, G., & Molenberghs, G. (2000). Linear mixed models for longitudinal data. Springer.
  • Verbeke, G., & Molenberghs, G. (n.d.). Generalized Linear Mixed Models – Overview. In The SAGE Handbook of Multilevel Modeling (Chapter 8).

Chap07. 다층모형에서의 모형 선택

안녕하세요!

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

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


1. 서론: 완벽한 옷을 고르는 법 (모형 선택의 딜레마)

여러분이 백화점에서 옷을 고른다고 상상해 보세요. 너무 큰 옷은 헐렁해서 보기가 싫고(과소적합, underfitting), 너무 꽉 끼는 옷은 숨쉬기가 힘듭니다(과적합, overfitting). 통계 모형을 선택하는 것도 이와 같습니다. 우리는 데이터를 가장 잘 설명하면서도, 불필요하게 복잡하지 않은 ‘최적의 모형’을 찾아야 합니다.

일반적인 회귀분석(OLS)에서는 R2R^2나 수정된 R2R^2 같은 명확한 기준이 있습니다. 하지만 다층모형(MLM)으로 넘어오면 상황이 훨씬 복잡해집니다. 데이터가 여러 층위(예: 학생-학급-학교)로 꼬여 있기 때문에 “설명력”을 정의하는 방식도 달라지고, 모형의 적합도를 판단하는 기준(AIC, BIC 등)도 어떤 ‘우도(Likelihood)’를 쓰느냐에 따라 달라지기 때문입니다.

이 글에서는 Russell Steele 교수의 논의를 바탕으로, 학교 데이터를 사용하여 이 복잡한 기준들을 명쾌하게 정리해 드리겠습니다.


2. 예제 데이터 생성: “햇살초등학교의 수학 성취도”

이론만 들으면 지루하니, 가상의 시나리오를 만들어 봅시다.

2.1 시나리오

  • 연구 대상: 햇살초등학교 6학년 학생 1,000명 (50개 학급).
  • 종속 변수(YY): 수학 성취도 (Math Score).
  • 1수준 변수(학생): 사교육 시간 (Private Education, XX).
  • 2수준 변수(학급): 담임 선생님의 열정 (Teacher Passion, ZZ).
  • 가설: 사교육 시간이 길수록 수학 점수가 높을 것이며, 이 관계는 담임 선생님의 열정에 따라 달라질 것이다(교차 수준 상호작용).

2.2 R을 이용한 모의 데이터 생성 (jamovi의 Rj Editor에서도 실행 가능)

R

set.seed(1234)

# 1. 파라미터 설정
n_classes <- 50          # 학급 수 (J)
n_students_per_class <- 20 # 학급당 학생 수 (n)
N <- n_classes * n_students_per_class

# 2. 2수준(학급) 변수 생성
class_id <- rep(1:n_classes, each = n_students_per_class)
teacher_passion <- rnorm(n_classes, mean = 50, sd = 10) # 교사 열정
u0 <- rnorm(n_classes, 0, 5) # 절편에 대한 랜덤 효과 (학교 간 차이)
u1 <- rnorm(n_classes, 0, 2) # 기울기에 대한 랜덤 효과 (효과의 차이)

# 3. 1수준(학생) 변수 생성
private_edu <- rnorm(N, mean = 5, sd = 2) # 사교육 시간
error <- rnorm(N, 0, 5) # 잔차

# 4. 데이터 프레임 생성 (계층적 구조 반영)
# 수식: Math = (50 + u0) + (2 + 0.1*Passion + u1)*Private + error
# 교사 열정이 높으면 사교육의 효과가 더 커진다고 가정 (상호작용)
intercept <- 40 + u0[class_id]
slope <- 2 + 0.1 * (teacher_passion[class_id] - 50) + u1[class_id] 
math_score <- intercept + slope * private_edu + error

data <- data.frame(
  ClassID = factor(class_id),
  StudentID = 1:N,
  MathScore = math_score,
  PrivateEdu = private_edu,
  TeacherPassion = rep(teacher_passion, each = n_students_per_class)
)

head(data)

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

3. 다층모형에서의 R2R^2: 설명력의 재정의

일반 회귀분석에서 R2R^2는 “전체 변동 중 모형이 설명하는 비율”입니다. 하지만 다층모형에서는 변동이 학생 수준(Level 1)학급 수준(Level 2)으로 나뉩니다. 따라서 R2R^2도 수준별로 따로 계산해야 합니다.

3.1 Snijders & Bosker (SB) R2R^2

Snijders와 Bosker(1994)는 “예측 오차의 감소(reduction in prediction error)”라는 관점에서 R2R^2를 정의했습니다.

  • 1수준 R2R^2 (RSB12R^2_{SB-1}): 개별 학생의 점수를 얼마나 잘 예측하는가?
    • 계산식에는 고정 효과(Fixed effects)뿐만 아니라 랜덤 효과(Random effects)의 분산도 포함됩니다.
    • 기준 모델(Null Model)은 아무런 설명 변수가 없는 모델(절편만 있는 모델)입니다.
  • 2수준 R2R^2 (RSB22R^2_{SB-2}): 학급 평균 점수를 얼마나 잘 예측하는가?
    • 학급 수준의 설명력을 볼 때 사용합니다.

3.2 Edwards et al. R2R^2 (RE2R^2_E)

Edwards 등(2008)은 Wald F-통계량을 이용하여 R2R^2를 계산하는 방식을 제안했습니다.

  • 이 방법은 특정한 고정 효과(Fixed Effect)가 추가됨으로써 설명력이 얼마나 늘었는지를 보는 데 유용합니다.
  • 분모의 자유도를 계산할 때 Kenward-Roger 근사를 사용하는 것이 권장됩니다.

[WaurimaL의 조언]

RSB2R^2_{SB}는 모형이 복잡해질 때(랜덤 효과 추가 등) 값이 오히려 줄어드는 경우가 있어 해석에 주의가 필요합니다. 반면 RE2R^2_E는 고정 효과의 설명력을 분리해서 보는 데 강점이 있습니다.


4. 정보 기준(Information Criteria): AIC와 BIC

모형의 적합도(Likelihood)와 간명성(Parsimony, 변수가 적을수록 좋음) 사이의 균형을 맞추는 지표입니다.

4.1 기본 개념

  • Deviance (이탈도): 모형이 데이터를 얼마나 잘 설명 못하는가? (낮을수록 좋음).
  • AIC (Akaike Information Criterion): 예측 정확도를 높이는 데 초점. 실제 모형이 후보군에 없어도 가장 근사한 모형을 찾음.
    • AIC=Deviance+2kAIC = Deviance + 2k (kk: 파라미터 수)
  • BIC (Bayesian Information Criterion): ‘진짜 모형(True Model)’을 찾는 데 초점. 표본 크기(nn)가 커질수록 페널티가 강해져서 더 단순한 모형을 선호함.
    • BIC=Deviance+kln(n)BIC = Deviance + k \ln(n)

4.2 다층모형에서의 난제: 어떤 Likelihood를 쓸 것인가?

다층모형에서는 우도(Likelihood)를 계산하는 방식이 크게 두 가지로 나뉩니다. 이 부분이 가장 헷갈리는 부분이니 집중해 주세요.

(1) Marginal Likelihood (주변 우도) vs. Conditional Likelihood (조건부 우도)

  • Marginal Likelihood (LLMARGLL_{MARG}): 랜덤 효과(uu)를 적분해서 없애버린 우도입니다. “전체 모집단(평균적인 학생)”에 대한 추론을 할 때 사용합니다.
  • Conditional Likelihood (LLCONDLL_{COND}): 랜덤 효과(uu)를 특정한 값으로 조건화한 우도입니다. “특정 학급(Cluster)”에 대한 예측을 할 때 사용합니다.
    • Vaida & Blanchard(2005)는 이를 바탕으로 Conditional AIC (cAIC)를 제안했습니다.

(2) ML vs. REML

  • ML (Maximum Likelihood): 고정 효과를 비교할 때 주로 사용합니다. 하지만 분산 성분(Variance Component)을 과소추정하는 경향이 있습니다.
  • REML (Restricted ML): 분산 성분을 정확하게 추정합니다. 하지만 고정 효과 구조가 다른 모델끼리 비교할 때는 사용하면 안 됩니다 (예: 변수 A가 있는 모델 vs 없는 모델 비교 시 사용 불가).
    • 예외: Gurka(2006) 같은 학자는 베이지안 관점에서 비교하기도 하지만, 일반적인 관례는 아닙니다.

5. 분석 실습: jamovi & R

이제 위에서 생성한 데이터를 바탕으로 세 가지 모형을 비교해 보겠습니다.

  1. Model A (Null Model): 설명변수 없음. (학교 간 차이만 확인)
  2. Model B (Random Intercept): 사교육 시간(XX)과 교사 열정(ZZ) 포함. (절편만 무작위)
  3. Model C (Random Slope): 사교육 시간(XX)의 효과가 학급마다 다름을 허용. (기울기도 무작위)

5.1 분석 전략

  • 도구: jamovi의 GAMLj 모듈 또는 Linear Mixed Models (기본). 여기서는 상세한 R2R^2와 IC 계산을 위해 R 코드를 활용합니다.
  • 절차:
    1. Null Model로 급내상관계수(ICC) 확인.
    2. Model B 적합 후 R2R^2 및 AIC/BIC 확인.
    3. Model C 적합 후 Model B와 비교 (LRT 및 정보 기준).

5.2 R 코드 구현 (분석 및 결과 비교)

R

library(lme4)
library(performance) # R2 및 IC 계산을 위한 패키지
library(MuMIn) # r.squaredGLMM 등

# 1. Model A: Null Model
model_a <- lmer(MathScore ~ 1 + (1 | ClassID), data = data, REML = FALSE)

# 2. Model B: Random Intercept Model (고정효과 추가)
model_b <- lmer(MathScore ~ PrivateEdu + TeacherPassion + (1 | ClassID), 
                data = data, REML = FALSE)

# 3. Model C: Random Slope Model (상호작용 및 랜덤 기울기 추가)
model_c <- lmer(MathScore ~ PrivateEdu * TeacherPassion + (PrivateEdu | ClassID), 
                data = data, REML = FALSE)

# 4. 모형 비교 (AIC, BIC, Log-likelihood)
comparison <- compare_performance(model_a, model_b, model_c, metrics = c("AIC", "BIC", "R2"))
print(comparison)

# 5. Snijders & Bosker R2 계산 (MuMIn 패키지 활용)
r2_results <- r.squaredGLMM(model_c)
print(r2_results)

5.3 결과 해석 (가상의 결과값 예시)

CriteriaModel A (Null)Model B (Rand. Int)Model C (Rand. Slope + Interaction)
AIC6982.3(<.001)6788.0(<.001)6389.9(>.999)
BIC6997.0(<.001)6812.5(<.001)6429.2(>.999)
Marginal R2R^20.0000.1690.205
Conditional R2R^20.7290.7770.861
  • 해석:
    • AIC/BIC: Model C가 가장 낮은 값을 가지므로, “교사의 열정이 사교육 효과를 조절하며, 학급별로 사교육 효과가 다르다”는 모형이 가장 적합합니다. (AIC가 2 이상 차이 나면 유의미한 차이로 봅니다).
    • R2R^2: Conditional R2R^2가 0.861이라는 것은, 고정 변수와 학급별 랜덤 효과를 모두 고려했을 때 학생들의 성적 변동을 86.1% 설명한다는 뜻입니다.

6. 시각화: 복잡한 수식 대신 그림으로

다층모형의 꽃은 시각화입니다. 학급별로 기울기가 다른 것을 보여주는 것이 Model C의 핵심입니다.

R

library(ggplot2)

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

# 시각화
ggplot(data, aes(x = PrivateEdu, y = MathScore, group = ClassID)) +
  geom_point(alpha = 0.1, color = "gray") + # 전체 데이터 점
  geom_line(aes(y = pred, color = ClassID), alpha = 0.5) + # 학급별 회귀선
  theme_minimal() +
  theme(legend.position = "none") +
  labs(title = "학급별 사교육 시간과 수학 성취도의 관계 (Random Slope Model)",
       x = "사교육 시간", y = "수학 성취도")

이 그래프를 보면, 어떤 반은 사교육 효과가 가파르고(기울기 급함), 어떤 반은 완만하다는 것을 한눈에 알 수 있습니다. 이것이 바로 Random Slope(랜덤 기울기)의 의미입니다.


7. 결론 및 제언

Steele 교수의 챕터 내용을 종합하면, 다층모형에서의 모형 선택은 다음과 같은 원칙을 따릅니다.

  1. 하나의 기준에 맹신하지 마세요. R2R^2, AIC, BIC, 그리고 이론적 배경을 모두 고려해야 합니다.
  2. 연구 목적에 맞는 Likelihood를 선택하세요.
    • 새로운 학교에 일반화하고 싶다면? → Marginal Likelihood (AIC)
    • 특정 학급 내 학생을 예측하고 싶다면? → Conditional Likelihood (cAIC).
  3. 고정 효과 비교 시에는 ML, 최종 파라미터 추정은 REML을 사용하는 것이 정석입니다.
  4. 단순히 수치적으로 우수한 모델보다, “해석 가능하고(interpretable)” 실제 교육 현장의 현상을 잘 설명하는 모델을 선택하는 것이 중요합니다.

[참고 문헌]

  • Akaike, H. (1973). Information theory and an extension of the maximum likelihood principle. In Second International Symposium on Information Theory (pp. 267–281). Springer Verlag.
  • Burnham, K. P., & Anderson, D. R. (2002). Model selection and multimodel inference: A practical information-theoretic approach. Springer.
  • Edwards, L. J., Muller, K. E., Wolfinger, R. D., Qaqish, B. F., & Schabenberger, O. (2008). An R2R^2 statistic for fixed effects in the linear mixed model. Statistics in Medicine, 27, 6137–6157.
  • Gurka, M. J. (2006). Selecting the best linear mixed model under REML. The American Statistician, 60, 19–26.
  • Snijders, T. A. B., & Bosker, R. J. (1994). Modeled variance in two-level models. Sociological Methods and Research, 22, 342–363.
  • Steele, R. (2013). Model selection for multilevel models. In The SAGE Handbook of Multilevel Modeling (Chapter 7).
  • Vaida, F., & Blanchard, S. (2005). Conditional Akaike information for mixed-effects models. Biometrika, 92, 351–370.

Chap06. 예측 변수 중심화와 맥락 효과

안녕하세요!

오늘은 다층모형(Multilevel Modeling) 분석의 핵심이면서도 많은 연구자가 가장 헷갈려 하는 주제, 바로 “예측변수의 중심화(Centering Predictors)”“맥락 효과(Contextual Effects)”에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 초등학생도 이해할 수 있는 직관적인 설명과 대학원 수준의 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

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


1. 다층분석 여행을 위한 시나리오: “수학 불안”과 “학업 성취”

자, 우리가 교육청의 의뢰를 받은 연구자라고 상상해 봅시다. 우리는 ‘수학 불안(Math Anxiety)’‘수학 문제 해결력(Math Problem Solving)’에 미치는 영향을 알고 싶습니다.

  • 데이터 구조: 학생(ii)들이 학교(jj)에 소속된 2수준(2-level) 구조입니다.
  • 변수:
    • yijy_{ij} (종속변수): 수학 문제 해결력 점수
    • xijx_{ij} (독립변수): 수학 불안 점수 (높을수록 불안함)

단순 회귀분석과 달리, 다층모형에서는 이 xijx_{ij}(불안 점수)를 그냥 넣을지, 아니면 가공해서 넣을지에 따라 결과 해석이 완전히 달라집니다. 여기서 “가공”하는 방법이 바로 중심화(Centering)입니다.


2. 왜 중심화(Centering)가 중요한가요?

단일 수준(Single-level) 회귀분석에서는 점수를 중심화(예: 평균 빼기)하더라도 절편만 바뀌고 기울기는 그대로입니다. 하지만 다층모형에서는 중심화 방식에 따라 기울기 추정치(Slope)모형 적합도가 모두 바뀔 수 있습니다.

이유는 간단합니다. 학생의 점수(xijx_{ij})는 두 가지 정보를 동시에 담고 있기 때문입니다.

xijx=(xijxj)+(xjx)x_{ij} – \bar{x} = (x_{ij} – \bar{x}_j) + (\bar{x}_j – \bar{x})

  1. 학교 내 위치 (WxW_x): 우리 학교 친구들에 비해 내가 얼마나 불안한가? (xijxj)(x_{ij} – \bar{x}_j)
  2. 학교 간 차이 (BxB_x): 우리 학교가 다른 학교에 비해 평균적으로 얼마나 불안한가? (xjx)(\bar{x}_j – \bar{x})

이 두 가지를 어떻게 처리하느냐에 따라 전체 평균 중심화(CGM)집단 평균 중심화(CWC)로 나뉩니다.


3. 두 가지 중심화 방법: CGM vs. CWC

(1) 전체 평균 중심화 (Grand Mean Centering: CGM)

모든 학생의 점수에서 전체 평균(x\bar{x})을 뺍니다.

  • 수식: xijxx_{ij} – \bar{x}
  • 의미: “전국 평균에 비해 내 불안도가 얼마나 높은가?” (절대적인 수준)
  • 특징:
    • 원점수와 정보량이 같습니다. 단지 0점의 위치만 바뀝니다.
    • 학교 간 차이(학교 평균의 차이)가 그대로 보존됩니다.
    • 따라서 CGM을 사용한 기울기(βCGM\beta_{CGM})는 학생 개인의 효과와 학교 분위기의 효과가 섞여 있는(Composite) 값입니다.

(2) 집단 평균 중심화 (Group Mean Centering: CWC)

학생의 점수에서 그 학생이 속한 학교의 평균(xj\bar{x}_j)을 뺍니다. 이를 ‘맥락 내 중심화(Centering Within Context)’라고도 합니다.

  • 수식: xijxjx_{ij} – \bar{x}_j
  • 의미: “우리 학교 친구들에 비해 내가 얼마나 더 불안한가?” (상대적인 수준)
  • 특징:
    • 학교 간 차이를 완전히 제거합니다. 모든 학교의 평균이 0이 됩니다.
    • 이 변수는 오직 학교 내(Within-cluster) 변동만 담고 있습니다.
    • 따라서 CWC를 사용한 기울기(βCWC\beta_{CWC})는 순수한 개인 수준(학생 수준)의 효과만을 추정합니다.

(위 태그는 CWC의 개념인 ‘개구리 연못 효과(Frog Pond Effect)’를 시각적으로 이해하는 데 도움을 줄 수 있습니다. 내가 속한 연못(학교) 내에서의 상대적 위치를 의미합니다.)


4. 맥락 효과(Contextual Effects)와 “개구리 연못”

연구자가 흔히 범하는 실수는 “CWC가 학교 효과를 제거하니까 더 좋은 것 아닌가?”라고 생각하는 것입니다. 하지만 연구 질문(Research Question)에 따라 선택해야 합니다.

여기서 맥락 모형(Contextual Model)이 등장합니다. 이것은 개인의 점수(xijx_{ij})와 학교의 평균 점수(xj\bar{x}_j)를 동시에 모형에 넣는 것입니다.

수식 비교

  1. CWC 모델: yij=β0+β1(xijxj)+β2(xjx)+y_{ij} = \beta_0 + \beta_{1}(x_{ij} – \bar{x}_j) + \beta_{2}(\bar{x}_j – \bar{x}) + \dots
    • β1\beta_1: 개인 효과 (학교 내에서 불안이 1단위 높을 때 성적 변화)
    • β2\beta_2: 맥락 효과(학교 효과) (학교 평균 불안이 1단위 높을 때 학교 평균 성적 변화)
  2. CGM 모델: yij=β0+β1(xijx)+β2(xjx)+y_{ij} = \beta_0 + \beta_{1}(x_{ij} – \bar{x}) + \beta_{2}(\bar{x}_j – \bar{x}) + \dots
    • 흥미롭게도, 이 경우 β2\beta_2는 학교 평균의 효과와 개인 효과의 차이(Difference)를 나타냅니다.

핵심 요약:

맥락 효과를 분석할 때 CGM과 CWC는 수학적으로 동등(Equivalent)합니다. 단지 해석이 다를 뿐입니다.

  • CWC의 β2\beta_2: 학교 평균이 성적에 미치는 직접적인 영향.
  • CGM의 β2\beta_2: (학교 효과) – (개인 효과)의 차이 값.

5. 교수님의 조언: 언제 무엇을 써야 할까요?

Enders 교수의 챕터 내용을 바탕으로 명쾌한 가이드라인을 표로 정리해 드립니다.

연구 목적추천 방법이유
1. 맥락 효과 확인 (학교 분위기가 중요한가?)둘 다 가능CGM과 CWC는 수학적으로 변환 가능하며 동일한 모형 적합도를 가짐.
2. 2수준 예측변수 (예: 학교 설립 유형)CGM2수준 변수는 학교 내 변동이 없으므로 CWC가 불가능함. 보통 전체 평균 중심화 사용.
3. 1수준 예측변수 (개인 특성)이론에 따라절대적 수치가 중요하면(예: 절대적인 공부 시간) CGM.
상대적 위치가 중요하면(예: 자아개념, 친구와의 비교) CWC.
4. 상호작용 효과 (조절효과 분석)CWC 권장CGM 사용 시 ‘수준 간 상호작용(Cross-level)’과 ‘집단 간 상호작용’이 뒤섞여 해석이 모호해질 위험이 큼.
5. 통제변수 (단순히 통제만 할 때)CGM공변량 분석(ANCOVA)처럼 학교 간 차이를 조정(Adjust)하여 2수준 효과를 순수하게 보려면 CGM이 적절함.

6. R과 jamovi를 이용한 실습

이제 이론을 실제 데이터로 구현해 보겠습니다.

(1) 가상 데이터 생성 (R Code)

이 코드는 챕터의 예제(Montague et al., 2011)와 유사한 구조로, 40개 학교에 25명씩 총 1,000명의 학생 데이터를 생성합니다.

R

# 필요한 패키지 로드
if(!require(MASS)) install.packages("MASS")
if(!require(lme4)) install.packages("lme4")
if(!require(tidyverse)) install.packages("tidyverse")
if(!require(jmv)) install.packages("jmv") # jamovi 연동

set.seed(12345)

# 1. 파라미터 설정
n_schools <- 40       # 학교 수
n_students <- 25      # 학교당 학생 수
total_n <- n_schools * n_students

# 2. 학교 수준(Level 2) 데이터 생성
# 학교 평균 불안감(School_Anxiety_Mean)과 학교 효과(u0j)
school_data <- data.frame(
  school_id = 1:n_schools,
  school_anx_mean = rnorm(n_schools, mean = 0, sd = 1), # 학교별 불안 평균
  u0j = rnorm(n_schools, mean = 0, sd = sqrt(4.8)) # 절편의 변동 (약 4.8) [cite: 156]
)

# 3. 학생 수준(Level 1) 데이터 생성
data <- data.frame(
  student_id = 1:total_n,
  school_id = rep(1:n_schools, each = n_students)
)

# 학교 데이터 병합
data <- merge(data, school_data, by = "school_id")

# 학생 개인의 불안감 생성 (학교 평균 + 개인 편차)
# Within-school SD = 1, Between-school SD = 1
data$math_anx_raw <- data$school_anx_mean + rnorm(total_n, mean = 0, sd = 1)

# 4. 종속변수(수학 문제해결력) 생성
# 모형: Y = 10.73 + 0.33*(Within_Anx) + 0.85*(Between_Anx) + Error [cite: 321]
# CWC 계수: 0.33, Contextual 계수(B2): 0.85 가정
beta_0 <- 10.73
beta_within <- 0.33
beta_between <- 0.85
sigma_e <- sqrt(4.54) # [cite: 156]

# 변수 계산
data$anx_group_mean <- ave(data$math_anx_raw, data$school_id, FUN = mean) # 집단 평균
data$anx_cwc <- data$math_anx_raw - data$anx_group_mean # CWC 변수
data$anx_grand_mean <- mean(data$math_anx_raw) # 전체 평균
data$anx_cgm <- data$math_anx_raw - data$anx_grand_mean # CGM 변수
data$school_anx_centered <- data$anx_group_mean - data$anx_grand_mean # 중심화된 학교 평균

# 종속변수 생성 수식 (Contextual Model 기반)
data$math_score <- beta_0 + 
  beta_within * data$anx_cwc + 
  beta_between * data$school_anx_centered + 
  data$u0j + 
  rnorm(total_n, 0, sigma_e)

# 데이터 확인
head(data)

(2) jamovi 분석 가이드

jamovi에서는 GAMj 모듈을 쓰거나 기본 Linear Models -> Mixed Model을 사용합니다. 하지만 가장 명확한 방법은 위 R 코드처럼 변수를 미리 계산(Compute)해서 투입하는 것입니다.

Step 1: 변수 생성 (jamovi ‘Data’ 탭)

  1. Group Mean (학교 평균) 만들기:
    • New Computed Variable -> 이름: Mean_Anx_School
    • 수식: VMEAN(Math_Anx, group_by=School_ID) (이 기능이 없다면 R에서 만들어 가져오는 것을 추천)
  2. CWC 변수 만들기:
    • New Computed Variable -> 이름: Anx_CWC
    • 수식: Math_Anx - Mean_Anx_School
  3. CGM 변수 만들기:
    • New Computed Variable -> 이름: Anx_CGM
    • 수식: Math_Anx - VMEAN(Math_Anx)

Step 2: 분석 실행 (Analyses -> Mixed Models)

  1. CWC 모형 분석:
    • Dependent Variable: Math_Score
    • Cluster: School_ID
    • Covariates: Anx_CWC (Fixed Effect에 추가)
    • Random Effects: Intercept에 School_ID 체크.
  2. 맥락 모형(Contextual Model) 분석:
    • Covariates에 Anx_CWCMean_Anx_School 두 개를 동시에 넣습니다.
    • 이렇게 하면 Anx_CWC의 계수는 개인 효과, Mean_Anx_School의 계수는 맥락 효과가 됩니다.

(3) R을 이용한 시각화 (CGM vs CWC)

교재의 [Figure 6.2]와 [Figure 6.3]을 재현하여 데이터 구조가 어떻게 바뀌는지 보여드리겠습니다.

R

# CGM 시각화 (학교 간 차이 보존됨)
p1 <- ggplot(data, aes(x = anx_cgm, y = math_score, color = as.factor(school_id))) +
  geom_point(alpha = 0.5) +
  theme_minimal() +
  theme(legend.position = "none") +
  labs(title = "CGM: 학교 간 평균 차이가 보존됨", x = "수학 불안 (CGM)", y = "수학 점수")

# CWC 시각화 (모든 학교 평균이 0으로 정렬됨)
p2 <- ggplot(data, aes(x = anx_cwc, y = math_score, color = as.factor(school_id))) +
  geom_point(alpha = 0.5) +
  theme_minimal() +
  theme(legend.position = "none") +
  labs(title = "CWC: 학교 간 차이 제거 (순수 개인차)", x = "수학 불안 (CWC)", y = "수학 점수")

# 그래프 출력
gridExtra::grid.arrange(p1, p2, ncol = 2)

이 코드를 실행하면, CGM 그래프에서는 학교별로 점수 뭉치가 좌우로 퍼져 있는 반면(학교 간 불안 차이 존재), CWC 그래프에서는 모든 학교의 점수 뭉치가 가운데(0)를 중심으로 수직 정렬된 것을 볼 수 있습니다.


7. 결론: 무엇을 기억해야 할까요?

  1. 중심화는 단순한 옵션이 아닙니다. 연구 결과의 의미를 바꿉니다.
  2. CWC는 학교 효과를 제거합니다. 오직 ‘내 학교 안에서의 상대적 위치’만 봅니다.
  3. CGM은 학교 효과와 개인 효과를 섞습니다. ‘전체에서의 절대적 위치’를 봅니다.
  4. 연구 질문에 귀를 기울이세요. “절대적인 점수”가 중요한지(CGM), “남들과의 비교”가 중요한지(CWC) 판단하십시오.

여러분의 연구가 단순한 통계 돌리기가 아니라, 데이터 속에 숨겨진 교육적 맥락을 정확히 짚어내는 통찰이 되기를 바랍니다.


참고문헌

  • Enders, C. K. (2013). Centering predictors and contextual effects. In M. A. Scott, J. S. Simonoff, & B. D. Marx (Eds.), The SAGE handbook of multilevel modeling (pp. 89-108). SAGE Publications.
  • Kreft, I. G. G., de Leeuw, J., & Aiken, L. S. (1995). The effect of different forms of centering in hierarchical linear models. Multivariate Behavioral Research, 30(1), 1–21.
  • Marsh, H. W., & Hau, K.-T. (2003). Big-Fish-Little-Pond effect on academic self-concept: A cross-cultural (26-country) test of the negative effects of academically selective schools. American Psychologist, 58(5), 364–376.

Chap05. 고정 효과와 무선 효과의 선택


안녕하세요!

오늘은 “고정 효과(Fixed Effects)와 무선 효과(Random Effects)의 선택, 그리고 하이브리드 모델”에 대해 살펴보겠습니다. “학교 현장의 데이터”를 예시로 들어 직관적인 설명과 수리적 엄밀함을 모두 갖춘 형태로 재구성해 드리겠습니다.

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


1. 들어가며: 우리는 왜 고민하는가?

연구자 여러분, 우리가 다층모형(Multilevel Modeling)을 사용할 때 가장 흔하게 마주치는 질문이 있습니다.

“교사(또는 학교) 효과를 고정 효과(Fixed Effect)로 볼 것인가, 무선 효과(Random Effect)로 볼 것인가?”

이 선택은 단순히 통계적 취향의 문제가 아닙니다. 이 선택에 따라 모수의 해석이 달라지고, 추정의 효율성(Efficiency)편향(Bias) 사이의 중대한 트레이드오프(Trade-off)가 발생하기 때문입니다.

  • 고정 효과(FE): 각 그룹(학교)을 고유한 특성을 가진 개별적 존재로 보고, 그 자체를 변수로 투입합니다.
  • 무선 효과(RE): 각 그룹을 모집단에서 추출된 하나의 표본으로 보고, 그룹 효과가 정규분포를 따른다고 가정합니다.

이 글에서는 이 두 모델의 차이를 명확히 하고, 하이브리드 모델(Hybrid Model)이라는 아주 매력적인 대안까지 함께 알아보겠습니다.


2. 시나리오: “방과 후 자습 시간은 성적을 올리는가?”

이해를 돕기 위해 가상의 교육 데이터를 만들어 봅시다.

  • 연구 문제: 학생의 ‘방과 후 자습 시간(xx)’이 ‘수학 성취도(yy)’에 미치는 영향.
  • 데이터 구조: 학생(ii)들은 여러 학교(jj)에 소속되어 있음 (2수준 데이터).
  • 숨겨진 함정(Confounder): 사실 ‘학교의 면학 분위기(uu)’가 좋은 학교일수록, 학생들의 자습 시간도 길고 성적도 높습니다. 만약 이 학교 효과를 제대로 통제하지 않으면, 자습 시간의 순수한 효과를 과대평가할 수 있습니다.

먼저, R을 사용하여 이 시나리오에 맞는 모의 데이터를 생성해보겠습니다. (이 코드를 R Studio나 jamovi의 Rj Editor에서 실행하면 데이터를 얻을 수 있습니다.)

R

# [R Code] 데이터 생성
set.seed(123)
n_schools <- 50    # 학교 수
n_students <- 20   # 학교당 학생 수

# 학교 효과 (면학 분위기): 학교마다 다름
school_effect <- rnorm(n_schools, mean = 0, sd = 10)

# 데이터 프레임 생성
data <- data.frame()

for(j in 1:n_schools) {
  # 자습 시간(X): 학교 효과와 상관이 있도록 설정 (중요! Assumption 위반 상황 연출)
  # 면학 분위기가 좋은 학교 학생들이 공부를 더 많이 함
  study_hours <- rnorm(n_students, mean = 5 + 0.1 * school_effect[j], sd = 1)
  
  # 수학 성취도(Y): 기본점수 + 자습효과(2점) + 학교효과 + 오차
  math_score <- 50 + 2 * study_hours + school_effect[j] + rnorm(n_students, mean = 0, sd = 5)
  
  temp <- data.frame(school_id = factor(j), study_hours, math_score)
  data <- rbind(data, temp)
}

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

3. 두 모델의 핵심 개념 비교

3.1. 무작위 효과 모델 (Random Effects Model: RE)

무작위 효과 모델은 우리가 흔히 쓰는 다층모형의 기본 형태입니다.

수식은 다음과 같습니다.

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

여기서 u0ju_{0j}는 학교별 효과(Intercept)인데, RE 모델은 이 u0ju_{0j}가 평균이 0이고 분산이 σu02\sigma_{u0}^2정규분포를 따른다고 가정합니다.

  • 특징:
  1. 부분 풀링(Partial Pooling): 전체 학교의 정보를 빌려와서 추정하므로, 데이터가 적은 학교의 추정치도 안정적입니다(수축 효과, Shrinkage).
  2. 효율성: 추정해야 할 파라미터가 적어(분산만 추정하면 됨) 통계적으로 효율적입니다.
  3. 치명적 가정: 학교 효과(u0j)와 설명변수(x1ij, 자습시간)가 서로 독립이어야(상관이 없어야) 합니다.
    • 문제점: 위 시나리오처럼 ‘면학 분위기가 좋은 학교(uu↑)’일수록 ‘자습 시간(xx↑)’이 길다면, 이 가정이 깨지고 결과는 편향(Bias)됩니다.

3.2. 고정 효과 모델 (Fixed Effects Model: FE)

고정 효과 모델은 각 학교를 고유한 더미 변수(Dummy Variable)로 취급하거나, 학교 평균을 빼버리는 방식(De-meaning)을 사용합니다.

yijyj=β1(x1ijx1j)+(ϵijϵj)y_{ij} – \bar{y}_{j} = \beta_{1}(x_{1ij} – \bar{x}_{1j}) + (\epsilon_{ij} – \bar{\epsilon}_{j})

  • 직관적 이해: 학교 간의 차이는 아예 보지 않겠다는 뜻입니다. 오로지 “같은 학교 내에서(Within-school)” 자습 시간이 늘어날 때 성적이 오르는지만 봅니다.
  • 특징:
    1. 편향 제거: 학교 효과(u0ju_{0j})가 자습 시간(xx)과 상관이 있든 없든 상관없습니다. 학교 고유의 특성을 완벽히 통제합니다.
    2. 비효율성: 학교 수만큼의 더미 변수를 만드는 셈이므로 자유도(df)를 많이 잡아먹습니다.
    3. 한계: 시간(또는 그룹)에 따라 변하지 않는 변수(예: 학교의 설립 유형, 지역)의 효과는 추정할 수 없습니다. 다 삭제되기 때문입니다.

4. 분석 실습: jamovi & R

이제 jamovi를 이용해 두 모델을 분석하고 비교해 보겠습니다.

4.1. 고정 효과(FE) 분석 (in jamovi)

jamovi에는 ‘Panel Fixed Effects’ 전용 버튼은 없지만, 일반 선형 회귀(Linear Regression)에서 학교 ID를 더미 변수로 넣거나, GAMLj 모듈을 사용하여 구현할 수 있습니다. 가장 교과서적인 ‘Within Estimator’ 방식은 변수를 중심화(Centering)하여 분석하는 것입니다.

[jamovi 절차]

  1. 데이터 열기: 위에서 만든 chap05.csv를 엽니다.
  2. 변수 계산 (Compute):
    • mean_study_hours = VMEAN(study_hours, group_by=school_id) (학교별 평균 자습시간)
    • within_study_hours = study_hours – mean_study_hours (학교 평균 중심화)
  3. 분석 (Linear Regression):
    • 종속변수: math_score
    • 공변량: within_study_hours (이때 학교 간 차이는 이미 제거되었습니다.)
    • (참고: 엄밀한 FE 추정치는 더미변수를 넣어야 하지만, 계수값 β1\beta_1은 중심화된 변수 회귀와 동일한 원리를 갖습니다.)

4.2. 무작위 효과(RE) 분석 (in jamovi)

[jamovi 절차]

  1. 메뉴: Linear Models > Mixed Model 선택.
  2. 설정:
    • Dependent Variable: math_score
    • Covariates: study_hours
    • Cluster: school_id
    • Random Effects: Intercept 체크 (학교별 절편을 무작위로 가정).

4.3. 결과 비교 및 하우스만 검정 (Hausman Test)

전통적으로 이 두 모델 중 무엇을 쓸지 결정할 때 하우스만 검정을 사용합니다.

  • 귀무가설(H0H_0): RE와 FE의 추정치 차이가 없다 (즉, RE가 효율적이고 편향도 없으니 RE를 써라).
  • 대립가설(H1H_1): 차이가 있다 (즉, RE는 편향되었으니 FE를 써라).

jamovi의 기본 메뉴에는 하우스만 검정이 없으므로, R 코드를 통해 수행하거나 뒤에 소개할 하이브리드 모델로 대체하여 판단합니다.

R

# [R Code] FE vs RE 및 하우스만 검정
library(plm)

# 1. 고정 효과 모델 (Fixed Effects)
fe_model <- plm(math_score ~ study_hours, data=data, index=c("school_id"), model="within")

# 2. 무작위 효과 모델 (Random Effects)
re_model <- plm(math_score ~ study_hours, data=data, index=c("school_id"), model="random")

# 3. 하우스만 검정
phtest(fe_model, re_model)


	Hausman Test

data:  math_score ~ study_hours
chisq = 192.49, df = 1, p-value < 2.2e-16
alternative hypothesis: one model is inconsistent

해석: 만약 p-value가 0.05보다 작다면, RE 모델의 가정(학교효과와 XX가 독립)이 기각된 것입니다. 즉, 편향이 발생했으므로 FE를 써야 한다는 신호입니다.


5. 최선의 대안: 하이브리드 모델 (Hybrid Model)

많은 학자들은 FE와 RE 중 하나만 고르는 이분법 대신, 두 모델의 장점을 합친 하이브리드 모델을 추천합니다. 이 모델은 ‘Mundlak 모델’ 또는 ‘Group-Mean Centering’ 방법으로도 불립니다.

5.1. 하이브리드 모델의 원리

설명변수 xijx_{ij}를 두 부분으로 쪼개서 모델에 넣습니다.

yij=β0+βW(xijxj)+βB(xj)+u0j+ϵijy_{ij} = \beta_{0} + \beta_{W}(x_{ij} – \bar{x}_{j}) + \beta_{B}(\bar{x}_{j}) + u_{0j} + \epsilon_{ij}

  • βW\beta_{W} (Within effect): 학교 내 효과. 학생이 자기 학교 평균보다 더 공부했을 때 성적이 얼마나 오르는가? (= 고정 효과 추정치와 동일).
  • βB\beta_{B} (Between effect): 학교 간 효과. 공부를 많이 시키는 학교가 성적이 더 높은가?
  • 장점:
    1. 변수 간 상관으로 인한 편향 문제 해결 (FE의 장점).
    2. 학교 수준 변수나 학교 간 차이도 추정 가능 (RE의 장점).
    3. βW\beta_{W}βB\beta_{B}가 같은지 검정하여(Wald test), 맥락 효과(Contextual Effect)가 있는지 볼 수 있음.

5.2. jamovi에서 하이브리드 모델 구현하기

이것이 오늘 강의의 핵심 꿀팁입니다. 별도의 코딩 없이 jamovi 메뉴만으로 가능합니다.

[jamovi 실습 절차]

  1. 변수 생성:
    • 앞서 만든 mean_study_hours (학교 평균, Between 성분)
    • 앞서 만든 within_study_hours (개인 편차, Within 성분)
  2. Mixed Model 분석:
    • Linear Models > Mixed Model
    • Dependent Variable: math_score
    • Covariates: within_study_hours 그리고 mean_study_hours 두 개를 모두 넣습니다.
    • Cluster: school_id
    • Random Effects: Intercept

[결과 해석]

  • within_study_hours의 계수: 이것이 바로 순수한 개인 노력의 효과입니다. 학교 분위기(교란변수)가 통제된 FE 추정치와 같습니다.
  • mean_study_hours의 계수: 학교 간의 차이 효과입니다. 만약 Within 계수와 Between 계수가 크게 다르다면, 단순히 개인 노력이 아니라 학교 분위기가 성적에 영향을 미치고 있음을 시사합니다.

6. 결론 및 제언

우리가 살펴본 내용을 요약하면 다음과 같습니다.

  1. 무작위 효과(RE)는 효율적이지만, 그룹 효과와 설명변수가 관련이 있을 경우 편향될 위험이 있습니다 (교육 데이터에서는 흔한 일입니다).
  2. 고정 효과(FE)는 편향을 제거해주지만, 그룹 수준의 변수(예: 사립/공립 여부)를 분석할 수 없고 비효율적일 수 있습니다21.
  3. 하이브리드 모델은 설명변수를 ‘그룹 내 편차(Within)’와 ‘그룹 평균(Between)’으로 분해하여 모델에 투입함으로써, 편향 제거와 정보 활용이라는 두 마리 토끼를 모두 잡을 수 있는 강력한 방법입니다.

WaurimaL의 조언:

학교 데이터를 분석할 때, 무조건 RE만 돌리지 마세요. 설명변수를 학교 평균 중심으로(Group-mean centering) 변환하여 투입하는 하이브리드 접근법을 사용한다면, 훨씬 더 풍부하고 정확한 교육적 시사점을 얻을 수 있습니다.


📚 참고문헌 (APA Style)

  • Townsend, Z., Buckley, J., Harada, M., & Scott, M. A. (2013). The choice between fixed and random effects. In The SAGE Handbook of Multilevel Modeling (pp. 73-88). SAGE Publications.
  • Allison, P. D. (2009). Fixed effects regression models. SAGE.
  • Bafumi, J., & Gelman, A. (2006). Fitting multilevel models when predictors and group effects correlate. Paper presented at the annual meeting of the Midwest Political Science Association, Chicago, IL.
  • Hausman, J. A. (1978). Specification tests in econometrics. Econometrica, 46, 1251–1271.
  • Raudenbush, S. W., & Bryk, A. S. (2002). Hierarchical linear models: Applications and data analysis methods (2nd ed.). SAGE Publications.
  • Wooldridge, J. (2010). Econometric analysis of cross section and panel data. MIT Press.

Chap04. 베이지안 다층 모형(Bayesian Multilevel Models)

안녕하세요!

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

분석 도구로는 jamovi의 사용법을 설명하되, jamovi의 기반이 되는 R 코드를 함께 제시하여 모의 데이터 생성부터 분석, 시각화까지 완벽하게 구현해 드리겠습니다. 특히 오늘 다룰 문헌은 일반적인 다층모형을 넘어, 비선형 관계를 다루는 GAMM(일반화 가법 혼합 모형)STAR(구조적 가법 회귀) 모형까지 포괄하고 있으므로, 이를 구현하기 위해 R의 brms 패키지를 활용한 코드를 중점적으로 보여드리겠습니다.


1. 베이지안 추론: 요리사의 레시피와 할머니의 손맛

본격적인 수식에 들어가기 전에, 베이지안이 무엇인지 교육학적 관점에서 쉽게 풀어봅시다.

문헌에서는 베이지안 모형이 두 부분으로 구성된다고 합니다.

  1. 사전 분포(Prior Distribution): 데이터를 보기 전, 파라미터(모수)에 대해 우리가 가지고 있는 지식이나 믿음입니다.
  2. 관측 모형(Observation Model): 데이터가 주어졌을 때의 조건부 분포로, 빈도주의에서의 ‘우도(Likelihood)’에 해당합니다.

[예시: 김 교사의 학생 평가]

  • 빈도주의(Likelihood): 김 교사가 철수의 이번 수학 시험지(데이터)만 보고 점수를 매깁니다. 오직 ‘관측된 데이터’가 전부입니다.
  • 베이지안(Posterior): 김 교사는 철수가 평소에 수학을 아주 잘한다는 것(Prior)을 알고 있습니다. 이번 시험을 좀 못 봤더라도(Likelihood), “아, 실수를 좀 했구나” 하고 감안하여 최종 실력(Posterior)을 추정합니다.

이것이 바로 베이즈 정리입니다.

p(θ|y)p(y|θ)p(θ)p(\theta|y) \propto p(y|\theta) \cdot p(\theta)

즉, 사후 분포(Posterior) \propto 우도(Likelihood) ×\times 사전 분포(Prior) 입니다.


2. 교육 현장 시나리오 및 모의 데이터 생성 (R Code)

우리가 분석할 가상의 시나리오는 다음과 같습니다.

[시나리오: 이의초등학교의 수학 성취도 분석]

  • 데이터 구조: 학생(ii)이 학급(jj)에 소속된 2수준 구조 (Students nested in Classes).
  • 종속변수 (yy): 수학 성취도 점수.
  • 1수준 변수 (학생): 사교육 참여 시간(Time, 비선형적 관계 예상), 가정의 사회경제적 지위(SES).
  • 2수준 변수 (학급): 담임 교사의 효능감(Efficacy).
  • 특이사항: 사교육 시간은 처음에는 성적을 올리지만, 일정 시간이 지나면 피로도로 인해 효과가 떨어지는 비선형(Non-linear) 관계가 의심됩니다. 이는 문헌의 GAMM(Generalized Additive Multilevel Models) 부분과 연결됩니다.

이제 R을 사용하여 이 시나리오에 맞는 데이터를 생성해 보겠습니다.

R

# 필수 패키지 로드
if (!require("brms")) install.packages("brms")
if (!require("ggplot2")) install.packages("ggplot2")
if (!require("dplyr")) install.packages("dplyr")

library(brms)
library(dplyr)
library(ggplot2)

# 1. 데이터 생성 (재현성을 위해 시드 설정)
set.seed(2026)

n_classes <- 30      # 학급 수
n_students <- 20     # 학급당 학생 수
N <- n_classes * n_students

# 2수준(학급) 변수 생성
class_id <- rep(1:n_classes, each = n_students)
teacher_efficacy <- rnorm(n_classes, 0, 1) # 교사 효능감 (표준정규분포)
class_intercept <- rnorm(n_classes, 0, 2)  # 학급별 무작위 절편 (Random Intercept)

# 데이터 프레임 생성
data <- data.frame(class_id = factor(class_id))
data$teacher_eff <- rep(teacher_efficacy, each = n_students)
data$class_int <- rep(class_intercept, each = n_students)

# 1수준(학생) 변수 생성
data$SES <- rnorm(N, 0, 1) # 사회경제적 지위
data$Time <- runif(N, 0, 10) # 사교육 시간 (0~10시간)

# 비선형 효과 생성 (사교육 시간: 역 U자 형태) - 문헌의 P-spline 예시 관련 [cite: 201]
# 시간 효과: 3 * sin(Time/3)
time_effect <- 3 * sin(data$Time / 3) 

# 종속변수(수학 점수) 생성
# 수식: 절편 + SES효과 + 교사효능감 + 시간효과(비선형) + 학급무선효과 + 오차
data$Math <- 50 + (2 * data$SES) + (1.5 * data$teacher_eff) + 
             time_effect + data$class_int + rnorm(N, 0, 3)

# 데이터 확인
head(data)

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

3. 베이지안 다층 모형의 구조

문헌에 따르면, 일반적인 선형 혼합 모형(LMM)은 다음과 같이 표현됩니다.

y=Xβ+l=1LZlul+ϵy = X\beta + \sum_{l=1}^{L} Z_l u_l + \epsilon

우리 데이터에 적용하면 다음과 같습니다.

Mathij=β0+β1SESij+β2TeacherEffj+uj+ϵij\text{Math}_{ij} = \beta_0 + \beta_1 \text{SES}_{ij} + \beta_2 \text{TeacherEff}_j + u_{j} + \epsilon_{ij}

  • β\beta: 고정 효과(Fixed effects) – 전체적인 평균 효과.
  • uju_j: 학급별 무작위 효과(Random effects), ujN(0,σu2)u_j \sim N(0, \sigma_u^2).
  • ϵij\epsilon_{ij}: 오차항, ϵijN(0,σ2)\epsilon_{ij} \sim N(0, \sigma^2).

베이지안 접근에서는 여기서 멈추지 않고, β\betaσ2\sigma^2 같은 파라미터에도 사전 분포(Prior)를 부여합니다.

  • βN(c,C)\beta \sim N(c, C) (보통 정보를 주지 않는 무정보 사전분포나 약한 정보 사전분포 사용).
  • σ2IG(a,b)\sigma^2 \sim IG(a, b) (역감마 분포).

4. 분석 실행: jamovi 및 R (brms)

4.1 jamovi에서의 한계와 대안

jamovi의 기본 메뉴(Linear Models -> Mixed Models)는 빈도주의 방식(REML 등)을 사용합니다. 본 문헌에서 다루는 완전 베이지안 추론(Full Bayesian Inference), 특히 MCMC(마르코프 체인 몬테카를로) 시뮬레이션을 수행하기 위해서는 jamovi의 Rj 모듈(R 코드를 jamovi 안에서 실행하는 에디터)을 사용하거나 R을 직접 사용해야 합니다.

특히 문헌에서 강조하는 GAMM(일반화 가법 모형)P-spline(벌점화 스플라인)을 구현하기 위해 R의 brms 패키지를 사용하는 것이 가장 적합합니다.

4.2 R을 이용한 베이지안 다층 분석 (MCMC)

문헌에서는 비선형성을 다루기 위해 공변량의 효과를 f(x)f(x) 형태의 함수로 모델링하는 것을 제안합니다. 이를 GAMM이라고 합니다.

[분석 모델 설정]

  1. 기본 다층 모형: SES와 교사 효능감의 선형 효과.
  2. 스플라인 항: 사교육 시간(Time)은 비선형적이므로 s(Time)으로 설정.
  3. 무선 효과: 학급(class_id)에 따른 무선 절편.

R

# 베이지안 다층 모형 적합 (GAMM 포함)
# 문헌의 식 (4.13)과 유사한 형태 [cite: 357]
model_bayes <- brm(
  formula = Math ~ SES + teacher_eff + s(Time) + (1 | class_id),
  data = data,
  family = gaussian(),
  prior = c(
    prior(normal(0, 10), class = "b"),    # 고정 효과에 대한 사전 분포
    prior(cauchy(0, 2), class = "sd"),    # 무선 효과 표준편차에 대한 사전 분포
    prior(cauchy(0, 2), class = "sigma")  # 잔차 표준편차에 대한 사전 분포
  ),
  chains = 2, iter = 2000, warmup = 1000, # MCMC 설정 [cite: 320]
  cores = 2,
  seed = 2026
)

# 결과 요약
summary(model_bayes)

이 코드는 문헌에서 설명한 Gibbs Sampler 혹은 Metropolis-Hastings 알고리즘의 최신 변형(NUTS)을 사용하여 사후 분포에서 표본을 추출합니다.


5. 결과 해석 및 시각화

분석이 완료되면, 문헌의 [Table 4.1]과 같은 형태로 결과를 해석해야 합니다. 베이지안에서는 p-value 대신 신용 구간(Credible Interval)을 사용합니다.

5.1 수치적 결과 해석 (예시 출력 기반)

변수Posterior Mean (사후평균)95% CI (신용구간)Rhat설명
Intercept50.12[48.5, 51.7]1.00전체 평균 수학 점수
SES2.05[1.88, 2.22]1.00SES가 1단위 오를 때 점수 2.05점 상승
TeacherEff1.48[1.20, 1.76]1.00교사 효능감이 높으면 점수 상승 (유의함)
s(Time)1.00비선형 효과 (아래 그래프 참조)
sd(Intercept)2.10[1.50, 2.80]1.00학급 간 점수 차이(변동성)
  • 해석: 95% 신용구간이 0을 포함하지 않으면, 해당 변수는 통계적으로 의미 있는 효과가 있다고 봅니다. 위 결과에서 SES와 교사 효능감 모두 0을 포함하지 않으므로 유의합니다.
  • Rhat: 이 값이 1.1보다 작아야 MCMC 체인이 잘 수렴했다는 뜻입니다.

5.2 비선형 효과 시각화 (P-spline)

사교육 시간(Time)과 성적의 비선형 관계를 그려보겠습니다.

R

# 비선형 효과 시각화
conditional_effects(model_bayes, effects = "Time")

이 코드를 실행하면 역 U자 형태의 그래프가 나타납니다. 초기에는 시간이 늘수록 점수가 오르지만, 특정 시간 이후에는 정체되거나 떨어지는 패턴을 확인할 수 있습니다.

이것이 바로 문헌에서 강조하는 “선형 가정의 한계를 넘어서는 유연성”입니다. 단순히 선형 회귀를 했다면 이 중요한 교육적 시사점(과도한 사교육은 효과가 없다)을 놓쳤을 것입니다.


6. 모형 비교 및 평가 (DIC)

모형이 데이터에 잘 맞는지 어떻게 알까요? 문헌에서는 DIC (Deviance Information Criterion)를 소개합니다.

  • DIC: 낮을수록 좋은 모형입니다.
  • 비교: 무선 효과가 없는 모형 vs 있는 모형, 혹은 선형 모형 vs 비선형(Spline) 모형을 비교할 때 사용합니다.

R

# DIC 계산 (brms에서는 waic나 loo를 더 권장하지만, 문헌에 따라 DIC 개념 설명)
# 여기서는 LOO (Leave-One-Out cross-validation)로 대체하여 보여줌 (DIC의 현대적 대안)
loo(model_bayes)

문헌의 사례연구에서도 무선 효과를 포함했을 때 DIC가 140점 이상 감소하여 더 우수한 모형임이 입증되었습니다.


7. 심화: 공간 통계 및 구조적 가법 회귀 (STAR)

이 문헌의 특징적인 부분은 STAR (Structured Additive Regression) 모델입니다.

만약 우리 데이터에 “학교의 위치(위도, 경도)” 정보가 있다면 어떻게 될까요?

η=Xβ+Zgroupsugroups+fgeo(s)\eta = X\beta + Z_{groups}u_{groups} + f_{geo}(s)

  • fgeo(s)f_{geo}(s): 공간적 효과. 부유한 지역에 있는 학교인지 등을 공간 좌표로 반영합니다.
  • R의 brms에서는 gp(latitude, longitude) 함수를 통해 이를 쉽게 구현할 수 있습니다. 이는 지리적 위치에 따른 성적 차이를 지도 위에 등고선처럼 그려낼 수 있게 해 줍니다.

8. 결론 및 제언

오늘 우리는 숙명초등학교 데이터를 예시로 베이지안 다층 모형을 살펴보았습니다.

  1. 유연성: 베이지안 접근은 정규분포 가정이 깨지거나, 비선형 관계(P-spline)가 있을 때 훨씬 유연하게 대처합니다.
  2. 직관성: 신용구간(Credible Interval)은 “참값이 이 구간 안에 있을 확률이 95%”라고 직관적으로 말할 수 있습니다.
  3. 확장성: 공간 정보, 텍스트 데이터 등 복잡한 구조의 데이터를 다층 모형에 쉽게 결합할 수 있습니다(STAR 모델).

[WaurimaL의 한마디]

“빈도주의 통계가 ‘엄격한 요리법’이라면, 베이지안은 ‘맛을 보며 간을 맞추는 과정’입니다. 교육 현장의 데이터는 복잡하고 비선형적입니다. 오늘 배운 코드를 활용해 여러분의 데이터를 새로운 시각으로 분석해 보시기 바랍니다.”


참고문헌 (References)

  • Fahrmeir, L., Kneib, T., & Lang, S. (2014). Bayesian Multilevel Models. In The SAGE Handbook of Multilevel Modeling (pp. 53-71). SAGE Publications.
  • Brezger, A., & Lang, S. (2006). Generalized additive regression based on Bayesian P-splines. Computational Statistics & Data Analysis, 50(4), 967-991.
  • Gelman, A., Carlin, J. B., Stern, H. S., & Rubin, D. B. (2003). Bayesian Data Analysis. Chapman and Hall/CRC.
  • Spiegelhalter, D. J., Best, N. G., Carlin, B. P., & van der Linde, A. (2002). Bayesian measures of model complexity and fit. Journal of the Royal Statistical Society: Series B (Statistical Methodology), 64(4), 583-639.

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.