参考bilibili《R语言临床预测模型》——8二元Logistic模型列线图绘制
列线图,又称诺莫图(Nomogram图),它是建立在多因素回归分析的基础上,将多个预测指标进行整合,然后采用带有刻度的线段,按照一定的比例绘制在同一平面上,从而用以表达预测模型中各个变量之间的相互关系。
列线图的基本原理,是通过构建多因素回归模型(常用的回归模型,例如Cox回归、Logistic回归等),根据模型中各个影响因素对结局变量的贡献程度(回归系数的大小,给每个影响因素的每个取值水平进行赋分,然后再将各个评分相加得到总评分,最后通过总评分与结局事件发生概率之间的函数转换关系,从而计算出该个体结局事件的预测值。
列线图主要包括三部分:
- 每一个变量对应的线段上都标注了刻度,代表了该变量的可取值范围,而线段的长度则反映了该因素对结局事件的贡献大小。
- 变量相应的得分,即图中最上方的Points,表示每个变量在不同取值下所对应的得分,所有变量取值后对应的单项分数加起来合计的总得分即Total Points。
- 预测事件的发生概率。
预处理
install.packages("rJava")
library(rJava)
install.packages("xlsxjars")
library(xlsxjars)
install.packages("xlsx")
library(xlsx)
data<-read.xlsx("C:/Users/Administrator/Desktop/r.xlsx",1)
data$y<-factor(data$y,levels=c(0,1),labels=c("挂了","没挂"))
#将二分裂变量处理成factor
#数据打包
install.packages("rms")
library(rms)
db=datadist(data)
options(datadist="db")
#绘制简易列线图
fit<-lrm(y~a1+a2+a3+a4,data=data)
nom1<-nomogram(fit,
fun=function(x)1/(1+exp(-x)),
lp=T,#显示线性概率
fun.at=c(0.1,0.3,0.5,0.7,0.9),
funlabel="Risk")#坐标轴名称
install.packages("Cairo")
library(Cairo)
plot(nom1)
简易列线图改进1
nom2<-nomogram(fit,
fun=function(x)1/(1+exp(-x)),
lp=T,
fun.at=c(0.1,0.3,0.5,0.7,0.9),
conf.int=c(0.1,0.7),
funlabel="Risk")
plot(nom2,
lplabel='Linear Predictor',#设置线性概率坐标轴名称
fun.side=c(1,3,1,3),#坐标轴刻度位置,数量与自变量数相同,本文有4各自变量
col.grid=c("red","green"),#垂直参考线的颜色
col.conf=c("blue","yellow"),#置信区间的颜色
conf.space=c(0.1,0.5))#设置置信区间条在两条坐标轴之间的位置
简易列线图改进2
install.packages("regplot")
library(regplot)
nom3<-regplot(fit,
observation=data[1,],#指定第几个观测
center=TRUE,#将每个变量设置不从0开始
title="Nomogram",#设置标题
points=TRUE,#point最大刻度设置为100
odds=FALSE,#设置是否显示OR
showP=TRUE,#显示变量是否存在统计学意义
rank="sd",#按回归系数的SD变量排序
clickable=FALSE)#是否可以点击进行交互