MENU

R で非劣性の生存時間解析に必要なサンプルサイズを計算する方法

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

生存時間データの場合

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

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

目次

非劣性試験のサンプルサイズ計算 生存時間データの場合 例 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")
}

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

観察期間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

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

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

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

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

https://happyhappygk.base.ec/items/26107247

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

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

まとめ

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

参考になれば。

参考文献

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

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

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

よければどうぞ。

おすすめ書籍

EZR公式マニュアル

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

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

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

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

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメントする

目次