R语言预测模型可视化-动态列线图
原创 修身立道 数据统计和机器学习 2023-02-12 11:16 发表于河南
收录于合集
#预测模型7个
#r语言60个
之前的文章 R语言预测模型可视化-Nomogram 介绍了静态列线图的制作过程,做出来的图形如下图所示,可直接在文章中使用。
这种图片可以说在逻辑回归模型中是标配,但是使用起来有点不方便,实用性和可操作性可太低。另外一种做法是在列线图上加垂直的网格线,像下图这样。但是还是需要手动计算,精确性也不高。
总之,这种静态列线图使用起来不是很方便。如何才能合理准确的使用列线图呢?下面介绍两种基于shiny的动态列线图,可提高列线图的实用性和准确性。
1、基于DynNom
仍然采用之前文章的数据,以方便不同列线图之间的比较。
数据准备
#清除空间
rm(list = ls())
#载入数据
dat <- read.csv("MPE.csv")
#删除缺失值
df <-na.omit(dat)
#查看维度
dim(df)
Show in New Window
[1] 407 14
#将分类变量转变为因子并添加标签
df$MPE <- factor(df$MPE,levels = c(0,1),labels = c("No","Yes"))
df$Gender <- factor(df$Gender,levels = c(0,1),labels = c("Female","Male"))
df$Fever<- factor(df$Fever,levels = c(0,1),labels = c("No","Yes"))
df$ChestPain<- factor(df$ChestPain,levels = c(0,1),labels = c("No","Yes"))
df$Cough<- factor(df$Cou,levels = c(0,1),labels = c("No","Yes"))
模型构建
fit2 <- glm(MPE ~Gender+Fever+ChestPain+ADAPE,
data=df,family = binomial())
summary(fit2)
Call:
glm(formula = MPE ~ Gender + Fever + ChestPain + ADAPE, family = binomial(),
data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.4929 -0.8230 -0.4352 0.8984 3.1355
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.019801 0.281123 0.070 0.94385
GenderMale -0.710901 0.269948 -2.633 0.00845 **
FeverYes -1.829423 0.325621 -5.618 1.93e-08 ***
ChestPainYes 0.773577 0.253110 3.056 0.00224 **
ADAPE -0.012189 0.006345 -1.921 0.05475 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 468.92 on 406 degrees of freedom
Residual deviance: 393.45 on 402 degrees of freedom
AIC: 403.45
Number of Fisher Scoring iterations: 5
建立动态列线图
library(DynNom)
DynNom(fit2,df)
运行代码之后,后弹出一个基于显示动态列线图的网页。页面左侧为模型预测变量部分,连续预测变量以可选数值(以观测范围为界)的形式展示,分类变量以下拉框的形式展示;右侧展示预测概率及模型信息。使用者只需要在相应的变量选项里进行选择,列线图即会给出模型的基本信息。点击页面中的Graphical Summary/Numerical Summary/ Model Summary按钮可以切换查看模型的预测结果和模型信息。
网页部署
以上生成的动态列线图依赖于R和Rstudio,通过以下步骤才能部署到网页中。
1、注册shinyapp账号
进入shinyapps.io/注册账号
2、将shinyapps.io云账户关联至Rstudio(在R studio运行下述代码)
install.packages('rsconnect')
library(rsconnect)
进入账号,点击Account—Tokens-show,复制粘贴到Rstudio中并运行(个人账号已处理)
setAccountInfo(name='mylogistic2',
token='A124917D803DE957B77394FFFF92B37E',
secret='yXQohompt0CIL****LD8+9j8WE+K/w')
3、制作动态列线图
DNbuilder(fit2)
运行完之后,会在工作目录文件夹内出现一个新的文件夹(DynNomapp),内含ui.R、server.R、global.R、functions.R、data.Rdata和 README.txt 等文件;
关掉 Rstudio,打开 ui.R 或 server.R,点击右上角的 Run APP,你会得到一个右上角有 Publish 的 Dynamic nomogram.
此时,可以通过点击 Publish 上传上述文件,
点击Publish等待完成部署。部署完成后会弹出一个网页。复制网址就可以粘贴在论文中或发给其他人使用。
也可以运行如下语句:
deployApp(appName = “Dynamic_nomogram”)
2.shinyPredict
library(shinyPredict)
shinyPredict(models = list("MPE model"=fit2),
path="./",#文件存储位置
data=df[,c(2,4,6,13)],#选择显示的变量
title="dynamic nomogram")#图片标题
运行完之后,会在工作路径中生成 3 个文件,打开名为 app.R 的文件,点击右上角的 Run app 即可生成该列线图,之后的事情就是上传到 shinyapp 生成网页版列线图(和DynNom网页部署步骤一致)。
以上是两种动态列线图的绘制和部署过程,希望能给各位提供帮助。其中动态列线图的许多细节问题调整需认真摸索。
更多R语言的知识请关注公众号PRLearning 数据统计和机器学习进行交流学习。请关注后私信回复“动态列线图”获取数据及代码。如果对您有用请先收藏,再点赞。
收录于合集 #预测模型
7个
下一篇R语言正则化技术3-弹性网络(ElasticNet)
阅读 265
分享收藏
22
发消息