단순회귀분석과 달리 중회귀분석(다변수)에 있어서 독립변수들 사이에 높은 상관성이 있거나 선형적으로 종속성이 존재할 경우(y=ax+bx1+c 와 같은 회귀식에서 독립변수 x, x1 사이에 높은 상관관계가 있거나 혹은 x=d+ex1 과 같은 관계식이 존재할 경우) 최소자승법에 의한 회귀계수의 분산이 커지고 그에 따라 추정값(예측값)의 정확도가 낮아지게 된다.
이러한 오류를 방지하기 위한 분석법으로 VIF(variance Inflation Factor)라는 것이 있는데 이 값이 통상 10 이상이면 다중공선성이 존재한다고 판단하고 주성분분석과 같은 방법을 통해 정보손실을 최소화하면서 부적절한 변수를 제거해서 모델을 더욱 정교하게 만드는 방법이 있다.
추후 머신러닝 편에서도 다루겠지만 PCA(Principal Component Analysis)는 머신러닝에서도 필수적으로 다루는 아주 중요한 과정이다. 그러나 한번에 너무 많이 진도를 빼면 또 머리가 아파지기 때문에 이번 포스트에서는 VIF, 더빈왓슨검정(자기상관분석)이 도대체 왜 필요한 것인지 짚어보고 가자.
우선 독립변수 중에서 중요한게 뭔지 모른다고 가정하고(코스피와 반도체업종지수가 제일 중요할 것 같지만 무시하고) 아래의 코드를 통해서 중회귀분석을 수행해보자.
#작업경로를 지정하는 명령어
setwd("C:/Users/Documents/R-code")
#데이터 끌어오기(코스피지수)
mydatat<-read.table("jisu.txt",
header=TRUE, sep="\t", na.strings = "")
mydatat
str(mydatat)
#데이터 끌어오기(삼성전자)
mydata_stock<-read.table("samsung.txt",
header=TRUE, sep="\t", na.strings = "")
mydata_stock
str(mydata_stock)
#독립변수
xaixis<-c(1:499)
timein<-as.matrix(mydatat,499,22)
#종속변수
samsung<-as.matrix(mydata_stock$Close,499,1)
#y:samsung, x:업종지수22개
model1<-lm(samsung~timein)
summary(lm(samsung~timein))
#추정계수를 표시한다.
alpha=signif(lm(samsung~timein)$coefficient[1],digits = 3)
beta=signif(lm(samsung~timein)$coefficient,digits = 3)
print(beta)
위 코드를 돌려서 회귀분석을 수행해보니 엥? 이건 뭔가? [ y=4950 + 83.2 * 코스피지수..... ]와 같은 회귀식이 도출되었다. 뭐 다른 건 그렇다치고 반도체업종이랑 음의 회귀계수라니 이건 뭔가 잘못된 것이라고 직감적으로 눈치챌 수 있다.
자, 그럼 이런 이유가 발생한 원인이 뭘까? 우선 독립변수와 종속변수의 단위가 천차만별이다. 즉 삼성전자 뿐만 아니라 다른 업종지수 역시 정규화 없이 로데이터를 그대로 사용했다. 더군다나 22개 업종에 대해 주성분분석을 수행하지 않고 전부 다 집어넣어서 돌려서 회귀계수의 편차가 심하게 발생했을 것이라 유추할 수 있다.
다음 포스트에서는 단위를 통일하기 위한 로그차분변환, 그리고 VIF분석을 통해서 공선성의 존재 유무를 파악하는 방법에 대해 알아보자!
'인과관계분석' 카테고리의 다른 글
중회귀분석의 변수선정 with R (0) | 2020.09.08 |
---|---|
삼성전자 중회귀분석 with R - 심화편 (0) | 2020.09.07 |
코스피지수의 회귀분석 with R (0) | 2020.09.02 |
R 통계분석 (0) | 2020.09.01 |
R 데이터 가져오기 (0) | 2020.09.01 |
댓글