科研星球

R语言统计与绘图:forestmodel包使用教程,可视化回归模型的结果

看下R包介绍,这个包可以基于回归模型的结果绘制森林图,这个回归结果包括逻辑回归和Cox回归模型。

下面来学习下这个包。

1. 安装和加载R包

安装R包可以直接从CRAN上安装。

install.packages("forestmodel")
library(forestmodel)
library(survival) # cox回归模型需要
library(dplyr) # 处理数据需要

2. 加载演示数据集

使用colon数据集进行演示。

data(colon) # 加载数据集
str(colon) # 查看数据集结构

下载.jpeg

查看数据集介绍,可以知道有些变量是分类变量,但是加载进来的数据集变量还是数字型,我们处理一下。

mycolon <- colon %>%
  transmute(time,
            status,
            Age = age,
            Sex = factor(sex, levels = c(0,1),
                         labels = c("Female""Male")),
            Obstruct = factor(colon$obstruct),
            Differ = factor(colon$differ),
            Extent = factor(colon$extent))

下载 (1).jpeg

如上代码所示,我将colon数据集中的部分变量转换了因子,并新建了一个数据集mycolon,下面使用mycolon数据集进行演示。

3. forestmodel怎么用?

在R包介绍中,forestmodel包支持可视化的回归模型有lm、glm、coxph三种。

3.1 拟合Cox回归模型

首先我们使用survival包的coxph()函数拟合下Cox回归模型。

coxphmodel <- coxph(Surv(time, status) ~ ., mycolon)

~符号后的.表示使用数据集中的全部变量纳入回归模型。

coxphmodel1 <- coxph(Surv(time, status) ~ Age + Sex + Obstruct, mycolon)
# 这个表示纳入Age、Sex、Obstruct三个变量到回归模型中

可视化回归结果比较简单,forestmodel包中可视化函数是forest_model()函数。

forest_model(coxphmodel) 

下载 (2).jpeg

如上图所示,我们就简单的可视化了Cox回归的结果,图形参数的修改看后面。

3.2 拟合逻辑回归模型

forestmodel包也支持逻辑回归模型结果的可视化。

# 拟合逻辑回归模型
glmmodel <- glm(status ~ Age + Sex + Obstruct + Differ + Extent, 
                binomial(link="logit"), data = mycolon)
# 可视化结果
forest_model(glmmodel)

下载 (3).jpeg

线性回归模型的结果可视化跟上面差不多,就是先拟合线性模型即可。

4. 修改图形参数

4.1 支持ggplot2主题

首先这个包支持ggplot2的主题,也就是theme_grey()、theme_bw()等。

在函数中设置theme参数即可。

forest_model(coxphmodel,
             theme = theme_grey()) # 灰白主题

下载 (4).jpeg

其他主题可自行尝试。

4.2 panels参数调整

在forestmodel包中,可以通过panels参数调整图形中变量字体样式、粗细、各列宽度等。

panels <- list(
  list(width = 0.01),
  list(width = 0.1, display = ~variable, 
       fontface = "bold", heading = "Variable"),
  list(width = 0.1, display = ~level),
  list(width = 0.05, display = ~n, hjust = 1, heading = "N"),
  list(width = 0.05, display = ~n_events, 
       width = 0.05, hjust = 1, heading = "Events"),
  list(width = 0.05,
       display = ~ replace(sprintf("%0.1f", person_time / 365.25), is.na(person_time), ""),
       heading = "Person-\nYears", hjust = 1),
  list(width = 0.03, item = "vline", hjust = 0.5),
  list(width = 0.55, item = "forest", hjust = 0.5
       heading = "Hazard ratio", linetype = "dashed",line_x = 0),
  list(width = 0.03, item = "vline", hjust = 0.5),
  list(width = 0.12, display = ~ ifelse(reference, "Reference", sprintf("%0.2f (%0.2f, %0.2f)",
    trans(estimate), trans(conf.low), trans(conf.high))), display_na = NA),
  list(width = 0.05,
       display = ~ ifelse(reference, "", format.pval(p.value, digits = 1, eps = 0.001)),
       display_na = NA, hjust = 1, heading = "p"),
  list(width = 0.03))

如上所示,先设置好panels的细节参数,再在forest_model()函数中添加参数即可。

上面中的每一个list表示设置从左至右每一列的参数,自己对照下图上的数字比较。

forest_model(coxphmodel, panels)

下载 (5).jpeg

4.3 调整分类水平展示

上面的变量与每一个水平是没分开的,在同一线上,可以设置factor_separate_line参数来使其不在同一线上。

forest_model(coxphmodel, panels,   
             factor_separate_line = T)

下载 (6).jpeg

好的,这个包就学到这里,有需要的可以查看帮助文件,学习更多知识。

参考资料

  1. forest_model()函数帮助文件


没有账号?