統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

ダネット検定のサンプルサイズ計算

ダネット検定のサンプルサイズ計算を R で行う方法

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

ダネット検定サンプルサイズ計算スクリプトの前提

ダネット検定とは、コントロール群、統制群、非処理群などと呼ばれる比較対照グループと、複数用量の治療群、処理群を比較する検定である。

サンプルサイズ計算のスクリプト作成にあたっては、Liu W. 1997の論文を参照した。

論文のTableの一部をtextデータにして使用している。

dat.tab <- read.table("table-for-dunnett-test-sample-size.txt")

ダウンロードはこちらから → table-for-dunnett-test-sample-size.txt

ダウンロードしたのちWorking directory(Windowsであればドキュメントフォルダ)に保存して、上記スクリプトを実行する。

ダネット検定のサンプルサイズ計算スクリプト

ダネット検定のサンプルサイズ計算スクリプトは以下の通り。

sample.size.dunnett <-
function(
nu=40,sig.level=c(.1,.05,.01),power=c(.75,.80,.85,.90,.95),
treat=c(2:10),Delta,sd=1
)
{
dat.tab.abs <- subset(dat.tab, alpha==sig.level & Power==power & k==treat)
n <- (dat.tab.abs$sqrt.n.delta/Delta*sd)^2
n0 <- sqrt(treat)*n

NOTE <- "n is each number in *treatment* groups"
METHOD <- "Sample size determination for Dunnett test"
structure(
list("n0 (control)" = n0, "n (treatment)" = n,
"Treatment groups" = treat,
"Diff. to be rejected" = Delta,
SD = sd,
sig.level = sig.level,
power = power, alternative = "two.sided", note = NOTE,
method = METHOD),
class = "power.htest")
}

ただし、このスクリプトには制限がある。

  • 有意水準が10%、5%、1%の三種類しか選べない。
  • 検出力が75%、80%、85%、90%、95%の五種類しか選べない。
  • 治療群は2から最大10までしか選べない。

ダネット検定のサンプルサイズ計算の例

大きな差を検出する条件だと...

有意水準5%、検出力80%、治療群が三群、標準偏差SD=1に対して、差Delta=0.9を棄却するためのサンプルサイズ計算をすると、対照が53例、治療群は各群31例必要と計算される。

標準偏差SD=1に対して、差Deltaをどう考えるかは、下記を参照。

toukeier.hatenablog.com

> sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=0.9)

     Sample size determination for Dunnett test 

        n0 (control) = 52.7338
       n (treatment) = 30.44587
    Treatment groups = 3
Diff. to be rejected = 0.9
                  SD = 1
           sig.level = 0.05
               power = 0.8
         alternative = two.sided

NOTE: n is each number in *treatment* groups

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

Effect sizeが半分くらいになると...

棄却すべき差が約半分の0.5になると、必要なサンプルサイズは増加して、対照群が171例、治療群は各群99例必要になる。

> sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=0.5)

     Sample size determination for Dunnett test 

        n0 (control) = 170.8575
       n (treatment) = 98.64462
    Treatment groups = 3
Diff. to be rejected = 0.5
                  SD = 1
           sig.level = 0.05
               power = 0.8
         alternative = two.sided

NOTE: n is each number in *treatment* groups

Effect sizeが相対的に大きいと...

動物実験などピュアな実験系であると、ばらつきが小さく、相対的に効果量(Effect size)が大きくなる。

そういう場合はどうか。

棄却すべき差が標準偏差SD=1に対して、Delta=2だった場合、必要となるサンプルサイズは、対照群が11例、治療群は各群7例となる。

実際の実験室での状況ではこのくらいではないだろうか?

> sample.size.dunnett(sig.level=.05,power=.8,treat=3,Delta=2)

     Sample size determination for Dunnett test 

        n0 (control) = 10.67859
       n (treatment) = 6.165289
    Treatment groups = 3
Diff. to be rejected = 2
                  SD = 1
           sig.level = 0.05
               power = 0.8
         alternative = two.sided

NOTE: n is each number in *treatment* groups

治療群の数が減ると...

標準化された差が2のままで、治療群が二群のデザインになると、必要となるサンプルサイズはさらに小さくなり、対照群が8例、治療群が各群6例で済むようになる。

> sample.size.dunnett(sig.level=.05,power=.8,treat=2,Delta=2)

     Sample size determination for Dunnett test 

        n0 (control) = 7.836604
       n (treatment) = 5.541316
    Treatment groups = 2
Diff. to be rejected = 2
                  SD = 1
           sig.level = 0.05
               power = 0.8
         alternative = two.sided

NOTE: n is each number in *treatment* groups

ダネット検定のサンプルサイズ計算をエクセルで

エクセルファイルでダネット検定のサンプルサイズ計算ができるようにした。

数値表込み。

よかったらどうぞ。

ダネット検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

エクセルファイルの使い方を解説した動画。

こちらもよければどうぞ。

youtu.be

ダネット検定のサンプルサイズ計算を R のパッケージで計算する方法

DunnettTestsパッケージのnvDT()関数で計算可能だ。

ただしこの関数は上記と違って片側検定なので承知おきを。

一度だけインストール。

install.packages("DunnettTests")

呼び出してから利用する。

library(DunnettTests)
  • ratioは、治療群とコントロール群の比。
  • powerは検出力。
  • rは少なくともいくつの群間で有意になってほしいか。
  • kは治療群の数。
  • muは治療群の平均値。
  • mu0はコントロール群の平均値。
  • contrastはmeansにすると平均値の比較。propsとすると割合の比較。
  • sigma標準偏差。propsのときは指定しない。
  • distはt分布(tdist)か標準正規分布(zdist)か指定。nが小さいと予想される場合はtdistがよい。
  • testcallはStep-up(SU)とStep-down(SD)が指定できる。 Step-upはHochbergの方法、Step-downはHolmの方法と思えばいい。

Hochbergの方法、Holmの方法は下記を参照。

toukeier.hatenablog.com

大きな差を検出する条件再計算

Effect sizeが0.9と、大きな差の場合は、上記の方法では、両側検定でコントロール群が53例、治療群が各群31例必要と計算された。

こちらの nvDT() による片側検定のためのサンプルサイズ計算では、コントロール群が32例、治療群は各18例と計算された。

> nvDT(ratio=1/sqrt(3), power=0.8, r=3, k=3, mu=0.9, mu0=0, contrast="means", sigma=1, dist="zdist", testcall="SU")
$`least sample size required in each treatment groups`
[1] 18

$`least sample size required in the control group`
[1] 32

Effect sizeが約半分のとき再計算

Effect sizeが約半分の0.5の時は、先ほどはコントロール群が171例、治療群は各群99例必要と計算された。

こちらの場合は、コントロール群が101例、治療群は各58例必要と計算された。

> nvDT(ratio=1/sqrt(3), power=0.8, r=3, k=3, mu=0.5, mu0=0, contrast="means", sigma=1, dist="zdist", testcall="SU")
$`least sample size required in each treatment groups`
[1] 58

$`least sample size required in the control group`
[1] 101

Effect sizeが相対的に大きいとき再計算

Effect sizeが相対的に大きく、2であった場合、コントロール群が11例、治療群は各7例必要であったところが、nvDT()の方法であると、コントロール群が7例、治療群は各4例必要と計算された。

> nvDT(ratio=1/sqrt(3), power=0.8, r=3, k=3, mu=2, mu0=0, contrast="means", sigma=1, dist="zdist", testcall="SU")
$`least sample size required in each treatment groups`
[1] 4

$`least sample size required in the control group`
[1] 7

治療群が減ったとき再計算

治療群が三群から二群に減ると、必要数も減る。

上記の方法では、コントロール群が8例、治療群が各6例必要であった。

こちらの方法では、コントロール群が6例、治療群は各4例必要と計算された。

> nvDT(ratio=1/sqrt(2), power=0.8, r=2, k=2, mu=2, mu0=0, contrast="means", sigma=1, dist="zdist", testcall="SU")
$`least sample size required in each treatment groups`
[1] 4

$`least sample size required in the control group`
[1] 6

まとめ

ダネット検定を行う試験デザインのサンプルサイズ計算スクリプトを示した。

ただし、Liu W 1997論文に掲載されている表の一部を使っているので、すべての条件を網羅しておらず限界がある。

DunnettTestsパッケージのnvDT()関数も利用できる。

ただし、片側検定なのでその点注意。

参考文献

Liu W. On sample size determination of Dunnett's procedure for comparing several treatments with a control.

永田 靖 ダネットの方法におけるサンプルサイズの決め方について 医薬安全性研究会 会報 2005;50(May):51-59.

Package 'DunnettTests'

A Step-Up Multiple Test Procedure