1つの対照群と1つ以上の実験群があるときに、対照群と実験群の間対比較

Dunnett 検定

Dunnett(ダネット)検定法は、1 つの対照群と、1 つ以上の処理群が存在するとき、各処理群の母平均と対象群の母平均に差があるかどうかを検定する方法である。ダネット検定は、検定対象となる処理群および対照群のデータは正規分布に従い、かつそれらの母分散が互いに等しいときに、利用できる。ダネット検定を適用できるデータは次のように整理することができる。ここでは処理群の数を 3 とした。

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

上の表にあるように、各群の個体数、平均、不偏分散を求めたあとに、誤差自由度、誤差分散を求める。対照群と処理群の数を合わせた群数を g とする。例えば、上の例の場合は、g = 4 である。

\[ \phi_{E} = N - g = \sum_{j=1}^{g}n_{j} - g \] \[ V_{E} = \frac{\sum_{j=1}^{g}(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 を利用したダネット検定

R の SimComp パッケージを使うことで、ダネット検定を行うことができる。ここでは、乱数を使って 4 つの実験群(A、B、C、および D)からなる擬似データを作成する。擬似データを作るとき、A 群を対照群として、A 群と B 群の平均が同じとなるようにして、A 群と C 群および A 群と D 群の平均が異なるようにする。このように作った擬似データに対して、危険率 5% のもとでダネット検定を行う。

library(SimComp)
library(reshape)


a <- rnorm(10, mean = 20, sd = 3)
b <- rnorm(10, mean = 20, sd = 3)
c <- rnorm(10, mean = 40, sd = 3)
d <- rnorm(10, mean = 15, sd = 3)

df <- rbind(
    data.frame(group = 'A', weight = a),
    data.frame(group = 'B', weight = b),
    data.frame(group = 'C', weight = c),
    data.frame(group = 'D', weight = d)
)
head(df)
##   group   weight
## 1     A 22.21557
## 2     A 18.45572
## 3     A 15.07946
## 4     A 22.74811
## 5     A 16.19755
## 6     A 22.21474

levels(df$group)
## [1] "A" "B" "C" "D"

検定を行うときに、どの群が対照群であるかを指定する必要がある。そのために、上のように levels 関数で、各群のラベルの並び順を確認しておく。この場合、対照群である A 群は 1 番目にあるので、ダネット検定を行う関数に base = 1 を指定する。

SimTestDiff(data = df, grp = "group", resp = "weight", 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 degr.fr p.value.raw p.value.adj
## B - A      B - A   weight      0   0.2445    0.1655      36      0.8695      0.9968
## C - A      C - A   weight      0  21.3643   14.4581      36      0.0000      0.0000
## D - A      D - A   weight      0  -4.4446   -3.0079      36      0.0048      0.0131

あらかじめ設定した危険率 5% のもとで検定結果を見ると、A 群を対照群として比較を行った結果、A 群と B 群の平均に有意差が見られず、A 群と C 群および A 群と D 群の平均に有意差が見られたといえる。