글쓴이 보관물: admin

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.

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.

Chap 39. 구조방정식 모형에 대한 기계학습적 접근: 설명과 예측의 융합

안녕하세요, 이번에는 우리가 그동안 배웠던 구조방정식 모형(SEM)이라는 탄탄한 이론적 틀에, 최근 데이터 과학의 핵심인 기계학습(Machine Learning)을 어떻게 결합할 수 있는지 다루어 보려고 합니다.

“이론 검증하려면 SEM을 쓰고, 예측하려면 머신러닝을 쓰는 거 아닌가요?”라고 생각할 수 있습니다. 맞습니다. 하지만 연구를 하다 보면 “이론은 있는데 뭔가 데이터에 숨겨진 패턴이 더 있을 것 같다”는 생각이 들 때가 있죠? 바로 그 지점, 이론 개발(Theory Development) 단계에서 이 두 가지의 만남이 빛을 발합니다.

이 내용에 대해 우리 교육학 분야의 예시를 곁들여 아주 상세하게 풀어보겠습니다. 분석 도구는 jamovi를 기본으로 하되, 현재 jamovi의 GUI만으로는 구현이 어려운 고급 기계학습 기능(Regularized SEM, SEM Trees)은 R 코드를 통해 구현하는 방법을 보여드리겠습니다.

1. 왜 SEM에 기계학습을 섞나요?

우리가 연구를 수행하는 과정은 크게 세 단계로 나뉩니다.

  1. 이론 생성 (Theory Generation): 아무것도 모를 때 가설을 만드는 단계 (주로 탐색적 요인분석 EFA 사용).
  2. 이론 평가 (Theory Appraisal): 이론이 맞는지 확인하는 단계 (주로 확인적 요인분석 CFA, SEM 사용).
  3. 이론 개발 (Theory Development): 이 둘 사이의 중간 단계. 이론의 뼈대는 있지만, 세부적인 경로를 수정하거나 숨겨진 이질성을 찾고 싶을 때입니다.

기존의 SEM은 “이 모형이 참이다”라고 가정하고 적합도를 보지만, 기계학습은 “어떤 모형이 미래 데이터를 가장 잘 예측하는가?”에 초점을 둡니다. 이 둘을 섞으면, 이론적 설명력을 잃지 않으면서도 데이터가 말해주는 새로운 패턴(예측력)을 찾아내어 이론을 정교화할 수 있습니다.

오늘 배울 핵심 무기는 두 가지입니다.

  1. 정규화된 SEM (Regularized SEM): 변수가 너무 많을 때 진짜 중요한 경로만 남기는 방법.
  2. SEM 트리 (SEM Trees): 데이터 안에 숨겨진 하위 집단을 자동으로 찾아주는 방법.

2. 정규화된 SEM (Regularized SEM): “복잡한 건 딱 질색이야”

2.1 개념 이해하기

여러분이 ‘학업 성취도’에 영향을 미치는 요인을 연구한다고 해봅시다. 가정환경, 친구 관계, 스마트폰 시간, 독서량, 수면 시간… 후보 변수만 50개가 넘습니다. 이걸 다 넣고 SEM을 돌리면? 모형이 터지거나(적합도 엉망), 다중공선성 때문에 해석이 불가능해집니다.

이때 Regularized SEM은 모형의 적합도 함수(FMLF_{ML})에 벌점(Penalty, λ\lambda)을 부과합니다.

Flasso=FML+λ|β|F_{lasso} = F_{ML} + \lambda \sum |\beta|

쉽게 말해, “회귀계수(β\beta)가 0이 아니면 벌점을 주겠다!”는 겁니다. 모형은 적합도도 좋게 하면서 벌점도 피해야 하니, 정말 중요한 변수의 계수만 남기고 나머지는 0으로 만들어버립니다(Variable Selection). 이것이 바로 Lasso(라쏘) 방법입니다.

  • Ridge(릿지): 계수를 0으로 만들지는 않고 작게만 만듭니다. 변수 간 상관관계가 높을 때 유용합니다.
  • Elastic Net: Lasso와 Ridge를 섞은 것입니다.

2.2 언제 쓰나요?

  • 변수가 너무 많을 때: 탐색적으로 중요한 경로를 찾고 싶을 때.
  • 샘플 수가 적을 때: 일반적인 SEM보다 추정 오차가 적을 수 있습니다.
  • 수정지수(Modification Indices)의 대안: 수정지수는 하나씩 경로를 추가하는(Forward) 방식이지만, Regularization은 다 넣고 쳐내는(Backward) 방식이라 더 전체적인 관점을 가집니다.

3. SEM 트리 (SEM Trees): “너희들은 서로 다른 성장 곡선을 그리는구나”

3.1 개념 이해하기

우리가 ‘잠재성장모형’으로 학생들의 성적 변화를 본다고 합시다. 보통은 성별(남/여)로 집단을 나눠서 비교하죠(다중집단 분석). 그런데 만약 “경제적 수준이 낮으면서 독서를 안 하는 학생들”만 성적이 떨어진다면요? 이런 복잡한 조합은 우리가 미리 알기 어렵습니다.

SEM Tree는 의사결정나무(Decision Tree) 기법을 SEM에 적용한 것입니다.

  1. 전체 데이터로 SEM을 돌립니다.
  2. 여러 배경 변수(성별, 지역, 소득 등)를 기준으로 데이터를 쪼개봅니다.
  3. 어떤 변수로 쪼개야 모형의 파라미터(평균, 경로계수 등) 차이가 가장 크게 나는지 확인합니다.
  4. 가장 차이가 큰 변수로 데이터를 나누고, 이 과정을 반복합니다.

결국, 모형의 파라미터가 동질적인 하위 집단을 데이터가 스스로 찾아줍니다.

3.2 핵심 알고리즘

과거에는 데이터를 쪼갤 때마다 SEM을 다시 돌려야 해서 시간이 엄청 걸렸습니다. 하지만 최근에는 점수 기반(Score-based) 통계량을 사용하여, 모형을 다시 돌리지 않고도 “이 변수로 나누면 모형이 달라질까?”를 빠르게 계산합니다.

4. [실습] 가상 시나리오: “디지털 리터러시 성장 연구”

자, 이제 이 이론을 실제 교육 현장에 적용해 봅시다. 제가 여러분을 위해 모의 데이터를 생성했습니다.

4.1 연구 시나리오

  • 주제: 중학생의 ‘디지털 리터러시(Digital Literacy)’가 3년간 어떻게 변하는가?
  • 대상: 중학교 1학년 500명
  • 측정: 중1, 중2, 중3 시점의 디지털 리터러시 점수 (DL_T1, DL_T2, DL_T3)
  • 예측 변수(Covariates):
    1. Gender (성별: 0=여, 1=남)
    2. SES (사회경제적 지위: 연속형)
    3. ScreenTime (하루 스크린 타임)
    4. CodingExp (코딩 경험 유무: 0=무, 1=유)
    5. Reading (독서 습관)
    6. ParentSupport (부모 지원)
    7. PeerActivity (또래 활동)
    8. Sleep (수면 시간)
    9. SchoolType (학교 유형)
    10. Location (거주 지역)

우리는 여기서 잠재성장모형(LGM)을 기본 틀(Template Model)로 사용합니다.

4.2 데이터 생성 및 분석 (R Code for jamovi Rj Editor)

jamovi에는 아직 SEM Tree 기능이 내장되어 있지 않으므로, jamovi 내의 ‘Rj Editor’ 모듈이나 RStudio를 사용하여 다음 코드를 실행한다고 가정합니다.

R

# 1. 데이터 생성 (가상의 교육 데이터)
set.seed(2026)
N <- 500
library(MASS)

# 공변량 생성
Gender <- rbinom(N, 1, 0.5)
CodingExp <- rbinom(N, 1, 0.3) # 30%가 코딩 경험 있음
SES <- rnorm(N, 0, 1)
Reading <- rnorm(N, 0, 1)
ScreenTime <- rnorm(N, 5, 2)
# 나머지 변수들은 잡음(Noise) 변수로 생성
ParentSupport <- rnorm(N, 0, 1)
PeerActivity <- rnorm(N, 0, 1)
Sleep <- rnorm(N, 7, 1)

# 잠재성장모형 파라미터 설정
# 코딩 경험이 있으면 초기치(Intercept)가 높고, SES가 높으면 기울기(Slope)가 가파르도록 설정
Intercept <- 10 + 2*CodingExp + 0.5*SES + rnorm(N, 0, 2)
Slope <- 0.5 + 1.5*CodingExp + 0.3*Reading + rnorm(N, 0, 1) # 코딩경험이 성장률에 큰 영향

# 관측 변수 생성 (Time 1, 2, 3)
DL_T1 <- Intercept + 0*Slope + rnorm(N, 0, 1)
DL_T2 <- Intercept + 1*Slope + rnorm(N, 0, 1)
DL_T3 <- Intercept + 2*Slope + rnorm(N, 0, 1)

Data <- data.frame(DL_T1, DL_T2, DL_T3, Gender, SES, CodingExp, Reading, 
                   ScreenTime, ParentSupport, PeerActivity, Sleep)

# 2. 기본 잠재성장모형 정의 (lavaan 문법)
library(lavaan)
model_growth <- '
  i =~ 1*DL_T1 + 1*DL_T2 + 1*DL_T3
  s =~ 0*DL_T1 + 1*DL_T2 + 2*DL_T3
'

# 3. Regularized SEM (regsem) - 변수 선택
# 누가 Intercept(초기 수준)와 Slope(변화율)을 예측하는지 변수 8개를 다 넣고 돌려봄
library(regsem)
# 주의: regsem은 실제 구동 시 좀 더 복잡한 설정이 필요하나 개념적으로 제시함
# 실제로는 cv_regsem 등을 통해 최적의 lambda를 찾음

# 4. SEM Tree (semtree) - 이질적 집단 탐색
library(semtree)
# 모형 빌드
fit <- growth(model_growth, data=Data)
# 트리 생성 (모든 공변량을 후보로 투입)
tree <- semtree(fit, data=Data, predictors=c("Gender", "SES", "CodingExp", "Reading", 
                                             "ScreenTime", "ParentSupport", "Sleep"))
# 결과 플롯
plot(tree)

4.3 분석 결과 해석 (시뮬레이션 결과)

여러분이 위 코드를 실행했을 때 나올 결과를 해석하는 방법을 알려드리겠습니다.

(1) Regularized SEM 결과 해석

Regularized SEM은 10개의 예측 변수 중에서 불필요한 변수의 경로계수를 0으로 만들어 버립니다.

  • 결과: Sleep, ParentSupport, Location 등의 변수는 초기치(i)와 기울기(s)로 가는 경로계수가 0이 되었습니다.
  • 생존한 변수:
    • CodingExp \rightarrow Slope (강한 양의 효과): 코딩 경험이 있는 학생은 없는 학생보다 디지털 리터러시가 훨씬 빠르게 성장합니다.
    • SES \rightarrow Intercept: 가정 형편이 좋을수록 초기 점수가 높습니다.
  • 의의: 복잡한 변수들 중에서 진짜 범인(영향 요인)을 찾아냈습니다! 연구자는 이를 바탕으로 “코딩 교육이 디지털 리터러시 성장 속도의 핵심”이라는 이론을 정교화할 수 있습니다.

(2) SEM Tree 결과 해석

SEM Tree는 데이터를 나무 가지치기하듯 나누어 줍니다. 결과 그림이 다음과 같이 나왔다고 상상해 봅시다.

  • 첫 번째 분기 (Root Split): 가장 먼저 CodingExp(코딩 경험) 유무로 갈라집니다. 이는 코딩 경험이 전체 모형(성장 곡선)을 가장 크게 다르게 만든다는 뜻입니다.
    • Node 2 (코딩 무): 평균 성장률(Slope Mean) = 0.5
    • Node 3 (코딩 유): 평균 성장률(Slope Mean) = 2.0 (훨씬 가파르게 성장!)
  • 두 번째 분기 (Child Split): 코딩 경험이 없는 집단(Node 2) 내에서, 다시 Reading(독서 습관)으로 갈라집니다.
    • 코딩은 안 했지만 독서를 많이 한 학생들은 그래도 성장이 어느 정도 일어납니다.
  • 해석: 이 결과는 단순히 선형적인 관계뿐만 아니라, 상호작용(Interaction)을 보여줍니다. “코딩 경험이 없더라도 독서를 많이 하면 보완이 된다”는 식의 교육적 처방을 내릴 수 있습니다.

5. 논의: 기계학습을 SEM에 쓸 때 주의할 점

이 멋진 도구들을 사용할 때도 주의사항이 있습니다.

  1. 과적합(Overfitting)의 위험: 기계학습은 데이터에 너무 과하게 맞춰질 수 있습니다. 그래서 교차 타당화(Cross-validation) 같은 기법을 꼭 써야 합니다.
  2. 데이터 수: SEM Tree는 데이터를 쪼개기 때문에 샘플 수가 꽤 많아야 합니다. 수백 명에서 수천 명이 필요할 수 있습니다.
  3. 재현성(Reproducibility): 분석 과정이 복잡하므로, 어떤 파라미터(설정값)를 썼는지 코드와 함께 투명하게 공개해야 합니다.

6. 결론: 연구자의 직관과 AI의 만남

Regularized SEM과 SEM Tree는 우리의 이론적 직관을 대체하는 것이 아니라, 보완해 줍니다.

  • Regularized SEM은 수많은 변수 속에서 ‘신호’를 찾아줍니다.
  • SEM Tree는 전체 평균에 가려져 있던 ‘소외된 집단’이나 ‘특이 집단’을 찾아줍니다.

이 방법들을 통해 여러분의 교육학 이론이 단순히 “관계가 있다”를 넘어, “누구에게, 어떤 조건에서, 왜 그런 관계가 나타나는지”를 밝히는 정교한 이론으로 발전하기를 바랍니다.

참고문헌

  • Arnold, M., Voelkle, M. C., & Brandmaier, A. M. (2021). Score-guided structural equation model trees. Frontiers in Psychology, 11, Article 3913.
  • Brandmaier, A. M., von Oertzen, T., McArdle, J. J., & Lindenberger, U. (2013). Structural equation model trees. Psychological Methods, 18(1), 71-86.
  • Breiman, L. (2001). Random forests. Machine Learning, 45(1), 5-32.
  • Haig, B. D. (2014). Investigating the psychological world: Scientific method in the behavioral sciences. Cambridge, MA: MIT Press.
  • Jacobucci, R., Grimm, K. J., & McArdle, J. J. (2016). Regularized structural equation modeling. Structural Equation Modeling, 23(4), 555-566.
  • Nelson, N. A., Jacobucci, R., Grimm, K. J., & Zelinski, E. M. (2020). The bidirectional relationship between physical health and memory. Psychology and Aging, 35(8), 1140-1153.
  • Zeileis, A., Hothorn, T., & Hornik, K. (2008). Model-based recursive partitioning. Journal of Computational and Graphical Statistics, 17(2), 492-514.

Chap 38. 베이지안 구조방정식 모형(Bayesian Structural Equation Modeling, BSEM)

안녕하세요. 이번에는 통계학의 새로운 지평인 베이지안 구조방정식 모형(Bayesian Structural Equation Modeling, BSEM)의 세계로 들어가는 것을 돕고자 합니다. 2012년 초판 이후, 베이지안 추론은 사회과학 및 행동과학 분야에서 빈도주의(Frequentist) 방법론의 강력한 대안으로 자리 잡았습니다.

특히 이번 내용에서는 Hamiltonian Monte Carlo (HMC) 알고리즘과 Stan 같은 오픈 소스 소프트웨어의 발전에 힘입어 더욱 정교해진 BSEM의 기초와 확장에 대해 다룰 것입니다. 다소 복잡할 수 있는 내용이지만, 학교 현장의 예시를 통해 알기 쉽게 풀어보겠습니다.

분석 도구로는 우리가 수업 시간에 자주 다루는 jamovi를 기본으로 하되, 본문에서 강조하는 blavaan 패키지의 고급 기능을 구현하기 위해 jamovi 내의 Rj Editor (또는 R 환경)를 활용하는 코드를 함께 제시하겠습니다.

1. 왜 베이지안인가?

우리는 그동안 “p-value가 .05보다 작은가?”에 집착해 왔습니다. 하지만 빈도주의 통계는 “모수(parameter)는 고정되어 있고 데이터가 확률적”이라고 봅니다. 반면, 베이지안 통계는 “데이터는 고정되어 있고, 모수 자체가 확률 분포를 가진다”고 봅니다.

베이지안 접근의 핵심 장점은 다음과 같습니다.

  1. 불확실성의 정량화: 모수 추정치 주변의 구간(신용구간, Credible Interval)이 빈도주의의 신뢰구간보다 더 직관적이고 솔직합니다.
  2. 사전 정보의 활용: 이전 연구 결과나 전문가의 의견을 ‘사전 분포(Prior)’로 모형에 반영할 수 있습니다.
  3. 복잡한 모형 해결: 빈도주의 방식(최대우도법 등)으로 수렴하지 않는 복잡한 모형도 MCMC 샘플링을 통해 추정해 낼 수 있습니다.

2. 베이지안 추론의 핵심 요소

2.1 베이즈 정리 (Bayes’ Theorem)

베이지안 추론의 심장은 다음 식입니다.

p(θ|y)=p(y|θ)p(θ)p(y)p(\theta|y) = \frac{p(y|\theta)p(\theta)}{p(y)}

  • p(θ|y)p(\theta|y): 사후 분포(Posterior). 데이터를 관측한 후의 모수(지식).
  • p(y|θ)p(y|\theta): 우도(Likelihood). 데이터가 관측될 확률(모형).
  • p(θ)p(\theta): 사전 분포(Prior). 데이터를 보기 전의 믿음.
  • p(y)p(y): 정규화 상수.

즉, “사후 지식 = (데이터의 증거 × 사전 지식) / 상수” 입니다.

2.2 사전 분포(Prior)의 종류

교육학 예시로 설명해 봅시다. “영재 학급 학생들의 평균 IQ(θ\theta)”를 추정한다고 가정합니다.

  1. 무정보 사전 분포 (Noninformative Prior): “나는 아무것도 모른다.”
    • 균등 분포(Uniform Distribution) U(0,200)U(0, 200) 등을 사용합니다. 0에서 200 사이의 모든 값이 동등한 확률을 가집니다.
    • 데이터가 스스로 말하게 내버려 두는 방식입니다.
  2. 약한 정보 사전 분포 (Weakly Informative Prior): “정확히는 모르지만, 터무니없는 값은 아닐 것이다.”
    • 완전한 무정보보다는 낫고, 특정 이론에 너무 치우치지 않도록 합니다. 표본 크기가 작을 때 유용합니다.
  3. 정보적 사전 분포 (Informative Prior): “기존 연구에 따르면 평균 130 정도일 것이다.”
    • 정규분포 N(130,5)N(130, 5) 처럼 구체적인 평균과 분산을 지정합니다.

3. MCMC 샘플링과 HMC

베이지안 추정은 복잡한 적분 계산이 필요합니다. 이를 해결하기 위해 MCMC(Markov Chain Monte Carlo) 시뮬레이션을 사용합니다.

3.1 기존 방법: MH와 Gibbs

과거에는 Metropolis-Hastings (MH)나 Gibbs 샘플러를 썼습니다. 하지만 모형이 복잡해지면(차원이 높아지면) 이 알고리즘들은 “랜덤 워크(Random Walk)” 방식이라 효율이 떨어지고 시간이 오래 걸립니다.

3.2 현대적 방법: Hamiltonian Monte Carlo (HMC)와 NUTS

이 챕터에서 강조하는 것은 HMC입니다.

  • 비유: MH가 눈 가리고 산을 더듬어 내려가는 등산객이라면, HMC는 물리학의 원리를 이용해 썰매를 타고 등고선(전형적 집합, Typical Set)을 미끄러지듯 이동하는 것과 같습니다.
  • NUTS (No-U-Turn Sampler): HMC는 설정해야 할 파라미터가 많은데, NUTS는 이를 자동으로 조정하여 사용자가 쓰기 쉽게 만든 알고리즘입니다. Stanblavaan이 이 방식을 씁니다.

4. 실습: BSEM 분석 시나리오 및 데이터 생성

이제 실제 교육 데이터를 가정하여 분석해 봅시다.

4.1 시나리오: 교사의 자율성 지지가 학생의 학업 성취에 미치는 영향

  • 연구 문제: 과학 교사의 자율성 지지(Support)가 학생의 과학 흥미(Interest)를 매개로 학업 성취(Achievement)에 영향을 미치는가?
  • 분석 도구: R (jamovi Rj Editor 활용 가능) 및 blavaan 패키지.

4.2 데이터 생성 (R Code)

먼저 모의 데이터를 생성하겠습니다.

R

# 필요한 패키지 로드 (jamovi Rj Editor에서 실행 시 install.packages는 생략 가능할 수 있음)
if (!require("lavaan")) install.packages("lavaan")
if (!require("blavaan")) install.packages("blavaan")
if (!require("semTools")) install.packages("semTools")

set.seed(2026)

# 표본 크기
n <- 300

# 잠재변수 생성
# Support (교사 지지), Interest (흥미), Achieve (성취)
# 구조: Support -> Interest -> Achieve
Support <- rnorm(n, 0, 1)
Interest <- 0.6 * Support + rnorm(n, 0, 0.8) # 매개변수 (경로계수 0.6)
Achieve <- 0.5 * Interest + 0.3 * Support + rnorm(n, 0, 0.8) # 종속변수

# 관측변수 생성 (측정모형)
# 각 잠재변수당 3개의 문항
y_data <- data.frame(
  S1 = 1.0*Support + rnorm(n, 0, 0.5),
  S2 = 0.9*Support + rnorm(n, 0, 0.5),
  S3 = 1.1*Support + rnorm(n, 0, 0.5),
  
  I1 = 1.0*Interest + rnorm(n, 0, 0.5),
  I2 = 0.8*Interest + rnorm(n, 0, 0.5),
  I3 = 1.2*Interest + rnorm(n, 0, 0.5),
  
  A1 = 1.0*Achieve + rnorm(n, 0, 0.5),
  A2 = 0.9*Achieve + rnorm(n, 0, 0.5),
  A3 = 1.0*Achieve + rnorm(n, 0, 0.5)
)

head(y_data)

4.3 BSEM 모형 명세 및 추정 (blavaan)

blavaan은 R의 lavaan 문법을 그대로 쓰면서 베이지안 추정을 수행합니다.

R

# 모형 명세 (lavaan 문법)
model_syntax <- '
  # 측정 모형
  Support =~ S1 + S2 + S3
  Interest =~ I1 + I2 + I3
  Achieve =~ A1 + A2 + A3
  
  # 구조 모형
  Interest ~ a*Support
  Achieve ~ b*Interest + c*Support
  
  # 간접 효과
  ab := a*b
'

# 베이지안 추정 (Default priors 사용)
# mcmcfile=TRUE로 설정하면 Stan 코드 확인 가능
fit_bayes <- bsem(model_syntax, data = y_data, 
                  n.chains = 3, burnin = 500, sample = 1000,
                  target = "stan") 

summary(fit_bayes)

WaurimaL의 팁: jamovi의 semlj 모듈을 사용하면 메뉴 방식으로 SEM을 돌릴 수 있지만, 본문에서 다루는 세밀한 베이지안 설정(HMC, NUTS)을 위해서는 위와 같이 R 코드를 Rj Editor에 붙여넣어 실행하는 것이 가장 정확합니다.

5. 수렴 진단 (Convergence Diagnostics)

베이지안 분석에서는 결과가 하나의 점(point)으로 수렴하는 것이 아니라, 분포로 수렴해야 합니다. 분석이 잘 되었는지 확인하는 방법입니다.

  1. Trace Plots (이력 도표): 애벌레(caterpillar)처럼 뚱뚱하고 털이 난 모양이어야 합니다. 사슬(chain)들이 서로 잘 섞여 있어야 합니다.
  2. Posterior Density Plots (사후 밀도 도표): 매끄러운 정규분포 모양이면 좋습니다. 봉우리가 두 개(bimodality)라면 수렴에 문제가 있는 것입니다.
  3. Autocorrelation (자기상관): 시차(lag)가 늘어날수록 상관이 빨리 0으로 떨어져야 합니다.
  4. R^\hat{R} (Potential Scale Reduction Factor): 사슬 간 분산과 사슬 내 분산의 비율입니다. 1.0에 가까워야 하며, 1.01보다 크면 수렴하지 않은 것으로 봅니다. 최근 Stan에서는 Split R^\hat{R}을 사용하여 더 민감하게 진단합니다.

R

# 수렴 진단 그래프 (blavaan 기능)
plot(fit_bayes, type = "trace")
plot(fit_bayes, type = "acf")
blavInspect(fit_bayes, "neff") # 유효 표본 크기 확인
blavInspect(fit_bayes, "psrf") # R-hat 확인

6. 모형 평가 및 선택

6.1 사후 예측 점검 (Posterior Predictive Checking, PPC)

내 모형이 생성한 가상의 데이터(y~\tilde{y})가 실제 데이터(yy)와 얼마나 비슷한지 봅니다.

  • Bayesian p-value: 가상 데이터가 실제 데이터보다 극단적인 비율입니다. 0.5 근처면 모형이 데이터를 잘 설명하는 것이고, 0.05 미만이나 0.95 초과면 적합도에 문제가 있습니다.

6.2 모형 비교 지수

어떤 모형이 좋은 모형일까요?

  • BIC: 전통적인 지수이지만 베이지안에서는 한계가 있습니다.
  • DIC: 베이지안 편차 정보 기준. 작을수록 좋습니다.
  • LOOIC (Leave-One-Out Information Criterion): 최근 가장 권장되는 방법입니다. 데이터 하나를 빼고 예측해 보는 교차타당도(LOOCV) 개념을 근사한 것입니다.

R

# 적합도 지수 확인
fitMeasures(fit_bayes, c("bic", "dic", "looic"))

6.3 베이지안 모형 평균화 (Bayesian Model Averaging, BMA)

하나의 모형만 선택하는 것은 위험할 수 있습니다. BMA는 여러 가능한 모형들의 결과를 그 모형이 맞을 확률(Posterior Model Probability)로 가중 평균하여 예측력을 높입니다. 교육 현장처럼 불확실성이 큰 경우 유용합니다.

7. 고급 확장: 사전 분포를 통한 유연성

BSEM의 진정한 힘은 ‘유연성’에 있습니다.

7.1 근사 0 사전 분포 (Near-Zero Priors)와 CFA

전통적 CFA에서는 교차 적재량(cross-loading)을 무조건 0으로 고정합니다. 이는 현실적이지 않습니다. BSEM에서는 이를 “정확히 0은 아니지만 0에 아주 가까운(Approximately Zero)” 정규분포 N(0,0.01)N(0, 0.01)로 설정할 수 있습니다.

이렇게 하면 모형 적합도를 개선하면서도 이론적 구조를 유지할 수 있습니다.

7.2 근사 측정 불변성 (Approximate Measurement Invariance)

남녀 집단 간 비교를 할 때, 절편이나 적재량이 ‘완벽히’ 같을 필요는 없습니다. 그 차이가 근사적으로 0 (DifferenceN(0,0.001)Difference \sim N(0, 0.001))이라고 가정함으로써, 엄격한 불변성 기각 문제를 해결할 수 있습니다.

7.3 베이지안 정규화 (Regularization): Ridge & Lasso

표본은 적은데 변수가 많을 때(과적합 위험), 계수를 0으로 수축(shrinkage)시키는 사전 분포를 사용합니다.

  • Ridge: 정규분포 사전 분포 사용 (L2-norm).
  • Lasso: 이중 지수(Double Exponential) 또는 라플라스 분포 사용 (L1-norm). 계수를 0으로 더 강하게 보냅니다.

R

# 예: Lasso 패널티를 적용한 모형 (blavaan syntax 예시)
# dp는 double exponential(Lasso)의 파라미터
# prior("double_exp(0, 1)", coefficients) 와 같은 형태로 설정 가능

8. 결론

베이지안 SEM은 단순한 ‘또 다른 추정 방법’이 아닙니다. 이것은 연구자가 가진 사전 지식을 모형에 명시적으로 포함하고, 불확실성을 정직하게 다루며, 엄격한 빈도주의 제약을 유연하게 풀어주는 실용적인 도구입니다.

이 글에서 배운 HMC 알고리즘, 수렴 진단, LOOIC, 그리고 정보적 사전 분포의 활용은 여러분이 교육 현장의 복잡한 데이터를 더 깊이 이해하는 데 큰 도움이 될 것입니다.

참고문헌

  • Betancourt, M. (2018). A conceptual introduction to Hamiltonian Monte Carlo. arXiv preprint arXiv:1701.02434.
  • Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., & Rubin, D. B. (2014). Bayesian data analysis (3rd ed.). Chapman and Hall/CRC.
  • Kaplan, D., & Depaoli, S. (2012). Bayesian structural equation modeling. In R. H. Hoyle (Ed.), Handbook of structural equation modeling (pp. 650-673). Guilford Press.
  • Muthén, B. O., & Asparouhov, T. (2012). Bayesian structural equation modeling: A more flexible representation of substantive theory. Psychological Methods, 17(3), 313–335.
  • Vehtari, A., Gelman, A., & Gabry, J. (2017). Practical Bayesian model evaluation using leave-one-out cross-validation and WAIC. Statistics and Computing, 27(5), 1413–1432.
  • van de Schoot, R., Winter, S. D., Zondervan-Zwijnenburg, M., Ryan, O., & Depaoli, S. (2017). A systematic review of Bayesian applications in psychology: The last 25 years. Psychological Methods, 22(2), 217–239.