R語言可視化(三十九):森林圖繪制

39. 森林圖繪制


清除當(dāng)前環(huán)境中的變量

rm(list=ls())

設(shè)置工作目錄

setwd("C:/Users/Dell/Desktop/R_Plots/39forest/")

使用survminer包中的ggforest函數(shù)繪制森林圖

require("survival")
## Loading required package: survival
library(survminer)
## Warning: package 'survminer' was built under R version 3.6.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.6.3
## Loading required package: ggpubr
## Loading required package: magrittr

# 查看內(nèi)置示例數(shù)據(jù)
head(colon)
##   id study      rx sex age obstruct perfor adhere nodes status differ
## 1  1     1 Lev+5FU   1  43        0      0      0     5      1      2
## 2  1     1 Lev+5FU   1  43        0      0      0     5      1      2
## 3  2     1 Lev+5FU   1  63        0      0      0     1      0      2
## 4  2     1 Lev+5FU   1  63        0      0      0     1      0      2
## 5  3     1     Obs   0  71        0      0      1     7      1      2
## 6  3     1     Obs   0  71        0      0      1     7      1      2
##   extent surg node4 time etype
## 1      3    0     1 1521     2
## 2      3    0     1  968     1
## 3      3    0     0 3087     2
## 4      3    0     0 3087     1
## 5      2    0     1  963     2
## 6      2    0     1  542     1

# 構(gòu)建COX回歸比例風(fēng)險模型
model <- coxph( Surv(time, status) ~ sex + rx + adhere,
                data = colon )
# 查看cox回歸模型結(jié)果
model
## Call:
## coxph(formula = Surv(time, status) ~ sex + rx + adhere, data = colon)
## 
##               coef exp(coef) se(coef)      z        p
## sex       -0.04615   0.95490  0.06609 -0.698 0.484994
## rxLev     -0.02724   0.97313  0.07690 -0.354 0.723211
## rxLev+5FU -0.43723   0.64582  0.08395 -5.208 1.91e-07
## adhere     0.29355   1.34118  0.08696  3.376 0.000736
## 
## Likelihood ratio test=46.51  on 4 df, p=1.925e-09
## n= 1858, number of events= 920

# 使用ggforest()函數(shù)繪制基礎(chǔ)森林圖
ggforest(model)
image.png
# 將數(shù)據(jù)集中的變量設(shè)置成因子,添加標(biāo)簽進行分組
colon <- within(colon, {
  sex <- factor(sex, labels = c("female", "male"))
  differ <- factor(differ, labels = c("well", "moderate", "poor"))
  extent <- factor(extent, labels = c("submuc.", "muscle", "serosa", "contig."))
})
head(colon)
##   id study      rx    sex age obstruct perfor adhere nodes status   differ
## 1  1     1 Lev+5FU   male  43        0      0      0     5      1 moderate
## 2  1     1 Lev+5FU   male  43        0      0      0     5      1 moderate
## 3  2     1 Lev+5FU   male  63        0      0      0     1      0 moderate
## 4  2     1 Lev+5FU   male  63        0      0      0     1      0 moderate
## 5  3     1     Obs female  71        0      0      1     7      1 moderate
## 6  3     1     Obs female  71        0      0      1     7      1 moderate
##   extent surg node4 time etype
## 1 serosa    0     1 1521     2
## 2 serosa    0     1  968     1
## 3 serosa    0     0 3087     2
## 4 serosa    0     0 3087     1
## 5 muscle    0     1  963     2
## 6 muscle    0     1  542     1

# 使用coxph()函數(shù)進行COX回歸分析
bigmodel <- coxph(Surv(time, status) ~ sex + rx + adhere + differ + extent + node4,
                  data = colon )
bigmodel
## Call:
## coxph(formula = Surv(time, status) ~ sex + rx + adhere + differ + 
##     extent + node4, data = colon)
## 
##                    coef exp(coef) se(coef)      z        p
## sexmale        -0.03226   0.96825  0.06719 -0.480  0.63111
## rxLev          -0.04495   0.95605  0.07847 -0.573  0.56681
## rxLev+5FU      -0.45153   0.63665  0.08467 -5.333 9.65e-08
## adhere          0.18409   1.20212  0.09079  2.028  0.04259
## differmoderate -0.06258   0.93934  0.11625 -0.538  0.59037
## differpoor      0.27941   1.32235  0.13422  2.082  0.03737
## extentmuscle    0.21074   1.23459  0.35588  0.592  0.55374
## extentserosa    0.74471   2.10583  0.33736  2.207  0.02728
## extentcontig.   1.08395   2.95634  0.36664  2.956  0.00311
## node4           0.83820   2.31219  0.06940 12.078  < 2e-16
## 
## Likelihood ratio test=246  on 10 df, p=< 2.2e-16
## n= 1812, number of events= 899 
##    (46 observations deleted due to missingness)

ggforest(bigmodel,
         main = "Hazard ratio", # 設(shè)置標(biāo)題
         cpositions = c(0.08, 0.2, 0.35), # 設(shè)置前三列的相對距離
         fontsize = 0.8, # 設(shè)置字體大小
         refLabel = "reference",
         noDigits = 2) #設(shè)置保留小數(shù)點位數(shù)
image.png

使用forestplot包繪制森林圖

# 安裝并加載所需的R包
#install.packages("forestplot")
library(forestplot)
## Warning: package 'forestplot' was built under R version 3.6.3
## Loading required package: grid
## Loading required package: checkmate
## Warning: package 'checkmate' was built under R version 3.6.1

# 構(gòu)建示例數(shù)據(jù)
cochrane_from_rmeta <- data.frame(
    mean  = c(NA, NA, 0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, NA, 0.531), 
    lower = c(NA, NA, 0.372, 0.018, 0.072, 0.333, 0.083, 0.016, 0.365, NA, 0.386),
    upper = c(NA, NA, 0.898, 1.517, 0.833, 1.474, 1.455, 1.209, 2.831, NA, 0.731))

tabletext <-cbind(
  c("", "Study", "Auckland", "Block", 
    "Doran", "Gamsu", "Morrison", "Papageorgiou", 
    "Tauesch", NA, "Summary"),
  c("Deaths", "(steroid)", "36", "1", 
    "4", "14", "3", "1", 
    "8", NA, NA),
  c("Deaths", "(placebo)", "60", "5", 
    "11", "20", "7", "7", 
    "10", NA, NA),
  c("", "OR", "0.58", "0.16", 
    "0.25", "0.70", "0.35", "0.14", 
    "1.02", NA, "0.53"))

# 查看示例數(shù)據(jù)
head(cochrane_from_rmeta)
##    mean lower upper
## 1    NA    NA    NA
## 2    NA    NA    NA
## 3 0.578 0.372 0.898
## 4 0.165 0.018 1.517
## 5 0.246 0.072 0.833
## 6 0.700 0.333 1.474

head(tabletext)
##      [,1]       [,2]        [,3]        [,4]  
## [1,] ""         "Deaths"    "Deaths"    ""    
## [2,] "Study"    "(steroid)" "(placebo)" "OR"  
## [3,] "Auckland" "36"        "60"        "0.58"
## [4,] "Block"    "1"         "5"         "0.16"
## [5,] "Doran"    "4"         "11"        "0.25"
## [6,] "Gamsu"    "14"        "20"        "0.70"

# 使用forestplot()函數(shù)繪制基礎(chǔ)森林圖
forestplot(labeltext = tabletext, 
           mean = cochrane_from_rmeta$mean,
           lower = cochrane_from_rmeta$lower ,
           upper = cochrane_from_rmeta$upper)
image.png
# 添加一些參數(shù)美化森林圖
forestplot(tabletext, 
           cochrane_from_rmeta,
           # 添加水平線
           hrzl_lines = list("1" = gpar(lty=2, lwd=2, col="black"), 
                             "3" = gpar(lty=2, lwd=2, col="black"),
                             "11" = gpar(lwd=1, columns=1:4, col = "red")),
           align = "c", # 設(shè)置左邊表格中字體的對齊方式
           zero = 1, # 設(shè)置zero line的位置
           title="Hazard Ratio Plot", # 設(shè)置標(biāo)題
           new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE), #A vector indicating by TRUE/FALSE if the value is a summary value which means that it will have a different font-style
           clip=c(0.2,2.5), #Lower and upper limits for clipping confidence intervals to arrows
           xlog=TRUE,
           xticks.digits = 2,
           col=fpColors(box="royalblue",line="darkblue", 
                        summary="royalblue", hrz_lines = "#444444"),
           vertices = TRUE)
image.png
sessionInfo()
## R version 3.6.0 (2019-04-26)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 18363)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_China.936 
## [2] LC_CTYPE=Chinese (Simplified)_China.936   
## [3] LC_MONETARY=Chinese (Simplified)_China.936
## [4] LC_NUMERIC=C                              
## [5] LC_TIME=Chinese (Simplified)_China.936    
## 
## attached base packages:
## [1] grid      stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
## [1] forestplot_1.10   checkmate_1.9.4   survminer_0.4.8   ggpubr_0.2.1     
## [5] magrittr_1.5      ggplot2_3.3.2     survival_2.44-1.1
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.5        pillar_1.4.2      compiler_3.6.0   
##  [4] tools_3.6.0       digest_0.6.20     nlme_3.1-139     
##  [7] evaluate_0.14     tibble_2.1.3      lifecycle_0.2.0  
## [10] gtable_0.3.0      lattice_0.20-38   pkgconfig_2.0.2  
## [13] rlang_0.4.7       Matrix_1.2-17     yaml_2.2.0       
## [16] xfun_0.8          gridExtra_2.3     withr_2.1.2      
## [19] stringr_1.4.0     dplyr_1.0.2       knitr_1.23       
## [22] survMisc_0.5.5    generics_0.0.2    vctrs_0.3.2      
## [25] cowplot_0.9.4     tidyselect_1.1.0  data.table_1.12.2
## [28] glue_1.4.2        KMsurv_0.1-5      R6_2.4.0         
## [31] km.ci_0.5-2       rmarkdown_1.13    tidyr_1.1.2      
## [34] purrr_0.3.2       backports_1.1.4   scales_1.0.0     
## [37] htmltools_0.3.6   splines_3.6.0     xtable_1.8-4     
## [40] colorspace_1.4-1  ggsignif_0.5.0    labeling_0.3     
## [43] stringi_1.4.3     munsell_0.5.0     broom_0.5.2      
## [46] crayon_1.3.4      zoo_1.8-6
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容