MENU

【無料プレゼント付き】学会発表・論文投稿に必要な統計を最短で学ぶことができる無料メルマガ

R で ROC 曲線分析に必要なサンプル数を計算する方法

ROC曲線分析をしたいが、何人のデータを集めたらいいかわからない。

こんなときどうするか?

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

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

目次

ROC 曲線分析に必要なサンプル数の計算を R で行う準備

まずpROCパッケージをインストールする。

インストールは一回でOK。

install.packages("pROC")

毎回呼び出しのためlibrary()を実施。

library(pROC)

ROC 曲線分析に必要なサンプル数を計算するのに必要な数値

ROC曲線分析のサンプルサイズ計算に必要な数値は、AUC (Area Under the Curve) の見積もり値と、検出力だ。

AUCが0.5の時に、凸なしで、対角線のようになる。

この場合は、検査として役に立たない。

AUCは、0.5よりも大きいことが大前提で、仮説検定は帰無仮説は0.5以下、対立仮説は0.5超とするのが妥当なため、片側検定が望ましい。

以下も参照。

たとえば、AUCが0.8、検出力0.90、有意水準5%、片側検定、疾患あり、なしが1:1とする。

  • AUC=0.80
  • power=0.90
  • Significant level=0.05
  • ratio of normal to abnormal = 1:1
  • one-sided test

このとき以下のようなスクリプトを書く。

power.roc.test(auc=0.80, power=0.90, alternative="one")

結果として、疾患ありもなしも、13.38553切り上げて14例ずつと計算される。

> power.roc.test(auc=0.80, power=0.90, alternative="one")

     One ROC curve power calculation 

         ncases = 13.38553
      ncontrols = 13.38553
            auc = 0.8
      sig.level = 0.05
          power = 0.9

疾患なしが2、疾患ありが1とすると、21例と11例がそれぞれ必要と計算され、合計32例が必要となる。

疾患なし:ありの比はkappa=という変数で指定する。

> power.roc.test(auc=0.8, power=0.9, alternative="one", kappa=2)

     One ROC curve power calculation 

         ncases = 10.34798
      ncontrols = 20.69596
            auc = 0.8
      sig.level = 0.05
          power = 0.9

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

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

ROC 曲線分析のサンプル数計算に必要な AUC と検出力はどう決めるか

特に決まりはない。

研究者が良かれと思う基準で決めるしかない。

先行研究がある場合は大いに参考になる。

AUCが1に近いと予想される場合、必要なサンプルサイズは小さくなる。

以下に、上記の条件(AUC = 0.8, 検出力 = 0.9 で、疾患あり・なしともに 14 例ずつ必要)から、AUC や検出力を変えると、必要サンプル数はどのように変わるかを示す。

AUCを 0.8 から 0.9 にすると、14例ずつだったものが、7例ずつになる。

> power.roc.test(auc=0.90, power=0.90, alternative="one")

     One ROC curve power calculation 

         ncases = 6.124355
      ncontrols = 6.124355
            auc = 0.9
      sig.level = 0.05
          power = 0.9

power.roc.test() の作成者は、患者でも対照でも、必要サンプルサイズが10例を下回ったら、最低でも10例サンプリングするのが望ましいと勧めている。

AUCが0.5に近いと予想すると、必要なサンプルサイズは大きくなる。

AUCを 0.8 から 0.6にすると、14例ずつだったものが、135例ずつになる。

> power.roc.test(auc=0.60, power=0.90, alternative="one")

     One ROC curve power calculation 

         ncases = 134.638
      ncontrols = 134.638
            auc = 0.6
      sig.level = 0.05
          power = 0.9

検出力を下げると必要なサンプルサイズは小さくなる。

検出力を0.9 から 0.8 に下げると、14例ずつだったものが、10例ずつになる。

> power.roc.test(auc=0.80, power=0.80, alternative="one")

     One ROC curve power calculation 

         ncases = 9.933712
      ncontrols = 9.933712
            auc = 0.8
      sig.level = 0.05
          power = 0.8

検出力を上げると必要なサンプルサイズは大きくなる。

検出力を 0.9 から 0.95に上げると、14例ずつだったものが、17例ずつに変わる。

> power.roc.test(auc=0.80, power=0.95, alternative="one")

     One ROC curve power calculation 

         ncases = 16.62344
      ncontrols = 16.62344
            auc = 0.8
      sig.level = 0.05
          power = 0.95

ROC 曲線分析に必要なサンプル数の計算を自前 R スクリプトで行う

power.roc.test 関数を使わず、参考文献にある計算式を R スクリプトに起こして、以下のような自前関数を作った

sample.size.one.roc <- function(auc, sig.level=.05, power=.8,
                                alternative="one.sided",
                                cpratio=1){
  alternative <- match.arg(alternative)
  tside <- switch(alternative, one.sided=1, two.sided=2)
  A <- qnorm(auc) * 1.414
  V <- (0.0099*exp(-1*A^2/2)*((5*A^2+8)+(A^2+8)/cpratio))
  Za <- qnorm(sig.level/tside, lower.tail=FALSE)
  Zb <- qnorm(power)
  nD <- (Za*sqrt(0.0792*(1+1/cpratio))+Zb*sqrt(V))^2 / (auc-0.5)^2
  nC <- nD*cpratio
  METHOD <- "One ROC curve sample size calculation"
  structure(list(ncases=nD, ncontrols=nC, auc=auc, 
                 sig.level=sig.level, power=power,
                 alternative=alternative, 
                 Cont.Pts.ratio=cpratio, method=METHOD),
            class="power.htest")
}

以下のように auc, power, cpratio(対照・患者比)を指定すると、上記と同じ計算結果が得られるので、興味あれば試してみてほしい

sample.size.one.roc(auc=0.8, power=0.9)
sample.size.one.roc(auc=0.8, power=0.9, cpratio=2)
sample.size.one.roc(auc=0.9, power=0.9)
sample.size.one.roc(auc=0.6, power=0.9)
sample.size.one.roc(auc=0.8, power=0.8)
sample.size.one.roc(auc=0.8, power=0.95)

ROC 曲線分析に必要なサンプル数の計算をエクセルで行う

上記の計算をエクセルでも行えるようにした。

よければ。

ROC曲線のためのサンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP

以下は、使い方動画。

ROC 曲線分析に必要なサンプル数の計算をアプリで行う

デスクトップアプリはこちら

ROC 曲線サンプルサイズ計算アプリ【Win 版】

ROC 曲線サンプルサイズ計算アプリ【Mac 版】

引用文献情報

pROC パッケージの引用文献情報は、以下のとおり

Xavier Robin, Natacha Turck, Alexandre Hainard, Natalia Tiberti,
  Frédérique Lisacek, Jean-Charles Sanchez and Markus Müller (2011).
  pROC: an open-source package for R and S+ to analyze and compare ROC
  curves. BMC Bioinformatics, 12, p. 77.  DOI: 10.1186/1471-2105-12-77
  <http://www.biomedcentral.com/1471-2105/12/77/>

エクセルファイルの引用文献は、以下の論文である

ROC curves in clinical chemistry: uses, misuses, and possible solutions

まとめ

ROC曲線分析のサンプルサイズ計算を R で行う方法を紹介した。

pROCパッケージを使って計算できる。

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

予想 AUC と検出力をどうするかを、先行研究を踏まえて決めておく必要がある。

参考文献

ROC curves in clinical chemistry: uses, misuses, and possible solutions

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

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

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

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

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

コメント

コメント一覧 (1件)

コメントする

目次