前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言之列线图的绘制应用

R语言之列线图的绘制应用

作者头像
一粒沙
发布2019-07-31 09:51:11
4.1K0
发布2019-07-31 09:51:11
举报
文章被收录于专栏:R语言交流中心R语言交流中心

线图(AlignmentDiagram),又称诺莫图(Nomogram图),它是建立在多因素回归分析的基础上,将多个预测指标进行整合,然后采用带有刻度的线段,按照一定的比例绘制在同一平面上,从而用以表达预测模型中各个变量之间的相互关系。其优势在于可以直接利用图形推算出某变量的取值,如患者的指标得分或生存概率等。它在医学领域中的应用由来已久,常见的有百分位列线图和概率列线图等。百分位列线图是确定个体某指标的测量值在总体中的百分位数;概率列线图是确定某个体特定事件的发生概率,该特定事件可以是疾病的发生、复发以及预后(如死亡)等,往往由多因素二分类回归或COX比例风险模型求得。列线图是回归方程结果的可视化,常用于逻辑回归或COX回归的结果展示,依据回归的结果,按照特定的比例画出多个线段,通过做图能够便捷地推算出某个体的发病风险或生存概率。

列线图在制作之前需要对预测模型的预测结果进行验证,常见的验证过程有内部验证和外部验证。内部验证是指采用建模的数据去验证模型的预测效果,可采用Bootstrap自抽样法或交叉验证的方法。Bootstrap自抽样法是在研究样本中进行有放回的抽样,然后使用抽得的样本进行计算。交叉验证是指将研究对象随机分为多段,然后交叉使用上述数据进行建模和验证。外部验证是使用另外一组研究对象的数据(即外部数据)去验证模型的预测准确性。因此在列线图的制作上,不能盲目地建立某个指标的列线图,只有当模型的预测效果得到了明确验证之后,方可对模型制作列线图,此时该列线图也会有很好的应用价值。(摘自临床研究方法学园地)

接下来我们介绍在R语言中如何绘制以及分析列线图结果,前期的验证我们就不再赘述了,方法有很多。

首先我们导入需要的R包rms。我们以逻辑回归为例绘制列线图。接下来我们看下其中主要的函数:

datadist将数据转化成rms包识别的数据格式

nomogram构建列线图绘制数据

其中的fun参数的主要是进行Logistic分布的随机化。常用的有plogis或者自己编写函数公式。

参数lp用于对坐标轴的重构,如果为False

下面是具体的示例程序:

library(rms)

library(survival)

data(lung,package = "survival")#获取lung数据集

查看lung数据集的情况

lung$sex <- factor(lung$sex,levels =c(1,2),labels = c("male", "female"))#对性别添加标签

dd=datadist(lung)#对数据进行打包

打包结果如下:

第一部分,我们构建逻辑回归模型,并绘制其列线图

lg<- lrm(status~ age + sex, data = lung)

nom <- nomogram(lg, fun=function(x)1/(1+exp(-x)), lp=F, funlabel="Risk")

plot(nom)

结果如图:

对于上图的结果分析:比如我们想看男性70岁的一个风险情况,首先我们在points坐标轴找到对应的男性,70岁的值,分别是65,70。然后加和为135.然后从Total Points找到135的位置对应的风险概率,也就是约为0.83。

第二部分构建COX模型:

# 绘制COX回归中位生存时间的Nomogram图

ff<- psm(Surv(time,status) ~ age+sex,data = lung, dist='lognormal')

med <- Quantile(ff) # 计算中位生存时间

surv <- Survival(ff) # 构建生存概率函数

nom <- nomogram(ff, fun=function(x)med(lp=x), funlabel="Median Survival Time")

plot(nom)

# 绘制COX回归生存概率的Nomogram图

# 注意lung数据的time是以”天“为单位

nom <- nomogram(ff,fun=list(function(x) surv(365, x),function(x) surv(730, x)),funlabel=c("1-yearSurvival Probability","2-year Survival Probability"))

plot(nom)

结果如图

以上的结果分析我们不一一介绍了,基本的原理是一样的。

最后进行校正曲线绘制

## 参数说明:

## 绘制校正曲线前需要在模型函数中添加参数x=T, y=T,详细参考帮助

## u需要与之前模型中定义好的time.inc一致,即365或730;

## m要根据样本量来确定,由于标准曲线一般将所有样本分为3组(在图中显示3个点)

## 而m代表每组的样本量数,因此m*3应该等于或近似等于样本量;

## B代表最大再抽样的样本量

ff1 <-psm(Surv(time,status) ~ age+sex, data = lung, x=T, y=T, dist='lognormal')

## 构建校正曲线

cal1<- calibrate(ff1, cmethod='KM', method="boot", u=365, m=76, B=228)

## 绘制校正曲线

par(mar=c(8,5,3,2),cex = 1.0)

plot(cal1,lwd=2,lty=1,

errbar.col=c(rgb(0,118,192,maxColorValue=255)),

xlim=c(0.25,0.6),ylim=c(0.15,0.70),

xlab="Nomogram-Predicted Probability of 1-Year DFS",

ylab="Actual 1-Year DFS (proportion)",

col=c(rgb(192,98,83,maxColorValue=255)))

至此列线图除了前期的验证过程,后期的分析全部结束。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档