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
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.