【Rで多変量解析#5】主成分分析

記事の目的

主成分分析をRを使用して実装していきます。データの作成から実装するので、コピペで再現することが可能です。

 

目次

  1. ライブラリ
  2. 単変量の場合
  3. 多変量の場合

 

1 ライブラリ

library(dplyr)
library(ggplot2)

 

2 単変量の場合

2.1 データ

set.seed(10)
英語 <- rnorm(100, 50, 10) %>% round()
数学 <- rnorm(100, 英語, 10) %>% round()
data <- data.frame(英語, 数学)
data %>% head()

 

2.2 データの可視化

data %>%
  ggplot() +
  geom_point(aes(英語, 数学))+
  theme_classic(base_family = "HiraKakuPro-W3")+
  theme(text=element_text(size=30)) +
  labs(title="データプロット")

 

2.3 主成分分析

model <- prcomp(data, scale = TRUE)
summary(model)

 

2.4 主成分得点

z <- model$rotation[,1] %*% t(scale(data)) %>% round(2) %>% t() %>% as.data.frame()
colnames(z) <- "z"
z %>% head()

 

3 多変量の場合

3.1 データ

set.seed(10)
英語 <- rnorm(100, 50, 10) %>% round()
数学 <- rnorm(100, 50, 10) %>% round()
国語 <- rnorm(100, 英語, 5) %>% round()
理科 <- rnorm(100, 数学, 5) %>% round()
社会 <- rnorm(100, 国語, 3) %>% round()
data <- data.frame(英語, 数学, 国語, 理科, 社会)
data %>% head()

 

3.2 主成分分析

model <- prcomp(data, scale = TRUE)
summary(model)
biplot(model, family="HiraKakuPro-W3")

 

3.3 主成分得点

z <- t(model$rotation[,1:2]) %*% t(scale(data)) %>% round(2) %>% t() %>% as.data.frame()
colnames(z) <- c("z1", "z2")
z %>% head()