[수학]/R로 배우는 통계학

[통계학/R] 요인분석 : 요인분석의 목적, 요인분석 실습 코드

seom-j 2023. 7. 18. 11:46

 

📌 요인분석의 목적

여러 변수들을 하나의 요인으로 묶어내는 방법

일대일 함수처럼 하나의 변수들은 하나의 요인에만 묶여짐(주성분분석과의 차이)

 

➡️ 상호베타적으로 할당되어 변수 재탄생

 

📌 요인분석 실습 코드

# --- 데이터 구조 파악 ---
str(state.x77) 
View(state.x77)  



# --- 요인 개수 추출 ---
if (!require(psych)) {
  install.packages('psych')
  library(psych)
}
if (!require(nFactors)) {
  install.packages('nFactors')
  library(nFactors)
}
state.x77 <- as.data.frame(state.x77)

# fa.parallel 함수 활용
fa.parallel(state.x77, fm = "ml", fa = "fa", n.iter = 100)  # 최대우도법을 기반으로 요인의 갯수 추출
# 2개의 요인을 사용하는 것을 추천

# nFactors 패키지 활용
nScree(state.x77)  # 4가지 방법론 중 3가지에서 3개의 요인을 추천

# eigen value 확인
eigen(cor(state.x77))  # eigen value가 1을 넘는 것이 3번째까지 확인됨



# --- 요인 분석 수행 ---
pc3 <- principal(state.x77, nfactors = 3, rotate = "varimax", scores = TRUE)
print.psych(pc3, cut = 0.3, sort = TRUE)

cortest.bartlett(state.x77)  # Bartlett's Test

if (!require(REdaS)) {
  install.packages('REdaS')
  library(REdaS)
}
kmos <- KMOS(state.x77)
kmos

if (!require(semPlot)) {
  install.packages('semPlot')
  library(semPlot)
}
semPaths(pc3, what = "est", residuals = FALSE, cut = 0.3,
         posCol = c("White", "darkgreen"), negCol = c("white", "red"), edge.label.cex = 0.75)

➡️ 요인분석 수행 결과를 알아볼 수 있음