【Rで統計学#8】分散分析

記事の目的

R言語を使用して、分散分析について実装していきます。

 

目次

  1. 使用するライブラリ
  2. 一元配置分散分析
  3. 二元配置分散分析

 

1 使用するライブラリ

install.packages("dplyr") # 一度もインストールしていない場合
install.packages("ggplot2") # 一度もインストールしていない場合
install.packages("tidyr") # 一度もインストールしていない場合
install.packages("stringr") # 一度もインストールしていない場合
install.packages("gridExtra") # 一度もインストールしていない場合
library(dplyr)
library(ggplot2)
library(tidyr) # gather()
library(stringr) # str_detect()
library(gridExtra) # grid.arrange()

 

2 一元配置分散分析

2.1 データの作成

set.seed(10)
講義A <- rnorm(10, 600, 100) %>% round()
講義B <- rnorm(10, 650, 100) %>% round()
講義C <- rnorm(10, 700, 100) %>% round()
dataA <- data.frame(講義A, 講義B, 講義C) 
dataA %>% head()
dataA %>% apply(2, mean)

 

2.2 データの変形

dataA_all <- dataA %>% 
  gather(key=講義, value = 点数, 講義A, 講義B, 講義C)
dataA_all %>% head()
dataA %>% apply(2, mean)

 

2.3 データの可視化

dataA_all %>% 
  ggplot() +
  geom_point(aes(講義, 点数)) +
  theme_classic(base_family = "HiraKakuPro-W3") +
  theme(text=element_text(size=40)) +
  labs(x=NULL, title="データのプロット")

 

2.4 分散分析実装

anova(lm(data=dataA_all, 点数~講義))

 

 

3 二元配置分散分析

3.1 データの作成

set.seed(10)
講師1講義A <- rnorm(10, 600, 100) %>% round()
講師1講義B <- rnorm(10, 650, 100) %>% round()
講師1講義C <- rnorm(10, 700, 100) %>% round()
講師2講義A <- rnorm(10, 600, 100) %>% round()
講師2講義B <- rnorm(10, 600, 100) %>% round()
講師2講義C <- rnorm(10, 600, 100) %>% round()
dataB <- data.frame(講師1講義A, 講師1講義B, 講師1講義C, 講師2講義A, 講師2講義B, 講師2講義C) 
dataB %>% head()

 

3.2 データの変形

dataB_new <- dataB %>% 
  gather(key=講義, value = 点数, 講師1講義A, 講師1講義B, 講師1講義C, 講師2講義A, 講師2講義B, 講師2講義C)
dataB_new %>% head()

 

data_new <- dataB %>% 
  gather(key=講義, value = 点数, 講師1講義A, 講師1講義B, 講師1講義C, 講師2講義A, 講師2講義B, 講師2講義C) %>%
  mutate(講師=ifelse(str_detect(講義, "講師1"), "講師1", "講師2")) %>%
  mutate(講義=ifelse(str_detect(講義, "講義A"), "講義A", ifelse(str_detect(講義,"講義B"), "講義B", "講義C")))
data_new %>% head()

 

3.3 データの平均

mu1 <- data_new %>%
  group_by(講義) %>%
  summarise(mu = mean(点数))
mu2 <- data_new %>%
  group_by(講師) %>%
  summarise(mu = mean(点数))
mu <- dataB %>% 
  apply(2, mean) %>% as.data.frame()
mu1 ; mu2 ; mu

 

3.4 データの可視化

p1 <- ggplot() +
  geom_point(aes(data_new$講義, data_new$点数)) +
  theme_classic(base_family = "HiraKakuPro-W3") +
  theme(text=element_text(size=30)) +
  geom_point(aes(mu1$講義, mu1$mu), size=5, col="red") +
  labs(title="データプロット", x=NULL, y="点数")
p2 <- ggplot() +
  geom_point(aes(data_new$講師, data_new$点数)) +
  theme_classic(base_family = "HiraKakuPro-W3") +
  theme(text=element_text(size=30)) +
  geom_point(aes(mu2$講師, mu2$mu), size=5, col="blue") +
  labs(title="データプロット", x=NULL, y="点数")
grid.arrange(p1, p2, nrow=1)

 

ggplot() +
  geom_point(aes(dataB_new$講義, dataB_new$点数)) +
  theme_classic(base_family = "HiraKakuPro-W3") +
  theme(text=element_text(size=30)) +
  geom_point(aes(rownames(mu)[1:3], mu$.[1:3]), size=5, col="red") +
  geom_point(aes(rownames(mu)[4:6], mu$.[4:6]), size=5, col="blue")+
  labs(title="データプロット", x=NULL, y="点数")

 

 

3.5 二元配置分散分析実装

summary(aov(data=data_new, 点数~講義+講師))

 

summary(aov(data=data_new, 点数~講義*講師))