ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
115 stars 30 forks source link

收藏贴-森林图绘图R包汇总 #1864

Closed ixxmu closed 2 years ago

ixxmu commented 2 years ago

https://mp.weixin.qq.com/s/U8LeRTJ0C8CwpOmwW5P01w

github-actions[bot] commented 2 years ago

收藏贴-森林图绘图R包汇总 by 作图丫

导语

GUIDE 

森林图是以统计指标和统计分析方法为基础,用数值运算结果绘制出的图型。用以综合展示每个被纳入研究的效应量以及汇总的合并效应量。

背景介绍




森林图是可视化meta分析结果最常用的图形,森林图展示了单个研究和Meta分析的效应估计值及可信区间。每个研究都由位于干预效果点估计值位置的方块来代表,同时一条横线分别向该方块的两边延伸出去。方块的面积代表在Meta分析中该研究被赋予的权重,而横线代表可信区间(通常为95%可信区间)。方块面积和可信区间传达的信息是相似的,但在森林图中两者的作用却不同。可信区间描述的是与研究结果相符的干预效果的范围,且能表示每个研究是否有统计学意义。今天小编给大家汇总了在R语言中绘制森林图常用到的多个工具包,接下来让我们一起看看吧!


可视化介绍




01
forestploter

library(grid)library(forestploter)# 读取实例数据dt <- read.csv(system.file("extdata""example_data.csv", package = "forestploter"))# 筛选需要的列dt <- dt[,1:6]# 缩进dt$Subgroup <- ifelse(is.na(dt$Placebo),                       dt$Subgroup,                      paste0("   ", dt$Subgroup))# NA 为空白或 NA 将转换为字符dt$Treatment <- ifelse(is.na(dt$Treatment), "", dt$Treatment)dt$Placebo <- ifelse(is.na(dt$Placebo), "", dt$Placebo)dt$se <- (log(dt$hi) - log(dt$est))/1.96# 为森林图添加空白列以显示 CI dt$` ` <- paste(rep(" ", 20), collapse = " ")# 创建置信区间列dt$`HR (95% CI)` <- ifelse(is.na(dt$se), "",                             sprintf("%.2f (%.2f to %.2f)",                                     dt$est, dt$low, dt$hi))head(dt)

上面是森林图绘制的基本数据格式,接下来是绘图过程!
# 设置主题tm <- forest_theme(base_size = 10,                   refline_col = "red",                   footnote_col = "#636363",                   footnote_fontface = "italic")##参数设置p <- forest(dt[,c(1:3, 8:9)],            est = dt$est,            lower = dt$low,             upper = dt$hi,            sizes = dt$se,            ci_column = 4,            ref_line = 1,            arrow_lab = c("Placebo Better", "Treatment Better"),            xlim = c(0, 4),            ticks_at = c(0.5, 1, 2, 3),            footnote = "This is the demo data. Please feel free to change\nanything you want.",            theme = tm)plot(p)


02
forestplot

library(forestplot)library(dplyr)# 来自“rmeta”包的 Cochrane 数据cochrane_from_rmeta <- structure(list(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)),                                 .Names = c("mean", "lower", "upper"),                                  row.names = c(NA, -11L),                                  class = "data.frame")#数据处理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"))
cochrane_from_rmeta %>% forestplot(labeltext = tabletext, is.summary = c(rep(TRUE, 2), rep(FALSE, 8), TRUE), clip = c(0.1, 2.5), xlog = TRUE, col = fpColors(box = "royalblue", line = "darkblue", summary = "royalblue"))


03
forplo

exdf <- cbind(OR=c(1.21,0.90,1.02,                   1.54,1.32,0.79,1.38,0.85,1.11,                   1.58,1.80,2.27),              LCI=c(0.82,0.61,0.66,                    1.08,0.91,0.48,1.15,0.39,0.91,                    0.99,1.48,0.92),              UCI=c(1.79,1.34,1.57,                    2.19,1.92,1.32,1.64,1.87,1.34,                    2.54,2.19,5.59),              groups=c(1,1,1,                       2,2,2,2,2,2,                       3,3,3))exdf <- data.frame(exdf)rownames(exdf) <- c('Barry, 2005', 'Frances, 2000', 'Rowley, 1995',                    'Biro, 2000', 'Crowe, 2010', 'Harvey, 1996',                    'Johns, 2004', 'Parr, 2002', 'Zhang, 2011',                    'Flint, 1989', 'Mac Vicar, 1993', 'Turnbull, 1996')knitr::kable(exdf)

forplo(exdf[,1:3],       groups=exdf$groups,       grouplabs=c('Low risk of bias',                   'Some concerns',                   'High risk of bias'))


04
metaviz

library(metaviz)viz_forest(x = mozart[1:10, c("d", "se")], study_labels = mozart[1:10, c("study_name")],           summary_label = "Summary effect", xlab = "Cohen d")

viz_forest(x = mozart[1:10, c("d", "se")], study_labels = mozart[1:10, c("study_name")],           summary_label = "Summary effect", xlab = "Cohen d", variant = "rain")


05
ggforestplot

library(ggforestplot)library(tidyverse)
# 数据集df <- ggforestplot::df_linear_associations %>% filter( trait == "BMI", dplyr::row_number() <= 30 )
# 绘制横截面线性关联的森林图ggforestplot::forestplot( df = df, name = name, estimate = beta, se = se)

06
survminer

library(survminer)library(survival)

计算 Cox 模型再绘图
res.cox <- coxph(Surv(time, status) ~ ph.karno * age, data=lung)summary(res.coxconf.int = FALSE)##画图ggforest()ggforest(res.cox, data = lung)


小编总结




R语言有许多工具可以快速的绘制森林图,今天小编一次性总结来分享给大家!大家可以选择合适的包去画自己的森林图哦!


分析专辑


单细胞scRNA | R包绘图 | 免疫浸润分析 | 肿瘤纯度评估工具 | 数据库


文章解读专辑


多区域进化文章精读 | 高分文章精读 | 免疫微环境文献解读 


招聘信息


招聘


点击蓝字即可进入专栏!

END

长期诚邀师资合作

作图丫长期进行生信技能培训,诚邀有能力的团队、老师或者科研大咖合作

无论是科研写作技巧、技术分析经验还是生信流程分析,我们保证只要您有专长,作图丫就是您展示自己的舞台

    

如有意,请与赵老师联系,谢谢

微信:guofengzhao527


合作方式:线上课程

劳动报酬:酬劳丰厚,微信私聊


文字均为原创,欢迎读者分享或转发到朋友圈,任何公众号或其他媒体未经许可不得私自转载或抄袭。


由于微信平台算法改版,公众号内容将不再以时间排序展示,建议设置“作图丫”公众号为星标,防止丢失。星标具体步骤为:

(1)点击页面最上方“作图丫”,进入公众号主页;

(2)点击右上角的小点点,在弹出界面选择“设为星标”即可。


作图丫分析作图群进群要求:转发任一篇“zuotuya”公众号文章至微信朋友圈,并附“作图丫关注绘图和精品分析,期待你的关注”,并获得10个赞后加小编微信“guofengzhao527”邀请你加入。