R 에서 주성분회귀분석하는 법

R 에서 주성분회귀분석하는 법

개요

주성분회귀분석PCR 이란 주성분분석다중회귀분석을 합친 것으로, 주성분분석을 통해 얻은 주성분을 새로운 독립변수로 둔 회귀분석을 말한다. 사실 통계학의 관점에서 주성분분석 그 자체는 별 필요가 없고, 보통 회귀분석에 쓰일 때나 의미가 있다.

실습

(다중공선성을 찾아내는 법에 이어서)

20181226\_143145.png 20181226\_143253.png

주성분을 만들어내는 과정은 행렬분해를 포함한 복잡한 계산을 동반하지만, R에서는 prcomp() 함수를 통해 쉽게 구해낼 수가 있다.

그런데 결국 이걸 어떻게 회귀분석에 집어넣을지가 문제다. 독립변수들을 Rotation과 곱해서 PC를 만들고 회귀분석을 한 후 원래의 독립변수에 대한 식을 세우는 것은 여간 귀찮은 일이 아니므로, pls 패키지pcr() 함수를 사용해보도록 하자.

20181226\_145248.png 20181226\_145215.png

summary() 함수를 통해 출력된 결과에선 몇 개의 주성분을 사용했을 때 collgeGrad를 얼마나 설명하는지를 알려준다.

위의 주성분분석에서 주성분의 갯수는 $3$ 개면 충분했다. jack.test() 함수의 ncomp 옵션에 3을 넣고 실행시켜보면 주성분에 대한 회귀계수가 아니라 원래 독립변수에 대한 회귀계수를 알려줄 뿐만이 아니라, t검정까지 한번에 해준다.

또한 오른쪽의 잔차그림을 보았을 땐 특별한 문제가 없어보인다.

win.graph(4,4); plot(scale(PCRout$residuals[,,3]),main="Residual")

잔차그림을 출력할 때 주의할 것은 pcr() 함수가 반환하는 결과에 $residuals를 참조함으로써 얻어지는 건 맞는데, 이렇게만 하면 주성분을 몇개나 썼는지에 따른 잔차가 모두 포함된 3차 배열로 나온다는 것이다. 이 예제에선 [,,3]으로 슬라이싱함으로써 주성분이 3개까지 쓰인 PCR의 잔차를 참조했다. 만약 주성분분을 k개만큼 사용했다면 [,,k]과 같이 슬라이싱 해야한다.

코드

아래는 예제 코드다.

install.packages('pls')
install.packages('car')
library(pls)
library(car)
 
X<-MplsDemo[,-1]
Y<-X[,7]; X<-X[,-7]
 
PCAout<-prcomp(X[,-7],center=T,scale.=T); PCAout; summary(PCAout)
win.graph(3,3); plot(PCAout, type='l',main="screeplot")
 
PCRout<-pcr(collegeGrad~.,data=MplsDemo[,-1],validation="LOO",jackknife=T)
summary(PCRout)
jack.test(PCRout,ncomp=3)
 
win.graph(4,4); plot(scale(PCRout$residuals[,,3]),main="Residual")

같이보기

댓글