shinyPredict包,绘制动态列线图的优秀R包
绘制动态列线图常见的包有DynNom包,这个包用的很多,今天来学习另外一个绘制动态列线图的R包——shinyPredict包。
上面这个图就是使用shinyPredict包绘制的动态列线图。
就个人而言,我感觉这个包比DynNom包好用,功能也更强大一些,学习也不复杂。
下面来学习下这个R包。
1. 安装和加载R包
安装可以直接从CRAN上安装。
install.packages("shinyPredict") # 安装包
library(shinyPredict) # 加载包
2. 加载数据集
使用survival包的lung数据集进行演示。
library(survival) # 加载包
data(lung) # 加载数据集
View(lung) # 预览数据集
这个数据集里面的变量比较简单。
在创建列线图前将lung数据集中需要用到的分类变量转化为因子。
lung$sex <- factor(lung$sex) # 将性别转换为因子
lung$ph.ecog <- factor(lung$ph.ecog) # 将ph.ecog变量转换为因子
3. 拟合模型
这里拟合三个生存模型用来绘制列线图。
tmp.m3 <- coxph(Surv(time , status ) ~ sex + age,
data=lung,
model = FALSE, y=FALSE)
tmp.m4 <- coxph(Surv(time , status ) ~ sex + age + ph.ecog,
data = lung,
model = FALSE, y=FALSE)
tmp.m5 <- coxph(Surv(time , status ) ~ sex + age + ph.ecog + ph.karno,
data=lung,
model = FALSE, y=FALSE)
如上图所示,我们拟合了三个Cox回归模型,每个模型中纳入的变量不同。
4. 创建动态列线图
下面来创建动态列线图。
shinyPredict(models=list("Model 1"= tmp.m3),
data=lung[, c("time","status","sex","age")], # 创建动态列线图的数据
path = "C:\\Rdata\\shiny", # 动态列线图shiny app文件存放位置
title="Predicting lung cancer mortality") # 列线图的名称
运行上述代码后,会在C:\Rdata\shiny
文件路径生成三个文件。
我们使用RStudio打开app.R
文件。
如上图所示,点击Run App
会生成一个shiny app。
使用起来很简单,如上动图所示,在Data一列中,数据也是实时变化的。
单就显示的信息以及可视化图形来说,这个包比DynNom包好用,功能也更强大一些。
在上面的动态列线图中,我们只纳入了一个模型,我们可以在动态列线图中纳入多个模型,实时查看比较多个模型的结果。
shinyPredict(models=list("Model 1"= tmp.m3, tmp.m4, tmp.m5),
data=lung[, c("time","status","sex","age","ph.ecog","ph.karno")], # 创建动态列线图的数据
path = "./", # 动态列线图shiny app文件存放位置
title="Predicting lung cancer mortality") # 列线图的名称
运行上述代码,用同样的方法打开shiny app
。
如上图所示,在左侧可以看到3个模型,可以选择不同的模型查看预测概率。
这个app还支持图形主题修改,比如说我在左上角加入+ theme_bw()
,点击SUBMIT,会修改图形的主题,如下所示。
当然,这样纳入多个模型也是有要求的,比如说模型的y变量要相同,另外shinyPredict()函数目前只支持"lm"、"glm"和"coxph"创建的模型,纳入的多个模型必须是同一函数拟合的模型。
最后可以将创建的shiny app部署到shiny服务器上,转化为永久网页。
如果觉得这个包不错,可以点击在看或分享给更多的朋友!谢谢!
另外推荐下面这个学习R语言的公众号,超多干货哦!
参考资料
shinyPredict()函数帮助文件