MENU

R でクロスオーバー試験に必要なサンプルサイズを計算する方法

クロスオーバー試験のサンプルサイズ計算を R で行う方法

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

↑期間・数量限定で無料プレゼント中!

目次

クロスオーバー試験とは

クロスオーバー試験とは、二群どちらにも二つの介入を受けてもらう試験。

従来の薬と新薬とか、方法Aと方法Bとか、二つの方法を順番を変えて受けてもらう。

利点は、小さいサンプルサイズで、信頼性の高いデータが取れること。

ただし、一個目の影響がなくなるまでのウォッシュアウト期間をどうするか?という問題が付きまとう

クロスオーバー試験の前に並行群間比較試験のサンプルサイズ計算は?

クロスオーバー試験の前に、まず並行群間比較試験の場合。

R で計算してみる。

deltaを10/25=0.4, 検出力を80%とすると、一群100例必要と計算される。

delta(またはd=標準化された差)はどう決めればいいか?は以下参照。

> power.t.test(delta=10/25, power=.8)
Two-sample t test power calculation
n = 99.08057
delta = 0.4
sd = 1
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

自作関数だと、以下のようになる。

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))^2
NOTE <- "n is number in *each* group"
METHOD <- "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")
}

R の関数のように非心t分布を使っていないために、必要サンプルサイズが若干小さい。

と言っても100例が99例になっただけなので、大きなインパクトではない。

> t.test.samplesize(delta=10/25)
t-test sample size
n = 98.111
delta = 0.4
sd = 1
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

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

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

クロスオーバー試験のサンプルサイズ計算は?

必要な条件は以下の通り。

  • delta: effect size
  • sigma: 標準偏差
  • theta: 個人差指数(個人間分散と個人内分散の比。通常1より大きいはず。)
  • sigma.w: 個人内標準偏差
  • rep.level: 繰り返し計算を行う条件。デフォルトでは計算結果の差の割合が10-8未満になるまで繰り返す。

以下が R スクリプト。

samplesize.cross <- function(sig.level=0.05, power=0.8,
delta, sigma, theta, rep.level=10^-8,
alternative=c("two.sided", "one.sided"))
{
alternative <- match.arg(alternative)
tside <- switch(alternative, one.sided=1, two.sided=2)
p.t.t <- power.t.test(power=power, delta=delta/sigma)
np <- p.t.t$n
nc <- np/(2*(1+theta**2))
nc.approx <- nc
sigma.w <- sqrt(sigma**2/(1+theta**2))
nc0 <- nc
nc1 <- nc+5
yy <- matrix(0,8,1)
i <- 0
diff <- abs(nc1-nc0)/nc0
while (diff > rep.level){
i <- i+1
nc <- nc0
ta <- qt(p=1-sig.level/tside, df=2*nc-2)
tb <- qt(p=power, df=2*nc-2)
nc <- ((ta+tb)/(delta/sigma.w))**2
nc1 <- nc
diff <- abs(nc1-nc0)/nc0
yy[i,1] <- nc1
nc.exact <- nc1
nc0 <- nc1
}
NOTE <- "n is number in *each* group"
METHOD <- "t-test sample size for cross-over trial design"
structure(list("n(parllel)"=np, "n(cross-over)"=nc.approx,
"n(cross-over exact)"=nc.exact, delta=delta,
sigma=sigma, sig.level=sig.level, power=power,
alternative=alternative, note=NOTE,
method=METHOD),
class="power.htest")
}

有意水準5%、検出力80%、差が10、標準偏差が25 というのは先ほどの並行群間比較試験と同じ条件。

個人差指数を1.5(つまり個人差変動が個人内変動より1.5倍大きい)と見積もると、必要サンプルサイズは一群17例と計算される。

並行群間だと一群100例だったので、約1/5に節約できる。

> samplesize.cross(delta=10, sigma=25, theta=1.5)
t-test sample size for cross-over trial design
n(parllel) = 99.08057
n(cross-over) = 15.24316
n(cross-over exact) = 16.12026
delta = 10
sigma = 25
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

個人差指数を1として、個人内変動が結構大きいと想定して見積もると、必要サンプルサイズは一群26例と計算される。

100例必要だったところ、約1/4に減らせるのは効率がいい。

> samplesize.cross(delta=10, sigma=25, theta=1)
t-test sample size for cross-over trial design
n(parllel) = 99.08057
n(cross-over) = 24.77014
n(cross-over exact) = 25.53465
delta = 10
sigma = 25
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

個人差指数 theta は先行研究でわかれば問題ないが、難しいかもしれない。

わからない場合は、1で計算すれば、控えめで無難だ。

クロスオーバー試験のサンプルサイズ計算をエクセルで

並行群間試験、つまり平均値の差の検定用の簡易的なサンプルサイズ計算式を活用して、クロスオーバー試験のサンプルサイズ計算スクリプトを作成した。

samplesize.cross.approx <- function(sig.level=0.05, power=0.8,
delta, sigma, theta, alternative=c("two.sided", "one.sided"))
{
alternative <- match.arg(alternative)
tside <- switch(alternative, one.sided=1, two.sided=2)
Za <- qnorm(1-sig.level/tside)
Zb <- qnorm(power)
np <- 2*((Za+Zb)/(delta/sigma))^2
nc.approx <- np/(2*(1+theta**2))
NOTE <- "n is number in *each* group"
METHOD <- "t-test sample size for cross-over trial design"
structure(list("n(parllel)"=np, "n(cross-over)"=nc.approx,
delta=delta, sigma=sigma, sig.level=sig.level, power=power,
alternative=alternative, note=NOTE,  method=METHOD),
class="power.htest")
}

並行群間試験の n は簡易的な方法では98.11、その結果を用いたクロスオーバー試験の簡易的なサンプルサイズ計算は24.53で、より正確な方法による上記の24.77と1 は違わない。

丸めると25例。

クロスオーバー試験の正確なサンプルサイズ計算は25.53なので、まるめると26例で違いは1例。

> samplesize.cross.approx(delta=10, sigma=25, theta=1)
t-test sample size for cross-over trial design
n(parllel) = 98.111
n(cross-over) = 24.52775
delta = 10
sigma = 25
sig.level = 0.05
power = 0.8
alternative = two.sided
NOTE: n is number in *each* group

結果としては、正確な方法とほとんど差がなく、実際には1例少ない程度のため、実用には問題ないと考える。

これを使ってエクセルファイルも作成してみた。

よければどうぞ。

クロスオーバー試験 平均値の差の検定 サンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

使い方動画解説。

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

まとめ

クロスオーバー試験は、ウォッシュアウトをどうするかという問題はあるものの、必要サンプルサイズが大幅に約1/4~1/5に減る。

被験者を集めにくい試験の場合は、検討する価値はある試験デザインだ。

参考文献

丹後俊郎著 無作為化比較試験 朝倉書店
p.47 並行群間比較試験
p.182 クロスオーバー試験

医学統計学シリーズ 5
新版 無作為化比較試験 ―デザインと統計解析― (医学統計学シリーズ5)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (1件)

コメントする

目次