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)

f:id:buriburipipi2:20191114055912j:plain
3.おしゃれな表示方法

library("FactoMineR")
library("factoextra")
fviz_pca_biplot(pca, repel = T)

f:id:buriburipipi2:20191114062107j:plain

fviz_pca_ind(pca,   habillage=d01$kubun2,
     addEllipses=TRUE, ellipse.level=0.95, palette = "Dark2")

f:id:buriburipipi2:20191114062525j:plain

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))

f:id:buriburipipi2:20191114063052j:plain