본문 바로가기
인과관계분석

요인분석(Factor Analysis) with R

by 다빈치스탁 2020. 9. 9.
728x90
반응형

요인분석도 역시 지난번 포스트 2020/09/09 - [머신러닝 with R/데이터마이닝 with R] - 주성분분석(PCA) with R 에서 다룬 주성분분석과 마찬가지로 설명변수의 차원을 축소하기 위한 방법론 중의 하나로 샘플에 포함되어 있는 잠재적 요인을 추출하는데 사용한다. 다만 주성분 분석의 경우 주성분으로 압축하기 위한 선형결합에서 오차항을 무시하지만(혹은 내포) 요인분석은 오차항을 독립적인 요인으로 간주하는 통계처리 방법이다. 즉 주성분 분석의 경우에는 총 분산 = 공통 분산이라고 간주하고 분석을 수행하고 요인분석에서는 총 분산 = 공통 분산 + 개별 분산이라는 가정하에서 분석을 수행한다. 여기서 에러텀은 개별 분산이라고 간주할 수 있다. 

https://leenaissance.site/

리네상스 테크놀로지

인공지능 주식대장, 무엇이든 물어보세요.

leenaissance.site

 
자 직관적으로 한번 살펴보자. 주성분 분석이나 요인분석 모두 변수들의 선형결합을 통해 차원을 축소하는 방법이라고 했다. 그렇다면 아래와 같이 주성분 분석의 경우 에러텀을 고려하지 않고 추정을 진행했고 요인 분석의 경우 에러텀을 고려하는 결합이라고 생각하면 정확하진 않지만 직관적으로는 그렇게 해석해도 무방하다.
 
주성분 변수 = 반도체 업종(요인1) * 0.15 + 증권 업종(요인2) * 1.5 + ... + 조건 업종(요인5) * 2.3
요인 변수 = 반도체 업종(요인1) * 0.15 + 증권 업종(요인2) * 1.5 + ... + 조건 업종(요인5) * 2.3 + 에러(e)
 
위와 같은 차이점이 어떻게 반영이 되는가 하면 주성분분석의 경우 변수를 표준화 한 후에 분산-공분산 행렬을 구한다. 이때 자기 자신의 상관행렬(대각)은 변수의 표준화를 수행하였기 때문에 모두 1이 된다. 그렇기 때문에 총 분산과 공통 분산이 일치하게 된다. 그러나 요인분석에서는 대각행렬을 1이 아닌 적절한 값(R 스퀘어 값)으로 대체하여 분석한다. 왜? 에러텀을 고려하기 때문인데 이와 관련한 상세한 수리적 유도 과정은 관련서적을 참고하자. 이 책은 이론적 배경 뿐만 아니라 다양한 예제를 활용하여 설명하고 있어 원리를 이해하는데 상당한 도움이 된다.

R 프로그램에 기반한 다변량분석 및 데이터마이닝
국내도서
저자 : 이재길
출판 : 황소걸음 아카데미 2016.09.26
상세보기

우리는 언제나 그랬듯 바로 실전으로 돌입한다.  자 아래의 코드를 돌려서 데이터를 가져오고 상관관계를 검증해보니 p값은 0으로 매우 높은 확률로 상관관계가 있다고 판단하고 있다. 
 

#작업경로를 지정하는 명령어
setwd("")

#데이터 끌어오기(중회귀자료, 다수의 독립변수와 하나의 종속변수)
mydatat<-read.csv("multi.csv",
                  header=TRUE, na.strings = "")
mydatat
str(mydatat)

#눈으로 봐도 상관관계를 가지는 것이 확인이 되지만
round(cor(mydatat[,1:22]),3)
library(psych)
#바틀렛 검정도 돌려본다.
cortest.bartlett(cor(mydatat[,1:22]))

#상관행렬의 고유치 1.0을 넘는 것이 2개이므로 요인수는 2개로 줄어든다.
eigen(cor(mydatat[,1:22]))$values
fac<-factanal(mydatat[,1:22], factors = 2, scores = c("regression"))

xx=round(abs(fac$loadings),3)
barplot(xx, main="factor")

#요인변수를 설명변수로 가지는 회귀식을 만들어보자
fac_reg<-lm(mydatat$삼성전자~fac$scores)
#쿨하게 2변수 중회귀로 만들어준다. 화끈하다. 22개 중에서 다버리고 2개 남겼다.
#그럼에도 불구하고 설명력은 55%를 가진다.
summary(fac_reg)

 
그렇다면 요인의 갯수가 몇 개인가를 파악하기 위해 상관관계행렬의 아이겐밸류를 찍어보자. 2개가 아주 큰 값으로 나왔다. 그러면 factor의 갯수를 2개로 설정하고 요인분석을 수행해보자. 수행한 결과 요인2개가 전체 변량의 약 69%를 설명하고 있다. p-value 는 0이라고 하니 뭐 아주 유의미하다는 뜻이된다. 

> #상관행렬의 고유치 1.0을 넘는 것이 2개이므로 요인수는 2개로 줄어든다.
> eigen(cor(mydatat[,1:22]))$values
[1] 14.48286535  1.35152481  0.88231939  0.64987179  0.57174005  0.53371814  0.47908371  0.41270279  0.37062907  0.35270064  0.30856522
[12]  0.29633282  0.24314498  0.21602993  0.20184997  0.18580212  0.15785443  0.12482169  0.10595241  0.03489182  0.02170253  0.01589634

Call:
factanal(x = mydatat[, 1:22], factors = 2, scores = c("regression"))

Uniquenesses:
코스피지수 코스닥지수     자동차     반도체     바이오       은행   IT소프트 화학에너지       철강     음식료 미디어통신       건설 비은행금융 
     0.043      0.137      0.394      0.240      0.492      0.152      0.212      0.214      0.253      0.456      0.434      0.213      0.005 
      증권       조선   전기가스       보험       운송 소비자유통   서비스업   섬유의복   종이목재 
     0.201      0.261      0.714      0.312      0.566      0.194      0.352      0.417      0.483 

Loadings:
           Factor1 Factor2
코스피지수 0.754   0.623  
코스닥지수 0.865   0.339  
자동차     0.496   0.599  
반도체     0.811   0.319  
바이오     0.687   0.189  
은행       0.261   0.883  
IT소프트   0.773   0.435  
화학에너지 0.668   0.582  
철강       0.589   0.633  
음식료     0.565   0.473  
미디어통신 0.525   0.539  
건설       0.668   0.584  
비은행금융 0.426   0.902  
증권       0.531   0.719  
조선       0.639   0.576  
전기가스   0.324   0.425  
보험       0.236   0.795  
운송       0.474   0.458  
소비자유통 0.636   0.633  
서비스업   0.719   0.362  
섬유의복   0.615   0.453  
종이목재   0.640   0.328  

               Factor1 Factor2
SS loadings      8.160   7.093
Proportion Var   0.371   0.322
Cumulative Var   0.371   0.693

Test of the hypothesis that 2 factors are sufficient.
The chi square statistic is 2143.32 on 188 degrees of freedom.
The p-value is 0 

 
그렇다면 이 결과를 어떻게 해석해야 할까? 우선 요인1의 경우 요인2에 비하여 코스닥, 바이오, IT소프트, 반도체와 같은 것에 더 많은 영향을 미치고 요인2는 요인1에 비하여 은행, 비은행금융, 증권, 보험에 훨씬 큰 영향을 미치는 것으로 해석할 수 있다. 따라서 요인1은 실물경제(제조업의 실적 등)에 관한 잠재요인으로 해석할 수 있고 요인2는 금융경제(금리나 환율 등)에 관한 잠재요인으로 해석할 수도 있다.
 

multi.csv
0.14MB

 
 주가분석 생성형 인공지능 지금 바로 클릭하세요
https://leenaissance.site/

리네상스 테크놀로지

인공지능 주식대장, 무엇이든 물어보세요.

leenaissance.site


매일 업데이트 되는 경제분석 자료가 궁금하다면 무료채널 입장!
https://t.me/Leenaissance

Lee네상스 테크놀로지

비영리(무료) 경제분석채널

t.me

 
 

728x90
반응형

댓글