더북(TheBook)

princomp( )는 PCA를 위해 사용하는 함수다. princomp( ) 수행 뒤 결과의 scores에는 재표현된 좌표가 저장되어 있다.

표 9-4 주성분 분석

princomp : 주성분 분석을 수행한다.

princomp(
  x,         # 행렬 또는 데이터 프레임
  cor=FALSE  # cor=FALSE면 공분산 행렬, TRUE면 상관 행렬을 사용한 주성분 분석을 한다.
)

반환 값은 princomp 클래스의 객체로, 여러 값을 저장한 리스트기도 하다. 리스트에 저장된 값 중 scores는 주성분 점수다.

1:10을 저장한 x, 여기에 약간의 노이즈를 추가한 y, x + y에 약간의 노이즈를 추가한 z가 있을 때 이 데이터에 주성분 분석을 수행해보자.

> x <- 1:10
> y <- x + runif(10, min=-.5, max=.5)
> z <- x + y + runif(10, min=-10, max=.10)
> (data <- data.frame(x, y, z))
    x         y         z
1   1 0.7875775  1.451594
2   2 2.2883051 -1.133020
3   3 2.9089769  2.752440
4   4 4.3830174  4.166615
5   5 5.4404673  1.480007
6   6 5.5455565 10.633789
7   7 7.0281055  6.513592
8   8 8.3924190  6.817220
9   9 9.0514350 11.363434
10 10 9.9566147 19.597102
> pr <- princomp(data)
> summary(pr)
Importance of components:
                          Comp.1      Comp.2        Comp.3
Standard deviation     6.8598441  1.89730048  0.1269037565
Proportion of Variance 0.9286438  0.07103836  0.0003178115
Cumulative Proportion  0.9286438  0.99968219  1.0000000000

주성분 분석 수행 후 summary( )를 보면 주성분들이 원 데이터의 분산 중 얼마만큼을 설명해주는지를 알 수 있다. Proportion of Variance 행을 보면 첫 번째 주성분은 데이터의 분산 중 92.86%를 설명해주며, 두 번째 주성분은 데이터의 분산 중 7.1%를 설명함을 알 수 있다. 세 번째 주성분은 가장 작은 0.03%의 분산을 설명한다. 마지막 행의 Cumulative Proportion은 Proportion of Variance의 누적 값이다.

결국 원 데이터의 분산은 첫 번째와 두 번째 주성분에 의해 99.97%가 표현됨을 알 수 있다. 이들 두 주성분상의 좌표는 scores를 보고 구하면 된다. 다음 코드에서 Comp.1, Comp.2 두 컬럼은 x, y, z를 2개 차원으로 축약한 결과다.

> pr$scores[, 1:2]
          Comp.1      Comp.2
 [1,]   7.703254  2.82720720
 [2,]   8.903331 -0.08428571
 [3,]   5.021586  1.09504330
 [4,]   2.883425  0.37848958
 [5,]   4.338128 -2.30284349
 [6,]  -3.758276  2.07791966
 [7,]  -1.265424 -1.65813435
 [8,]  -2.431770 -2.90876850
 [9,]  -6.881441 -1.39430727
[10,] -14.512812  1.96967957
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.