R数据分析:列线图的做法及解释

我们经常做的研究就是建立预测模型,我常常问自己,建的模型有啥实际应用价值?

直到我了解到列线图这个东西,才知道模型可以通过列线图转化为实际的应用工具。

列线图也叫Nomogram,中文常称为诺莫图:

Nomograms are visual and intuitive, which helps the general population and health managers to undersand the risk of diseases more easily

简单来说这个东西就是来帮助病人或者医生来预测某种结局的风险的工具,其核心是背后的预测模型。

今天还是手把手带大家做一个列线图。

实例描述

今天我们用到的数据为R自带的泰坦尼克邮轮数据集titanic3。数据大概如下图:

里面有乘客的死亡情况(二分类)和乘客的各种特征。那么我们关心的是:如何根据乘客的年龄age,性别sex和客舱等级pclass来预测乘客的死亡情况。我们打算画一个列线图出来。

R操作

做列线图必不可少的一步操作就是总结一下数据的分布,这一步的目的就是画图时好依照这个分布规定画图的尺度,我们要用到的方法是datadist:

datadist:For a given set of variables or a data frame, determines summaries of variables for effect and plotting ranges, values to adjust to, and overall ranges for Predict, plot.Predict, ggplot.Predict, summary.rms, survplot, and nomogram.rms.

代码如下:

t.data <- datadist(titanic3)
options(datadist = 't.data')

然后我们就可以拟合模型紧接着画列线图了:

fit <- lrm(formula = survived ~ age + pclass + sex, data = titanic3)

plot(nomogram(fit, fun = function(x)plogis(x)))

上图就是我们用乘客的年龄,性别和客舱等级预测其死亡情况的列线图,在这个图中第一行叫做points就是每一个变量的评分参照,对于任意一个乘客我们可以计算所有预测变量的总分,然后总分可以通过total points映射到线性得分 linearPredictor 上进而得到该乘客的死亡概率。

比如,对于一个1等舱的一位40岁的女性来说,她的死亡概率为0.4,怎么得到的呢?

40岁得50分,1等舱得84分,男性0分,那么总分大概是134分,对应的死亡概率差不多0.4:

虽然我们知道如何看列线图做解释了,但是我们现在画的这个列线图还不好使用,如果你把它打印下来估计还需要拿一个直尺才对的准。所以我们考虑给它画上参考线:

plot(nomogram(fit, fun = function(x)plogis(x)),col.grid = gray(c(0.8, 0.95)))

这样是不是就方便多了,哈哈。列线图还有很多可以改动的地方,大家有兴趣慢慢探索哈。

小结

今天给大家写了列线图的简单做法,之后给大家写写更复杂的,大家一定记住,列线图只是一个模型的可视化,它的本质是后面的预测模型,所以你得预测模型一定要对这个列线图才有用。

(0)

相关推荐