統計ER

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

Cox比例ハザードモデルを用いた非劣性試験のサンプルサイズ計算はどうやる?

ブログランキングに参加しています。
まずはぽちぽちっとお願いします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
にほんブログ村 科学ブログ 数学へ

Cox比例ハザードモデルを用いた非劣性試験のサンプルサイズ計算はどうやるか?

統計ソフトRでスクリプトを書いてみた。

Coxの比例ハザードモデル非劣性試験のサンプルサイズ計算

tが、観察期間。

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

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

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

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

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

toukeier.hatenablog.com

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")
}

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

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

と計算される。

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

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

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

> 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

5年間観察 両群5年生存率95% 非劣性マージン5%のサンプルサイズ計算(2020年6月24日更新)

Cox比例ハザードモデルを用いて解析予定の非劣性試験のサンプルサイズを計算したい。

試験デザインは試験薬と対照薬の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

10年間観察 両群5年生存率95% 非劣性マージン5%のサンプルサイズ計算(2020年6月24日更新)

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

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

10年生存率を計算してからサンプルサイズ計算

わかっている生存率が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

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

Cox比例ハザード非劣性試験 サンプルサイズ計算エクセルファイル(2020年6月24日更新)

エクセルファイル購入先リンク

Coxの比例ハザードモデル非劣性試験サンプルサイズ計算用エクセルファイル。よければ下記からどうぞ。

happyhappygk.base.ec

コックス比例ハザード非劣性試験 サンプルサイズ計算【エクセルでサンプルサイズ】【動画】(2020年6月21日追記)

使い方解説動画を公開。よかったらどうぞ。

youtu.be

参考文献

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

EZRでCoxの非劣性試験サンプルサイズ計算【無料統計ソフトEZRで簡単統計】【動画】(2020年10月1日追記)

EZRでの計算の仕方解説動画。よければどうぞ。

youtu.be