PCA(主成分分析を勉強してみた)
1.データーの準備
生徒NO <- seq(1, 10, 1) kubun1 <- c(1,1,1,2,2,2,2,3,3,3) kubun2 <- c("a","a","a","b","b","b","b","c","c","c") 国語 <- c(96,91,89,78,67,63,53,38,31,39) 英語 <- c(96,91,89,78,67,53,63,36,24,32) 数学 <- c(67,68,69,58,61,55,49,82,96,93) d01 <- data.frame(生徒NO,kubun1,kubun2,国語,英語,数学) d01 sapply(d01, class)
(出力)
> d01 生徒NO kubun1 kubun2 国語 英語 数学 1 1 1 a 96 96 67 2 2 1 a 91 91 68 3 3 1 a 89 89 69 4 4 2 b 78 78 58 5 5 2 b 67 67 61 6 6 2 b 63 53 55 7 7 2 b 53 63 49 8 8 3 c 38 36 82 9 9 3 c 31 24 96 10 10 3 c 39 32 93 > sapply(d01, class) 生徒NO kubun1 kubun2 国語 英語 数学 "numeric" "numeric" "factor" "numeric" "numeric" "numeric"
2.pcaを実行してみる
> pca <- prcomp(d01[,c(4,5,6)], scale = T) > print(pca) Standard deviations (1, .., p=3): [1] 1.5658770 0.7287046 0.1304565 Rotation (n x k) = (3 x 3): PC1 PC2 PC3 国語 -0.6071171 0.4078050 0.68198526 英語 -0.6210608 0.2918497 -0.72739756 数学 0.4956735 0.8651698 -0.07608478 > biplot(pca)
3.おしゃれな表示方法
library("FactoMineR") library("factoextra") fviz_pca_biplot(pca, repel = T)
fviz_pca_ind(pca, habillage=d01$kubun2, addEllipses=TRUE, ellipse.level=0.95, palette = "Dark2")
library(ggplot2) library(ggfortify) library("ggrepel") autoplot(pca,data = d01, loadings = T, loadings.colour = "black", loadings.label = T, loadings.label.colour = "black") + geom_label_repel(label=rownames(d01))