統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

対応のあるt検定のサンプルサイズ計算はどうやる?

Toukei Consul Banner

KH Coder Consul Banner

対応のあるt検定は、前後比較をするデザインの時に用いる。

同じ人の変化のため、ばらつきは小さい。

対応のあるt検定のサンプルサイズは、驚くほど小さくなる。

対応のあるt検定のサンプルサイズに必要な数値は?

サンプルサイズ計算に必要なのは、

  1. 検出力
  2. 標準化された前後差

の2つだ。

標準化された前後差は、差の標準偏差が必要で、差の標準偏差を表示している先行研究は少ない。

決め打ちで、ある程度決めてしまうしかない。

下記の二群のt検定でも紹介した目安を用いると、中くらいの差を検出するには、標準化された差を0.4から0.5くらいに設定すればよい。

toukeier.hatenablog.com

対応のあるt検定のサンプルサイズ計算を統計ソフトRで行ってみると?

統計ソフトRで計算する場合、power.t.test()を使えばよい。

検出力を80%として、標準化された差を0.5として、サンプルサイズ計算をする。

type="paired"が対応のある検定であることを指定している。

power.t.test(power=0.8, delta=0.5, type="paired")

結果は、34例必要と計算された。

> power.t.test(power=0.8, delta=0.5, type="paired")

     Paired t test power calculation 

              n = 33.3672
          delta = 0.5
             sd = 1
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

大きな差が見込まれるのであれば、delta=0.9を使って計算する。

power.t.test(power=0.8, delta=0.9, type="paired")

結果は、12例で済む。 驚くほど少ない症例で試験ができてしまう。

> power.t.test(power=0.8, delta=0.9, type="paired")

     Paired t test power calculation 

              n = 11.75386
          delta = 0.9
             sd = 1
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

希少疾患の試験を計画する場合は、症例数が少なくて済むのは助かる。

画期的な治療法であることが条件だ。

power.t.test()を使わない簡易的な方法(2020年4月22日追記)

power.t.test()を使わずに、スクリプトを書いてみると以下のようになる。

paired.t.test.samplesize <- function(sig.level=0.05, power=0.8, 
delta, sd=1, alternative=c("two.sided","one.sided"))
{
 alternative <- match.arg(alternative)
 tside <- switch(alternative, one.sided=1, two.sided=2)

 Za <- qnorm(sig.level/tside, lower.tail=FALSE)
 Zb <- qnorm(power)
 n <- 2*((Za+Zb)/(delta/sd*sqrt(2)))^2

 NOTE <- "n is number of *pairs*, sd is std.dev. of *differences* within pairs"
 METHOD <- "Paired t-test sample size"
 structure(list(n=n,delta=delta, sd=sd, 
 sig.level=sig.level, power=power, 
 alternative=alternative, note=NOTE, method=METHOD),
 class="power.htest")
}

delta=0.5の中程度の差の場合は、32例と計算される。power.t.test()の結果に比べると、2例少ない。

> paired.t.test.samplesize(delta=0.5)

     Paired t-test sample size 

              n = 31.39552
          delta = 0.5
             sd = 1
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

delta=0.9の大きな差の場合は、10例必要と計算される。power.t.test()の結果より2例少ない。

> paired.t.test.samplesize(delta=0.9)

     Paired t-test sample size 

              n = 9.689975
          delta = 0.9
             sd = 1
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

エクセルでサンプルサイズ計算(2020年4月22日追記)

簡易的な方法でサンプルサイズ計算をエクセルのスプレッドシートでできるようにした。正確な計算より2例程度少なく計算されることは忘れずに。よければぜひ。

対応のあるt検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | HHA SHOP

使い方を解説した動画。よければどうぞ。(2021年1月23日追記)

youtu.be

まとめ(2020年4月22日追記)

対応のあるt検定のサンプルサイズ計算を統計ソフトRでやってみた。power.t.test()を使えば簡単に計算できる。

power.t.test()を使わない簡易的な方法もスクリプトを書いてみた。

簡易的な方法を使ってエクセルのスプレッドシートでサンプルサイズ計算できるようにした。

追伸(2020年4月22日追記)

ふと思ったのは、対応のあるt検定って名前が変。対応のある「データのための」t検定では?と思った次第。ま、いっか。

参考書籍(2020年4月22日追記)