주성분 분석이란, 여러 변수들의 변량을 주성분이라는 서로 상관성이 높은 변수들의 선형 결합으로 만들어 기존의 상관성이 높은 변수들을 요약, 축소하는 기법이다.
첫 번째 주성분으로 전체 변동을 가장 많이 설명할 수 있도록 하고, 두 번째 주성분으로는 첫 번째 주성분과 상관성이 거의 없도록 하여 첫 번째 주성분이 설명하지 못하는 나머지 변동을 정보의 손실 없이 가장 많이 설명할 수 있도록 변수들의 선형조합을 만든다.
2. 목적
- 여러 변수들 간에 내재하는 상관성, 연관성을 적은 수의 주성분으로 차원을 축소함으로써 데이터를 이해하기 쉽고 관리하기 쉽게 해준다.
- 다중공산성이 존재하는 경우, 상관성이 적은 주성분으로 변수들을 축소하여 모형 개발에 활용한다.
( 회귀분석에서 입력변수간 상관관계가 높은 다중공산성이 존재하게 되며, 모델이 잘못 만들어짐)
3. 특징
- 주성분의 이름은 주로 제1주성분, 제2주성분 등으로 표현한다.
- 주성분은 대체로 4개보다 적은 수로 지정한다.
- 제1주성분 부터 차례로 높은 중요도를 지닌다.
- 원래 변수들의 선형 결합으로 이루어진 몇 개의 주성분들을 찾아내게 된다.
4. R코드
> library(datasets)
> data("USArrests")
데이터셋은 USArrests 데이터를 불러온다. 해당 데이터셋은 미국에서 발생한 강력범죄 비율을 기록한 데이터로 자세한 내용은 아래의 링크에서 확인이 가능하다.
https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/USArrests
USArrests function - RDocumentation
This data set contains statistics, in arrests per 100,000 residents for assault, murder, and rape in each of the 50 US states in 1973. Also given is the percent of the population living in urban areas.
www.rdocumentation.org
위 데이터셋을 기반으로 pairplot을 그려 변수간 상관관계를 확인하면 아래와 같다.
> pairs(USArrests, panel = panel.smooth, main = "USArrests")
위 Pairplot을 통해 알 수 있는 점은, Murder와 UrbanPop 두 범죄 사이의 관련성이 거의 없음을 알 수 있다.
그렇다면, 위 데이터를 기반으로 PCA기법을 사용하면 어떻게 될까? R에서 주성분을 알아보는 방법은 아래와 같다.
> US.prin <- princomp(USArrests, cor = TRUE)
> summary(US.prin)
Importance of components:
Comp.1 Comp.2 Comp.3 Comp.4
Standard deviation 1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion 0.6200604 0.8675017 0.9566425 1.00000000
위와같은 결과가 나오게 되는데, Comp는 주성분을, 그 뒤의 숫자는 번호를 의미한다.
위 표를 통해 알 수 있는 점은 2번째 주성분까지 사용하게 된다면, 86.75%의 데이터를 표현할 수 있다는 것이다.
그렇다면 주성분에 의해 설명되는 변동의 비율을 시각화할 수는 없을까?
이러한 상황에서는 screeplot을 그려보면 알 수 있다.
> screeplot(US.prin, npcs=4, type='lines')
위와 같이 screeplot을 통해 주성분이 표현하는 분산의 비율을 알 수 있다.
또한 주성분 네 개가 기여하는 가중치도 확인할 수 있다. 이러한 경우에는 loadings 함수를 사용하면 된다.
> loadings(US.prin)
Loadings:
Comp.1 Comp.2 Comp.3 Comp.4
Murder 0.536 0.418 0.341 0.649
Assault 0.583 0.188 0.268 -0.743
UrbanPop 0.278 -0.873 0.378 0.134
Rape 0.543 -0.167 -0.818
Comp.1 Comp.2 Comp.3 Comp.4
SS loadings 1.00 1.00 1.00 1.00
Proportion Var 0.25 0.25 0.25 0.25
Cumulative Var 0.25 0.50 0.75 1.00
주성분 값으로 확인하면 위와 같이 주성분의 기여를 알 수 있다.
제 1 주성분에는 네 개의 변수가 평균적으로 기여하며, 제2주성분에서는 (Murder, Assault)와 (UrbanPop, Rape)의 계수 부호가 다르다는 점을 알 수 있다.
이렇게 찾아낸 네 개의 주성분으로 데이터를 차원이동 시키게 된다면 어떻게 표현되는지 알아내는 방법은 아래와 같다.
> US.prin$scores
위와 같은 코드를 입력하면, 각 주성분 Comp.1-Comp.2의 선형식을 통해 각 지역 별로 얻은 결과를 계산할 수 있다.
Comp.1 Comp.2 Comp.3 Comp.4
Alabama 0.98556588 1.13339238 0.44426879 0.156267145
Alaska 1.95013775 1.07321326 -2.04000333 -0.438583440
Arizona 1.76316354 -0.74595678 -0.05478082 -0.834652924
Arkansas -0.14142029 1.11979678 -0.11457369 -0.182810896
California 2.52398013 -1.54293399 -0.59855680 -0.341996478
Colorado 1.51456286 -0.98755509 -1.09500699 0.001464887
Connecticut -1.35864746 -1.08892789 0.64325757 -0.118469414
Delaware 0.04770931 -0.32535892 0.71863294 -0.881977637
Florida 3.01304227 0.03922851 0.57682949 -0.096284752
Georgia 1.63928304 1.27894240 0.34246008 1.076796812
Hawaii -0.91265715 -1.57046001 -0.05078189 0.902806864
Idaho -1.63979985 0.21097292 -0.25980134 -0.499104101
Illinois 1.37891072 -0.68184119 0.67749564 -0.122021292
Indiana -0.50546136 -0.15156254 -0.22805484 0.424665700
Iowa -2.25364607 -0.10405407 -0.16456432 0.017555916
Kansas -0.79688112 -0.27016470 -0.02555331 0.206496428
Kentucky -0.75085907 0.95844029 0.02836942 0.670556671
Louisiana 1.56481798 0.87105466 0.78348036 0.454728038
Maine -2.39682949 0.37639158 0.06568239 -0.330459817
Maryland 1.76336939 0.42765519 0.15725013 -0.559069521
Massachusetts -0.48616629 -1.47449650 0.60949748 -0.179598963
Michigan 2.10844115 -0.15539682 -0.38486858 0.102372019
Minnesota -1.69268181 -0.63226125 -0.15307043 0.067316885
Mississippi 0.99649446 2.39379599 0.74080840 0.215508013
Missouri 0.69678733 -0.26335479 -0.37744383 0.225824461
Montana -1.18545191 0.53687437 -0.24688932 0.123742227
Nebraska -1.26563654 -0.19395373 -0.17557391 0.015892888
Nevada 2.87439454 -0.77560020 -1.16338049 0.314515476
New Hampshire -2.38391541 -0.01808229 -0.03685539 -0.033137338
New Jersey 0.18156611 -1.44950571 0.76445355 0.243382700
New Mexico 1.98002375 0.14284878 -0.18369218 -0.339533597
New York 1.68257738 -0.82318414 0.64307509 -0.013484369
North Carolina 1.12337861 2.22800338 0.86357179 -0.954381667
North Dakota -2.99222562 0.59911882 -0.30127728 -0.253987327
Ohio -0.22596542 -0.74223824 0.03113912 0.473915911
Oklahoma -0.31178286 -0.28785421 0.01530979 0.010332321
Oregon 0.05912208 -0.54141145 -0.93983298 -0.237780688
Pennsylvania -0.88841582 -0.57110035 0.40062871 0.359061124
Rhode Island -0.86377206 -1.49197842 1.36994570 -0.613569430
South Carolina 1.32072380 1.93340466 0.30053779 -0.131466685
South Dakota -1.98777484 0.82334324 -0.38929333 -0.109571764
Tennessee 0.99974168 0.86025130 -0.18808295 0.652864291
Texas 1.35513821 -0.41248082 0.49206886 0.643195491
Utah -0.55056526 -1.47150461 -0.29372804 -0.082314047
Vermont -2.80141174 1.40228806 -0.84126309 -0.144889914
Virginia -0.09633491 0.19973529 -0.01171254 0.211370813
Washington -0.21690338 -0.97012418 -0.62487094 -0.220847793
West Virginia -2.10858541 1.42484670 -0.10477467 0.131908831
Wisconsin -2.07971417 -0.61126862 0.13886500 0.184103743
Wyoming -0.62942666 0.32101297 0.24065923 -0.166651801
이렇게 총 결과를 알아보고 나서, 제 1-2주성분에 의한 행렬도를 확인해보자
제 1-2 주성분에 대해 알아보는 코드는 아래와 같다.
> arrests.pca <- prcomp(USArrests, center = TRUE, scale. = TRUE)
> biplot(arrests.pca)
위와 같은 분석을 통해서 각 변수들의 특징을 두 개의 축으로 축약시켜보았고, 각 축과 기존 변수의 축이 어떠한 방향성을 갖는지도 알아볼 수 있었다.
'Programming > R' 카테고리의 다른 글
R에서의 자료 형태(mode)와 특징 (0) | 2025.02.12 |
---|---|
R에서 Apriori 알고리즘으로 연관분석 해보기 (0) | 2025.02.09 |
R 언어에서 ANOVA와 T-test 수행 및 분석 방법 정리 (0) | 2025.02.07 |
R 언어에서 선형회귀와 다항회귀 수행 및 분석 방법 정리 (0) | 2025.02.07 |
R에서 데이터 형태 변환하기 - melt()와 cast() 함수 사용법 정리 (0) | 2025.02.05 |