用于预测模型可视化的列线图(Nomogram,诺模图)已为大家所熟知,很多朋友在自己的文章中也用过。不过,大家使用的列线图一般是下图这样的(见图1)。



java nomogram预测模型 nomogram预测模型怎么做_High


图1. 普通列线图

对于这样的列线图,观赏性可能要大于实用性。如果让你用这样的图去说明某特征患者的3年生存率是多少,你会怎么做?拿着直尺画垂直线,然后将各个特征对应的points加起来,根据Total points再画垂直线吗?这样的话,实用性和可操作性可就太低了。或许,你会说可以在列线图上加垂直的网格线,像下图这样(见图2)。但,还是需要手动计算,且精确性也不好。

java nomogram预测模型 nomogram预测模型怎么做_java nomogram预测模型_02

图2. 改进版列线图


总而言之,这样的列线图解释起来和实际运用起来都有点麻烦。那如何才能让列线图发挥实用性呢?说到这里,肯定会有朋友想到R package:regplot,regplot可以绘制出交互式列线图,是一个很好的解决方案;有的朋友还会想到另外一个R package:nomogramEx,它配合常用的列线图使用,可以得到一个Total points的计算公式。

今天,暂时不说上述两个R packages,说说另外一个R package:DynNom,即动态列线图。这个R package使用起来很简单,在建立模型后直接使用即可。下面以骨髓异常增生综合征(MDS)患者的生存资料为例,简单介绍一下DynNom的使用

根据2019年新发布的MDS诊疗指南和前期的变量筛选,多因素Cox回归模型纳入了年龄分组(Agecat:≤44、45-64、≥65)、修订版国际预后评分系统(IPSS-R:Lower-risk、Int-risk、High-risk)、基因是否突变(TP53、EZH2、SF3B1、IDH1)6个变量。使用coxph( )建立的模型情况如下图。


java nomogram预测模型 nomogram预测模型怎么做_动态列_03

图3. 多因素Cox回归模型结果

接下来,我们根据已建立的模型应用nomogram( )先绘制了如图1所示的普通列线图。在这里我们不妨先试着算一下年龄≥65、IPSS-R为High-risk、TP53未突变、SF3B1突变、EZH2和IDH1未突变的患者Total points和1-year survival probability。根据图1,大概得知具有上述特征患者的Total points和1-year survival probability分别约为190和0.72。下面开始用DynNom ( )绘制动态列线图,主要代码如下:

fcox <- cph(Surv(time, status) ~ Agecat + IPSSR + TP53 + SF3B1 + EZH2 + IDH1, surv=T, data=dat)

DynNom(fcox, dat) ##注意,数据框的名字不要用data,会报错(遇到过这一问题)


java nomogram预测模型 nomogram预测模型怎么做_动态列_04

图4. 动态列线图

代码运行后会生成一个动态网页,如图4。在图的左边是患者特征,就像excel的下拉菜单,可以选择不同的亚组。选择相应的特征后,点击Predict按钮,即可生成上图右侧的生存率及其95%置信区间;勾选左侧下方的Predicted Survival at this Follow Up,拖动按钮,即可得到不同随访时间的生存率和生存曲线。另外点击上部的Numerical Summary和Survival Plot可以得到与上图对应的数据表格和生存曲线,如图5、图6。


java nomogram预测模型 nomogram预测模型怎么做_列的数目比列的名字要多_05

图5. 不同特征和随访时间的患者对应的生存率

java nomogram预测模型 nomogram预测模型怎么做_High_06

图6. 不同特征和随访时间的患者生存曲线

前面我们根据图1计算过一个患者的1年生存率(约0.72),现在请看图5的第一行。我们可以看到,具有前述特征的患者1年生存率为0.730(95%CI:0.620~0.860)。这里不仅给出了一个精确的数字,而且给出了95%置信区间。这么一看,是不是要比普通的列线图更具有操作性和实用性呢?

除了Cox模型,DynNom还可以用于线性模型(lm)、logistic模型(lrm)、广义线性模型(glm)、广义相加模型(gam)等的预测结果可视化,用法也是一样的简单直接。

总结一下,从上面的介绍可知,动态列线图(Dynamic Nomogram)可以很好的解决列线图好看而不好用的问题,同时还将生存曲线融合了进来,可以说是功能多样化了。但是,问题来了,这样的图如何放到文章里呢?有人说可以生成在线网页使用。