目录
1.二分类结果的评价指标
基本概念:
灵敏度:指患者检测结果为阳性的百分率,为真阳性率。
特异度:未患病的人检出为阴性的百分率,为真阴性率。
阳性预测值(positive predictive value):指在检测结果中为阳性的情况下受试者患病的比例。
阴性预测值(negative predictive value):指在检测结果中为阴性的情况下受试者不患病的比例。
预测值受患病率的影响,患病率越低,阳性预测值越低,阴性预测值越高。灵敏度和特异度不受患病率的影响,但是受到疾病严重程度影响。
一项研究中100名患病,100名不患病,某一检测的灵敏度为80%,特异度为90%。
table1=as.table(cbind(c(80,20),c(10,90)))
dimnames(table1)=list("检测结果"=c("阳性","阴性"),"金标准"=c("有病","无病"))
table1
mosaicplot(t(table1),col=c("red","white"),main="")
灵敏度为左侧红色部分的相对高度,特异度为右侧白色部分的相对高度。阳性预测值是左侧红色占所有红色部分的比例。阴性预测值为右侧白色占所有白色的比例。
真实中的患病率比较低,比如患病率为5%,调查社区2000人,有100人患病,1900人不患病,灵敏度为80%,特异度 90%,则a=80,b=190,c=20,d=1710
table2=as.table(cbind(c(80,20),c(190,1710)))
dimnames(table2)=list("检测结果"=c("阳性","阴性"),"金标准"=c("有病","无病"))
table2
mosaicplot(t(table2),col=c("red","white"),main="")
阳性预测值明显降低,阴性预测值升高,所以罕见病进行临床诊断必须要谨慎。
综合评价指标:
1.正确率:检测结果与金标准符合的程度
虽然正确率能反映一项诊断试验能区分患者与非患者的能力,但是很大程度受限于人群患病率。患病率较低时,仍然可以有较高的正确率。
2.约登指数
约登指数值在-1到1之间,其值越大表明诊断的真实性越好,为负值时,诊断试验没有任何临床价值。
3.似然比:患者与非患者中出现某种检验结果的概率比
似然比等于1说明在患者和非患者中得到该检验结果的概率时相同的,那么该检验无诊断价值,似然比离1越远表明根据该检验结果进行诊断的准确性越高。
2.ROC及曲线下面积
ROC曲线:以真阳性率(灵敏度)为纵坐标,以假阳性率(误诊率)为横坐标所绘制的曲线。
数据包含113例蛛网膜下腔出血患者的检测数据和预后。
- 1.求解曲线下面积
rm(list=ls())
library(pROC)
data(aSAH)
attr(aSAH,"var.labels") <- c("6个月格拉斯哥评分","结局","性别","年龄","入院时的wfns评分","诊断试验指标","血清指标")
library(epiDisplay)
des(aSAH)
str(aSAH)
roc1 <- roc(outcome~s100b,data=aSAH)#创建一个roc对象
attributes(roc1)#内容包括了敏感度,特异度,auc等等
roc1$auc
- 2.绘制ROC曲线
plot(1-roc1$specificities,roc1$sensitivities,type = "l",lwd=2)
#或pROC包中的plot.roc
plot.roc(roc1,print.auc = TRUE,auc.polygon = TRUE,
grid = c(0.1,0.2),grid.col = c("green","red"),
auc.polygon.col = "lightblue",print.thres = TRUE)
#print.auc是否显示曲线下面积,auc.polygon是否显示曲线下区域,
#auc,polygon.col曲线下区域颜色,print.thres是否挑选一组阈值显示,TURE:显示灵敏度+特异度最高的值,约登指数
- 3.选择合适的截断点
(1)找到约登指数最大的点
roc2 <-data.frame(threshold=roc1$thresholds,
sensitivity=roc1$sensitivities,
specificity=roc1$specificities)
#thresholds是截断点
roc2$youden <- roc2$sensitivity+roc2$specificity-1
roc2
which.max(roc2$youden)
roc2[18,]
(2)利用coord函数计算出最大值
coords(roc1,"best",transpose=F)
coords(roc1,"best",best.method="closest.topleft",transepose=F)
不指定best.method的时候默认为约登指数,closest topleft为左上角对应的截点值。
- 4.ROC曲线下面积的置信区间
使用函数ci.auc()求得:
ci.auc(roc1$auc)
95% CI: 0.6301-0.8326 (DeLong)可以见通过Delong法求得置信区间不包括0.5,具有统计学差异。
- 5.两个ROC的比较
比较上述题目中两种血清学检测s100b和ndka与结局指标之间的诊断效果
roc1 <- roc(outcome~s100b,data=aSAH)
roc2 <- roc(outcome~ndka,data=aSAH)
roc.test(roc1,roc2)
roc.test(roc1,roc2,method="venkatraman")
默认的Delong非参数检验法,还可以选择Venkatraman回归模型法,bootstrap法。
注意:roc.test()默认进行两组相关检测结果的AUC比较,对于两组独立的诊断试验的比较,只需要将函数的参数paired设为FALSE。
plot.roc(roc1)
lines(roc2,col="red")
test <- roc.test(roc1,roc2)
text(0.5,0.5,labels=paste("p-value=",round(test$p.value,3)))
legend("bottomright",legend = c("s100b","ndka"),col=c("black","red"),lwd=2)
- 6.logistic回归的ROC曲线
二分类logistic回归模型可以得到结局事件的预测模型,从而判断结局事件是否发生。
案例:自发流产和人工流产与不孕事件发生风险:
data(infert)
str(infert)
attach(infert)
fit <- glm(case~induced+spontaneous,family=binomial,data=infert)
summary(fit)
library(epiDisplay)
logistic.display(fit)
lroc(fit,line.col = "red",lwd=2)
模型的AUC约为0.729,预测的准确性一般