作者anovachen ( )
看板Statistics
标题Re: [问题] ROC曲线结果
时间Wed Dec 11 16:22:19 2013
※ 引述《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)
: 不得其解~ 希望各位帮忙解惑 感恩
1F:→ gsuper:(比如BMI 22 加起来为 0.92) , 这句话代表 AUC = 0.9212/06 16:16
2F:→ gsuper:sensitivity+specificity 最大的点 , 是一个选项12/06 16:17
3F:→ gsuper:其他还看过相乘开根号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
4F:→ gsuper:恩 AUC是面积 当时写的不对 12/11 16:23
5F:→ gsuper:反正概念差不多就那样 图画出来就立刻学会了 12/11 16:24
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)