Stats & AI tech blog - '일단 시도함'
[ML/DL] MCA, Multiple Correspondence Analysis (다중 대응 분석) 본문
[ML/DL] MCA, Multiple Correspondence Analysis (다중 대응 분석)
justdoit ok? 2023. 12. 27. 16:381. 다중대응분석(MCA)이란?
다변량 범주형 자료의 탐색적 분석에 이용되는 차원 축소 기법이다.
대응분석(CA)의 확장이며, 범주형 데이터에 대한 주성분분석(PCA)으로 이해할 수 있다.
연속형 자료의 차원 축소 기법인 PCA에서는 공분산을 통해 변수 간의 관계성 파악한다. 관계가 밀접한 변수들의 선형조합으로 정보량이 많은 변수(주성분)를 추출한다.
범주형 자료에서는 공분산을 사용할 수 없기 때문에 범주형 변수의 관계성 지표인 카이제곱 검정통계량을 사용한다. 두 변수의 관계가 밀접할 수록 카이제곱 검정통계량은 커지게 된다.
변수 간 카이제곱 검정통계량으로 만든 행렬을 분해(Decomposition)하여 요인을 찾아내는 것이 대응분석(CA)이고, CA를 여러 변수로 확장한 것이 다중대응분석(MCA)이다.
2. 다중대응분석(MCA) 예제
- 사용데이터
아래와 같이 group, 연령 그룹, 성별, 기타 범주형 요인(x1-x5)으로 구성된 데이터에서,
변수들의 관계성 (카이제곱 검정통계량)을 통해서 차원을 축소하고자 한다.
- MCA
FactoMineR 패키지의 MCA 함수를 통해 다중 대응 분석을 수행할 수 있다.
library(FactoMineR)
mca1 <- MCA(data_mca[,-1], graph = F)
mca1$eig
mca1$var$coord
mca1$var$cos2
mca1$var$contrib
- $eig : 고유값과 설명가능한 분산의 비율 확인
- $var$coord : 각 dimension에 대한 좌표값 확인
- $var$cos2 : squared cosine으로 변수에 대해 중요한 요인이 무엇인지 확인
- $var$contrib : 기여도로 요인에게 중요한 변수가 무엇인지 확인
> mca1$eig
eigenvalue percentage of variance cumulative percentage of variance
dim 1 0.36064426 19.4193063 19.41931
dim 2 0.26660717 14.3557705 33.77508
dim 3 0.22485914 12.1077999 45.88288
dim 4 0.17356612 9.3458678 55.22874
dim 5 0.15918114 8.5712920 63.80004
dim 6 0.14227990 7.6612257 71.46126
dim 7 0.13955353 7.5144211 78.97568
dim 8 0.12741915 6.8610311 85.83671
dim 9 0.09808896 5.2817134 91.11843
dim 10 0.06461860 3.4794630 94.59789
dim 11 0.04933498 2.6564991 97.25439
dim 12 0.03278146 1.7651553 99.01955
dim 13 0.01820845 0.9804549 100.00000
dimension 5에서 총 분산의 63% 정도를 설명 가능하다는 것을 확인할 수 있다.
dimentsion 8에서는 총 분산의 85%가 설명 가능하다. input으로 사용된 변수가 8개였는데, 이 데이터에서 MCA로 차원을 축소하는 방법이 적절하지 않은 것 같다.
> mca1$var$contrib
Dim 1 Dim 2 Dim 3 Dim 4 Dim 5
age_group_1 5.0453438 0.40449745 0.315418099 3.12015213 4.5463645
age_group_2 5.4334472 0.43561264 0.339681029 3.36016383 4.8960848
gender_0 0.3062260 2.03821303 0.353893094 6.26522528 2.7533740
gender_1 0.6387000 4.25113003 0.738119882 13.06746986 5.7427515
x1_0 0.8125702 9.44945273 17.460120023 0.34338746 2.8616954
x1_1 8.3639689 23.51532166 0.550228216 6.01736402 0.4864590
x1_3 9.9690032 0.08845190 2.232542875 7.66103827 2.8388495
x1_4 2.5699990 12.33490690 26.522919126 4.79278233 0.4413438
x2_1 0.6070828 10.17837361 20.056710195 2.20940983 3.6472206
x2_2 4.8982310 16.04467715 0.082089314 13.79043240 1.1538547
x2_3 3.6469328 6.51039125 0.391343457 1.91955335 11.5780286
x2_4 3.9613490 0.06583345 0.009431773 6.64436611 17.4507697
x2_5 5.0865992 0.28094290 2.837667456 3.17625893 3.5070171
x2_6 2.9763919 12.87997450 26.267502773 0.88827023 0.1965182
x3_1 1.7649060 0.72613023 0.660410243 0.05238838 23.3071097
x3_2 0.4775628 0.19648230 0.178699242 0.01417568 6.3066297
x4_0 5.1285626 0.05990670 0.256291731 4.07826629 1.9618790
x4_1 12.4550807 0.14548771 0.622422775 9.90436100 4.7645632
x5_0 14.2458663 0.21718264 0.068595069 6.99396861 0.8591618
x5_1 11.6121767 0.17703123 0.055913628 5.70096601 0.7003251
각 dimension에 기여한 변수의 기여도를 확인할 수 있다.
Dim1에서는 x4, x5 변수가, Dim 2에서는 x1의 기여도가 높게 나타난다.
- Visualization
- Scree plot : 설명가능한 분산을 막대그래프로 확인하고 요인의 수를 결정하는데 사용한다.
library(factoextra)
# scree plot
fviz_screeplot(mca1, addlabels = T)
- Biplot : 산점도 확인, 파란점은 rows(individuals)을 나타내고 빨간점은 columns(variable categories)를 나타낸다.
library(factoextra)
# biplot
fviz_mca_biplot(mca1, repel = TRUE, ggtheme = theme_minimal())