12. 临床诊断试验评价

目录

1.二分类结果的评价指标

2.ROC及曲线下面积

1.二分类结果的评价指标

基本概念:

灵敏度:指患者检测结果为阳性的百分率,为真阳性率。

\textup{sensitivity}=\frac{a}{a+c}

特异度:未患病的人检出为阴性的百分率,为真阴性率。

特异度=\frac{d}{b+d}

阳性预测值(positive predictive value):指在检测结果中为阳性的情况下受试者患病的比例。

阳性预测值=\frac{a}{a+b}

阴性预测值(negative predictive value):指在检测结果中为阴性的情况下受试者不患病的比例。

阴性预测值=\frac{d}{d+c}

        预测值受患病率的影响,患病率越低,阳性预测值越低,阴性预测值越高。灵敏度和特异度不受患病率的影响,但是受到疾病严重程度影响。

一项研究中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.正确率:检测结果与金标准符合的程度

正确率=\frac{a+d}{a+b+c+d}

虽然正确率能反映一项诊断试验能区分患者与非患者的能力,但是很大程度受限于人群患病率。患病率较低时,仍然可以有较高的正确率。

2.约登指数

约登指数=灵敏度+特异度-1

约登指数值在-1到1之间,其值越大表明诊断的真实性越好,为负值时,诊断试验没有任何临床价值。

3.似然比:患者与非患者中出现某种检验结果的概率比

阳性似然比=\frac{灵敏度}{1-特异度}=\frac{\frac{a}{a+c}}{\frac{b}{b+d}}

阴性似然比=\frac{1-灵敏度}{特异度}=\frac{\frac{c}{a+c}}{\frac{d}{b+d}}

似然比等于1说明在患者和非患者中得到该检验结果的概率时相同的,那么该检验无诊断价值,似然比离1越远表明根据该检验结果进行诊断的准确性越高。

2.ROC及曲线下面积

ROC曲线:以真阳性率(灵敏度)为纵坐标,以假阳性率(误诊率)为横坐标所绘制的曲线。

数据包含113例蛛网膜下腔出血患者的检测数据和预后。

  1. 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
  1. 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:显示灵敏度+特异度最高的值,约登指数
  1. 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为左上角对应的截点值。

  1. 4.ROC曲线下面积的置信区间

使用函数ci.auc()求得:

ci.auc(roc1$auc)

95% CI: 0.6301-0.8326 (DeLong)可以见通过Delong法求得置信区间不包括0.5,具有统计学差异。

  1. 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)

  1.  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,预测的准确性一般

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值