专栏名称: Freescience联盟
Freescience联盟是由高校、医院FS公众号和科研技能公众号等百家单位联合创建的科研交流分享平台;联盟的宗旨:“公正至上,自由分享,平等共赢”。欢迎您的关注,让我们共同学习进步!
目录
相关文章推荐
Linux就该这么学  ·  在 CentOS 7 上搭建属于自己的 ... ·  8 小时前  
商业洞察  ·  16300亿灰飞烟灭,特斯拉崩了 ·  2 天前  
FT中文网  ·  若即若离的故乡和那片“无用的土地” ·  2 天前  
51好读  ›  专栏  ›  Freescience联盟

NRI和 IDI的计算方法,再也不用为它们的计算发愁了

Freescience联盟  · 公众号  ·  · 2017-10-06 08:00

正文

本文转自临床流行病学和循证医学公众号

我们前面几期介绍过 NRI Net Reclassification Improvement ,重分类改善指标,)和 IDI Integrated Discrimination Improvement ,综合判别改善指数),两个指标均 用于比较两个指标的诊断能力,一个指标比另外一个指标诊断准确率是否提高。

在诊断试验中, NRI IDI 越来越受到专家的重视,很多诊断指标的比较时要求报告 NRI IDI ,但现行软件多不支持 NRI IDI 的计算,虽然根据公式可以手工计算,但计算起来还是有些麻烦,特别是对 NRI IDI 的假设检验,计算公式较为复杂。

我们应大家的需要,编写了两个指标计算的 R 程序。在此介绍给大家,供有需要者使用。

我们知道 NRI 及其检验 z 值的计算公式是:

对应的 R 程序为:

NRIcalculate=function(m1="dia1",m2="dia2",gold="gold"){

datanri=datanri[complete.cases(datanri),];

for (i in 1:length(names(datanri))){

if (names(datanri)[i]==m1)nm1=as.numeric(i);

if (names(datanri)[i]==m2)nm2=as.numeric(i);

if(names(datanri)[i]==gold)ngold=as.numeric(i);

};

if(names(table(datanri[,nm1]))[1]!="0" ||

names(table(datanri[,nm1]))[2]!="1")stop("指标1诊断值不是0和1");

if(names(table(datanri[,nm2]))[1]!="0" ||

names(table(datanri[,nm2]))[2]!="1")stop("指标2诊断值不是0和1");

if(names(table(datanri[,ngold]))[1]!="0" ||

names(table(datanri[,ngold]))[2]!="1")stop("金标准诊断值不是0和1");

datanri1=datanri[datanri[,ngold]==1,]

table1=table(datanri1[,nm1],datanri1[,nm2]);

datanri2=datanri[datanri[,ngold]==0,]

table2=table(datanri2[,nm1],datanri2[,nm2]);

p1=as.numeric(table1[2,1]/table(datanri[,ngold])[2]);

p2=as.numeric(table1[1,2]/table(datanri[,ngold])[2]);

p3=as.numeric(table2[2,1]/table(datanri[,ngold])[1]);

p4=as.numeric(table2[1,2]/table(datanri[,ngold])[1]);

NRI=round(p1-p2-p3+p4,3);

z=NRI/sqrt((p1+p2)/table(datanri[,ngold])[2]+(p3+p4)/table(datanri[,ngold])[1]);

z=round(as.numeric(z),3);

pvalue=round((1-pnorm(abs(z)))*2,3);

if(pvalue<0.001)pvalue="<0.001";

result=paste("NRI=",NRI,",z=",z,",p=",pvalue,sep= "");

return(result)

}

#以上程序不需要更改

library(foreign);

datanri=as.data.frame(read.spss("D:\\datanri.sav")); #请更改数据存在路径

NRIcalculate(m1="v1",m2="v2",gold="gold");#m1为第一诊断变量名,m2第二诊断变量名,gold为金标准


看不懂上面的程序怎么办,不用着急,您 复制上面的程序,做一些简单的修改即可。

程序先写了一个函数,将数据类型判断和计算全部写进函数,不需要使用者做任何修改。

倒数第 3 行, 加载 foreign 程序包,为了导入其它类型的数据到 R

倒数第 2 行, 导入数据,如果是 SPSS 数据,直接修改 SPSS 数据的存放路径即可,其它类型数据请选择适当的方法导入

倒数第 1 行,使用函数,计算 NRI 及检验检验(检验 NRI 是否等于 0 ); 只将修改相应的变量变量名即可,发 v1 v2 为两个检验变量, gold 为金标准的变量名;

注:变量名必须为英文或英文 + 数字;三个变量必须为二分类变量,均用 1 代表阳性, 0 代表阴性,否则程序会报错。

例如下面这个数据,将数据保存在 D 盘根目录下,命名文件名为 datanri.sav ,变量名为为 v1,v2,gold

使用上方程序运行后,结果如下: NRI=0.42,z=1.787,p=0.074

同样的方法,我们使用 IDI 其及 z







请到「今天看啥」查看全文