Re: [問題] ROC曲線結果
※ 引述《zedan (zedan)》之銘言:
: 請問各位前輩
: 若有一命題"預測有哪些因素的人吃某藥可能會比較有效果"
: 方式是先分"吃藥後自覺有效" 及"無效"兩個group
: 先跑 independnet T test 看那些因素在這兩組中是有顯著差異的
: (比如發現: BMI越重的人吃起來似乎越有效)
: 接下來想跑ROC曲線抓出cutoff point
: (比如抓出BMI 30以上, 可視為吃藥有沒有效的標的)
: 我是參考 http://www2.cmu.edu.tw/~biostat/online/teaching_corner_046-1.pdf
: 結果我發現跑下來 BMI的 sensitivity+specificity 最高是在兩個極端
: (比如:sensitivity+specificity 在BMI 16 及35兩點最大,等於1)
: 這樣是代表統計沒意義嗎, 還是要忽略兩端極值,
: 再中間再找一個 sensitivity+specificity 最大的點
: (比如BMI 22 加起來為 0.92)
: 不得其解~ 希望各位幫忙解惑 感恩
→
12/06 16:16,
12/06 16:16
→
12/06 16:17,
12/06 16:17
→
12/06 16:17,
12/06 16:17
AUC並非0.92
ROC曲線的繪製有點麻煩...
先想像一個情況,我有一個檢驗工具要拿來驗癌症,
這個檢驗工具可測得血中的某癌症指標(A)濃度(假設A濃度越高越有可能罹癌)。
以下是模擬數據:
A濃度 有病 沒病
1 1 9
2 3 7
3 5 5
4 8 2
5 9 1
total 26 24
於是當我設定不同cut-off值,sensitivity和(1-specificity)分別如下
A濃度 SEN SPE 1-SPE
>=1 26/26 0/24 24/24
>=2 25/26 9/24 15/24
>=3 22/26 16/24 8/24
>=4 17/26 21/24 3/24
>=5 9/26 23/24 1/24
使用下列R指令即可繪圖:
SEN<-c(1, 0.961538462, 0.846153846, 0.653846154, 0.346153846)
FSEN<-c(1, 0.625, 0.333333333, 0.125, 0.041666667)
plot(FSEN,SEN,xlab="False Positive", ylab="True Positive", type="l")
至於怎麼用R算AUC...等我查一下資料= =
因為我只有用過SAS和SPSS作ROC曲線...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.173.162.2
→
12/11 16:23, , 1F
12/11 16:23, 1F
→
12/11 16:24, , 2F
12/11 16:24, 2F
R程式碼範例:
#請先安裝pROC package。
install.packages("pROC",repos="http://R-Forge.R-project.org")
library(pROC)
#先建立模擬資料檔(這種手動輸入方法比較笨 = = )
#亦可用模擬邏輯斯迴歸的方法模擬,日後再詳述。
outcome<-c("ca","ca","ca","ca","ca","ca","ca","ca","ca","ca",
"ca","ca","ca","ca","ca","ca","ca","ca","ca","ca","ca","ca",
"ca","ca","ca","ca",
"health","health","health","health","health","health","health",
"health","health","health","health","health","health","health",
"health","health","health","health","health","health","health",
"health","health","health")
conA<-c(1,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,
1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5)
id<-c(1:50)
#把上面的資料整合成一個dataframe。
data<-data.frame(id,outcome,conA)
#以下參數依序為"是否罹癌"、"A濃度",而levels指定control組是"沒有罹癌"
roc(data$outcome,data$conA, levels=c("health","ca"))
結果:
Call:
roc.default(response = data$outcome, predictor = data$conA, levels =
c("health", "ca"))
Data: data$conA in 24 controls (data$outcome health) < 26 cases (data$outcome
ca).
Area under the curve: 0.8045
亦可使用該指令繪圖:
result<-roc(data$outcome,data$conA, levels=c("health","ca"))
plot.roc(result)
※ 編輯: anovachen 來自: 1.173.162.2 (12/11 16:52)
※ 編輯: anovachen 來自: 1.173.162.2 (12/11 16:57)
討論串 (同標題文章)