태그 보관물: jamovi

Chap 14. 확인적 요인분석(CFA)

안녕하세요.
여러분과 함께 확인적 요인분석(Confirmatory Factor Analysis, CFA)의 세계를 탐구하게 되어 기쁩니다.

오늘 우리가 살펴볼 내용은 Timothy A. Brown의 핵심 이론을 바탕으로 하며, 실제 학교 현장에서 마주할 수 있는 ‘학업 자기효능감’과 **‘교사 지지’라는 두 가지 개념을 통해 CFA의 전 과정을 상세히 학습해 보겠습니다.

1. 확인적 요인분석(CFA)의 본질

확인적 요인분석은 구조방정식 모델링(SEM)의 핵심적인 부분으로, 측정 모델(Measurement Model)을 다룹니다. 즉, 우리가 직접 관찰한 지표들(시험 점수, 설문 문항 등)과 우리가 직접 볼 수 없는 잠재 변수(지능, 성격, 효능감 등) 사이의 관계를 규명하는 작업입니다.

1.1 공통 요인 모델 (Common Factor Model)

CFA의 기초는 모든 관찰 지표가 하나 이상의 공통 요인(Common Factor)과 하나의 고유 요인(Unique Factor)의 선형 결합이라는 가정에서 출발합니다.

  • 공통 변량(Common Variance): 잠재 변수에 의해 설명되는 부분으로, 여러 지표가 공유하는 변량입니다.
  • 고유 변량(Unique Variance): 해당 지표만이 가진 신뢰로운 특성과 측정 오차(Measurement Error)가 결합된 부분입니다.

1.2 탐색적 요인분석(EFA) vs. 확인적 요인분석(CFA)

가장 큰 차이는 ‘사전 제약(A priori specification)’에 있습니다.

  • EFA: 데이터가 스스로 구조를 드러내도록 두는 데이터 중심 접근법입니다. 어떤 문항이 어떤 요인에 묶일지 사전에 정하지 않습니다.
  • CFA: 연구자가 이론적 근거를 바탕으로 요인의 수, 문항과의 관계(요인 부하량) 등을 미리 지정하고, 이 모델이 실제 데이터와 얼마나 잘 맞는지 평가합니다.

2. CFA의 주요 목적과 파라미터

2.1 왜 CFA를 하는가?

  1. 척도 개발 및 타당화: 설문지가 의도한 구조대로 작동하는지 확인합니다.
  2. 방법 효과(Method Effects) 검출: 문항의 표현 방식(역채점 문항 등) 때문에 발생하는 오차의 상관을 모델링할 수 있습니다.
  3. 수렴 및 판별 타당도 검증: 비슷한 개념의 지표끼리 강하게 묶이는지(수렴), 서로 다른 개념이 충분히 구분되는지(판별) 확인합니다.
  4. 측정 동일성(Measurement Invariance) 평가: 성별이나 문화권에 따라 척도가 동일하게 기능하는지 분석합니다.

2.2 모델의 주요 파라미터

  • 요인 부하량(Factor Loadings, λ\lambda): 요인이 지표를 예측하는 회귀 계수입니다.
  • 고유 변량(Unique Variances, δ\delta): 요인에 의해 설명되지 않는 나머지 오차 부분입니다.
  • 요인 분산 및 공분산(ϕ\phi): 잠재 변수 자체의 변동성과 변수 간의 관계를 나타냅니다.

3. 실습을 위한 시나리오 및 모의 데이터 생성

🏫 연구 시나리오: “중학생의 학습 동기 구조 분석”

A 중학교 상담 교사인 당신은 학생들이 느끼는 ‘학업 자기효능감(Self-Efficacy, SE)’‘교사 지지(Teacher Support, TS)’가 서로 다른 개념인지, 그리고 각 문항이 적절한지 검증하고자 합니다.

  • 학업 자기효능감(SE): 문항 X1~X4 (예: “나는 어려운 문제도 풀 수 있다”)
  • 교사 지지(TS): 문항 X5~X8 (예: “선생님은 내가 힘들 때 도와주신다”)
  • 특이 사항: X7과 X8은 부정적인 뉘앙스의 역채점 문항으로 설계되어 문항 간 오차 상관이 예상됩니다.

Jamovi 및 R 실습 코드

Jamovi는 내부적으로 R의 lavaan 패키지를 사용합니다. 먼저 분석에 사용할 모의 데이터를 생성하고 분석하는 R 코드를 제시합니다.

R

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

# 1. 모의 데이터 생성 (N=300)
set.seed(2025)
model_sim <- '
  SE =~ 0.8*x1 + 0.7*x2 + 0.75*x3 + 0.6*x4
  TS =~ 0.85*x5 + 0.8*x6 + 0.75*x7 + 0.7*x8
  SE ~~ 0.4*TS  # 두 요인 간 상관
  x7 ~~ 0.3*x8  # 방법 효과 (오차 상관)
'
dat <- simulateData(model_sim, sample.nobs = 300)

# 2. CFA 모델 설정
cfa_model <- '
  Academic_SE =~ x1 + x2 + x3 + x4
  Teacher_TS  =~ x5 + x6 + x7 + x8
  
  # 오차 공분산 지정 (역채점 문항의 방법 효과 반영)
  x7 ~~ x8
'

# 3. 모델 추정
fit <- cfa(cfa_model, data = dat, std.lv = TRUE)

# 4. 결과 요약
summary(fit, fit.measures = TRUE, standardized = TRUE, rsquare = TRUE)

4. 모델 식별과 평가

4.1 모델 식별 (Identification)

CFA를 수행하려면 잠재 변수의 척도를 정해야 합니다.

  1. 지표 고정법(Marker Indicator): 한 문항의 부하량을 1.0으로 고정하여 해당 문항의 단위를 잠재 변수에 부여합니다. (Jamovi/Mplus 기본값)
  2. 분산 고정법(Fixed Factor Variance): 요인의 분산을 1.0으로 고정합니다.

또한, 알고 있는 정보(데이터의 분산/공분산)가 추정할 파라미터 수보다 많아야 합니다(과잉 식별, df > 0).

4.2 적합도 지수 (Goodness-of-Fit)

모델이 실제 데이터를 얼마나 잘 모사하는지 평가합니다.

  • χ2\chi^2 (Chi-square): p>.05p > .05이면 완벽한 적합을 의미하지만, 표본 크기에 민감하여 보통 참고용으로만 봅니다.
  • CFI / TLI: .95 이상이면 우수한 적합도로 봅니다.
  • RMSEA: .06 이하(또는 .08 이하)를 양호한 수준으로 봅니다.
  • SRMR: .08 이하일 때 모델이 데이터를 잘 설명한다고 봅니다.

5. 모델 수정 (Respecification)

만약 적합도가 낮다면 어떻게 해야 할까요?

  1. 수정 지표(Modification Indices, MI): “특정 오차끼리 상관을 맺어주면 χ2\chi^2가 이만큼 줄어들 것이다”라고 알려주는 지표입니다.
  2. χ2\chi^2 차이 검증: 원래 모델(경직된 모델)과 파라미터를 추가한 모델(유연한 모델)을 비교하여 통계적으로 유의한 개선이 있는지 확인합니다.

⚠️ 주의: 수정 지표에만 의존해 모델을 고치는 것은 ‘데이터 끼워맞추기(Overfitting)’가 될 수 있습니다. 반드시 이론적 근거가 있어야 합니다.

6. 결론 및 요약

확인적 요인분석은 우리가 측정하고자 하는 심리적 가설을 엄격하게 테스트하는 도구입니다. 단순히 통계치를 얻는 것을 넘어, 연구자가 가진 이론이 실제 교육 현장의 데이터와 부합하는지 증명하는 과정입니다.

참고문헌

  • Brown, T. A. (2015). Confirmatory factor analysis for applied research (2nd ed.). Guilford Press.
  • Hu, L., & Bentler, P. M. (1999). Cutoff criteria for fit indexes in covariance structure analysis: Conventional criteria versus new alternatives. Structural Equation Modeling, 6(1), 1-55. https://doi.org/10.1080/10705519909540118
  • Muthén, L. K., & Muthén, B. O. (1998-2021). Mplus user’s guide. Author.

Chap 13. jamovi와 lavaan을 활용한 구조방정식 모델링(SEM)

안녕하세요!

구조방정식은 단순히 변수 간의 관계를 보는 것을 넘어, 우리가 직접 관찰할 수 없는 ‘잠재적인 마음의 상태(잠재변수)’를 측정하고 그들 사이의 복잡한 인과관계를 모형화할 수 있게 해주는 아주 매력적인 방법론입니다.

이 장에서는 실제 교육 현장에서 만날 수 있는 시나리오를 통해 jamoviR(lavaan)을 활용하여 구조방정식을 어떻게 수행하는지 아주 상세히 다룹니다.

1. 들어가며: 왜 구조방정식인가?

우리가 교육 현장에서 마주하는 개념들—예를 들어 ‘학업 동기’, ‘교사 지지’, ‘자기효능감’—은 단 하나의 시험 점수나 설문 문항으로 완벽히 설명하기 어렵습니다. 구조방정식 모델링(Structural Equation Modeling, SEM)은 이러한 잠재변수(Latent Factor)를 여러 개의 측정지표(Indicator)를 통해 파악하고, 이들 간의 구조적 관계를 분석하는 통계 기법입니다.

전통적으로 SEM은 Mplus, Amos와 같은 고가의 상용 프로그램을 주로 사용해 왔으나, 최근에는 jamoviSEMLj 모듈이나 R의 lavaan 패키지와 같은 오픈소스 도구들이 발전하면서 누구나 정교한 분석을 수행할 수 있게 되었습니다.

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

이해를 돕기 위해 학교 현장의 이야기를 담은 데이터를 가정해 봅시다.

연구 시나리오: “교사의 정서적 지지가 학생의 학업 성취에 미치는 영향”

  • 독립변수(X): 교사 지지(Teacher Support) – ‘정서적 지지(x1)’와 ‘학업적 지지(x2)’로 측정.
  • 매개변수(M): 학업 참여(Engagement) – ‘행동적 참여(m1)’와 ‘정서적 참여(m2)’로 측정.
  • 결과변수(Y): 학업 성취(Achievement) – ‘수학 점수(y1)’와 ‘국어 점수(y2)’로 측정.

연구자는 교사의 지지가 학생의 참여도를 높이고, 이것이 최종적으로 성취도 향상으로 이어지는지 확인하고자 합니다.

2.1. 모의 데이터 생성 (R 코드)

분석 실습을 위해 N=500N=500 명의 데이터를 생성합니다. 실제 상황과 유사하게 일부 데이터는 무작위로 누락(MCAR)된 것으로 가정합니다.

R

# R을 활용한 모의 데이터 생성
set.seed(2025)
library(MASS)

# 상관 행렬 설정 (교사지지, 참여, 성취 간의 관계)
n <- 500
mu <- rep(0, 6)
sigma <- matrix(c(1.0, 0.6, 0.3, 0.3, 0.2, 0.2,
                  0.6, 1.0, 0.3, 0.3, 0.2, 0.2,
                  0.3, 0.3, 1.0, 0.7, 0.4, 0.4,
                  0.3, 0.3, 0.7, 1.0, 0.4, 0.4,
                  0.2, 0.2, 0.4, 0.4, 1.0, 0.7,
                  0.2, 0.2, 0.4, 0.4, 0.7, 1.0), 6, 6)

data <- mvrnorm(n, mu, sigma)
colnames(data) <- c("x1", "x2", "m1", "m2", "y1", "y2")
df <- as.data.frame(data)

# 결측치 주입 (MCAR 가정)
df$m1[sample(1:n, 50)] <- NA
df$y1[sample(1:n, 70)] <- NA

# 데이터 저장 (jamovi에서 불러오기 위함)
# write.csv(df, "school_sem_data.csv", row.names = FALSE)

3. 데이터 준비 및 기초 분석

3.1. 데이터 불러오기 및 결측치 처리

Mplus나 lavaan은 텍스트 형태의 데이터를 읽습니다. jamovi에서는 .csv 파일을 바로 불러올 수 있습니다.

  • 결측치 코드: 데이터셋 내에 공백 대신 -999와 같은 특정 숫자를 사용할 수 있지만, jamovi와 lavaan은 시스템 결측치(NA)를 직접 처리하는 데 매우 능숙합니다.
  • FIML(Full-Information Maximum Likelihood): 결측치가 있을 때 케이스를 삭제(Listwise deletion)하지 않고, 사용 가능한 모든 정보를 활용하여 모수를 추정하는 방식입니다. jamovi와 lavaan 모두 이 방식을 기본 혹은 옵션으로 제공합니다.

3.2. 기초 통계(Descriptive Statistics) 확인

분석 전, 변수들의 평균, 표준편차, 그리고 상관관계를 확인해야 합니다. jamovi의 Exploration -> Descriptives 메뉴를 통해 데이터의 분포를 살핍니다.

변수평균표준편차결측치 개수
x1 (정서적 지지)-0.010.990
m1 (행동적 참여)0.021.0150
y1 (수학 점수)-0.040.9870

4. 관찰변수 경로분석 (Manifest Path Analysis)

가장 먼저, 요인으로 묶지 않고 개별 변수(x1, m1, y1) 간의 관계를 분석해 봅시다.

4.1. 분석 방법 (jamovi SEMLj)

  1. SEMLj -> Syntax Mode 혹은 Path Analysis 메뉴 선택.
  2. Model 설정:
    • m1 ~ x1 (교사 지지가 참여를 예측)
    • y1 ~ x1 + m1 (교사 지지와 참여가 성취를 예측)
  3. 옵션: Direct and indirect effects를 체크하여 매개효과를 확인합니다.

4.2. 주요 결과 해석

  • 직접 효과(Direct Effect): 교사 지지(x1x_1)가 성취(y1y_1)에 직접 미치는 영향.
  • 간접 효과(Indirect Effect): x1m1y1x_1 \rightarrow m_1 \rightarrow y_1로 이어지는 경로의 곱(a×ba \times b).
  • 유의성 검정: 간접효과 검정 시 Bootstrapping(1000회 이상)을 권장합니다. 이는 곱해진 값의 분포가 정규분포를 따르지 않을 수 있기 때문입니다.

5. 확인적 요인분석 (Confirmatory Factor Analysis, CFA)

이제 측정 도구가 제대로 작동하는지 확인합니다. ‘교사 지지’라는 잠재변수(X)가 x1, x2에 의해 잘 설명되는지 보는 과정입니다.

5.1. 모델 식별 및 제약

  • 식별(Identification): 잠재변수는 단위가 없으므로, 첫 번째 측정지표의 부하량을 1로 고정하거나 잠재변수의 분산을 1로 고정하여 척도를 부여합니다.
  • 측정 모델 구성:
    • X =~ x1 + x2
    • M =~ m1 + m2
    • Y =~ y1 + y2

5.2. 적합도 지수 (Fit Indices)

모델이 실제 데이터와 얼마나 일치하는지 평가합니다.

  • χ2\chi^2 검정: p>.05p > .05이면 좋으나 표본 크기에 민감합니다.
  • CFI / TLI: .90 이상(가급적 .95 이상) 권장.
  • RMSEA: .08 이하(가급적 .05 이하) 권장.
  • SRMR: .08 이하 권장.

6. 잠재 경로 분석: 전체 구조모델 (Full SEM)

측정 모델(CFA)과 구조 모델(Path)을 결합합니다.

6.1. lavaan 문법 (R/jamovi 공용)

jamovi의 syntax 창이나 R에서 아래와 같이 입력합니다.

R

# 전체 SEM 모델 설정
model <- '
  # 측정 모델 (CFA)
  Teacher_Support =~ x1 + x2
  Engagement      =~ m1 + m2
  Achievement     =~ y1 + y2

  # 구조 모델 (Path)
  Engagement  ~ a*Teacher_Support
  Achievement ~ b*Engagement + c*Teacher_Support

  # 간접효과 및 총효과 정의
  indirect := a*b
  total    := c + (a*b)
'
# 모델 실행 (FIML 결측치 처리 포함)
fit <- sem(model, data = df, missing = "fiml")
summary(fit, fit.measures = TRUE, standardized = TRUE)

7. 고급 분석 주제 (Mplus 및 R 역량)

7.1. 잠재성장곡선 모델 (Latent Growth Curve Model, LGM)

시간에 따른 학생의 성취도 변화(초기치와 변화율)를 분석할 때 사용합니다.

  • i (Intercept): 모든 시점의 부하량을 1로 고정.
  • s (Slope): 시간의 흐름(0, 1, 2, 3 등)에 따라 부하량 설정.

7.2. 다집단 분석 (Multigroup Analysis)

성별이나 학교 유형에 따라 모델의 경로가 다른지 확인합니다. ‘형태 동일성’, ‘측정 동일성’ 등을 단계별로 검증해야 합니다.

7.3. 몬테카를로 시뮬레이션 (Monte Carlo Simulation)

특정 표본 크기에서 내 모델이 얼마나 정확한 파워(통계적 검정력)를 갖는지 미리 시뮬레이션해 볼 수 있습니다. 주로 R과 Mplus에서 강력한 기능을 제공합니다.

8. 결론 및 제언

구조방정식은 단순한 통계 기법을 넘어 연구자의 이론적 가설을 검증하는 강력한 논리 도구입니다. jamovi와 lavaan을 활용하면 복잡한 수식 없이도 직관적으로 모델을 구성할 수 있습니다. 여러분의 교육 연구가 이 도구를 통해 더욱 깊이 있고 정교해지기를 기대합니다.

참고문헌 (APA Style)

  • Arbuckle, J. L. (2014). Amos 23.0 User’s Guide. Chicago: IBM SPSS.
  • Byrne, B. M. (2012). Structural equation modeling with Mplus: Basic concepts, applications, and programming. New York: Routledge.
  • Enders, C. K. (2022). Applied missing data analysis (2nd ed.). New York: Guilford Press.
  • Geiser, C. (2021). Longitudinal structural equation modeling with Mplus: A latent state-trait perspective. New York: Guilford Press.
  • Muthén, L. K., & Muthén, B. O. (1998-2017). Mplus user’s guide (8th ed.). Los Angeles, CA: Authors.
  • Rosseel, Y. (2012). lavaan: An R package for structural equation modeling. Journal of Statistical Software, 48(2), 1-36.