列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者某类事件发生的概率。列线图(Nomogram)可以用于多指标联合诊断或预测疾病发病或进展。近些年来在高质量SCI临床论文中用的越来越多。列线图将回归模型转换成了可以直观的视图,让结果更容易判断,具有可读性,。
我们既往已经介绍了使用使用R语言rms包绘制列线图,今天我们来介绍一下怎么使用R语言DynNom包绘制动态列线图,它的呈现方式比传统列线图更加直接,不用计算分数就可以直接给出结果,废话不多说,立即进入正题,还是使用我们既往的乳腺癌数据,先导入包和导入数据。
library(DynNom)
library(survival)
library(rms)
library(foreign)
bc <- read.spss("E:/r/test/Breast cancer survival agec.sav",
use.value.labels=F, to.data.frame=T)
我们先来看看数据:
age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
删除缺失值,把分类变量转换成因子
bc <- na.omit(bc)
bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)
我们先来使用rms包来绘制一个传统列线图
对数据进行打包
dd <- datadist(bc)
options(datadist="dd")
建立回归方程并且绘制列线图
f1<- cph(Surv(time, status) ~ age +
pathsize+ er + pr + ln_yesno, surv=T, data=bc)
surv <- Survival(f1)
nom <- nomogram(f1, fun=list(function(x) surv(36, x), function(x) surv(60, x),
function(x) surv(120, x)), lp=F, funlabel=c("3-year survival", "5-year survival", "10-year survival"),
maxscale=10, fun.at=c(0.95, 0.9, 0.85, 0.8, 0.75, 0.7, 0.6, 0.5))
plot(nom)
现在来说说怎么绘制动态列线图,当我们建立好回归方程f1后,就可以绘制动态列线图了
DynNom(f1,bc)
接下来会弹出一个页面如下;
我们可以根据自己的需要进行选择,假设我想比较50岁,肿瘤3cm,有淋巴结肿大和没有淋巴结肿大的3年生存率
点击:Predicted Survival,可以转到风险比例的界面
点击按键:Predicted Survival at this Follow Up,在time这里我们可以调整生存时间,获得我们需要的数据
还可以得出很详尽的模型和数据资料
除此COX回归外之外,lm, glm, ols, Glm, lrm, cph, mgcv::gam模型都是可以制作的,有些人可能想问了,那图片怎么导出来,我们可以看到R里面有这样一个地址
我们把它复制下来再浏览器打开,可以看到在网页上也出现一个一模一样的
其实它原理就是调用一个网页来帮我们计算绘图,有了网页数据,我们直接在网页上导出图片就可以了。
OK,今天就说到这里了,其他功能留您自己摸索,其实建立模型后作图非常简单,您可以试试。
更多精彩文章请关注公众号:零基础说科研