R语言统计与绘图:基于DynNom包绘制动态列线图(Nomogram)

用于预测模型可视化的列线图(Nomogram,诺莫图)已为大家所熟知,很多朋友在自己的文章中也用过。

不过,大家使用的列线图一般是下图这样的(见图1)。

图1. 普通列线图

对于这样的列线图,观赏性可能要大于实用性。如果让你用这样的图去说明某特征患者的3年生存率是多少,你会怎么做?

拿着直尺画垂直线,然后将各个特征对应的points加起来,根据Total points再画垂直线吗?

这样的话,实用性和可操作性可就太低了。

或许,你会说可以在列线图上加垂直的网格线,像下图这样(见图2)。但还是需要手动计算,且精确性也不太好。

图2. 改进版列线图

总而言之,这样的列线图解释起来和实际运用起来有点麻烦。那如何才能让列线图发挥实用性呢?

说到这里,肯定会有朋友想到regplot包,regplot包可以绘制出交互式列线图,是一个很好的解决方案;

也有的朋友会想到nomogramEx包,它配合常用的列线图使用,可以得到一个Total points的计算公式。

今天,暂时不说上述两个R包,说说另外一个R包:DynNom,即动态列线图。这个R包使用起来很简单,在建立模型后直接使用即可。

下面以骨髓异常增生综合征(MDS)患者的生存资料为例,简单介绍一下DynNom的使用。

根据2019年新发布的MDS诊疗指南和前期的变量筛选,多因素Cox回归模型纳入了变量如下:

年龄分组(Agecat:≤44、45-64、≥65);
修订版国际预后评分系统(IPSS-R:Lower-risk、Int-risk、High-risk);
基因是否突变(TP53、EZH2、SF3B1、IDH1)
等6个变量。

使用coxph()建立的模型情况如下图(见图3)。

图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,会报错(遇到过这一问题)
图4. 动态列线图

代码运行后会生成一个动态网页,如图4。

在图的左边是患者特征,就像excel的下拉菜单,可以选择不同的亚组。

选择相应的特征后,点击Predict按钮,即可生成上图右侧的生存率及其95%置信区间;

勾选左侧下方的Predicted Survival at this Follow Up,拖动按钮,即可得到不同随访时间的生存率和生存曲线。

另外点击上部的Numerical Summary和Survival Plot可以得到与上图对应的数据表格和生存曲线,如图5、图6。

图5. 不同特征和随访时间的患者对应的生存率
图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)可以很好的解决列线图好看而不好用的问题,同时还将生存曲线融合了进来,可以说是功能多样化了。

但是,问题来了,这样的图如何放到文章里呢?有人说可以生成在线网页使用。

期待有对动态列线图更加了解或者已经实际运用的朋友留言讨论。

统计与绘图

标准差和标准误的区别联系及其适用性

2020-9-19 18:41:01

统计与绘图

方差分析的四种类型平方和

2020-9-27 12:54:27

加入Q群
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索