# naver search confirm # markdown number and equation R 확인적 요인분석(CFA) //google adsense
본문 바로가기
R_데이터 분석 기술

R 확인적 요인분석(CFA)

by 노마드분석가 2022. 5. 13.

1. 들어가며

R을 이용해 확인적 요인분석(Comfirmatory Factor Analysis)을 해보자. 데이터는 설문 조사 데이터를 이용한다. 

cfa_sample.csv
0.00MB

2. 데이터 구조 파악

예제 데이터는 68개의 행 데이터와 12개의 변수로 구성된 데이터프레임이다. 

 

 

요인과 관측변수의 관계는 다음과 같다. 

 

요인A = A1 + A2 + A3 + A4 + A5 + A6
요인B = B1 + B2 + B3 + B4 + B5 + B6

 

3. R 코드 실행

library(lavaan) # CFA 분석을 위한 패키지
library(semPlot) # 구조도를 그리기 위한 패키지
cfa_sample = read.csv("cfa_sample.csv") # 데이터 입력

cfa_model = '
Construct_A =~ A1 + A2 + A3 + A4 + A5 + A6
Construct_B =~ B1 + B2 + B3 + B4 + B5 + B6
'
model_fit = cfa(cfa_model, data = cfa_sample)
summary(model_fit, fit.measures=T, standardized=T)

 

코드에서 요인과 관측변수의 관계를 연결하는 코딩 부분을 유의해서 보자. 전체 코드는 '  ' 로 감싸고 요인(Construct)과 관측변수는 =~ 연산자로 코딩한다. 

 

코드를 실행하면 결과물이 길게 이어지는데 두 부분으로 나눠서 살펴보자. 

 

3. 모델 적합도 결과 확인

굉장히 많은 정보가 나타나지만 핵심적인 정보는 모델의 적합도를 판정하는  ①,  ②,  ③ 이다. 

 

① TLI / CFI 값은 모두 1에 가까울 수록 좋은 모델이며 0.95 이상이면 적합도가 높은 모델, 즉 기존 가설에 부합하는 모델이라고 판단한다. 예제 데이터에서는 CFI = 0.785, TLI = 0.732 이므로 수용하기 어려운 모델인 것으로 판정된다. 

 

② RMSEA 값은 0에 가까울 수록 적합도가 좋다고 판정하며 일반적으로 0.06이하이면 수용한 가능한 수치이며 0.1이상이면 문제가 있다고 판단한다. 예제 데이터는 0.119로서 부적합한 모델임을 보여준다. 

 

③ SRMR 값은 0에 가까울 수록 적합도가 높다고 볼 수 있고 일반적으로 0.07이하면 수용할만 모델이고 0.08이하면 모델의 적합도가 높다고 판단한다. 

 

위의 핵심 지표에 관련해서는 아래 관련글을 참고하기 바란다.

 

 

확인적 요인분석(CFA : Confirmatory Factor Analysis)

관련글 탐색적 요인분석(EFA : Exploratory Factor Analysis) 1. 기본개념 사회과학이나 심리학에서는 직접적으로 측정할 수 없는 변수를 잠재 변수(latent variable), 요인(factor), 구인(construct), 구성 개념..

diseny.tistory.com

4. 요인과 관측변수와의 관계

잠재변수(요인, 구성개념)를 구성하는 관측변수들의 요인적재량이 가장 오른쪽 열에 제시된다. 일반적으로 0.5 이상이어야 하는데 아래 결과를 보면 B3는 Construct_B 요인 적재량이 0.489로서 요인을 구성하는 변수로서 적절하지 않음을 알 수 있다. 

 

5. 경로 구조도 그리기

차트를 그리기 위해서는 semPlot 패키지가 필요하다. 아래의 코드를 실행하면 구조도가 생성된다. Construct에서 관측변수 A ~ B로 향하는 화살표에 적힌 값은 요인적재량을 의미한다. 

 

diagram = semPlot::semPaths(model_fit,
                            whatLabels = "std",
                            intercepts = F,
                            style = "lisrel", # "ram", "mx", "OpenMx", "lisrel" 
                            nCharEdges = 0,
                            nCharNodes = 0,
                            curveAdjacent = T,
                            layout = "tree2", #tree,circle,spring,tree2,circle2,
                            curvePivot=T)

[그림 1] 요인구조

반응형

댓글