私は、受信者オペレーター特性(ROC)の下の領域のp値を計算する方法を見つけるのに苦労しています。連続変数と診断テスト結果があります。AUROCが統計的に有意であるかどうかを見たいです。
ROC曲線を扱う多くのパッケージを見つけました:pROC、ROCR、caTools、検証、Epi。しかし、ドキュメントを読んでテストするのに何時間も費やした後でも、私はその方法を見つけることができませんでした。見逃したばかりだと思う。
私は、受信者オペレーター特性(ROC)の下の領域のp値を計算する方法を見つけるのに苦労しています。連続変数と診断テスト結果があります。AUROCが統計的に有意であるかどうかを見たいです。
ROC曲線を扱う多くのパッケージを見つけました:pROC、ROCR、caTools、検証、Epi。しかし、ドキュメントを読んでテストするのに何時間も費やした後でも、私はその方法を見つけることができませんでした。見逃したばかりだと思う。
回答:
あなたの状況では、ROC曲線をプロットし、その曲線の下の面積を計算することは問題ありませんが、これは一次分析自体ではなく、主分析を補足するものと考えるべきです。代わりに、ロジスティック回帰モデルを適合させます。
ロジスティック回帰モデルには、モデル全体のテストが標準装備されます。(実際には、変数が1つしかないため、そのp値はテスト結果変数のp値と同じになります。)そのp値は後のものです。このモデルを使用すると、観測値が病気になる確率を計算できます。受信者動作特性がどのように伝える感度と特異性は、あなたが予測分類に予測確率を変換するために、異なるしきい値を使用する場合、トレードオフになります。予測された確率はテスト結果変数の関数になるため、異なるテスト結果値をしきい値として使用した場合、予測確率はどのようにトレードオフするかを示しています。
ロジスティック回帰にあまり精通していない場合は、インターネット上で利用可能なリソースがいくつかあります(上記のリンクされているウィキペディアのページ以外)。
R
は、UCLA統計ヘルプWebサイトは一般的に優れており、関連ページがここにあります。summary(GLM.1)
必要なものを提供する必要がありanova(GLM.1)
ます。実際にフィットする必要がないヌルモデルに対してそれをテストすると思います。しかし、あなたのやり方は間違いなく機能します、はい。
基本的に、H0 = "AUCは0.5に等しい"をテストします。
これは実際には、H0 =「2つのグループのランクの分布は等しい」ということと同等です。
後者は、Mann-Whitney(Wilcoxon)検定の帰無仮説です(たとえば、Gold、1999を参照)。
つまり、Mann-Whitney-Wilcoxonテストを安全に使用して質問に答えることができます(たとえば、Mason&Graham、2002を参照)。これは、Franck Dernoncourtが言及した検証パッケージがまさに行うことです。
パッケージ検証からroc.area()を使用できます。
install.packages("verification")
library("verification")
# Data used from Mason and Graham (2002).
a<- c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
1991, 1992, 1993, 1994, 1995)
d<- c(.928,.576, .008, .944, .832, .816, .136, .584, .032, .016, .28, .024, 0, .984, .952)
A<- data.frame(a,d)
names(A)<- c("year", "p2")
# For model without ties
roc.area(A$event, A$p2)
戻ります $p.value
[1] 0.0069930071
を使用してpROCで2つのROC曲線を比較できますroc.test()
。これもp値を生成します。さらに、使用roc(..., auc=TRUE, ci=TRUE)
すると、ROCオブジェクトの作成中に、出力のAUCとともに低い信頼区間と高い信頼区間が得られます。これは有用な場合があります。
次は、ガロンあたりのマイル数または車の重量が、装備されているトランスミッションの種類(自動または手動)のより良い予測子であるかどうかをテストするサンプルコードです。
library(pROC)
roc_object_1 <- roc(mtcars$am, mtcars$mpg, auc=T, ci=T) #gives AUC and CI
roc_object_2 <- roc(mtcars$am, mtcars$wt, auc=T, ci=T) #gives AUC and CI
roc.test(roc_object_1, roc_object_2) #gives p-value
重量は、燃料消費量よりもはるかに優れた予測因子であると思われます。ただし、これは2つの曲線を比較するものであり、0.5などの数値に対する単一の曲線ではありません。信頼区間に数値0.5が含まれているかどうかを確認すると、有意差があるかどうかがわかりますが、p値は生成されません。