Dunnett 検定

Dunnett(ダネット)検定法は、1つの対照群と、1つ以上の実験群が存在するとき、各群の実験群の母平均と対象群の母平均が帰無仮説に従うかどうかを検定する方法である。ダネット検定は、検定対象となる実験群および対照群は正規分布に従い、かつ母分散が互いに等しいことときに、利用できる。

ダネット検定

データ配置は次のようにする。

サンプルデータ個数平均分散
1(対照群)x11, x12, .. ,x1n1n1μ1σ21
2(実験群)x21, x22, .. ,x2n2n2μ2σ22
3(実験群)x31, x32, .. ,x3n3n3μ3σ23
a(実験群)xa1, xa2, .. ,xananaμaσ2a

上の表にあるように、各群の個体数、平均、不偏分散を求めたあとに、誤差自由度、誤差分散を求める。

\[ \phi_{E} = N - a = \sum_{j=1}^{a}n_{j} - a \] \[ V_{E} = \frac{\sum_{j=1}^{a}(n_{j} - 1)\sigma^{2}_{j}}{\phi_{E}} \]

次の式に従って、すべての組み合わせに対して、t 統計量を求める。

\[ t_{ij} = \frac{|\mu_{1} - \mu_{i}|}{\sqrt{V_{E}\left( \frac{1}{n_{1}} + \frac{1}{n_{i}} \right)}} \]

個体数の調整係数 ρ を求める。まず、対照群を除くすべての組み合わせについて ρij を求めまる。最後に、&ho;ij を利用して、ρ を計算する。

\[ \rho_{ij} = \sqrt{\frac{n_{i}}{n_{1}+n_{i}}\frac{n_{j}}{n_{1}+n_{j}}} \] \[ \rho = \frac{\sum_{i=2, i < j}^{a}\rho_{ij}}{(a-2)(a-3)\cdots 1} \]

このρを利用して、D 分布表から境界値を求める。

  • 両側検定の場合は、|t1i| ≥ D(n , φE, ρ ; α) ならば帰無仮説を棄却する。すなわち、μ1≠μi
  • 片側検定の場合は、|t1i| ≥ D'(n , φE, ρ ; α) ならば帰無仮説を棄却する。すなわち、μ1i
  • 片側検定の場合は、|t1i| ≤ -D'(n , φE, ρ ; α) ならば帰無仮説を棄却する。すなわち、μ1i

R を利用したダネット検定

サンプルデータを利用してダネット検定を行う方法を示す。サンプルデータは 20 匹のラットを C 群、G 群、L 群および PF 群の 4 つの実験群に 5 匹ずつ分けて飼育した後に体重を測定した。ただし、L 群には欠損値が 1 つ存在する。

ダネット検定はコントロール群と処理群の比較であるから、ここでは C 群をコントロール群とみなして検定を進める。

data <- read.table("https://stat.biopapyrus.net/data/ratweight.csv", header = TRUE, sep = ",")
data
##     C   G   L  PF
## 1 266 208 236 178
## 2 273 213 262 172
## 3 260 216 269 185
## 4 290 201 248 187
## 5 285 214  NA 185

サンプルデータを読み込んだ後に、reshape と SimComp パッケージをロードし、データを整形し、ダネット検定を行う。SimComp パッケージ中の SimTestDiff 関数を利用するが、まず、melt を利用してデータを整形する必要がある。整形した後のデータは variable と value の 2 列からなるオブジェクトに変化する。variable が実験群、value が観測値となる。次に、SimTestDiff を実行するとき grp オプションに実験群を示す列 variable を、resp オプションに観測値を示す列 value を与える。また、base オプションにコントロール群の群番号(整数値)を与える。

library(SimComp)
library(reshape)
  
# データを整形して m に代入
m <- melt(data)
m <- m[(!is.na(m[,2])),]   # 欠損値(NA)を取り除く
 
head(m)       # 確認
##   variable value
## 1        C   266
## 2        C   273
## 3        C   260
## 4        C   290
## 5        C   285
## 6        G   208

m$variable
##  [1] C  C  C  C  C  G  G  G  G  G  L  L  L  L  PF PF PF PF PF
## Levels: C G L PF

# Levels: 行では C が 1 番目にあるので base = 1 と指定する

SimTestDiff(data = m, grp = "variable", resp = "value", type = "Dunnet", base = 1, covar.equal = T)
## Test for differences of means of multiple endpoints 
## Assumption: Homogeneous covariance matrices for the groups 
## Alternative hypotheses: True differences not equal to the margins 
## 
##   comparison endpoint margin estimate statistic p.value.raw p.value.adj
## 1      G - C    value      0   -64.40    -9.903      0.0000      0.0000
## 2      L - C    value      0   -21.05    -3.052      0.0081      0.0212
## 3     PF - C    value      0   -93.40   -14.362      0.0000      0.0000