大家好,我是阿琛。在常用的临床模型构建中,主要分为两种,包括临床预测模型(Cox回归模型)和临床诊断模型(Logstic回归模型)。在之前的内容中,阿琛给大家介绍了如何使用Nomogram图将临床预测模型可视化,以及Cox回归模型的相关评价指标。 传送门 1. Nomogram图不会画?看了这篇,小白也能轻松看懂搞定; 2. 临床预测模型如何评价?看这篇就够了。 今天是临床模型的第三集临床诊断模型篇,即如何对Logistic回归模型进行评价。
1.建立Logistic预测模型
#install.packages("foreign")
#install.packages("rms")
#install.packages("pROC")
#install.packages("rmda")
#install.packages("nricens")
library(foreign)
library(rms) #构建Logstic模型
library(pROC) #绘制ROC曲线
library(rmda) #绘制DCA曲线
library(nricens) #计算NRI值
setwd("C:\Users\000\Desktop\14_Logstic") #设置工作目录
rt <- read.table("clinical_2.txt",header=T,sep=" ") #读取数据
head(rt) #查看前5行的数据
rt$Age <- factor(rt$Age,labels=c("<60",">=60"))
rt$Gender <- factor(rt$Gender,labels=c("No","Yes"))
rt$Education <- factor(rt$Education,labels=c("Primary","Secondary","Higher"))
rt$Alcohol <- factor(rt$Alcohol,labels=c("No","Yes"))
str(rt)
ddist <- datadist(rt)
options(datadist = "ddist") #使用函数datadist()将数据打包
fit <- glm(Status~Age + Gender + BMI + Education + Alcohol, data=rt,
family = binomial(link="logit"), x=T)
#利用lrm()函数对模型进行拟合
summary(fit) #查看模型拟合结果
2.计算C指数及绘制ROC曲线
Cindex <- rcorrcens(Status~predict(fit), data = rt)
Cindex
gfit <- roc(Status~predict(fit), data = rt)
plot(gfit,
print.auc=TRUE, #输出AUC值
print.thres=TRUE, #输出cut-off值
main = "ROC CURVE", #设置图形的标题
col= "red", #曲线颜色
print.thres.col="black", #cut-off值字体的颜色
identity.col="blue", #对角线颜色
identity.lty=1,identity.lwd=1)
3.基于ggstatspot包的绘制
cal <- calibrate(fit, method="boot", B=1000)
plot(cal,
xlab="Nomogram-predicted probability of nonadherence",
ylab="Actual diagnosed nonadherence (proportion)",
sub=F)
4.绘制DCA曲线
modul<- decision_curve(data= rt,
Status~Age + Gender + BMI + Education + Alcohol,
family = binomial(link ='logit'),
thresholds= seq(0,1, by = 0.01),
confidence.intervals = 0.95)
plot_decision_curve(modul,
curve.names="Nonadherence prediction nomogram", #曲线名称
xlab="Threshold probability", #x轴名称
cost.benefit.axis =FALSE, col= "blue",
confidence.intervals=FALSE,
standardize = FALSE)
5.计算NRI指数
##构建模型
fit_A <- glm(Status~Age + Gender + Education + Alcohol, data = rt, family = binomial(link="logit"),x=TRUE)
fit_B <- glm(Status~Age + Gender + Education + Alcohol + BMI, data = rt, family = binomial(link="logit"),x=TRUE)
NRI <- nribin(mdl.std = fit_A, mdl.new = fit_B,
updown = 'diff',
cut = 0.05, niter = 500, alpha = 0.05)
#计算分类变量计算的NRI,只有概率超过0.011就定义为重分组了
#0.011是根据之前模型C的ROC分析确定的切点
NRI <- nribin(mdl.std = fit_A, mdl.new = fit_B,
updown = 'category',
cut = 0.011, niter = 500, alpha = 0.05)
联系客服