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

にほんブログ村 科学ブログ 数学へ

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

従来の薬と新薬とか、 方法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

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

samplesize <- function(alpha, power, delta, sigma){
Za <- qnorm(1-alpha/2)
Zb <- qnorm(power)
n <- 2*((Za+Zb)/(delta/sigma))**2
c("Alpha"=alpha, "Power"=power, "Delta"=delta, "Sigma"=sigma, "n"=n)
}

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

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

> samplesize(alpha=0.05, power=.8, delta=10, sigma=25)
 Alpha  Power  Delta  Sigma      n 
 0.050  0.800 10.000 25.000 98.111 

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

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

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

samplesize.cross <- function(alpha, power, delta, sigma, theta, rep.level=10^-8){
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-alpha/2, 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
}
print(c("Alpha"=alpha, "Power"=power, "Delta"=delta, "Sigma"=sigma))
print(c("n(parllel)"=np, "n(cross-over)"=nc.approx, "n(cross-over exact)"=nc.exact))
print(c(yy))
}

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

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

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

> samplesize.cross(alpha=.05, power=.8, delta=10, sigma=25, theta=1.5)
Alpha Power Delta Sigma 
 0.05  0.80 10.00 25.00 
         n(parllel)       n(cross-over) n(cross-over exact) 
           99.08057            15.24316            16.12026 
[1] 16.18707 16.11550 16.12060 16.12024 16.12026 16.12026 16.12026  0.00000

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

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

> samplesize.cross(alpha=.05, power=.8, delta=10, sigma=25, theta=1)
Alpha Power Delta Sigma 
 0.05  0.80 10.00 25.00 
         n(parllel)       n(cross-over) n(cross-over exact) 
           99.08057            24.77014            25.53465 
[1] 25.56813 25.53323 25.53471 25.53464 25.53465 25.53465  0.00000  0.00000

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

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

まとめ

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

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

参考文献

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

新版