[예제1] - heptathlon data
1. 자료 준비
> library(HSAUR2)
> library(tools)
> data("heptathlon")
> head(heptathlon)
> heptathlon은 R의 HSAUR2 패키지에 들어있는 자료로서, 1988년 서울 올림픽 여성 7종 경기에 대한 결과이다. Hurdles(110m 허들), highjump(높이뛰기), shot(포환던지기), run200m(200미터 달리기), longjump(멀리뛰기), javelin(창던지기), run800m(800미터 달리기),score(점수)로 구성되어 있다.
2. 자료 변형
> heptathlon$hurdles <- max(heptathlon$hurdles) - heptathlon$hurdles
> heptathlon$run200m <- max(heptathlon$run200m) - heptathlon$run200m
> heptathlon$run800m <- max(heptathlon$run800m) - heptathlon$run800m
> 작은 값일수록 좋은 점수이기 때문에 최대값에서 빼줌
3. 주성분분석
> library(stats)
> hep.data <- heptathlon[,-8] #주성분점수에서 예외
> heptathlon.pca <- princomp(hep.data,cor=T,scores=T) #cor = T, 상관계수 행령, F는 공분산 행렬, scores=T 주성분점수
> heptathlon.pca #변수가 7개이니, 주성분도 7개
Call:
princomp(x = hep.data, cor = T, scores = T)
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
2.1119364 1.0928497 0.7218131 0.6761411 0.4952441 0.2701029 0.2213617
7 variables and 25 observations.
> summary(heptathlon.pca)
> 주성분의 표준편차, 분산비율을 알수 있다. 첫 번째 주성분이 63.72%, 두 번째 주 성분이 17.06%의 분산 비율을 나타내고 있으며, 2개의 주성분이 총 변이의 80.8%의 정보를 가지고 있다.
> eig.val = heptathlon.pca$sdev^2 #주성분의 표준편차를 제곱
> eig.val #주성분 분산
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
4.46027516 1.19432056 0.52101413 0.45716683 0.24526674 0.07295558 0.04900101
> 제1주성분의 분산이 4.46, 제2주성분이 1.19, 제3주성분이 0.52로 유효한 주성분의 수는 2개임을 알 수 있다.
> par(mfrow=c(1,2))
> screeplot(heptathlon.pca)
> screeplot(heptathlon.pca,type='line',pch=19,main='Scree Plot of heptathlon.pca')
> 스크리 그림은 주성분의 고유값 크기 순으로 그린 것으로, 고유값이 1보다 큰 주성분값이 2개임을 알 수 있다.
> heptathlon.pca$loadings[,1:2]
Comp.1 Comp.2
hurdles -0.4528710 0.15792058
highjump -0.3771992 0.24807386
shot -0.3630725 -0.28940743
run200m -0.4078950 -0.26038545
longjump -0.4562318 0.05587394
javelin -0.0754090 -0.84169212
run800m -0.3749594 0.22448984
> 상관계수행렬을 이용한 경우 제1, 제2주성분은 다음과 같다.
PC1 = -0.453 x hurldes – 0.377 x highjump - ․․․ - 0.374 x rum800m
PC2 = 0.157 x hurldes + 0.248 x highjump + ․․․ + 0.224 x rum800m
여기서 제1주성분은 jvelin(창던지기)를 제외한 모든 변수의 절대값이 큰 값을 가지는 것으로 볼 때, 전반적인 체력 정도를 나타내는 성분이라고 할 수 있고, 제2성분은 jvelin의 계수가 다른 변수에 비해 상대적으로 절대값이 큰 것을 볼 때, 창던지기와 밀접한 관련이 있는 성분으로 파악할 수 있다.
4. 주성분 점수 및 행렬도 (biplot)
> head(heptathlon.pca$scores[,1:2])
Comp.1 Comp.2
Joyner-Kersee (USA) -4.206435 -1.26802363
John (GDR) -2.941619 -0.53452561
Behmer (GDR) -2.704271 -0.69275901
Sablovskaite (URS) -1.371052 -0.70655862
Choubenkova (URS) -1.387050 -1.78931718
Schulz (GDR) -1.065372 0.08104469
> biplot(heptathlon.pca,cex=0.7,col=c('red','blue'),main='Biplot')
> 첫번째 주성분을 x축, 두 번째 주성분을 y축에 위치. Highjump, run800m, hurldes, longjump가 서로
가까운 곳에 위치하고 벡터의 방향(화살표) 또한 비슷하다. Ru200m, shot이 가깝게 위치하고 있고, javelin은 다른 변수들과 다른 방향에 위치하고 있다.
[예제2] - beer data
99명의 소비자가 맥주 구매에 중요하게 생각하는 요인에 대해 점수를 준 엑셀 자료이다. 독립변수는 7개, 케이스 수는 99개인 자료이다. 점수는 0~100으로 되어 있다.
상관관계가 아닌 공분산을 활용해보자.
1. 자료 읽기
> beer<-read.csv('beer.csv',header=T)
> head(beer)
cost size alcohol reputat color aroma taste
1 10 15 20 85 40 30 50
2 100 70 50 30 75 60 80
3 65 30 35 80 80 60 90
4 0 0 20 30 80 90 100
5 10 25 10 100 50 40 60
6 25 35 30 40 45 30 65
2. 상관계수행렬 및 산점도 행렬 보기
> round(cor(beer),2)
cost size alcohol reputat color aroma taste
cost 1.00 0.88 0.88 -0.17 0.32 -0.03 0.05
size 0.88 1.00 0.82 -0.06 0.01 -0.29 -0.31
alcohol 0.88 0.82 1.00 -0.36 0.40 0.10 0.06
reputat -0.17 -0.06 -0.36 1.00 -0.52 -0.52 -0.63
color 0.32 0.01 0.40 -0.52 1.00 0.82 0.80
aroma -0.03 -0.29 0.10 -0.52 0.82 1.00 0.87
taste 0.05 -0.31 0.06 -0.63 0.80 0.87 1.00
> 맥주의 가격(cost),크기(size), 알코올(alcohol)함량의 상관계수가 높아 서로 양의 상관관계가 있을 것으로 보인다. 또한 색(color), 향(aroma), taste(맛)이 서로 상관계수가 높게 나타났다. 반면 평판(reputation)은 비교적 다른 변수들과 상관계수가 높지 않으며, 다른 변수들과 모두 음의 상관 계수를 나타냈다.
> plot(beer[1:3])
3. 주성분분석 실행하기
> library(stats)
> beer.pca = princomp(beer,cor=F, scores=T) #cor = F 공분산
> beer.pca
Call:
princomp(x = beer, cor = F, scores = T)
Standard deviations:
Comp.1 Comp.2 Comp.3 Comp.4 Comp.5 Comp.6 Comp.7
39.117489 34.783073 17.974805 8.456192 6.479111 4.381410 2.579257
7 variables and 99 observations.
> summary(beer.pca)
> screeplot(beer.pca,type='l',pch=19)
> beer.pca$loadings[,1:3] #주성분계수
Comp.1 Comp.2 Comp.3
cost 0.7344197 0.31868378 -0.1902272
size 0.3942553 0.34017182 0.1274959
alcohol 0.2831873 0.06888179 0.0370581
reputat -0.3356901 0.49057105 -0.7861697
color 0.2657171 -0.34379889 -0.3862210
aroma 0.1398211 -0.48510439 -0.3693624
taste 0.1488354 -0.42871339 -0.2062207
> screeplot을 보면 4번째 주성분부터 완만해짐로 유효한 주성분을 3개로 판단하여, 3개의 주성분 계수를 보자. 제1주성분을 보면 cost, size, alcohol의 점수가 높다. 비용, 크기, 알코올이 서로 연관이 있고, color, aroma, taste의 주성분점수가 상대적으로 낮게 측정되어 있다. 색, 향, 맛이 서로 연관되어 있다.
PC1 = 0.734 x cost + 0.397 x size + … + 0.148 x taste
4. 주성분 분석 점수 및 행렬도
> head(beer.pca$scores[,1:3])
Comp.1 Comp.2 Comp.3
[1,] -41.435562 40.03360 4.340612
[2,] 91.264626 23.06214 7.798284
[3,] 31.574345 15.79053 -34.501270
[4,] -9.770913 -59.53112 -0.351844
[5,] -39.816498 37.52890 -16.165598
[6,] -1.035114 22.08072 34.760924
> biplot(beer.pca,col=c('red','blue'),main = 'Biplot of Beer.pca')
참고 문헌
[1] R을 이용한 다변량 분석, 김성수 김현중 정성석 이용구 공저
'KNOU > 3 다변량분석' 카테고리의 다른 글
3장 인자분석 - 주성분인자법(principal factor method) 사례 (0) | 2017.03.27 |
---|