理学療法士がまとめたノート

統計学備忘録(R言語のメモ)

since2016 ときどきTEXのメモ

分散分析の基礎

投稿日: 2017.11.02
最終更新日: 2020.07.11

用語の定義

要因、因子(factor):結果に影響を与える要素.それぞれの分野で使い分ける場合もあるので注意(このブログでは要因と因子の区別をせず「要因」で統一).

効果:結果への影響
群 (水準):要因を分類する項目
群平均:各群の平均値
全体偏差:全体平均と測定値のズレ
群偏差:各群の平均と全体平均のズレ
残差:各群の偏差以外の測定値からのズレ

偏差平方和:偏差の二乗の総和 (SS: sum of squares)
総平方和(SST):全体偏差の平方和
群間平方和(SSA):各群偏差の総和 (なぜ「群間」という表現なのか?)
残差平方和(SSE):残差の偏差平方和=総平方和-群間平方和 (ただし一要因の場合)
群間平均平方和(MSA):群間平方和÷自由度(群の数-1)
残差平均平方和(MSE):残差平方和÷(総数-群の数)
分散比(F値):群間平均平方和÷残差平均平方和

二元配置分散分析の場合
交互作用:2つの要因が目的変数に対して互いに影響を及ぼしている場合
    相殺効果:一方の要因の効果が高いと他方の要因の効果がそれをうち消すこと
    相乗効果:2つの要因により効果が大きくなること
主効果:交互作用に対して、1つの因子に絞った場合の効果のこと
要因効果:主効果と交互作用の総称

分散分析とは

  • 分散分析は、3群以上のそれぞれの群の母平均が等しいという帰無仮説のもとに検定を行う分析方法
  • 分散分析では、要因の効果を推定
    • 総平方和、群間の平方和から残差平方和を求めて、残差平方和に対する群間平方和の割合(分散比)を統計量として検定 (F検定)

一元配置分散分析

一要因で分類された群間比較を行う解析(群間の結果に差があるかどうかを知りたい)

<使用するサンプル>
サンプル: n=35, 要因=テスト、水準 (群) =A, B, C, D f:id:yoshida931:20200705144604p:plain:w350

No A B C D
No1    10    10     5     9
No2     6     7     10     5
No3    10     9     6     6
No4     9    11     6     7
No5     8     8     8     6
No6    11    10     6     9
No7     5     6     7     5
No8     6    12     8     5
No9    NA    12     8    NA
No10    NA    NA     9    NA

このデータをRに読み込んで作業を進めます
da <- read.table("clipboard", header = T)

実際の解析にはlong dataを使用します
install.packages("tidyr") #パッケージインストール
library(tidyr)
df <- da %>% gather(test, data, -No)   #long dataに変換

     No test data
1   No1    A   10
2   No2    A    6
3   No3    A   10
4   No4    A    9
5   No5    A    8
-------------------
35  No5    D    6
36  No6    D    9
37  No7    D    5
38  No8    D    5
39  No9    D   NA
40 No10    D   NA

f:id:yoshida931:20200705150043p:plain:w400

実験結果のバラつきは分散として得られ、分散の原因として次の2点が考えられる
* 原因1)実験A、B、C、Dの効果によるもの (要因の効果)
* 原因2)被験者の問題、測定の誤差、偶然などによるもの(誤差項)

 Y = 全体平均 + 要因の効果 + 誤差項  という統計モデルが成立
 各群の観測値は同じ分散σ^2に従うと仮定する
Y = μ + α_{i} + e_{ij}\ \ \ \ e_{ij}~N(0, σ^2)   ( i = A, B, C, D  j = 1,2, …, 10 )

重要 データの構造を表すイメージ図
f:id:yoshida931:20200705211558p:plain:w350
測定値 = 全体平均 + (各群の平均 - 全体平均) + (測定値 - 各群の平均 )より
∑∑(測定値-全体平均)2 = n*∑(各群の平均-全体平均)2+∑∑(測定値-各群の平均 )2
総平方和 = 群間平方和 + 残差平方和

分散分析の帰無仮説
実験A,B,C,Dの母平均は等しい
帰無仮説: A = B = C = D = 0

分散分析の統計検定量
  F値=群間平均平方和 ÷ 残差平均平方和
検定統計量FはF分布に従う

curve(df(x, 3, 31), from = 0, to = 5, type = "l", ylim = c(0, 0.8))

サンプル(samp)の場合、群間平方和の自由度は3、残差平方和の自由度は35-4 = 31
自由度(3,31)のF分布よりF値に該当するp値を算出
f:id:yoshida931:20200705175103p:plain:w350
検定の結果として帰無仮説が棄却された場合:要因の効果が認められる(群間に差がある)と推測

F値=群間平均平方和 ÷ 残差平均平方和

#  群間平方和
ave <- mean(df$data, na.rm = T) #全体平均
SSA <- sum(mean(da$A, na.rm = T) - ave)^2 * sum(!is.na(da$A)) +
  sum(mean(da$B, na.rm = T) - ave)^2 * sum(!is.na(da$B)) +
  sum(mean(da$C, na.rm = T) - ave)^2 * sum(!is.na(da$C)) +
  sum(mean(da$D, na.rm = T) - ave)^2 * sum(!is.na(da$D))
41.08849
#-------------------------------#
#  残差平方和
SSE <- sum((da$A - mean(da$A, na.rm = T))^2, na.rm = T)+
  sum(((da$B - mean(da$B, na.rm = T))^2), na.rm = T)+
  sum((da$C - mean(da$C, na.rm = T))^2, na.rm = T)+
  sum((da$D - mean(da$D, na.rm = T))^2, na.rm = T)
113.1972
#-------------------------------#
#  総平方和
ave <- mean(df$data, na.rm = T) #全体平均
SST <- sum((df$data - ave)^2, na.rm = T)
154.2857

分散分析表で確認

anova( lm( data ~ factor(test), data=df ) )

Analysis of Variance Table

Response: data
             Df  Sum Sq Mean Sq F value  Pr(>F)  
factor(test)  3  41.088 13.6962  3.7508 0.02083 *
Residuals    31 113.197  3.6515     
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1



             Df  Sum Sq Mean Sq F value  Pr(>F)  
factor(test)  自由度  SSA MSA  F値 p値
Residuals     自由度  SSE MSE     


二元配置分散分析

f:id:yoshida931:20200705230501p:plain:w350

統計モデル
Y  = μ+α_{i}+β_{j}+ e_{ij}\ \ \ \  e_{ij}~(0, σ^2)    ( i = A, B, C   j = 1, 2, 3, 4)

ポイント
α_{i} (治療方法)の効果に加えて、β_{j} (治療者)の効果が追加されるため
それぞれの効果についてF検定を実施

#  long data に変換
#install.packages("tidyr") #パッケージインストール
library(tidyr)
df2 <- da2 %>% gather(test, data, -th)    #long dataに変換

   th test data
1   A   x1   30
2   B   x1   40
3   C   x1   28
4   A   x2   35
5   B   x2   45
6   C   x2   22
7   A   x3   32
8   B   x3   34
9   C   x3   28
10  A   x4   33
11  B   x4   36
12  C   x4   31

anova( lm( data ~ th + test, data=df2 ) )

Response: data
          Df  Sum Sq Mean Sq F value Pr(>F)  
th         2 265.167 132.583  6.9274 0.0276 *
test       3  11.667   3.889  0.2032 0.8906  
Residuals  6 114.833  19.139   

統計検定量F値SSa, SSbそれぞれに算出
二要因が含まれいるので、それぞれの群間平均平方和を算出して残差平均平方和で除したF値で検定

繰り返しのある二元配置分散分析

繰り返し測定5回のサンプル

data <- c(10,10,8,9,6, 10,12,5,7,12, 11,9,9,8,7,
           8,6,6,5,6,    10,8,8,4,4,   9,11,5,6,9)
test <- c(rep("A", 15), rep("B", 15))
pt <- rep(c("pt1","pt2","pt3","pt4","pt5"), 6)
interaction.plot(pt, test, data)

f:id:yoshida931:20200711223906p:plain:w400

分散分析表

df <- data.frame(data, test, pt)
df[sort(df$pt, ),]#繰り返しのイメージ
anova(lm(data ~ test + pt + test:pt, data=df))

Response: data
          Df Sum Sq Mean Sq F value  Pr(>F)  
test       1 26.133 26.1333  7.3962 0.01320 *
pt         4 51.533 12.8833  3.6462 0.02182 *
test:pt    4  3.533  0.8833  0.2500 0.90625  
Residuals 20 70.667  3.5333   

残差の自由度   test数 * pt数 * (繰り返し数-1) = 20