• 검색 결과가 없습니다.

[예제 1] iris 자료를 이용하여 PCA 분석을 수행한다

N/A
N/A
Protected

Academic year: 2022

Share "[예제 1] iris 자료를 이용하여 PCA 분석을 수행한다"

Copied!
6
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

주성분 분석 2

다음의 [예제 1]은 R 패키지 {stats}의 prcomp() 함수를 이용한 PCA 분석을 수행하고, 그 결과를 시각화 한다.

[예제 1] iris 자료를 이용하여 PCA 분석을 수행한다.

> data(iris)

> head(iris, 3)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa

4개의 연속형 변수에 대해 PCA를 적용하고, 범주형 변수는 주성분을 이용하여 시각화하 는 과정에 사용한다. 아래의 R 코드에서 연속형 자료에 대해 로그 변환을 수행하고, prcomp() 함수를 통해 PCA를 수행하기 전에 변수에 대해 중심화(center=TRUE)와 표준화 (scale=TRUE)를 수행한다. prcomp() 함수에서 center=TRUE와 scale=FALSE가 디폴트이 다.

> log.ir <- log(iris[, 1:4])

> ir.species <- iris[, 5]

> ir.pca <- prcomp(log.ir, center = TRUE, scale. = TRUE)

변수의 왜도와 크기는 주성분에 영향을 미치므로 PCA 분석에 앞서 왜도 변환, 중심화, 표준화를 수행하는 것은 매우 바람직하다. 이 예제에서는 로그 변환을 수행하였으나 보다 일반적으로 Box-Cox 변환을 적용할 수 있다. 이 예제의 마지막 부분에서 모든 이러한 변 환과 PCA의 적용이 {caret} 패키지의 preProcess() 함수의 단 일회의 호출을 통해 어떻게 수행되는지를 보여준다.

print(0 함수는 4개의 주성분(PCs) 각각의 표준편차와 연속형 변수의 선형결합 계수를 나 타내는 회전(또는 적재)를 제공한다.

> print(ir.pca) Standard deviations:

[1] 1.7124583 0.9523797 0.3647029 0.1656840

Rotation:

PC1 PC2 PC3 PC4 Sepal.Length 0.5038236 -0.45499872 0.7088547 0.19147575

(2)

Sepal.Width -0.3023682 -0.88914419 -0.3311628 -0.09125405 Petal.Length 0.5767881 -0.03378802 -0.2192793 -0.78618732 Petal.Width 0.5674952 -0.03545628 -0.5829003 0.58044745

plot() 함수는 주성분과 관련된 분산을 그려준다. 이 그림은 이후 분석에서 몇 개의 주성 분을 사용할 것인지에 대한 정보를 제공한다. 이 예제에서는 처음 2개의 주성분이 자료 변 동의 대부분을 설명하는 것을 알 수 있다.

> plot(ir.pca, type = "l")

summary(0 함수는 주성분들의 중요도(importance)를 제공한다. 첫 행은 각 주성분과 관 련된 표준편차를 나타낸다. 두 번째 행은 각 주성분에 의해 설명되는 자료 분산의 비율을 나타내며, 세번째 열은 설명되는 분산의 누적 비율을 나타낸다. 여기서는 처음 2개의 주성 분이 자료 분산의 95% 이상을 설명함을 알 수 있다.

> summary(ir.pca)

Importance of components:

PC1 PC2 PC3 PC4 Standard deviation 1.7125 0.9524 0.36470 0.16568 Proportion of Variance 0.7331 0.2268 0.03325 0.00686 Cumulative Proportion 0.7331 0.9599 0.99314 1.00000

predict() 함수는 새로운 자료에 대해 그들의 주성분 값(PCs)을 예측해 준다. 여기서는 설명의 편의상 마지막 2개의 자료를 새로운 자료로 취급하여 예측을 수행하였다.

> predict(ir.pca, newdata=tail(log.ir, 2))

PC1 PC2 PC3 PC4 149 1.0809930 -1.01155751 -0.7082289 -0.06811063 150 0.9712116 -0.06158655 -0.5008674 -0.12411524

biplot() 함수를 통해 PCA의 결과를 시각화 할 수 있다.

(3)

> biplot(ir.pca)

아래의 그림은 github에서 제공하는 {ggbiplot} 패키지의 ggbiplot() 함수를 이용하여 biplot을 그린 것이다.

(4)

위 그림에 대한 R 코드를 소개하면 다음과 같다.

> library(devtools)

> install_github("ggbiplot", "vqv")

> library(ggbiplot)

> g <- ggbiplot(ir.pca, obs.scale=1, var.scale=1, groups=ir.species, ellipse=TRUE, circle=TRUE)

> g <- g + scale_color_discrete(name='')

> g <- g + theme(legend.direction='horizontal', legend.position='top')

> print(g)

이 그림은 처음 2개의 주성분에 데이터를 사영시킨 그림이다. 다른 주성분들이 choice=

옵선을 통해 선택될 수도 있다. 각 점의 색깔은 꽃의 종류에 따라 다르게 그려졌고, ellipse=TRUE를 통해 정규 등고선 라인이 각 그룹에 대해 그려졌다(확률의 디폴트는 68%

임).

아래의 그림은 주성분들에 대한 가능한 해석상의 직관을 얻기 위해 각 변수의 계수를 단

(5)

위원 안에 그린 것이다.

위 그림에 대한 R 코드를 참고로 제시하면 다음과 같다. 이 코드는 gist를 통해 얻을 수 있다.

> require(ggplot2)

> theta <- seq(0,2*pi,length.out = 100)

> circle <- data.frame(x = cos(theta), y = sin(theta))

> p <- ggplot(circle,aes(x,y)) + geom_path()

> loadings <- data.frame(ir.pca$rotation, .names = row.names(ir.pca$rotation))

> p + geom_text(data=loadings,

mapping=aes(x = PC1, y = PC2, label = .names, colour = .names)) + coord_fixed(ratio=1) +labs(x = "PC1", y = "PC2")

마지막으로 R 패키지 {caret}을 이용한 PCA 분석을 소개한다.

(6)

앞서 언급한데로, 왜도의 수정을 위해 Box-Cox 변환을 수행하고, 중심화, 표준화를 각 변수에 수행한 뒤, {caret} 패키지의 preProcess() 함수의 한 번의 호출로 PCA를 수행한 다.

> require(caret)

> trans = preProcess(iris[,1:4], method=c("BoxCox", "center", "scale", "pca"))

> PC = predict(trans, iris[,1:4])

디폴트로, preProcess() 함수는 적어도 데이터 분산의 95% 이상을 설명하는데 필요한 주 성분들(PCs)만을 저장(keep)하나, 이것은 thresh=0.95(디폴트) 옵션을 통해 변경될 수 있 다.

> head(PC, 3)

PC1 PC2 1 -2.303540 -0.4748260 2 -2.151310 0.6482903 3 -2.461341 0.3463921

> trans$rotation

PC1 PC2 Sepal.Length 0.5202351 -0.38632246 Sepal.Width -0.2720448 -0.92031253 Petal.Length 0.5775402 -0.04885509 Petal.Width 0.5672693 -0.03732262

참조

관련 문서

나는 향후 12 개월 동안에 스마트폰 앱을 자주 사용할 생각이다 ‘ ’..

EMR이나 OCS, 보험청구자료, 오랜 기간 축적된 자발적 보고자료 등 대량의 전산화된 자료를 이용하여 약물감시를 수행하려는 노력이 계속되고 있다.. 또 비교를 위한

예제) 다음

예제: Ubuntu

이 공정은 매일 하나의 뱃치만 작업할 수밖에 없으므로, 이상이 있는 경우 속히 조치를 취하지 않으면 막대한 경제적 피해를 본다.. 이를 관리하기 위해서

Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ.. Lab., Hanyang Univ..

Samsung Medical Center, Korea 1 , Samsung Medical Center, Korea 2 , Department of Pulmonary and Critical Care Medicine, Clinical Research Center for Chronic

[r]