1ROC曲線のサンプルサイズの計算をしたい!

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

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

ROC曲線分析のサンプルサイズ計算をしたい。

こんなときどうするか?

 

2018年8月15日追記

パッケージの作者の論文を改めて読んで、 片側検定が適切と思い、 スクリプトと結果を全面的に改訂。

再度確認を。

ROC曲線分析のサンプルサイズ計算はどうやるか?

統計ソフトRを使う。

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

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

install.packages("pROC")

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

library(pROC)

AUC(Area Under the Curve)が0.8、検出力0.90、有意水準5%、片側検定、 疾患あり、なしが1:1とすると 14例ずつで、合計28例必要と計算される。

AUCが0.5の時に、凸なし(対角線様)になる。 つまり、検査として役に立たないということになる。

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

toukeier.hatenablog.com

# 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")
> 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例が必要。

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

power.roc.test(auc=0.80, power=0.90, alternative="one", kappa=2)
> power.roc.test(auc=0.80, power=0.90, 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

ROC曲線サンプルサイズ計算に必要なAUCとPowerはどう決める?

特に決まりはない。

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

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

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

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

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

> 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(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

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

Powerを0.8に下げると、 14例ずつだったものが、 10例ずつになる。

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

Powerを0.95に上げると、 14例ずつだったものが、 17例ずつに変わる。

> 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

> 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で行う方法を紹介した。

pROCライブラリを使って計算できる。

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

参考文献

Website: PubMed

Website: Clinical Chemistry