投稿日: 2017.11.02
最終更新日: 2020.07.11
用語の定義
要因、因子(factor):結果に影響を与える要素.それぞれの分野で使い分ける場合もあるので注意(このブログでは要因と因子の区別をせず「要因」で統一).
効果:結果への影響
群 (水準):要因を分類する項目
群平均:各群の平均値
全体偏差:全体平均と測定値のズレ
群偏差:各群の平均と全体平均のズレ
残差:各群の偏差以外の測定値からのズレ
偏差平方和:偏差の二乗の総和 (SS: sum of squares)
総平方和:全体偏差の平方和
群間平方和:各群偏差の総和 (なぜ「群間」という表現なのか?)
残差平方和:残差の偏差平方和=総平方和-群間平方和 (ただし一要因の場合)
群間平均平方和:群間平方和÷自由度(群の数-1)
残差平均平方和:残差平方和÷(総数-群の数)
分散比(F値):群間平均平方和÷残差平均平方和
二元配置分散分析の場合
交互作用:2つの要因が目的変数に対して互いに影響を及ぼしている場合
相殺効果:一方の要因の効果が高いと他方の要因の効果がそれをうち消すこと
相乗効果:2つの要因により効果が大きくなること
主効果:交互作用に対して、1つの因子に絞った場合の効果のこと
要因効果:主効果と交互作用の総称
分散分析とは
- 分散分析は、3群以上のそれぞれの群の母平均が等しいという帰無仮説のもとに検定を行う分析方法
- 分散分析では、要因の効果を推定
- 総平方和、群間の平方和から残差平方和を求めて、残差平方和に対する群間平方和の割合(分散比)を統計量として検定 (F検定)
一元配置分散分析
一要因で分類された群間比較を行う解析(群間の結果に差があるかどうかを知りたい)
<使用するサンプル>
サンプル: n=35, 要因=テスト、水準 (群) =A, B, C, D
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
実験結果のバラつきは分散として得られ、分散の原因として次の2点が考えられる
* 原因1)実験A、B、C、Dの効果によるもの (要因の効果)
* 原因2)被験者の問題、測定の誤差、偶然などによるもの(誤差項)
Y = 全体平均 + 要因の効果 + 誤差項 という統計モデルが成立
各群の観測値は同じ分散に従うと仮定する
( i = A, B, C, D j = 1,2, …, 10 )
重要 データの構造を表すイメージ図
測定値 = 全体平均 + (各群の平均 - 全体平均) + (測定値 - 各群の平均 )より
∑∑(測定値-全体平均)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値=群間平均平方和 ÷ 残差平均平方和
# 群間平方和 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
二元配置分散分析
統計モデル
( i = A, B, C j = 1, 2, 3, 4)
ポイント
(治療方法)の効果に加えて、
(治療者)の効果が追加されるため
それぞれの効果について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)
分散分析表
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