統計ER

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

非劣性試験のサンプルサイズ計算 生存時間データの場合

非劣性試験のサンプルサイズ計算

生存時間データの場合

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


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

非劣性試験のサンプルサイズ計算 生存時間データの場合 例 1

tが、観察期間。

S1とS0が、それぞれ治療群とコントロール群の生存率。

dFが、Freedmanの方法による各群必要な死亡症例数。

dSが、Schoenfeldの方法による各群必要な死亡症例数。

Delta.S0が、非劣性マージン。

R スクリプトは以下のようになる。

sample.size.cox.noninf <- function(t,S1,S0,Delta.S0,
alternative=c("one.sided","two.sided"),power=.8,
sig.level=.05){
alternative <- match.arg(alternative)
tside <- switch(alternative, one.sided=1, two.sided=2)
beta <- log(log(S1)/log(S0))
H1 <- -1*log(S1)/t
H0 <- -1*log(S0)/t
HR <- H1/H0
H0.prime <- -1*log(S0-Delta.S0)/t
HR.prime <- H1/H0.prime
Za <- qnorm(sig.level/tside, lower.tail=FALSE)
Zb <- qnorm(power)
dF <- (Za+Zb)^2*(HR.prime+1)^2/(2*(HR.prime-1)^2)
nF <- dF/(((1-S1)+(1-S0))/2)
dS <- 2*(Za+Zb)^2/((log(HR.prime))^2)
nS <- dS/(((1-S1)+(1-S0))/2)

NOTE <- "n is number in *each* group"
METHOD <- "Sample Size of Cox Model (noninferiority)"
structure(
list(
"Death (Freedman)" = dF,
"Number (Freedman)" = nF,
"Death (Schoenfeld)" = dS,
"Number(Schoenfeld)" = nS,
"Survival trt(S1)" = S1,
"Survival ctl(S0)" = S0,
"Noninf. margin"= Delta.S0,
"Hazard trt(H1)" = H1,
"Hazard ctl(H0)" = H0,
"H0 w/ margin" = H0.prime,
"Hazard ratio(HR)" = HR,
"HR w/ margin" = HR.prime,
"Follow up(y)" = t,
sig.level = sig.level,
power = power,
alternative = alternative,
note = NOTE,
method = METHOD),
class = "power.htest")
}

非劣性マージンの考え方はこちらを参照。

toukeier.hatenablog.com

観察期間5年、治療群の生存率が80%、コントロール群の生存率が65%、非劣性マージンは相対10%で、0.065=6.5%として、両側検定とすると、

  • Freedmanの方法では、一群84例必要、
  • Schoenfeldの方法では、一群75例必要

と計算される。

> sample.size.cox.noninf(t=5, S1=0.8, S0=0.65, Delta.S0=0.065, alternative="two.sided")

     Sample Size of Cox Model (noninferiority) 

  Death (Freedman) = 23.09411
 Number (Freedman) = 83.97858
Death (Schoenfeld) = 20.42905
Number(Schoenfeld) = 74.28746
  Survival trt(S1) = 0.8
  Survival ctl(S0) = 0.65
    Noninf. margin = 0.065
    Hazard trt(H1) = 0.04462871
    Hazard ctl(H0) = 0.08615658
      H0 w/ margin = 0.1072287
  Hazard ratio(HR) = 0.5179954
      HR w/ margin = 0.4162012
      Follow up(y) = 5
         sig.level = 0.05
             power = 0.8
       alternative = two.sided

NOTE: n is number in *each* group

Freedmanの方法はSchoenfeldの方法よりいつも大きめのサンプルサイズになる。

Schoenfeld式の結果は、サンプルサイズを過小評価しているという指摘がある。

安全確実に見積もるならFreedmanの方法、症例があまり集まりそうでない場合はSchoenfeldの方法という判断基準でよいと思う。

非劣性試験のサンプルサイズ計算 生存時間データの場合 例 2

試験デザインは試験薬と対照薬の2投与群の無作為比較試験。

追跡期間5年で、主要評価項目はOverall survival。

試験薬のOverall survivalの非劣性を証明するための必要サンプルサイズを算出したい。

想定される5年生存率は両群とも95%で、非劣性マージンは5%に設定、片側α=0.05、検出率=0.8を考えている。

実際に計算してみると、Freedman式では、520例必要と計算された。

Schoenfeld式では、478例必要と計算された。

> sample.size.cox.noninf(t=5, S1=0.95, S0=0.95, Delta.S0=0.05, alternative="one.sided")

     Sample Size of Cox Model (noninferiority) 

  Death (Freedman) = 25.95087
 Number (Freedman) = 519.0175
Death (Schoenfeld) = 23.86386
Number(Schoenfeld) = 477.2773
  Survival trt(S1) = 0.95
  Survival ctl(S0) = 0.95
    Noninf. margin = 0.05
    Hazard trt(H1) = 0.01025866
    Hazard ctl(H0) = 0.01025866
      H0 w/ margin = 0.0210721
  Hazard ratio(HR) = 1
      HR w/ margin = 0.486836
      Follow up(y) = 5
         sig.level = 0.05
             power = 0.8
       alternative = one.sided

NOTE: n is number in *each* group

かなり膨大な症例数である。

こういう場合は、想定に無理があると考えたほうが良い。

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


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

非劣性試験のサンプルサイズ計算 生存時間データの場合 例 3 追跡期間を延長する

追跡期間を10年にするとどうなるか?

その他の条件は同じで、想定される5年生存率は両群とも95%で、非劣性マージンは5%に設定、片側α=0.05、検出率=0.8とする。

わかっている生存率が5年生存率なので、10年まで観察した時の生存率を指数関数を使って予測する。

## 5年生存率をRとする
R <- 0.95
## 1年死亡率を計算
(r <- 1-R^(1/5))
## 10年生存率を計算
(1-r)^10

結果、10年生存率は0.9025(90.25%)と計算された。

> ## 5年生存率をRとする
> R <- 0.95
> ## 1年死亡率を計算
> (r <- 1-R^(1/5))
[1] 0.01020622
> ## 10年生存率を計算
> (1-r)^10
[1] 0.9025

それでは、10年生存率 0.9025 を使って、サンプルサイズを計算してみる。

結果は、Freedman式で671例、Schoenfeld式で650例と計算された。

5年観察のときよりも、たくさんの人数が必要になった。

> sample.size.cox.noninf(t=10, S1=0.9025, S0=0.9025, Delta.S0=0.05, alternative="one.sided")

     Sample Size of Cox Model (noninferiority) 

  Death (Freedman) = 65.40619
 Number (Freedman) = 670.8327
Death (Schoenfeld) = 63.33536
Number(Schoenfeld) = 649.5934
  Survival trt(S1) = 0.9025
  Survival ctl(S0) = 0.9025
    Noninf. margin = 0.05
    Hazard trt(H1) = 0.01025866
    Hazard ctl(H0) = 0.01025866
      H0 w/ margin = 0.01595821
  Hazard ratio(HR) = 1
      HR w/ margin = 0.6428453
      Follow up(y) = 10
         sig.level = 0.05
             power = 0.8
       alternative = one.sided

NOTE: n is number in *each* group

試験群と対照群の生存率に差がない場合、劣らないことを示すのは簡単だろうと思うかもしれないが、統計学的に非劣性を証明するにはかなり大変で、巨大な試験になる。

非劣性試験のサンプルサイズ計算 生存時間データの場合 エクセルで

エクセルで計算できるようにした。

よければ下記からどうぞ。

happyhappygk.base.ec

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

よかったらこちらもどうぞ。

youtu.be

まとめ

非劣性試験のサンプルサイズ計算を生存時間データの場合を解説した。

参考になれば。

参考文献

浜田&藤井 生存時間解析における症例数設計
第22回 日本SASユーザー会総会および研究発表会 論文集
2003年7月31日~8月1日 東京

非劣性試験のサンプルサイズ計算 生存時間データの場合 EZRで【動画】

EZRでの計算の仕方解説動画。

よければどうぞ。

youtu.be

おすすめ書籍

EZR公式マニュアル