태그 보관물: r

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.

Chap 37. 비선형 구조방정식 모형 (Nonlinear Structural Equation Models)

안녕하세요! 이번에는 구조방정식 모형(SEM)의 가장 흥미롭고 도전적인 영역인 “비선형 구조방정식 모형(Nonlinear Structural Equation Models; NSEMs)을 탐구해 보겠습니다.

많은 연구자나 학생들이 “변수 간의 관계는 직선(선형)이다”라는 가정하에 분석을 수행합니다. 하지만, 교육 현장의 실제 데이터는 어떤가요? 학습 시간이 늘어난다고 성적이 무한정 오르나요? (지치면 떨어지겠죠?) 흥미가 성취도에 미치는 영향이 모든 학생에게 똑같을까요? (효능감에 따라 다르겠죠?)

오늘은 현실을 더 정교하게 반영하는 비선형 모형들을 jamovi와 R을 활용해 배워보겠습니다.

1. 왜 비선형인가?

전통적인 SEM은 변수 간의 관계를 선형(linear)으로 가정합니다. 하지만 인간의 행동, 능력, 태도는 단순히 직선으로 설명하기 어려운 경우가 많습니다.

  • 포화 효과(Saturation): 초기에는 투입 효과가 크지만 갈수록 줄어드는 경우.
  • 임계점(Threshold): 특정 수준을 넘어서야 효과가 나타나는 경우.
  • 상호작용(Interaction): 한 변수의 효과가 다른 변수의 수준에 따라 달라지는 경우.

Harring과 Zou(저자)는 이러한 복잡한 관계를 다루기 위해 일반 비선형 다층 구조방정식 혼합 모형(GNM-SEMM)이라는 통합된 프레임워크를 제시합니다. 이름이 길고 어렵죠? 쉽게 말해 “비선형(곡선) + 다층(학교-학생) + 혼합(잠재집단)”을 모두 고려할 수 있는 만능 틀이라고 생각하면 됩니다.

2. 모의 데이터 생성: “학습 시간과 학업 성취도”

이론만 보면 지루하니, 가상의 교육 상황을 만들어 봅시다.

[시나리오: 벼락치기의 효율성]

  • 상황: 한 고등학교에서 학생들의 ‘집중 학습 시간(Study)’‘최종 시험 점수(Score)’의 관계를 연구합니다.
  • 가설: 학습 시간이 늘어나면 점수는 오르지만, 일정 시간이 지나면 피로 누적으로 인해 점수 상승폭이 둔화되거나 오히려 떨어질 것이다(역 U자형, 즉 이차함수 관계).

이 시나리오를 바탕으로 분석을 진행하겠습니다. jamovi는 기본적으로 클릭 기반이지만, 비선형 SEM과 같은 고급 분석은 R 코드를 활용해야 정확합니다. jamovi의 Rj 모듈이나 RStudio를 사용할 수 있도록 코드를 제공합니다.

R

# R 코드: 모의 데이터 생성
set.seed(1234)
N <- 500

# 잠재변수 생성 (Study: 학습몰입, Score: 성취도)
# Study는 평균 0, 분산 1인 정규분포
Study_Latent <- rnorm(N, 0, 1)

# 구조 모형: 비선형 관계 (이차함수)
# Score = 50 + 10*Study - 3*Study^2 + Error
# 학습량이 너무 많으면 성취도가 떨어지는 역 U자형
Score_Latent <- 0.5 * Study_Latent - 0.3 * (Study_Latent^2) + rnorm(N, 0, 0.5)

# 측정 변수 생성 (Factor Loading을 고려한 관측변수)
# Study 지표 (x1, x2, x3)
x1 <- 1.0 * Study_Latent + rnorm(N, 0, 0.4)
x2 <- 0.9 * Study_Latent + rnorm(N, 0, 0.4)
x3 <- 1.1 * Study_Latent + rnorm(N, 0, 0.4)

# Score 지표 (y1, y2, y3)
y1 <- 1.0 * Score_Latent + rnorm(N, 0, 0.4)
y2 <- 0.8 * Score_Latent + rnorm(N, 0, 0.4)
y3 <- 1.2 * Score_Latent + rnorm(N, 0, 0.4)

Data <- data.frame(x1, x2, x3, y1, y2, y3)
head(Data)

3. 파라메트릭 비선형 SEM (Parametric NSEMs)

파라메트릭 접근은 연구자가 “이 데이터는 이런 함수 모양일 거야”라고 미리 모양(함수)을 정해놓고 분석하는 방법입니다. 교재에서는 세 가지 주요 함수를 소개합니다.

A. 이차 함수 (Quadratic Function)

가장 널리 쓰이는 비선형 모형입니다. 우리의 시나리오처럼 “적당할 때가 제일 좋다(역 U자)” 혹은 “갈수록 가속도가 붙는다(U자)”를 설명합니다.

  • 수식: η=γ0+γ1ξ+γ2ξ2+ζ\eta = \gamma_0 + \gamma_1\xi + \gamma_2\xi^2 + \zeta
  • 여기서 ξ2\xi^2 항이 유의하면 비선형 관계가 입증됩니다.

B. Jenss-Bayley 함수

발달 심리학에서 주로 사용되는데, 급격히 성장하다가 점차 완만해지며 특정 수준에 수렴하는 형태를 설명합니다.

  • 특징: 지수 함수와 선형 함수가 결합된 형태입니다.
  • 수식: VCi=γ1+γ2NFiexp(γ3+γ4NFi)VC_i = \gamma_1 + \gamma_2 NF_i – \exp(\gamma_3 + \gamma_4 NF_i)7.

C. 구분적 함수 (Piecewise Function)

데이터의 구간을 나누어 서로 다른 관계를 가정합니다.

  • 예: 학습 시간이 5시간 미만일 때는 가파른 상승, 5시간 이상일 때는 완만한 상승.
  • 특징: 두 구간이 만나는 지점(knot)을 찾는 것이 중요합니다.

[분석 예시] R/jamovi(lavaan)를 이용한 이차 함수 분석

이차 함수나 상호작용은 lavaan 패키지의 indProd 등을 통해 구현할 수 있습니다.

R

# R 코드: 이차항(Quadratic) 포함 SEM 분석
library(lavaan)

# 1. 측정 모형 정의
model <- '
  # 잠재변수 정의
  Study =~ x1 + x2 + x3
  Score =~ y1 + y2 + y3
  
  # 상호작용(이차항)을 위한 정의 (LMS 방식 등은 Mplus가 강점이지만, 여기서는 관측변수 곱 활용 접근 예시)
  # 실제로는 indProd 등을 써서 교차항을 만듭니다.
  # 여기서는 개념적 이해를 위해 단순화한 구조방정식 구문을 씁니다.
  
  Score ~ Study
'
# *참고: R의 lavaan에서는 기본적으로 비선형 잠재변수(Study^2)를 직접 지원하지 않아 
# 관측변수를 제곱하여 Product Indicator를 만드는 방식을 주로 씁니다.

WaurimaL의 팁: 교재의 예제인 시애틀 종단 연구(SLS)에서는 ‘언어 이해력(VC)’을 ‘수리 능력(NF)’으로 예측할 때, 이차 함수 모형과 Jenss-Bayley 모형을 비교했습니다. 결과적으로 Jenss-Bayley 모형이 더 적합한 것으로 나타났는데, 이는 수리 능력이 높을수록 언어 이해력도 높아지지만 어느 순간부터는 그 증가폭이 줄어든다는 것을 의미합니다.

4. 준파라메트릭 SEMM (Semiparametric SEMM)

연구자가 “도대체 무슨 모양인지 감이 안 잡힐 때” 사용하는 방법입니다.

특정한 곡선 식을 가정하는 대신, 여러 개의 직선(선형 모형)을 섞어서(Mixture) 곡선을 근사하는 방식입니다.

  • 원리: 마치 곡선을 아주 짧은 직선들의 집합으로 그리는 것과 같습니다. 잠재 계층(Latent Class)을 나누고, 각 계층마다 서로 다른 선형 회귀식을 적용합니다.
  • 장점: 데이터가 정규분포를 따르지 않아도(비정규성) 잘 작동합니다.
  • 해석: 각 계층(Class)을 합쳐서(가중 평균) 전체적인 비선형 관계를 추정합니다.

[그림 설명]

위 그림을 보면, 3개의 잠재 계층(점선들)이 각기 다른 기울기를 가지고 있습니다. 이들을 합치니 전체적으로 부드러운 곡선(실선)이 만들어집니다.

5. 다층 및 상호작용 NSEM (Multilevel & Interaction)

교육 데이터는 학생이 학교에 소속된 위계적(Nested) 구조를 가집니다. 이를 무시하면 오류가 발생합니다. 교재의 TIMSS 2011 데이터 분석 예시를 통해 알아봅시다.

분석 시나리오: 수학 성취도 예측

  • 수준 1 (학생): 수학 효능감(Self-Efficacy), 수학 흥미(Interest)
  • 수준 2 (학교): 학교 평균 효능감, 학교 평균 흥미
  • 종속변수: 수학 성취도(Math Achievement)

주요 발견 (TIMSS 데이터 분석 결과)

  1. 학생 수준 상호작용: 흥미가 높고 효능감도 높을 때, 성취도가 기하급수적으로 상승하는 상승 작용(Synergy)이 있었습니다 (γ5=0.05,p<.05\gamma_5 = 0.05, p < .05).
  2. 학교 수준 효과: 학교 전체의 평균 효능감이 높을수록 학생 개인의 성취도도 높아지는 맥락 효과(Contextual Effect)가 발견되었습니다.
  3. 크로스 레벨 상호작용: 학교 수준의 변수가 학생 수준의 관계를 조절할 수 있습니다.

[R 코드] 잠재 상호작용 모형 예시

R

# R 코드: 잠재 상호작용 (Latent Interaction)
# lavaan의 최신 기능이나 semTools를 활용하면 LMS(Latent Moderated Structural Equations)와 유사한 분석 가능
# 여기서는 개념적 코드만 제시합니다.

model_interaction <- '
  # 측정 모형
  Interest =~ int1 + int2
  Efficacy =~ eff1 + eff2 + eff3
  Math =~ ach1 + ach2

  # 구조 모형 (상호작용 포함)
  # colon(:)을 사용하여 잠재변수 간 상호작용 표현 (일부 패키지 지원)
  Math ~ Interest + Efficacy + Interest:Efficacy
'
# *실제 분석 시에는 product indicator 접근법이나 베이지안 접근(blavaan)을 추천합니다.

6. 결론 및 제언

오늘 우리는 현실 세계의 복잡성을 담아내기 위한 비선형 구조방정식의 여정을 떠나보았습니다.

  1. 현실은 직선이 아닙니다: 인간의 발달, 학습, 심리는 곡선이거나, 계단식이거나, 복합적인 상호작용을 합니다.
  2. 도구의 확장: 이차 함수, 구분적 함수, 혹은 혼합 모형(Mixture Model)을 통해 이러한 관계를 통계적으로 모형화할 수 있습니다.
  3. 교육적 시사점: 단순히 “공부 많이 하면 성적 오른다”가 아니라, “어느 수준까지는 오르지만 그 이후는 흥미가 뒷받침되어야 한다”와 같은 정교한 교육적 처방이 가능해집니다.

WaurimaL의 마지막 한마디 (Next Step)

“여러분, 오늘 내용이 조금 어려웠을 수 있습니다. 특히 수식이 많아서 겁먹었을 수도 있어요. 하지만 핵심은 ‘데이터의 실제 모양을 존중하자’는 것입니다. 다음 단계로, 여러분이 가지고 있는 데이터를 산점도(Scatter plot)로 먼저 그려보세요. 혹시 직선이 아닌 곡선이 보이나요? 그렇다면 오늘 배운 비선형 SEM을 적용해 볼 절호의 기회입니다.”

참고문헌

  • Bates, D. M., & Watts, D. G. (1988). Nonlinear regression analysis: Its applications. New York: Wiley.
  • Bauer, D. J. (2005). A semiparametric approach to modeling nonlinear relations among latent variables. Structural Equation Modeling, 12, 513–535.
  • Harring, J. R., & Zou, J. (n.d.). Chapter 37. Nonlinear Structural Equation Models. In Advanced Methods and Applications.
  • Jenss, R., & Bayley, N. (1937). A mathematical method for studying the growth of a child. Human Biology, 9, 556–563.
  • Kelava, A., & Brandt, H. (2014). A general nonlinear multilevel structural equation mixture model. Frontiers in Psychology, 5, 1–16.
  • Mullis, I. V., et al. (2012). TIMSS 2011 encyclopedia: Education policy and curriculum in mathematics and science. Boston: TIMSS & PIRLS International Study Center.
  • Wall, M. M. (2009). Maximum likelihood and Bayesian estimation of nonlinear structural equation models. In R. Millsap (Ed.), The SAGE handbook of quantitative methods in psychology (pp. 540–567). Sage.

Chap 35. 유전학에서의 구조방정식 모형(structural Equation Modeling in Genetics)

안녕하세요. 이번에 우리는 유전학적 관점을 구조방정식 모형SEM)에 적용하는 아주 흥미로운 분야인 유전학에서의 구조방정식 모형(structural Equation Modeling in Genetics, 유전 공분산 구조 모델링(GCSM)이라고도 함)에 대해 깊이 있게 다뤄보겠습니다. 흔히 “본성이냐 양육이냐(Nature vs. Nurture)”를 논하지만, 통계학적으로는 이 둘이 어떻게 공분산(변동)을 나눠 갖는지 수치로 추정해 볼 수 있습니다.

교육 현장의 예시를 들어 이해하기 쉽게 살펴보고, R을 활용하여 설명해 드리겠습니다.

1. 유전 공분산 구조 모델링(GCSM)이란?

교육학에서 우리는 학생들의 학업 성취도 차이가 어디서 오는지 궁금해합니다. 부모님의 지능을 물려받아서일까요(유전), 아니면 부모님이 좋은 책을 많이 사주셔서일까요(환경)?

GCSM(Genetic Covariance Structure Modeling)은 이러한 질문에 답하기 위해 가족 데이터(주로 쌍둥이)를 사용하여 관찰된 변수(표현형)의 분산을 유전적 요인환경적 요인으로 분해하는 통계적 방법입니다.

  • 기본 아이디어: 가족 간의 유전적 공유 비율(일란성 100%, 이란성 50%)을 알면, 형제간의 상관관계를 통해 보이지 않는 유전과 환경의 효과를 역추적할 수 있습니다.
  • 역사: Martin과 Eaves(1977)가 시작했으며, 초기에는 복잡한 프로그래밍이 필요했으나, LISREL 등 SEM 소프트웨어의 발전으로 대중화되었습니다.

2. 쌍둥이 연구의 핵심: ACE 모델

가장 기본이 되는 모델은 단변량 ACE 모델입니다. 학생의 성적(표현형, Phenotype)을 세 가지 잠재변수로 설명합니다.

2.1 분산의 구성 요소

학생 ii의 성적(XX)은 다음과 같이 표현됩니다.

Xij=aAij+cCij+eEijX_{ij} = aA_{ij} + cC_{ij} + eE_{ij}

  1. A (Additive Genetic, 상가적 유전): 부모로부터 물려받은 유전자의 합입니다.
    • 교육적 예시: 타고난 인지 처리 속도나 작업 기억 용량.
  2. C (Common Environment, 공유 환경): 가족 구성원이 공유하는 환경입니다.
    • 교육적 예시: 부모의 사회경제적 지위(SES), 가정 내 장서 수, 같은 학교에 다니는 것.
  3. E (Unique Environment, 비공유 환경): 개인만이 겪는 독특한 환경(측정 오차 포함)입니다.
    • 교육적 예시: 나만 겪은 친구 관계, 우연한 사고, 내가 따로 받은 개인 과외, 시험 당일의 컨디션.

2.2 모델의 식별 (Identification)

우리는 잠재변수 A, C, E를 직접 측정할 수 없습니다. 대신 일란성(MZ)이란성(DZ) 쌍둥이의 상관계수 차이를 이용합니다.

  • 일란성(MZ): 유전자 100% 공유 (rA=1.0r_A = 1.0), 공유 환경 100% 공유 (rC=1.0r_C = 1.0).
  • 이란성(DZ): 유전자 50% 공유 (rA=0.5r_A = 0.5), 공유 환경 100% 공유 (rC=1.0r_C = 1.0).

이 논리를 SEM 경로 모형으로 그리면, MZ 집단과 DZ 집단에 서로 다른 상관계수 제약(constraint)을 걸어 모형을 적합시킬 수 있습니다.

3. [실습] 가상의 학교 데이터를 이용한 ACE 분석

자, 이제 실제 교육 현장의 데이터를 가상으로 생성하여 분석해 보겠습니다.

3.1 시나리오: 고등학생 수학적 문제해결력 연구

상황: 경기도 수원의 한 교육연구소에서 고등학교 1학년 쌍둥이 1,000쌍(MZ 500쌍, DZ 500쌍)을 대상으로 ‘수학적 문제해결력’ 검사를 실시했습니다. 이 능력이 타고난 것인지, 사교육이나 가정환경 덕분인지 알고 싶습니다.

3.2 데이터 생성 (R 코드)

jamovi의 Rj Editor를 켜거나 R Studio에서 아래 코드를 실행하여 데이터를 생성합니다.

R

# 필요한 패키지 로드
if(!require(MASS)) install.packages("MASS")
set.seed(20260104)

# 1. 파라미터 설정 (우리가 발견하고자 하는 진실)
# 분산 비율: 유전(A)=50%, 공유환경(C)=30%, 비공유환경(E)=20%
a_path <- sqrt(0.5)
c_path <- sqrt(0.3)
e_path <- sqrt(0.2)
N_pairs <- 500 # 각 그룹 당 쌍둥이 쌍 수

# 2. 데이터 생성 함수
generate_twin_data <- function(n, r_a, zygosity) {
  # 공유 환경(C)은 항상 상관 1.0
  C <- rnorm(n)
  
  # 유전(A)은 그룹에 따라 상관이 다름 (MZ=1.0, DZ=0.5)
  Sigma_A <- matrix(c(1, r_a, r_a, 1), 2, 2)
  A_scores <- mvrnorm(n, mu = c(0, 0), Sigma = Sigma_A)
  
  # 비공유 환경(E)은 상관 0 (독립)
  E1 <- rnorm(n)
  E2 <- rnorm(n)
  
  # 표현형(성적) 생성: X = aA + cC + eE
  # Twin 1
  Math1 <- a_path * A_scores[,1] + c_path * C + e_path * E1
  # Twin 2
  Math2 <- a_path * A_scores[,2] + c_path * C + e_path * E2
  
  # 데이터 프레임 반환
  data.frame(
    ID = 1:n,
    Zygosity = zygosity,
    Math1 = 50 + 10 * Math1, # 평균 50, 표준편차 10으로 변환 (T점수 유사)
    Math2 = 50 + 10 * Math2
  )
}

# 3. MZ(일란성) 및 DZ(이란성) 데이터 생성
mz_data <- generate_twin_data(N_pairs, 1.0, "MZ")
dz_data <- generate_twin_data(N_pairs, 0.5, "DZ")

# 전체 데이터 통합
twin_data <- rbind(mz_data, dz_data)

# 데이터 확인 (jamovi로 불러오기 위해 csv 저장 가능)
# write.csv(twin_data, "twin_math_scores.csv", row.names = FALSE)
head(twin_data)

3.3 분석 방법 (jamovi / R lavaan)

일반적인 SEM 도구로는 ‘집단 간 파라미터 제약(MZ는 A상관 1로 고정, DZ는 0.5로 고정)’을 설정하는 것이 매우 까다롭습니다. 따라서 가장 표준적인 방법인 R의 lavaan 패키지를 사용한 코드를 제시합니다. jamovi의 Rj 모듈에 붙여넣어 실행할 수 있습니다.

R

library(lavaan)

# 모델 정의 (ACE 모델)
ace_model <- '
    # 잠재변수 정의 (분산을 1로 고정하여 척도화)
    A1 =~ NA*Math1 + a*Math1
    A2 =~ NA*Math2 + a*Math2
    C1 =~ NA*Math1 + c*Math1
    C2 =~ NA*Math2 + c*Math2
    E1 =~ NA*Math1 + e*Math1
    E2 =~ NA*Math2 + e*Math2
    
    # 잠재변수의 분산을 1로 고정
    A1 ~~ 1*A1
    A2 ~~ 1*A2
    C1 ~~ 1*C1
    C2 ~~ 1*C2
    E1 ~~ 1*E1
    E2 ~~ 1*E2
    
    # 공분산 제약 조건 (핵심!)
    # C는 MZ, DZ 모두 1로 상관
    C1 ~~ 1*C2 
    
    # E는 상관 없음 (0)
    E1 ~~ 0*E2
'

# 그룹별 A의 공분산 제약 추가
# MZ 그룹: A 상관 1.0
mz_model_add <- '
    A1 ~~ 1.0*A2
'
# DZ 그룹: A 상관 0.5
dz_model_add <- '
    A1 ~~ 0.5*A2
'

# 모델 결합 (lavaan의 cfa나 sem 함수에서는 group 옵션 사용 시 
# 문법 내에서 그룹별 제약을 직접 걸기 까다로울 수 있어, 
# 다중 그룹 분석을 위한 리스트 형태로 제약 조건을 줍니다.)

# *참고: lavaan에서 쌍둥이 모델은 문법이 조금 복잡할 수 있어, 
# 교육적 목적을 위해 간소화된 개념적 코드를 보여드리고,
# 실제로는 OpenMx가 더 자주 쓰임을 알려드립니다.*

# 하지만 여기서는 lavaan 문법으로 가능한 형태를 보여드립니다.
model <- '
    # 회귀 계수(경로)는 a, c, e 라벨을 붙여 두 그룹 간 동일하게 제약(평등 제약)
    Math1 ~ a*A1 + c*C1 + e*E1
    Math2 ~ a*A2 + c*C2 + e*E2
    
    # 잠재변수 분산 1
    A1 ~~ 1*A1; A2 ~~ 1*A2
    C1 ~~ 1*C1; C2 ~~ 1*C2
    E1 ~~ 1*E1; E2 ~~ 1*E2
    
    # 환경(C)의 상관은 항상 1
    C1 ~~ 1*C2
    # 환경(E)은 독립
    E1 ~~ 0*E2
    
    # 유전(A)의 상관은 그룹별로 다름 (아래 group.partial로 처리하거나 별도 명시)
    # MZ에서는 1.0, DZ에서는 0.5여야 함.
    # 이를 위해 phantom variable 기법을 쓰거나 공분산 행렬을 직접 제약해야 함.
'

[해설] 위 코드는 개념적 이해를 돕기 위한 것입니다. 실제 lavaan이나 OpenMx를 쓸 때는 상관계수 rAr_A를 MZ 그룹 데이터에는 1.0, DZ 그룹 데이터에는 0.5로 고정값(fixed parameter)으로 할당하여 분석합니다.

결과를 해석하면:

  • a2a^2 (Heritability): 분산 설명력. 예: 0.5 (수학 점수의 50%는 유전)
  • c2c^2 (Shared Env): 예: 0.3 (30%는 가정환경)
  • e2e^2 (Unique Env): 예: 0.2 (20%는 개인 노력/오차)

4. 확장된 모델: 교육학적 적용

단순히 성적 하나만 보는 것이 아니라, 더 복잡한 교육 현상을 설명하기 위해 모델을 확장할 수 있습니다.

4.1 다변량 모델: 수학과 물리의 관계 (Cholesky 분해)

수학을 잘하는 학생이 물리도 잘합니다. 이 상관관계(rr)가 유전 때문일까요, 환경 때문일까요?

  • Cholesky 분해: 변수 간의 공분산을 유전적 공분산(rAr_A)과 환경적 공분산(rC,rEr_C, r_E)으로 분해합니다.
  • 발견: 우울과 불안의 관계 연구처럼, 수학과 물리의 높은 상관은 대부분 유전적 요인(Pleiotropy, 다면발현)에 기인할 수 있습니다. 즉, ‘논리적 사고 유전자’가 수학과 물리에 동시에 영향을 미치는 것입니다.

4.2 종단적 모델: 성장의 비밀 (Growth Curve Model)

초등학교부터 고등학교까지 성적의 변화 추이를 봅니다.

  • 잠재 성장 모형: 초기값(Intercept)과 변화율(Slope)을 추정합니다.
  • 연구 결과: 성인기의 인지 능력 수준(Intercept)은 유전적 영향이 크지만, 변화율(감퇴 속도 등)은 비공유 환경의 영향이 클 수 있습니다. 즉, “출발선은 유전이 결정하지만, 달리는 과정은 환경이 좌우한다”는 해석이 가능합니다.

4.3 인과관계의 방향 (Direction of Causation, DoC)

“불안해서 성적이 떨어지는가(A→B), 성적이 나빠서 불안해지는가(B→A)?”

  • DoC 모델: 쌍둥이 데이터를 이용하면 두 변수 간의 인과 방향을 통계적으로 검증할 수 있습니다.
  • 만약 XYX \rightarrow Y라면, 유전적 연관성이 높은 형제일수록 교차 상관(Cross-trait cross-relative correlation)이 높게 나타나는 패턴을 이용합니다.

5. 고급 주제: 유전자와 환경의 상호작용 (GxE, rGE)

교육에서 가장 중요한 부분입니다. 유전과 환경은 독립적이지 않습니다.

5.1 유전자-환경 상관 (rGE)

유전자가 환경에 노출되는 방식에 영향을 줍니다.

  • 수동적(Passive) rGE: 똑똑한 부모가 똑똑한 유전자를 물려주면서 동시에 책이 많은 환경도 제공함.
  • 능동적(Active) rGE: 음악적 재능을 가진 아이가 스스로 밴드 동아리에 가입하고 연습 시간을 늘림.
  • 유발적(Evocative) rGE: 외향적인 아이가 교사의 관심을 더 많이 끌어내어 더 많은 피드백을 받음.

5.2 유전자-환경 상호작용 (GxE)

환경에 따라 유전자의 영향력이 달라집니다.

  • 예시: 좋은 교육 환경(E)에서는 유전적 잠재력(A)이 성적 차이로 잘 드러나지만(높은 유전력), 열악한 환경에서는 타고난 재능이 있어도 발현되지 못해 유전력이 낮아질 수 있습니다. (Scarr-Rowe 가설)
  • Purcell(2002)의 모델을 사용하여 환경 변수(예: 부모의 SES)가 A, C, E 경로를 조절하는지(Moderation) 검증할 수 있습니다.

6. 결론: 교육자를 위한 시사점

GCSM은 복잡한 수식으로 보이지만, 교육자에게 주는 메시지는 명확합니다.

  1. 유전은 운명이 아닙니다. SEM을 통해 우리는 환경(C, E)이 설명하는 분산의 크기를 알 수 있습니다.
  2. 개별화 교육의 필요성. 비공유 환경(E)의 영향력은 학생마다 겪는 경험이 다름을 의미합니다.
  3. 다변량적 접근. 한 과목의 부진이 다른 과목과 유전적으로 연결되어 있는지(공통 경로 모형 등) 파악하여 근본적인 지원을 할 수 있습니다.

구조방정식은 단순한 인과관계 분석을 넘어, 인간 발달의 복잡한 메커니즘인 유전과 환경의 춤(dance)을 악보(수식)로 그려내는 강력한 도구입니다.

참고 문헌

  • Balbona, J. V., Kim, Y., & Keller, M. C. (2021). Estimation of parental effects using polygenic scores. Behavior Genetics, 51, 264–278.
  • Boomsma, D. I., Busjahn, A., & Peltonen, L. (2002). Classical twin studies and beyond. Nature Reviews Genetics, 3(11), 872–882.
  • Falconer, D. S., & Mackay, T. F. C. (1996). Introduction to quantitative genetics (4th ed.). Pearson.
  • Martin, N. G., & Eaves, L. J. (1977). Genetic analysis of covariance structure. Heredity, 38, 79–95.
  • Plomin, R., DeFries, J. C., Knopik, V. S., & Neiderhiser, J. M. (2013). Behavioral genetics (6th ed.). Worth.
  • Purcell, S. (2002). Variance components models for gene-environment interaction in twin analysis. Twin Research, 5(6), 554–571.
  • Rijsdijk, F. V., Vernon, P. A., & Boomsma, D. I. (2002). Application of hierarchical genetic models to Raven and WAIS subtests: A Dutch twin study. Behavior Genetics, 32(3), 199–210.

Chap 34. 이원 관계(Dyadic Data) 역동성 평가를 위한 종단 모형

안녕하세요! 이번 내용은 “이원 관계(Dyadic Data)의 역동성을 평가하기 위한 종단 모형”입니다.

제목이 다소 어렵게 느껴질 수 있지만, 걱정하지 마세요. 우리 교육 현장에는 수많은 ‘관계’가 존재합니다. 교사와 학생, 상담사와 내담자, 또는 학습 동료 간의 관계가 시간에 따라 어떻게 변하고 서로 영향을 주고받는지 수학적으로 모델링하는 방법을 아주 쉽게 풀어서 설명해 드리겠습니다.

본 챕터에서 다루는 연속시간 미분방정식(Differential Equation Models)은 매우 고급 통계 기법으로 이 모형을 구현할 수 있는 표준 도구인 R을 사용하여 교육적 상황을 가정한 모의 데이터를 생성하고 분석하는 과정을 보여드리겠습니다.

1. 교육 현장에서의 ‘관계’와 ‘시간’

사회과학과 행동과학 연구는 종종 여러 개체 간의 관계에 초점을 맞춥니다. 여기서 “이원 관계(Dyadic relationship)”란 두 개체, 예를 들어 부모-자녀, 남편-아내, 그리고 교육적으로는 교사-학생이나 동료 학습자 간의 관계를 의미합니다.

이 두 사람의 심리적, 행동적 과정이 시간에 따라 어떻게 진화하는지 평가하기 위해 우리는 데이터를 수집합니다.

  • 패널 데이터(Panel Data): 띄엄띄엄 몇 번 측정하는 경우 (예: 학기 초, 학기 말).
  • 집중 종단 데이터(Intensive Longitudinal Data): 짧은 기간 동안 집중적으로 측정하는 경우 (예: 수업 시간 동안의 실시간 상호작용).

우리의 목표는 두 구성원 간의 시간적 상호작용 순서를 파악하고, 서로가 서로에게 어떻게 영향을 미치는지 인과관계를 추론하는 것입니다.

1.1 이산 시간(Discrete Time) vs. 연속 시간(Continuous Time)

전통적인 구조방정식(SEM)은 주로 이산 시간 모형을 사용합니다. 이는 시간을 정수(1회차, 2회차…)로 봅니다. 하지만 이 방식은 “측정 간격이 동일하다”는 가정을 전제로 하는데, 현실에서는 지키기 어렵습니다.

반면, 오늘 우리가 다룰 미분방정식 모형(Differential Equation Models)연속 시간을 사용합니다.

  • 시간은 실(Real) 수로 표현됩니다.
  • 변화는 속도나 가속도와 같은 미분(Derivative)으로 표현됩니다.
  • 측정 간격이 불규칙해도(예: 학생이 편한 시간에 응답하는 경우) 문제가 없습니다.
  • 무엇보다 변화의 과정이 ‘멈추지 않고 계속된다’는 자연 현상을 더 잘 반영합니다.

본 챕터에서는 교육적 상황에 적용할 수 있는 4가지 주요 역동 모형을 R 코드와 함께 살펴보겠습니다.

2. 협력과 조절의 모형 (Models of Cooperation)

2.1 동기화 모형 (Synchrony Model)

이 모형은 두 사람이 서로의 행동이나 목표(이상적 상태)에 맞춰 자신의 상태를 조정하는 과정을 설명합니다.

모형 수식

dx1(t)dt=a1(x1x1(t))+b1(x2(t)x1(t))\frac{dx_{1}(t)}{dt} = a_{1}(x_{1}^{*} – x_{1}(t)) + b_{1}(x_{2}(t) – x_{1}(t))

dx2(t)dt=a2(x2x2(t))+b2(x1(t)x2(t))\frac{dx_{2}(t)}{dt} = a_{2}(x_{2}^{*} – x_{2}(t)) + b_{2}(x_{1}(t) – x_{2}(t))

  • x1,x2x_1, x_2: 두 사람의 현재 상태.
  • x1,x2x_1^*, x_2^*: 각자의 이상적인 목표 상태(평형점).
  • aa: 자신의 목표를 향해 얼마나 빨리 나아가는가 (자기 조절).
  • bb: 상대방의 상태에 얼마나 영향을 받아 변화하는가 (상호 조절).

[교육적 예시] 신규 교사와 멘토 교사

  • 상황: 열정적이지만 경험이 부족한 ‘신규 교사(x1x_1)’와 노련한 ‘멘토 교사(x2x_2)’가 있습니다.
  • 시나리오: 신규 교사는 멘토 교사의 높은 수업 효능감을 닮아가려 합니다(b1>0b_1 > 0). 반면 멘토 교사는 이미 안정되어 있어 신규 교사에게 크게 영향을 받지 않습니다(b20b_2 \approx 0). 이를 단방향 소통(Unidirectional Communication)이라고 볼 수 있습니다.

R 시뮬레이션 및 시각화

R

library(deSolve)
library(ggplot2)
library(tidyr)

# 모델 정의 (동기화 모형)
synchrony_model <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # x1: 신규 교사의 효능감, x2: 멘토 교사의 효능감
    dx1 <- a1 * (target1 - x1) + b1 * (x2 - x1)
    dx2 <- a2 * (target2 - x2) + b2 * (x1 - x2)
    list(c(dx1, dx2))
  })
}

# 파라미터 설정 (단방향 영향: 멘토 -> 신규)
pars <- c(a1 = 0.5, target1 = 50, b1 = 0.8, # 신규 교사는 멘토에게 영향을 많이 받음
          a2 = 0.5, target2 = 80, b2 = 0.0) # 멘토는 영향받지 않음

# 초기값 (신규 교사: 30, 멘토: 80)
state <- c(x1 = 30, x2 = 80)
times <- seq(0, 20, by = 0.1)

# 시뮬레이션
out <- ode(y = state, times = times, func = synchrony_model, parms = pars)
out_df <- as.data.frame(out)

# 그래프 그리기
ggplot(out_df, aes(x = time)) +
  geom_line(aes(y = x1, color = "Novice Teacher"), size = 1.2) +
  geom_line(aes(y = x2, color = "Mentor Teacher"), size = 1.2, linetype = "dashed") +
  labs(title = "Synchrony Model: Mentoring Effect",
       y = "Teaching Efficacy", x = "Time (Weeks)") +
  theme_minimal()

해석: 위 코드를 실행하면, 초기 효능감이 낮았던 신규 교사(x1x_1)가 시간이 지남에 따라 멘토 교사(x2x_2)의 수준으로 효능감이 상승하여 동기화되는 곡선을 볼 수 있습니다.

2.2 상리공생 모형 (Mutualism Model)

생태학에서 꿀벌과 꽃처럼 서로 돕는 관계를 말합니다. 교육에서는 협동 학습이 대표적입니다. 혼자 공부할 때보다 둘이 함께할 때 시너지가 나서 각자의 한계(KK)를 뛰어넘는 경우입니다.

모형 수식

dx1(t)dt=r1x1(t)[1(x1(t)α12x2(t))K1]\frac{dx_{1}(t)}{dt} = r_{1}x_{1}(t)[1 – \frac{(x_{1}(t) – \alpha_{12}x_{2}(t))}{K_{1}}]

  • 이 식은 로지스틱 성장 곡선(S자형 성장)을 확장한 것입니다.
  • α12\alpha_{12}: 상대방(x2x_2)이 나(x1x_1)에게 주는 이익. 이 값이 양수이면 나의 성장 한계치(K1K_1)를 넘어설 수 있게 도와줍니다.

[교육적 예시] 프로젝트 팀 활동

  • 상황: 학생 A와 학생 B가 과학 프로젝트를 합니다.
  • 시나리오: 혼자 하면 70점(KK) 정도 받을 학생들이지만, 서로 아이디어를 공유하며(α>0\alpha > 0) 90점 수준으로 성과가 향상됩니다.

R 시뮬레이션

R

# 모델 정의 (상리공생)
mutualism_model <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # 로지스틱 성장에 상호작용 항 추가
    dx1 <- r1 * x1 * (1 - (x1 - alpha12 * x2) / K1)
    dx2 <- r2 * x2 * (1 - (x2 - alpha21 * x1) / K2)
    list(c(dx1, dx2))
  })
}

# 파라미터 (상호 이익 발생)
pars_mut <- c(r1 = 0.5, K1 = 70, alpha12 = 0.3, # 학생 A
              r2 = 0.5, K2 = 70, alpha21 = 0.3) # 학생 B

state_mut <- c(x1 = 10, x2 = 10) # 초기 지식 수준
times <- seq(0, 20, by = 0.1)

out_mut <- ode(y = state_mut, times = times, func = mutualism_model, parms = pars_mut)
out_mut_df <- as.data.frame(out_mut)

# 그래프
ggplot(out_mut_df, aes(x = time)) +
  geom_line(aes(y = x1, color = "Student A"), size = 1.2) +
  geom_line(aes(y = x2, color = "Student B"), size = 1.2, linetype = "dashed") +
  geom_hline(yintercept = 70, linetype = "dotted", color = "gray") + # 원래 한계치
  annotate("text", x = 0, y = 72, label = "Original Capacity (K)", hjust=0) +
  labs(title = "Mutualism Model: Cooperative Learning",
       subtitle = "Students exceed their individual capacity (K=70)",
       y = "Project Performance", x = "Time") +
  theme_minimal()

해석: 그래프에서 두 학생의 성취도는 원래 한계인 70점을 넘어 계속 상승하여 더 높은 평형점에 도달하게 됩니다. 이것이 협동의 힘입니다.

3. 경쟁 모형 (Models of Competition)

3.1 직접 간섭 경쟁 모형 (Competition by Direct Interference)

상리공생 모형과 수식은 거의 같지만, 상호작용 항의 부호가 반대입니다. 상대방의 존재가 나의 성장을 방해합니다.

모형 수식

dx1(t)dt=r1x1(t)[1(x1(t)+α12x2(t))K1]\frac{dx_{1}(t)}{dt} = r_{1}x_{1}(t)[1 – \frac{(x_{1}(t) + \alpha_{12}x_{2}(t))}{K_{1}}]

  • 여기서 +α12x2+\alpha_{12}x_2 항은 상대방이 존재할수록 나의 성장률을 갉아먹는다는 것을 의미합니다.

[교육적 예시] 상대평가와 등수 경쟁

  • 상황: 전교 1등을 두고 다투는 학생 A와 학생 B.
  • 시나리오: 한 학생의 성적이 오르면 심리적 압박감이나 자원(선생님의 관심 등)의 분산으로 인해 다른 학생의 성취도가 저해될 수 있습니다. α\alpha 값이 크다면 한 명은 결국 도태(성취도 하락)될 수도 있습니다.

4. 음의 피드백 모형 (Negative Feedback Model)

4.1 포식자-피식자 모형 (Predator-Prey Model)

생태학의 고전적인 로트카-볼테라(Lotka-Volterra) 모형입니다. 피식자(먹이)가 늘어나면 포식자가 늘어나고, 포식자가 늘어나면 피식자가 줄어드는 순환 고리를 가집니다. 교육심리학에서는 자기 조절(self-regulation)이나 감정의 기복을 설명할 때 유용합니다.

모형 수식

dx1(t)dt=rx1(t)cx1(t)x2(t)(Prey)\frac{dx_{1}(t)}{dt} = rx_{1}(t) – cx_{1}(t)x_{2}(t) \quad (\text{Prey})

dx2(t)dt=bx1(t)x2(t)mx2(t)(Predator)\frac{dx_{2}(t)}{dt} = bx_{1}(t)x_{2}(t) – mx_{2}(t) \quad (\text{Predator})

[교육적 예시] 시험 불안(Prey)과 공부 시간(Predator)

  • Prey (x1x_1): 시험 불안 (또는 미루는 습관)
    • 가만히 두면 자연적으로 증가합니다(불안이 스멀스멀 올라옴).
  • Predator (x2x_2): 공부 투입 시간 (집행 기능)
    • 불안이 높아지면(x1x_1 증가), 위기감을 느껴 공부를 시작합니다(x2x_2 증가).
    • 공부를 하면(x2x_2 높음), 불안이 잡아먹혀 줄어듭니다(x1x_1 감소).
    • 불안이 사라지면, 다시 공부를 안 하고 놉니다(x2x_2 감소, 자연 소멸 mm).
    • 결과적으로 두 변수는 주기적인 파동(Oscillation)을 그리게 됩니다.

R 시뮬레이션

R

# 모델 정의 (포식자-피식자)
predator_prey_model <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # x1: 시험 불안(Prey), x2: 공부 시간(Predator)
    dx1 <- r*x1 - c*x1*x2
    dx2 <- b*x1*x2 - m*x2
    list(c(dx1, dx2))
  })
}

# 파라미터
pars_pp <- c(r = 0.5,  # 불안의 자연 증가율
             c = 0.1,  # 공부가 불안을 감소시키는 효율
             b = 0.1,  # 불안이 공부를 유발하는 효율
             m = 0.3)  # 공부 중단(망각/휴식) 비율

state_pp <- c(x1 = 10, x2 = 5) # 초기값
times <- seq(0, 50, by = 0.1)

out_pp <- ode(y = state_pp, times = times, func = predator_prey_model, parms = pars_pp)
out_pp_df <- as.data.frame(out_pp)

# 그래프
ggplot(out_pp_df, aes(x = time)) +
  geom_line(aes(y = x1, color = "Test Anxiety (Prey)"), size = 1) +
  geom_line(aes(y = x2, color = "Study Time (Predator)"), size = 1, linetype = "dashed") +
  labs(title = "Predator-Prey Model: Anxiety vs. Regulation",
       y = "Level", x = "Time") +
  theme_minimal()

해석: 그래프는 파도처럼 출렁입니다. 학생의 상태가 안정되지 않고, ‘불안해서 공부함 \rightarrow 안심되어서 공부 안 함 \rightarrow 다시 불안해짐’의 사이클을 반복하는 현상을 수학적으로 보여줍니다.

5. 결론 및 제언

우리는 이 장을 통해 이원 관계(Dyadic Data)를 분석하는 4가지 강력한 도구를 살펴보았습니다.

  1. 동기화 모형: 멘토링 관계처럼 서로 닮아가는 과정.
  2. 상리공생 모형: 협동 학습을 통해 시너지를 내는 과정.
  3. 경쟁 모형: 상대평가 상황에서 서로를 억제하는 과정.
  4. 포식자-피식자 모형: 감정과 학습 조절 간의 순환적인 역동.

이러한 모형들은 전통적인 SEM과 달리, 시간의 흐름 속에서 변수들이 어떻게 ‘변화’하는지 그 자체를 미분방정식(dx/dtdx/dt)으로 설명합니다. 데이터 수집 기술의 발달로 교육 현장에서도 스마트 기기를 이용한 실시간 데이터(EMA) 수집이 가능해졌습니다. 여러분도 이러한 모형을 활용하여 단순한 상관관계를 넘어, 교육적 상호작용의 ‘역동적 메커니즘’을 밝혀내는 연구에 도전해 보시길 바랍니다.

참고문헌 (References)

  • Chambliss, D. F., & Schutt, R. K. (2018). Making sense of the social world: Methods of investigation (6th ed.). Thousand Oaks, CA: Sage.
  • Chen, M., Song, H., & Ferrer, E. (2026). Longitudinal Models for Assessing Dynamics in Dyadic Data. In Chapter 34 (pp. 634-645).
  • Cole, P. M., Bendezú, J. J., Ram, N., & Chow, S.-M. (2017). Dynamical systems modeling of early childhood self-regulation. Emotion, 17(4), 684–699.1
  • Felmlee, D. H., & Greenberg, D. F. (1999). A dynamic systems model of dyadic interaction. Journal of Mathematical Sociology, 23(3), 155–180.
  • Ferrer, E., & Steele, J. (2014). Differential equations for evaluating theoretical models of dyadic interactions. In P. C. Molenaar, R. M. Lerner, & K. M. Newell (Eds.), Handbook of developmental systems theory and methodology (pp. 345–368). New York: Guilford Press.
  • Gottman, J., Swanson, C., & Murray, J. (1999). The mathematics of marital conflict: Dynamic mathematical nonlinear modeling of newlywed marital interaction. Journal of Family Psychology, 13(1), 3–19.
  • Kot, M. (2001). Elements of mathematical ecology. Cambridge, UK: Cambridge University Press.
  • Lotka, A. J. (1925). Elements of physical biology. Baltimore: Williams & Wilkins.
  • Oud, J. H. L., & Singer, H. (2008). Continuous time modeling of panel data: SEM versus filter techniques. Statistica Neerlandica, 62(1), 4–28.

WaurimaL의 한마디: 여러분, 수식이 나와서 당황하셨죠? 하지만 수식은 현상을 명확하게 기술하기 위한 언어일 뿐입니다. R 코드를 직접 돌려보면서 그래프가 어떻게 변하는지 확인해 보세요. 그 과정에서 교육적 통찰을 얻으실 수 있을 겁니다.

Chap 33. 잠재 특성 상태 모형

안녕하세요. 이번 주제는 교육 현장에서 학생들의 심리적 특성이 시간이 지남에 따라 어떻게 변화하는지를 정밀하게 분석할 수 있는 잠재 특성-상태 모형(Latent Trait-State Models, LTS)입니다.

많은 연구자가 학생의 ‘학업 열의’나 ‘자아효능감’을 측정할 때, 이것이 변하지 않는 학생 고유의 기질(Trait)인지, 아니면 그날의 기분이나 환경에 따라 변하는 상태(State)인지 고민합니다. 과거에는 이 둘을 이분법적으로 보았지만, 현대 통계학은 이 두 가지가 공존한다고 봅니다.

1. 변하는 것과 변하지 않는 것

교육학 데이터를 다루다 보면 동일한 학생을 여러 시점에 걸쳐 추적 조사(종단 연구)하게 됩니다. 이때 우리가 얻는 점수는 두 가지 성분의 합으로 볼 수 있습니다.

  1. 시간 불변 성분 (Time-Invariant Component, II): 흔히 ‘특성(Trait)’이라고 부릅니다. 시간이 흘러도 변하지 않는 학생의 고유한 기준점입니다. 1년이 지나도, 2년이 지나도 개인차의 상관관계는 1.0이라고 가정합니다.
  2. 시간 가변 성분 (Time-Varying Component, VV): 흔히 ‘상태(State)’ 또는 ‘상황(Occasion)’이라고 부릅니다. 특정 시점에만 영향을 미치는 변동성입니다. 이 성분은 시간이 지날수록 상관관계가 낮아지는 자기회귀(Autoregressive) 속성을 가집니다.

이 장의 목표는 관측된 점수에서 이 두 가지 성분을 분리해 내는 구조방정식 모형(SEM)을 배우는 것입니다.

2. 기본 모형: 단변량 특성-상태-오차 모형 (Kenny-Zautra)

가장 기초적인 모형은 Kenny와 Zautra(1995)가 제안한 모형입니다.

2.1 개념

이 모형은 각 시점(tt)마다 하나의 측정 변수(YY)만 있을 때 사용합니다.

Yt=I+Vt+EtY_t = I + V_t + E_t

여기서 EE는 측정 오차입니다. VV는 이전 시점의 VV에 영향을 받는 자기회귀 구조를 가집니다(Vt=βVt1+ϵV_t = \beta V_{t-1} + \epsilon).

2.2 한계점

이 모형은 단순하고 우아하지만, 실제 분석에서는 자주 실패합니다.

  • 수렴이 잘 안 되거나 범위를 벗어난 추정치(Heywood case)가 나오기 쉽습니다.
  • 안정적인 결과를 얻으려면 표본 크기가 매우 커야 하고(500명 이상 권장), 4번 이상의 측정 시점이 필요합니다.

따라서 우리는 더 강력하고 안정적인 다변량 모형으로 넘어갑니다.

3. 다변량 특성-상태-상황 (Trait-State-Occasion, TSO) 모형

교육 연구에서는 보통 하나의 구성개념을 측정하기 위해 여러 개의 문항(예: 학업열의 1, 2, 3번 문항)을 사용합니다. 이를 활용한 것이 TSO 모형입니다.

3.1 모형의 구조

이 모형은 각 시점(tt)의 잠재변수(LtL_t)를 추출한 뒤, 이 잠재변수를 다시 IIVV로 분해합니다.

Lt=I+VtL_t = I + V_t

이 모형의 장점은 측정 오차를 잠재변수 단계에서 미리 걸러내기 때문에, IIVV의 분산을 더 정확하게 추정할 수 있다는 점입니다.

4. 실습: 가상의 교육 데이터 시나리오

여러분의 이해를 돕기 위해 가상의 고등학교 데이터를 생성하여 실습해 보겠습니다.

4.1 시나리오: “우리 학교 학생들은 학교를 얼마나 좋아하는가?”

  • 연구 주제: 고등학생의 ‘학교 소속감(School Belonging)’ 변화 연구
  • 대상: 고등학교 1학년 신입생 500명
  • 기간: 1학년 1학기부터 2학년 2학기까지 총 4학기 (4 Waves)
  • 측정 도구: 학교 소속감 척도 3문항 (Item 1, 2, 3)
    • Item 1: 나는 이 학교의 일원이라고 느낀다.
    • Item 2: 나는 학교에 오면 마음이 편하다.
    • Item 3: 선생님과 친구들은 나를 존중해 준다.
  • 가정:
    • 학생마다 타고난 사교성(Trait, II)이 존재함.
    • 학기마다 담임선생님이나 짝꿍에 따라 소속감(State, VV)이 변동함.
    • 지난 학기의 기분이 이번 학기에 영향을 줌(Autoregression).

4.2 데이터 생성 및 분석 도구 (R & jamovi)

jamovi 자체에는 복잡한 종단 구조방정식을 위한 메뉴가 없지만, SEMLj 모듈(lavaan 기반)을 설치하면 분석이 가능합니다. 혹은 R의 lavaan 패키지를 직접 사용할 수도 있습니다.

아래는 R을 사용하여 이 시나리오에 맞는 데이터를 생성하고 분석하는 코드입니다. 이 코드를 RStudio에서 실행하거나, 생성된 데이터를 jamovi로 불러와 분석할 수 있습니다.

R

# 필수 패키지 로드
if(!require(lavaan)) install.packages("lavaan")
if(!require(MASS)) install.packages("MASS")

set.seed(2026) # 재현성을 위한 시드 설정

# 1. 데이터 생성 시뮬레이션
N <- 500 # 표본 크기 (안정적 추정을 위해 500명 설정)
Waves <- 4

# 잠재 변수 생성
# Trait (I): 시간 불변 성분 (평균 0, 분산 0.5)
Trait <- rnorm(N, 0, sqrt(0.5))

# State (V): 시간 가변 성분 (자기회귀 구조)
V <- matrix(0, N, Waves)
beta <- 0.4 # 자기회귀 계수 (이전 시점이 다음 시점에 미치는 영향)
V[,1] <- rnorm(N, 0, sqrt(0.5)) # 첫 시점
for(t in 2:Waves){
  # Vt = beta * V(t-1) + disturbance
  V[,t] <- beta * V[,t-1] + rnorm(N, 0, sqrt(0.5 * (1 - beta^2))) 
}

# 관측 변수 (Y) 생성: Y = Loading*L + Error
# L = Trait + State
Data <- data.frame(ID = 1:N)
loadings <- c(1.0, 0.9, 0.8) # 문항별 요인적재량 (비등가 가정)

for(t in 1:Waves){
  Latent_L <- Trait + V[,t]
  for(k in 1:3){ # 3개의 문항
    # 측정 오차 추가
    error <- rnorm(N, 0, 0.3) 
    # 변수명 생성 (예: T1_Item1)
    var_name <- paste0("T", t, "_Item", k)
    Data[[var_name]] <- loadings[k] * Latent_L + error
  }
}

# 생성된 데이터 확인
head(Data)
write.csv(Data, "School_Belonging_Longitudinal.csv", row.names=FALSE)

5. TSO 모형 분석 단계 (jamovi SEMLj / lavaan 문법)

이제 위에서 만든 데이터를 가지고 실제 TSO 모형을 분석해 봅니다. TSO 모형은 문법이 다소 복잡하므로 꼼꼼히 작성해야 합니다.

5.1 분석 전략: 비등가 측정 및 공유된 방법 변량

초기 TSO 모형은 모든 문항의 영향력이 같다고 가정(타우-동등)했으나, 이는 현실적이지 않습니다. 또한, 같은 문항을 반복 측정하면 방법 효과(Method Effect)가 발생하여 오차끼리 상관이 생깁니다. 이를 반영한 상관된 고유성(Correlated Uniqueness, CU) 모델을 사용해야 편의(bias)를 줄일 수 있습니다.

5.2 lavaan 문법 (jamovi의 SEMLj 모듈에 붙여넣기)

R

# TSO Model Syntax

# 1. 각 시점(Wave)의 잠재변수(L) 정의 (Latent Variables)
L1 =~ 1*T1_Item1 + T1_Item2 + T1_Item3
L2 =~ 1*T2_Item1 + T2_Item2 + T2_Item3
L3 =~ 1*T3_Item1 + T3_Item2 + T3_Item3
L4 =~ 1*T4_Item1 + T4_Item2 + T4_Item3

# 2. 측정 불변성 가정 (Factor Loadings Equality across waves)
# 같은 문항은 시간이 지나도 같은 요인 적재량을 가져야 함
L1 =~ l2*T1_Item2 + l3*T1_Item3
L2 =~ l2*T2_Item2 + l3*T2_Item3
L3 =~ l2*T3_Item2 + l3*T3_Item3
L4 =~ l2*T4_Item2 + l3*T4_Item3

# 3. 측정 오차의 공분산 (Correlated Uniqueness) - 방법 효과 통제
T1_Item1 ~~ T2_Item1 + T3_Item1 + T4_Item1
T2_Item1 ~~ T3_Item1 + T4_Item1
T3_Item1 ~~ T4_Item1

T1_Item2 ~~ T2_Item2 + T3_Item2 + T4_Item2
T2_Item2 ~~ T3_Item2 + T4_Item2
T3_Item2 ~~ T4_Item2

T1_Item3 ~~ T2_Item3 + T3_Item3 + T4_Item3
T2_Item3 ~~ T3_Item3 + T4_Item3
T3_Item3 ~~ T4_Item3

# 4. 특성(Trait)과 상태(State)로 분해
# Trait (I)는 모든 시점의 L에 동일한 영향(1.0)을 미침
Trait =~ 1*L1 + 1*L2 + 1*L3 + 1*L4

# State (V) 정의: L = I + V 이므로, L을 구성하는 잔차(residual)가 곧 State가 됨
# 하지만 lavaan에서는 별도의 State 잠재변수를 만드는 것이 명확함.
# 여기서는 L의 잔차를 V로 개념화하는 방식을 주로 씀.
# 더 명시적인 TSO 모델링을 위해 State 잠재변수(S)를 정의함.

S1 =~ 1*L1
S2 =~ 1*L2
S3 =~ 1*L3
S4 =~ 1*L4

# 5. Trait와 State의 관계 설정
# Trait와 State는 서로 독립
Trait ~~ 0*S1 + 0*S2 + 0*S3 + 0*S4

# 6. State의 자기회귀 구조 (Autoregression) 
S2 ~ beta*S1
S3 ~ beta*S2
S4 ~ beta*S3

# 7. 식별을 위한 제약 조건 (Trait 분산 추정, State 잔차 분산 등)
Trait ~~ NA*Trait # Trait 분산 자유 추정
S1 ~~ S1 # 첫 시점 State 분산 자유 추정

[해석 팁]

  • Trait의 분산: 학생 고유의 ‘학교 소속감’ 기질이 얼마나 차이가 나는지 보여줍니다.
  • State의 자기회귀 계수(beta): 이전 학기의 소속감이 다음 학기로 얼마나 이월되는지 보여줍니다. 이 값이 1에 가까우면 변화가 거의 없는 것이고, 0에 가까우면 매 학기 새롭게 리셋되는 것입니다.
  • 오차 상관: 문항 자체의 특성 때문에 생기는 상관관계를 제거하여 순수한 Trait와 State를 발라내는 역할을 합니다.

6. 심화: 잠재 평균을 포함한 확장된 TSO 모형

단순히 분산(변동성)만 보는 것이 아니라, “어떤 집단이 전반적으로 소속감이 더 높은가?”를 알고 싶다면 평균 구조(Mean Structure)를 포함해야 합니다.

6.1 연구 질문의 확장

  • 남학생과 여학생 간에 ‘학교 소속감’의 Trait 평균(E(I)E(I))에 차이가 있는가?
  • 특정 시점(예: 2학년 1학기)에 소속감의 State 평균(E(Vt)E(V_t))이 급격히 떨어지는가?

6.2 분석 방법

다집단 분석(Multi-group analysis)을 수행합니다. 제약 조건은 StateState들의 평균 합을 0으로 설정하여, TraitTrait의 평균이 전체 기간의 ‘그랜드 평균(Grand Mean)’을 의미하도록 합니다.

결과 해석 예시:

“분석 결과, 여학생 집단이 남학생 집단보다 Trait 평균이 유의하게 높았다(p<.05p < .05). 이는 여학생이 전반적으로 학교에 대한 소속감이 더 높음을 의미한다. 반면, 2학년 1학기의 State 평균은 두 집단 모두에서 음수(-)로 나타났는데, 이는 ‘학업 스트레스’라는 상황적 요인이 학생들의 소속감을 일시적으로 낮추었음을 시사한다.”

7. 결론 및 제언

LTS(잠재 특성-상태) 모형은 교육학 데이터처럼 인간의 심리가 ‘변하지 않는 기질’‘변하는 상태’의 혼합물이라는 점을 통계적으로 명확히 규명해 줍니다.

이 모형을 사용할 때의 핵심 요약:

  1. 데이터: 최소 4시점 이상, 표본 수 200명 이상(안정적으로는 500명) 확보하세요.
  2. 모형: Kenny-Zautra(단변량)보다는 TSO(다변량) 모형을 우선 고려하세요.
  3. 오차: 반복 측정으로 인한 방법 효과(오차 상관)를 반드시 모형에 포함하세요.

여러분의 연구가 학생들의 성장을 단순히 점수의 변화로만 보는 것을 넘어, 그 이면의 안정성(Trait)가변성(State)의 역동을 이해하는 깊이 있는 연구가 되기를 바랍니다.

참고문헌

  • Cole, D. A., & Martin, N. C. (2005). The longitudinal structure of the Children’s Depression Inventory: Testing a latent trait-state model. Psychological Assessment, 17(2), 144–155.
  • Cole, D. A., Martin, N. C., & Steiger, J. H. (2005). Empirical and conceptual problems with longitudinal trait-state models: Introducing a trait-state-occasion model. Psychological Methods, 10, 3–20.
  • Ciesla, J. A., Cole, D. A., & Steiger, J. H. (2007). Extending the trait-state-occasion model: How important is within-wave measurement equivalence? Structural Equation Modeling, 14, 77–97.
  • Herzog, C., & Nesselroade, J. R. (1987). Beyond autoregressive models: Some implication of the trait-state distinction for the structural modeling of developmental change. Child Development, 58, 93–109.
  • Kenny, D. A., & Zautra, A. (1995). The trait-state-error model for multiwave data. Journal of Consulting and Clinical Psychology, 63, 52–59.
  • LaGrange, B., & Cole, D. A. (2008). An expansion of the trait-state-occasion model: Accounting for shared method variance. Structural Equation Modeling, 15(2), 241–271.
  • Spielberger, C. D. (1966). Theory and research on anxiety. In Anxiety and behavior (pp. 23–62). New York: Academic Press.

Chap 32. 연속 시간 동적 모형

안녕하세요? 이번에는 “연속 시간 동적 모형(Contnuous-Time Dynamic Models)”에 관한 내용입니다. 우리가 흔히 사용하는 이산 시간(Discrete-Time) 모형(예: SEM, VAR)과 연속 시간 모형(SDE)을 어떻게 연결하고, 왜 연속 시간 관점이 필요한지를 살펴보겠습니다.

jamovi는 훌륭한 도구이지만, 이 챕터에서 다루는 확률 미분 방정식(SDE)이나 칼만 필터 기반의 동적 모형을 직접적으로 수행하는 모듈은 아직 제한적입니다. 따라서 지침에 따라 R 언어를 사용하여 시뮬레이션과 분석을 구현하고, 그 결과와 의미를 교육적 맥락에서 아주 쉽게 설명해 드리겠습니다.

1. 왜 ‘연속 시간’인가?

교육 심리학 연구에서 우리는 종종 “학생들의 학습 동기가 어떻게 변화하는가?” 또는 “시험 불안은 시간에 따라 어떻게 오르내리는가?”와 같은 질문을 던집니다. 전통적인 연구에서는 1학기 초, 1학기 말, 2학기 초와 같이 띄엄띄엄(이산적으로) 데이터를 수집했습니다.

하지만 스마트폰과 웨어러블 기기의 발달로 생태학적 순간 평가(EMA)경험 표집법(ESM)이 가능해졌습니다. 이제 우리는 학생들에게 불규칙한 간격(예: 삐삐나 알람이 울릴 때)으로 설문을 보낼 수 있습니다.

여기서 문제가 발생합니다.

  • 이산 시간 모형(Discrete-Time Model): 모든 측정 간격이 동일하다고 가정합니다 (예: 매일 같은 시간).
  • 현실: 철수는 2시간 뒤에 응답하고, 영희는 5시간 뒤에 응답합니다. 간격이 제각각입니다.

이 불규칙함을 무시하고 분석하면 엉뚱한 결론이 나옵니다. 이를 해결하기 위해 시간이 끊어지지 않고 흐른다고 가정하는 연속 시간 동적 모형(Continuous-Time Dynamic Models)이 필요합니다.

2. 핵심 이론: 선형 확률 미분 방정식 (Linear SDE)

이 챕터의 핵심은 SDE(Stochastic Differential Equation)입니다. 수식이 복잡해 보이지만, 교육적 예시로 보면 간단합니다.

2.1. 기본 개념

어떤 학생의 ‘학업 몰입도(η\eta)’가 시간에 따라 변한다고 가정해 봅시다.

dη(t)=[b+Aη(t)]dt+GdW(t)d\eta(t) = [b + A\eta(t)]dt + G dW(t)

이 식은 다음 두 가지 힘의 싸움입니다:

  1. 결정적 변화 (Drift, AA): 학생의 몰입도가 본래의 상태로 돌아가려는 힘입니다. 예를 들어, 수업 중 딴생각을 하다가도 다시 집중하려고 노력하는 ‘회복력’과 같습니다.
  2. 확률적 변화 (Diffusion, GG): 예측할 수 없는 외부 충격입니다. 갑자기 창밖에서 공사 소리가 들리거나, 친구가 말을 거는 것과 같은 ‘노이즈’입니다.

2.2. 이산 시간 모형과의 연결 (EDM)

우리가 수집하는 데이터는 연속적이지 않고 특정 시점(t1,t2...t_1, t_2…)에만 있습니다. SDE를 우리가 분석할 수 있는 형태(이산 시간)로 바꾸면 구조방정식(SEM)의 형태가 됩니다9.

이때 가장 중요한 마법의 공식은 행렬 지수함수(Matrix Exponential)입니다.

AΔt=eAΔtA_{\Delta t} = e^{A \Delta t}

이 식은 “연속적으로 흐르는 시간(AA)”을 “우리가 관찰한 시간 간격(Δt\Delta t)”만큼 잘라내어 계수로 만드는 역할을 합니다.

3. 예시 연구 I: 학생의 ‘정서적 안녕감’ 변화 (Ornstein-Uhlenbeck 모형)

첫 번째 예시로 Ornstein-Uhlenbeck (OU) 모형을 살펴보겠습니다. 이 모형은 “항상성(Homeostasis)”을 설명하기 좋습니다. 학생들의 기분은 일시적으로 좋아지거나 나빠질 수 있지만, 결국 자신의 고유한 ‘기본 상태(Set point)’로 돌아오는 경향이 있습니다.

3.1. 가상의 시나리오

우리는 고등학생 100명을 대상으로 시험 기간 일주일 동안 앱을 통해 ‘학업 스트레스’와 ‘학업 효능감’을 측정했습니다. 알림은 무작위로 울렸기 때문에 측정 간격(Δt\Delta t)은 0.1시간부터 10시간까지 다양합니다.

  • 변수 1 (η1\eta_1): 학업 스트레스
  • 변수 2 (η2\eta_2): 학업 효능감

3.2. 분석 및 시뮬레이션 (R 활용)

𝐀=𝐁=[0.10.050.050.1]\mathbf{A} = -\mathbf{B} = -\begin{bmatrix} 0.1 & -0.05 \\ -0.05 & 0.1 \end{bmatrix}

𝐛=𝐁𝝁=[0.10.050.050.1][5.765.18]=[0.320.23]\mathbf{b} = \mathbf{B}\boldsymbol{\mu} = \begin{bmatrix} 0.1 & -0.05 \\ -0.05 & 0.1 \end{bmatrix} \begin{bmatrix} 5.76 \\ 5.18 \end{bmatrix} = \begin{bmatrix} 0.32 \\ 0.23 \end{bmatrix} \quad

𝐆=[1.6700.061.671.672×1.8120.0621.67]\mathbf{G} = \begin{bmatrix} 1.67 & 0 \\ \frac{0.06}{1.67} & \frac{\sqrt{1.67^2 \times 1.81^2 – 0.06^2}}{1.67} \end{bmatrix}

such that

𝐆𝐆=𝐐=[2.790.060.063.27]\mathbf{GG’} = \mathbf{Q} = \begin{bmatrix} 2.79 & 0.06 \\ 0.06 & 3.27 \end{bmatrix}

위 수식에 제시된 파라미터를 사용하여 데이터를 생성하고, 시각화해 보겠습니다. 본문에서는 dynr 패키지를 사용했지만12, 여기서는 원리를 보여드리기 위해 직접 생성 코드를 작성합니다.

R

3.3. 결과 해석 및 교육적 함의

# R 코드: OU 모형 시뮬레이션 및 시각화
set.seed(1234)
library(ggplot2)
library(MASS) # for mvrnorm

# 1. 파라미터 설정 (본문 Eq 32.25 참조) [cite: 207]
# Drift Matrix (A): 음수일수록 원래 상태로 빨리 돌아옴 (안정적)
A <- matrix(c(-0.1, 0.05, 
              0.05, -0.1), nrow=2, byrow=TRUE)

# Diffusion Matrix (G): 노이즈의 크기
G <- matrix(c(1.67, 0, 
              0.036, 1.81), nrow=2, byrow=TRUE) # Q의 제곱근 근사

# 초기값
eta <- c(0, 0)
dt <- 0.1 # 데이터 생성 간격 (아주 짧게 설정하여 연속 시간 흉내)
T_points <- 100
data_list <- list()

# 2. 데이터 생성 (Euler-Maruyama 방법)
for(i in 1:T_points) {
  # dW는 정규분포를 따르는 노이즈 [cite: 39]
  dW <- rnorm(2, mean=0, sd=sqrt(dt)) 
  
  # SDE 식 적용: 변화량 = (Drift * dt) + (Diffusion * dW)
  d_eta <- (A %*% eta) * dt + (G %*% dW)
  eta <- eta + d_eta
  
  data_list[[i]] <- data.frame(Time = i * dt, 
                               Stress = eta[1], 
                               Efficacy = eta[2])
}

df_sim <- do.call(rbind, data_list)

# 3. 시각화
ggplot(df_sim, aes(x=Time)) +
  geom_line(aes(y=Stress, color="학업 스트레스"), size=1) +
  geom_line(aes(y=Efficacy, color="학업 효능감"), size=1, linetype="dashed") +
  theme_minimal() +
  labs(title = "연속 시간 OU 모형 시뮬레이션: 스트레스와 효능감의 변화",
       subtitle = "본문의 예제 1 (Eq 32.25) 기반 재구성",
       y = "잠재 변수 수준", x = "시간 (Time)") +
  scale_color_manual(name="변수", values=c("학업 스트레스"="firebrick", "학업 효능감"="steelblue"))

위 그래프(R 코드로 생성 가능)를 보면 스트레스와 효능감이 서로 얽혀서 변하는 것을 볼 수 있습니다.

  • 안정성(Stability): 행렬 AA의 고유값(Eigenvalues)이 모두 음수라면(본문에서는 B=AB=-A가 양의 정부호), 학생의 상태는 시간이 지나면 안정을 찾습니다.
  • 불규칙한 간격의 문제: 만약 우리가 이 데이터를 매우 긴 간격(Δt=10\Delta t=10)으로 측정했다면, 스트레스가 효능감에 미치는 즉각적인 영향을 놓치거나 왜곡해서 해석했을 것입니다. 아래 표는 측정 간격이 커질수록 변수 간의 관계(회귀계수)가 어떻게 달라지는지 보여줍니다. 간격이 넓어지면 자기회귀 계수는 작아지고, 교차 회귀 계수의 해석이 모호해질 수 있습니다.

4. 예시 연구 II: 큐빅 스플라인(Cubic Spline)과 결측치 보간

두 번째 예시는 큐빅 스플라인 모형입니다. 이것은 데이터가 아주 불규칙하거나 결측치가 많을 때, 그 사이를 부드러운 곡선으로 채워넣는(Interpolation) 기법입니다.

4.1. 가상의 시나리오: 난독증 학생의 읽기 유창성

난독증 위험군 학생 3명을 대상으로 읽기 유창성 검사를 실시했습니다. 그런데 학교 행사, 결석 등으로 인해 검사 시점이 학생마다 제각각입니다. 이를 억지로 같은 간격으로 취급하면(예: 1회차, 2회차…) 성장 패턴을 오해하게 됩니다.

4.2. 큐빅 스플라인의 원리

이 모형은 2차 SDE로 표현됩니다.

  • μ(t)\mu(t): 학생의 현재 읽기 능력 (Local Level)
  • β(t)\beta(t): 읽기 능력의 변화 속도 (Local Slope)

이 모형은 측정 오차를 걸러내고, 잠재적인 진짜 성장 곡선을 추정해 줍니다.

4.3. R 시뮬레이션 (불규칙 시점 데이터 보간)

R

# R 코드: 큐빅 스플라인 보간 예시
library(ggplot2)

# 1. 가상 데이터 생성 (불규칙한 시점)
# 학생 A는 1, 2, 4, 8주차에 측정
time_obs <- c(1, 2, 4, 8)
score_obs <- c(20, 25, 35, 42) # 읽기 점수

# 2. 큐빅 스플라인 보간 (SDE의 해석적 해와 유사)
spline_fit <- smooth.spline(time_obs, score_obs, df=3)

# 3. 예측 (1주부터 8주까지 모든 시점)
time_pred <- seq(1, 8, by=0.1)
score_pred <- predict(spline_fit, time_pred)$y

df_raw <- data.frame(Time=time_obs, Score=score_obs)
df_pred <- data.frame(Time=time_pred, Score=score_pred)

# 4. 시각화
ggplot() +
  geom_line(data=df_pred, aes(x=Time, y=Score), color="purple", size=1, alpha=0.6) +
  geom_point(data=df_raw, aes(x=Time, y=Score), color="black", size=3) +
  geom_text(data=df_raw, aes(x=Time, y=Score, label=Score), vjust=-1.5) +
  theme_minimal() +
  labs(title = "읽기 유창성 점수의 큐빅 스플라인 보간",
       subtitle = "불규칙한 측정 시점(검은 점) 사이를 연속적으로 추정(보라색 선)",
       x = "주차 (Week)", y = "읽기 점수") +
  ylim(15, 50)

4.4. 교육적 함의

  • 결측치 해결: 아래 그림에서 볼 수 있듯이, 불규칙한 데이터를 강제로 등간격으로 가정하면(잘못된 간격), 학생의 성장 궤적이 왜곡됩니다.
  • 정확한 피드백: 스플라인 모형을 통해 우리는 측정이 이루어지지 않은 날의 학생 상태도 추정할 수 있어, 보다 적시에 중재(intervention)를 할 수 있습니다.

5. 결론 및 제언

본 챕터는 다소 난해할 수 있는 연속 시간 모형이 교육 및 심리 연구에 왜 필요한지를 역설하고 있습니다.

  1. 현실 반영: 학생들의 삶은 불규칙합니다. 연속 시간 모형은 이를 있는 그대로 반영합니다.
  2. 모형의 유연성: SDE 프레임워크를 사용하면 VAR(벡터 자기회귀), SVAR(구조적 벡터 자기회귀) 모형 등으로 자유롭게 변환하여 해석할 수 있습니다.
  3. 도구의 확장: Mplus나 R의 dynr, ctsem 같은 도구를 통해 이제는 교육 연구자들도 이러한 고급 분석을 수행할 수 있습니다.

여러분의 연구에서 데이터 수집 간격이 불규칙하거나, 시간에 따른 변화의 ‘메커니즘’을 정밀하게 보고 싶다면, 연속 시간 동적 모형은 강력한 무기가 될 것입니다.

참고문헌

  • Chow, S.-M., Losardo, D., Park, J., & Molenaar, P. C. M. (2016). Continuous-time dynamic models: Connections to structural equation models and other discrete-time models. In Handbook of Structural Equation Modeling (pp. 597–614).
  • Boker, S. M., & Graham, J. (1998). A dynamical systems analysis of adolescent substance abuse. Multivariate Behavioral Research, 33, 479-507.
  • Driver, C., Oud, J., & Voelkle, M. (2017). Continuous time structural equation modeling with R package ctsem. Journal of Statistical Software, 77(5), 1-35.
  • Oravecz, Z., Tuerlinckx, F., & Vandekerckhove, J. (2011). A hierarchical latent stochastic differential equation model for affective dynamics. Psychological Methods, 16, 468-490.
  • Ou, L., Hunter, M. D., & Chow, S. (2019). What’s for dynr: A package for linear and nonlinear dynamic modeling in R. The R Journal.

Chap 31. 동적 구조방정식 모델링(Dynamic Structural Equation Modeling)

안녕하세요?
이번에는 현대 종단 연구의 정수라고 할 수 있는 동적 구조방정식 모델링(Dynamic Structural Equation Modeling, 이하 DSEM)에 대해 함께 탐구해 보겠습니다.

과거에는 학생들의 변화를 측정하기 위해 학기 초와 학기 말, 두 번의 검사(Pre-Post)에 의존하곤 했습니다. 하지만 학생의 심리나 학습 상태는 매시간, 매일 요동칩니다. DSEM은 이러한 집중 종단 데이터(Intensive Longitudinal Data)를 분석하기 위해 시계열 분석, 다층 모형(MLM), 그리고 구조방정식 모형(SEM)을 하나로 통합한 혁신적인 프레임워크입니다.

오늘 우리는 이 이론을 교육 현장의 예시를 통해 아주 쉽게 풀어보고, 실제로 어떻게 데이터를 다루는지 살펴보겠습니다.

1. DSEM의 핵심: 세 가지 전통의 결합

DSEM은 단순히 복잡한 통계가 아니라, 우리가 데이터를 바라보는 세 가지 관점을 합친 것입니다.

  1. 시계열 분석 (N=1N=1): 한 학생이 어제의 학습 무기력에서 오늘 얼마나 영향을 받는지(자기회귀), 또는 어제의 스트레스가 오늘의 학습 참여에 어떤 영향을 주는지(교차 지연)를 분석합니다.
  2. 다층 모형 (Multilevel): 학생들마다 스트레스에 반응하는 정도가 다를 수 있습니다. 이러한 개인차를 ‘무작위 효과(Random Effects)’로 다룹니다.
  3. 구조방정식 (SEM): 그 개인차(예: 스트레스에 민감한 정도)가 그 학생의 ‘회복탄력성’이라는 잠재 변수 때문은 아닌지, 혹은 성적에 영향을 주는지 분석합니다.

2. 교육 현장 사례: “학습 스트레스와 수업 참여”

이해를 돕기 위해 가상의 시나리오를 만들어 봅시다.

연구 스토리:

어느 고등학교에서 학생들의 ‘수업 참여도(Engagement)’와 ‘학업 스트레스(Stress)’ 사이의 역동을 연구합니다. 100명의 학생에게 스마트폰 앱을 통해 10일간 하루 5번씩 실시간으로 상태를 기록하게 했습니다(경험샘플링법). 연구 중간에 일부 학급에는 ‘명상 프로그램(처치)’을 실시했습니다.

주요 변수 정의

  • yity_{it} (수업 참여도): ii번째 학생의 tt시점 참여도.
  • xitx_{it} (학업 스트레스): 이전 측정 시점부터 현재까지 겪은 스트레스.

3. 단계별 모델링 분석

DSEM의 유연성을 보여주기 위해 세 가지 단일 수준(N=1N=1) 모델부터 시작해 봅시다.

1단계: 단순 회귀 모델 (Model 1)

동일 시점의 스트레스가 참여도에 주는 영향을 봅니다.

yt=ν+βxt+ζty_{t} = \nu + \beta x_{t} + \zeta_{t}

  • 교육적 의미: 지금 당장 스트레스를 받으면 지금 수업 참여도가 떨어지는지를 확인합니다.

2단계: 시계열 모델 (Model 2)

여기에 자기회귀(Autoregression, ϕ\phi)를 추가합니다.

yt=ν+ϕyt1+βxt+ζty_{t} = \nu + \phi y_{t-1} + \beta x_{t} + \zeta_{t}

  • 교육적 의미: 관성(Inertia) 개념입니다. 수업에 한 번 집중하기 시작한 학생이 그 상태를 얼마나 유지하는지(ϕ\phi)를 측정합니다.

3단계: 이변량 시계열 모델 (Model 3)

스트레스와 참여도가 서로 주고받는 영향을 모두 고려합니다.

yt=νy+ϕyyt1+βyxt+ζyty_{t} = \nu_{y} + \phi_{y} y_{t-1} + \beta_{y} x_{t} + \zeta_{yt}

xt=νx+ϕxxt1+βxyt1+ζxtx_{t} = \nu_{x} + \phi_{x} x_{t-1} + \beta_{x} y_{t-1} + \zeta_{xt}

  • 교육적 의미: 스트레스가 참여도를 낮추기도 하지만(βy\beta_{y}), 반대로 어제 수업에 참여하지 못한 자책감이 오늘 더 큰 스트레스를 유발하는지(βx\beta_{x}) 분석합니다.

4. 다층 DSEM과 SEM의 결합

이제 이를 전체 학생으로 확장합니다. 모든 학생의 ϕ\phiβ\beta가 같을 순 없겠죠? DSEM은 이 파라미터들을 무작위 슬로프(Random Slopes)로 처리하여 학생마다 다른 값을 갖게 합니다.

또한, 이러한 개인차를 ‘기초 학력’이나 ‘성격’ 같은 변수로 설명할 수 있습니다. 예를 들어, ‘우울감(Depression)’ 점수가 높은 학생일수록 스트레스가 참여도를 떨어뜨리는 효과(βy\beta_{y})가 더 강력하게 나타나는지(교차 수준 상호작용)를 SEM 모델로 검증할 수 있습니다.

5. 실전 데이터 분석 (R 활용)

현재 jamovi의 기본 모듈에는 Mplus 수준의 DSEM을 완벽히 구현하는 기능이 제한적이므로, 학계에서 널리 쓰이는 R의 brms 패키지를 활용한 분석 코드를 제안합니다.

모의 데이터 생성 및 분석 스크립트

R

# 필요한 라이브러리 로드
library(brms)
library(tidyverse)

# 1. 모의 데이터 생성 (100명 학생, 50회 반복 측정)
set.seed(2026)
n_students <- 100
n_timepoints <- 50

sim_data <- expand.grid(student = 1:n_students, time = 1:n_timepoints) %>%
  group_by(student) %>%
  mutate(
    # 학업 스트레스 (X) 생성
    stress = arima.sim(list(ar = 0.3), n = n_timepoints) + rnorm(1, 0, 1),
    # 수업 참여도 (Y) 생성: 자기회귀 + 스트레스 영향 + 개인차
    engagement = 0
  )

# 참여도 데이터 생성 (동적 프로세스 반영)
for(i in 2:n_timepoints) {
  sim_data <- sim_data %>%
    group_by(student) %>%
    mutate(engagement = ifelse(time == i, 
                               0.5 * lag(engagement) - 0.3 * stress + rnorm(1, 0, 0.5), 
                               engagement))
}

# 2. DSEM 모델 구성 (자기회귀 및 무작위 효과 포함)
# engagement_t ~ engagement_{t-1} + stress + (1 + engagement_{t-1} + stress | student)
model_formula <- bf(
  engagement ~ 1 + lag_engagement + stress + (1 + lag_engagement + stress | student)
)

# 데이터 전처리: 시차 변수(Lag) 생성
sim_data <- sim_data %>%
  group_by(student) %>%
  mutate(lag_engagement = lag(engagement)) %>%
  drop_na()

# 3. 모델 추정 (Bayesian)
# 실제 실행 시 시간이 소요되므로 iterations는 조절 필요
fit_dsem <- brm(
  formula = model_formula,
  data = sim_data,
  family = gaussian(),
  cores = 4, 
  iter = 2000
)

# 4. 결과 시각화
summary(fit_dsem)
plot(conditional_effects(fit_dsem), points = TRUE)

6. 결론 및 시사점

DSEM은 교육 연구자들에게 “학생이 어떻게 변해가는가?”에 대한 현미경 같은 시각을 제공합니다.

  • 치료 및 중재 효과 확인: 명상 프로그램이 학생의 스트레스 민감도(β\beta)를 실제로 낮추었는지 확인할 수 있습니다.
  • 예측력: 단순히 현재 상태를 아는 것을 넘어, 과거의 패턴을 통해 내일의 학습 위기를 예측할 수 있게 합니다.

DSEM은 아직 새로운 분야이기에 잔차의 정규성 가정 위반이나 모형 적합도 평가 등 해결해야 할 과제들이 남아 있지만, 집중 종단 데이터를 다루는 가장 강력한 도구임은 틀림없습니다.

참고문헌

  • Asparouhov, T., Hamaker, E. L., & Muthén, B. (2018). Dynamic structural equation modeling. Structural Equation Modeling: A Multidisciplinary Journal, 25(3), 359-388.
  • Bolger, N., Davis, A., & Rafaeli, E. (2003). Diary methods: Capturing life as it is lived. Annual Review of Psychology, 54, 579-616.
  • Hamaker, E. L., Asparouhov, T., & Muthén, B. (2022). Dynamic structural equation modeling as a combination of time series modeling, multilevel modeling, and structural equation modeling. In Handbook of Structural Equation Modeling.
  • Kuppens, P., Allen, N. B., & Sheeber, L. B. (2010). Emotional inertia and psychological maladjustment. Psychological Science, 21(7), 984-991.
  • Raudenbush, S. W., & Bryk, A. S. (2002). Hierarchical linear models: Applications and data analysis methods (2nd ed.). Sage.