森林圖簡(jiǎn)介
森林圖(forest plot),從定義上講羡铲,它一般是在平面直角坐標(biāo)系中蜂桶,以一條垂直于X軸的無(wú)效線(通常坐標(biāo)X=1或0)為中心,用若干條平行于X軸的線段也切,來(lái)表示每個(gè)研究的效應(yīng)量大小及其95%可信區(qū)間扑媚,并用一個(gè)棱形來(lái)表示多個(gè)研究合并的效應(yīng)量及可信區(qū)間,它是Meta分析中最常用的結(jié)果綜合表達(dá)形式雷恃,現(xiàn)在也廣泛應(yīng)用在biomarker此類研究中疆股。
森林圖的科研用途
提到森林圖,很多人的第一反應(yīng)就是Meta分析倒槐。實(shí)際上旬痹,除了Meta分析,森林圖還有諸多用處讨越。森林圖可以直觀的反映出效應(yīng)量(例如RR两残、OR、HR或者WMD)大小及其95% CI把跨,這些效應(yīng)量指標(biāo)通常都是通過(guò)采用多因素回歸分析所得人弓,因此我們同樣可以把森林圖借鑒過(guò)來(lái),用于展示多因素回歸分析的結(jié)果着逐。總結(jié)來(lái)說(shuō)崔赌,森林圖的科研用途主要用于Meta和臨床實(shí)驗(yàn)意蛀。
臨床實(shí)驗(yàn)普通分析(重點(diǎn))——常規(guī)森林圖
下圖就是常規(guī)Cox回歸結(jié)果的森林圖展示,主要體現(xiàn)了變量峰鄙、病人數(shù)量浸间、P值和HR值,同時(shí)在每個(gè)變量?jī)?nèi)部設(shè)置reference(便于直觀比較吟榴,變量為字符串-因子化屬性)魁蒜。比如: 年紀(jì)older變量位于無(wú)效線(即中間的那條豎線)右側(cè),說(shuō)明年老有助于死亡吩翻。森林圖在常規(guī)情況下事件結(jié)局是"生/死"這種兩分類兜看,但有時(shí)候事件結(jié)局是"有效/無(wú)效"、"治療/未治療"等等其他二分類情況狭瞎,評(píng)估事件是好事還是壞事细移。比如生存(生:0;死:1熊锭,數(shù)值小的默認(rèn)為事件結(jié)局)弧轧,就是好事件,當(dāng)位于無(wú)效線左側(cè)的變量碗殷,說(shuō)明這些變量有助于事件發(fā)生精绎,是保護(hù)因素;位于無(wú)效線右側(cè)的變量锌妻,說(shuō)明這些變量不利于事件發(fā)生代乃,是危險(xiǎn)因素;當(dāng)與無(wú)效線相交時(shí)仿粹,說(shuō)明這些變量與事件發(fā)生之間關(guān)系不強(qiáng)搁吓!在整體數(shù)據(jù)上,用來(lái)評(píng)估這些變量因素對(duì)事件結(jié)局的影響吭历!
PS:若是不想在多分類變量中設(shè)置refence堕仔,變量字符串形式即可,不要因子化晌区。
臨床實(shí)驗(yàn)分組分析(重點(diǎn))——分組森林圖
很多時(shí)候摩骨,文章展現(xiàn)的是亞組森林圖。如下圖:生存為事件結(jié)局契讲,添加阿司匹林和阿哌沙班兩個(gè)用藥組。當(dāng)位于無(wú)效線左側(cè)的變量滑频,可認(rèn)為阿司匹林用藥組的結(jié)局事件發(fā)生率大于阿哌沙班用藥組捡偏;位于無(wú)效線右側(cè)的變量,說(shuō)明阿司匹林用藥組的結(jié)局事件發(fā)生率大于阿哌沙班用藥組峡迷。從整體數(shù)據(jù)來(lái)看银伟,阿司匹林效果比阿哌沙班好你虹!
森林圖的結(jié)果解釋
1. 普通森林圖解
圖列解釋:
第1列為多個(gè)分類變量;
第2列為各個(gè)變量下樣本數(shù)量:以stage為例彤避,stage_I數(shù)量為100傅物,stage_II為100,stage_III為100琉预;
第3列多因素cox回歸的統(tǒng)計(jì)學(xué)P值董饰,
第4列為HR及其置信區(qū)間的圖形表達(dá),圖中中間的豎線為無(wú)效線圆米,即OR=1卒暂,表示所研究因素和結(jié)局無(wú)統(tǒng)計(jì)學(xué)關(guān)聯(lián);每條橫線為該研究的95%可信區(qū)間娄帖,橫線中央的小方塊(或其他圖形)為OR值的點(diǎn)估計(jì)也祠。若某個(gè)研究95%可信區(qū)間的橫線與無(wú)效豎線有交叉,可認(rèn)為所研究因素和結(jié)局無(wú)統(tǒng)計(jì)學(xué)關(guān)聯(lián)近速;若該橫線落在無(wú)效豎線的左側(cè)诈嘿,可認(rèn)為所研究因素有利于結(jié)局的發(fā)生;若該橫線落在無(wú)效線的右側(cè)削葱,可認(rèn)為所研究因素不利于結(jié)局的發(fā)生奖亚。
第5列為HR及其置信區(qū)間的數(shù)值化表示。
圖行解釋:
以stage為例佩耳,其中stage_I為參照遂蛀,stage_II和stage_III都位于無(wú)效線的右側(cè),說(shuō)明不利于生存干厚。與stage_I相比李滴,stage_II患者是stage_I患者死亡風(fēng)險(xiǎn)的2.26倍,他的上下可信區(qū)間是1.782.58蛮瞄,并且經(jīng)過(guò)統(tǒng)計(jì)是P=0.01有意義所坯;同時(shí)stage_III患者是stage_I患者死亡風(fēng)險(xiǎn)的1.86倍,他的上下可信區(qū)間是1.581.98挂捅,并且經(jīng)過(guò)統(tǒng)計(jì)是P=0.02也有意義芹助。
2. 分組森林圖解(評(píng)估多個(gè)分類變量對(duì)S-1+Doc和S-1兩種治療方案的作用,結(jié)局事件:PFS)
圖列解釋:
第1列為多個(gè)分類變量闲先;
第2列和第3列表示S-1+Doc和S-1這兩組的基本情況:如“87/454”状土,前者為發(fā)生某事件的例數(shù)、后者為各組樣本量伺糠;
第4列為HR及其置信區(qū)間的圖形表達(dá)蒙谓,圖中中間的豎線為無(wú)效線,即OR=1训桶,表示所研究因素和結(jié)局無(wú)統(tǒng)計(jì)學(xué)關(guān)聯(lián)累驮;每條橫線為該研究的95%可信區(qū)間酣倾,橫線中央的小方塊(或其他圖形)為OR值的點(diǎn)估計(jì)。若某個(gè)研究95%可信區(qū)間的橫線與無(wú)效豎線有交叉谤专,可認(rèn)為所研究因素和結(jié)局無(wú)統(tǒng)計(jì)學(xué)關(guān)聯(lián)躁锡;若該橫線落在無(wú)效豎線的左側(cè),可認(rèn)為所研究因素有利于結(jié)局的發(fā)生置侍;若該橫線落在無(wú)效線的右側(cè)映之,可認(rèn)為所研究因素不利于結(jié)局的發(fā)生。
第5列為HR及其置信區(qū)間的數(shù)值化表示墅垮;
第6列為交互檢測(cè)統(tǒng)計(jì)學(xué)P值惕医,按照不同的變量分層分析,交互作用的P值不顯著算色,表明不同分層結(jié)果一致抬伺,文章的結(jié)果可靠。
圖行解釋:
首行是總?cè)巳篢otal的分析結(jié)果灾梦,HR=0.632峡钓,表明聯(lián)合治療組與S-1單藥相比,其復(fù)發(fā)風(fēng)險(xiǎn)降低37%若河;此時(shí)橫線線段不與無(wú)效線相交能岩,提示聯(lián)合治療組與單藥治療組總體人群中的差異有統(tǒng)計(jì)學(xué)意義。
下面都是分層分析的結(jié)果萧福,在不同的性別拉鹃、年齡、分期等多個(gè)亞組人群中RFS(無(wú)復(fù)發(fā)生存)的變化情況鲫忍。以性別為例:男性(Male)中的HR為0.605膏燕,表明在男性胃癌患者接受聯(lián)合治療與接受單獨(dú)S-1治療相比,其復(fù)發(fā)風(fēng)險(xiǎn)降低了39.5%悟民,此時(shí)橫線線段不與無(wú)效線相交坝辫,也提示聯(lián)合治療組與單藥治療組在男性這組人群中的差異有統(tǒng)計(jì)學(xué)意義。女性人群中的HR=0.704射亏,表明在女性胃癌患者接受聯(lián)合治療與接受單獨(dú)S-1治療相比近忙,其復(fù)發(fā)的風(fēng)險(xiǎn)降低了29.6%,此時(shí)橫線線段與無(wú)效線相交智润,提示聯(lián)合治療組與單藥治療組在女性這組人群中的差異無(wú)統(tǒng)計(jì)學(xué)意義及舍。最后出現(xiàn)的交互作用P值為0.6058,大于0.05窟绷,說(shuō)明男性和女性中藥物兩組方案的藥物治療與疾病復(fù)發(fā)關(guān)系的差異并不明顯锯玛,也就是說(shuō)明男性HR(0.605)和女性的HR(0.705)差異不顯著,不能認(rèn)為藥物治療和復(fù)發(fā)的關(guān)系在不同性別中不一樣钾麸。
如何繪制森林圖更振?
第一種情況: 單因素cox回歸結(jié)果
- 針對(duì)單個(gè)變量,做cox回歸繪制森林圖饭尝,ggforest——直接用單因素cox回歸返回的結(jié)果做森林圖肯腕,ggforest(res.cox, data = lung) ,以cox回歸結(jié)果和數(shù)據(jù)源兩個(gè)參數(shù)即可钥平,這種方式森林圖主要只展現(xiàn)變量实撒、樣本數(shù)量、置信區(qū)間及線圖(樣式比較局限)涉瘾。
- 針對(duì)單個(gè)變量(多分類)知态,如果結(jié)果只想顯示整體,那么將該多分類變量數(shù)值化表示立叛;如果想?yún)f(xié)變量都展示负敏,那么將該多分類變量字符化,并轉(zhuǎn)化為因子秘蛇,首位因子被默認(rèn)為參照其做!
針對(duì)多個(gè)變量****(****常見(jiàn)形式****)的單因素回歸分析做森林圖,或者想在森林圖中添加其他信息時(shí)需要將多個(gè)變量的結(jié)果進(jìn)行匯總赁还,整理成表格(或其他格式)妖泄,然后采用forestplot函數(shù)做森林圖,整理數(shù)據(jù)結(jié)構(gòu)如下:變量名艘策、樣本數(shù)量蹈胡、占比等信息源自臨床信息匯總整理;置信區(qū)間和P值源自cox回歸結(jié)果朋蔫。
- image
針對(duì)特殊情況——亞組森林圖罚渐,同樣也需要將所有信息整理成表格形式,然后用forestplot繪圖斑举。變量名搅轿、樣本數(shù)量、占比富玷、某因素條件分組(如下圖的FOLFOX和FOLFOX plus SIRT兩種條件璧坟,其下數(shù)據(jù)可以是樣本數(shù)量、事件發(fā)生率等)源自臨床信息匯總整理赎懦;置信區(qū)間源自cox回歸結(jié)果雀鹃;顯著性視情況,有文章不放也有文章放(常見(jiàn)兩種P value和P interaction)励两。分組森林圖的做法黎茎,就是在固定的某種因素條件下,探索各種變量的分組條件下的單因素cox回歸当悔,如年齡:不同年齡亞組傅瞻;如性別:男女不同亞組踢代。簡(jiǎn)單點(diǎn)理解:其實(shí)就是在各種不同變量的亞群數(shù)據(jù)集中,探索某個(gè)固定因素對(duì)結(jié)局事件的影響嗅骄。
第二種情況:多因素cox回歸森林圖
- 針對(duì)多因素cox回歸胳挎,滿足普通需求,用ggforest即可(只能展示變量溺森、樣本數(shù)量慕爬、置信區(qū)間及線圖這幾個(gè)信息)
- 對(duì)于多分類變量,如果結(jié)果只想顯示整體屏积,那么將該多分類變量數(shù)值化表示医窿;如果想?yún)f(xié)變量都展示,那么將該多分類變量字符化炊林,并轉(zhuǎn)化為因子姥卢,首位因子被默認(rèn)為參照!(如sex)
具體繪制方法:
1. ggforest函數(shù)繪制森林圖(以1個(gè)單因素cox為例)
##------------------------sex整體展示-------------------
rm(list = ls())
library("survival")
library("survminer")
#載入并查看數(shù)據(jù)集
data("lung")
head(lung)
str(lung)#該數(shù)據(jù)將所有變量都轉(zhuǎn)換為數(shù)值型渣聚,包括性別(1,2表示)隔显,分期(1,2,3,4表示)等。若是字符型的話饵逐,結(jié)果會(huì)有所不同括眠!
res.cox <- coxph(Surv(time, status) ~ sex, data = lung)
res.cox
summary(res.cox)
#繪制森林圖(ggforest),繪制單個(gè)變量的單因素cox森林圖
ggforest(res.cox, data = lung, #數(shù)據(jù)集
main = 'Hazard ratio', #標(biāo)題
cpositions = c(0.05, 0.15, 0.35), #前三列距離
fontsize = 1, #字體大小
noDigits = 3 #保留HR值以及95%CI的小數(shù)位數(shù)
)
#-------------------------sex分類分開(kāi)展示--------------------
rm(list = ls())
library("survival")
library("survminer")
#載入并查看數(shù)據(jù)集
data("lung")
head(lung)
str(lung)#該數(shù)據(jù)都為數(shù)值型,如性別(1,2表示).要分類展示cox回歸需要將分類變量因子化
#將分類變量從數(shù)值型改為因子
lung <- within(lung, {
sex <- factor(sex, labels = c('female', 'male'))}) # female為對(duì)照
res.cox <- coxph(Surv(time, status) ~ sex, data = lung)
res.cox
summary(res.cox)
#繪制森林圖(ggforest),多分類變量分開(kāi)展示
ggforest(res.cox, data = lung, #數(shù)據(jù)集
main = 'Hazard ratio', #標(biāo)題
cpositions = c(0.05, 0.15, 0.35), #前三列距離
fontsize = 1, #字體大小
noDigits = 3 #保留HR值以及95%CI的小數(shù)位數(shù)
)
##是否分開(kāi)展示看結(jié)果倍权,整體展示和分開(kāi)展示哪個(gè)好說(shuō)明好解釋用哪個(gè)掷豺!
2. ggforest函數(shù)繪制森林圖(以多因素cox為例)
##----------------------適用于數(shù)值型變量,即每個(gè)變量cox結(jié)果只有一行-------------------
rm(list = ls())
library("survival")
library("survminer")
#載入并查看數(shù)據(jù)集
data("lung")
head(lung)
str(lung)#該數(shù)據(jù)將所有變量都轉(zhuǎn)換為數(shù)值型
#cox 回歸分析
res.cox <- coxph(Surv(time, status) ~ age+sex+ph.ecog+ph.karno+pat.karno, data = lung)
res.cox
summary(res.cox)
#繪制森林圖(ggforest)
ggforest(res.cox, data = lung, #數(shù)據(jù)集
main = 'Hazard ratio', #標(biāo)題
cpositions = c(0.05, 0.15, 0.35), #前三列距離
fontsize = 1, #字體大小
noDigits = 3 #保留HR值以及95%CI的小數(shù)位數(shù)
)
#------------------適用于多分類變量,每個(gè)變量下的子變量都對(duì)應(yīng)一行數(shù)據(jù)----------------------
rm(list = ls())
library("survival")
library("survminer")
#載入并查看數(shù)據(jù)集
data("lung")
head(lung)
str(lung)#該數(shù)據(jù)都為數(shù)值型薄声,如性別(1,2表示). 要分類展示cox回歸需要將分類變量因子化
#將分類變量sex從數(shù)值型改為因子
lung <- within(lung, {
sex <- factor(sex, labels = c('female', 'male')) # female為對(duì)照
})
#cox回歸分析
res.cox <- coxph(Surv(time, status) ~ age+sex+ph.ecog+ph.karno+pat.karno, data = lung)
res.cox
summary(res.cox)
#繪制森林圖(ggforest),多分類分開(kāi)展示
ggforest(res.cox, data = lung, #數(shù)據(jù)集
main = 'Hazard ratio', #標(biāo)題
cpositions = c(0.05, 0.15, 0.35), #前三列距離
fontsize = 1, #字體大小
refLabel = '1', #相對(duì)變量的數(shù)值標(biāo)簽当船,也可改為1
noDigits = 3 #保留HR值以及95%CI的小數(shù)位數(shù)
)
##是否分開(kāi)展示看結(jié)果,整體展示和分開(kāi)展示哪個(gè)好說(shuō)明好解釋用哪個(gè)D妗德频!
3. Forestplot函數(shù)繪制森林圖(多個(gè)單因素cox為例)
Forestplot R包繪制森林圖更靈活,可根據(jù)自身需求繪制缩幸。它主要的難點(diǎn)在于這個(gè)R包依賴于已經(jīng)整理好的結(jié)果壹置,因此需要提前整理好相關(guān)數(shù)據(jù)。繪制森林圖的數(shù)據(jù)包括兩部分:
1. 圖中的文字部分:變量表谊、樣本數(shù)及占比钞护、分組條件下各自事件發(fā)生數(shù)量或比例等,這些需要自行整理爆办!
2. 置信區(qū)間線:數(shù)據(jù)源自cox回歸結(jié)果中的HR值难咕、上限值、下限值以及P值
大概數(shù)據(jù)要求如下:
具體繪制代碼可參考:R-forestplot包| HR結(jié)果繪制森林圖
rm(list = ls())
#載入R函數(shù)包
library(survival)
library(survminer)
library(forestplot)
#需要將多個(gè)自變量的單因素cox回歸結(jié)果進(jìn)行整理
#森林圖的數(shù)據(jù)包括兩部分:
##1.圖中的文字部分:變量、樣本數(shù)及占比余佃、分組條件下各自事件發(fā)生數(shù)量或比例等暮刃,這些需要自行整理!
##2. 置信區(qū)間線:數(shù)據(jù)源自cox回歸結(jié)果中的HR值爆土、上限值沾歪、下限值以及P值
##以整理好的uni_data為例
data <- read.csv("uni_data.csv", stringsAsFactors=FALSE)
#查看數(shù)據(jù)
head(data) #數(shù)據(jù)中包含HR值、上限值雾消、下限值以及P值,以及分組信息
#對(duì)數(shù)據(jù)進(jìn)行部分修改挫望,方便行名和列名字輸出:
## 構(gòu)建tabletext立润,更改列名稱,展示更多信息:
np <- ifelse(!is.na(data$Count), paste(data$Count," (",data$Percent,")",sep=""), NA)
tabletext <- cbind(c("Subgroup","\n",data$Variable),
c("No. of Patients (%)","\n",np),
c("4-Yr Cum. Event Rate\n PCI","\n",data$PCI.Group),
c("4-Yr Cum. Event Rate\n Medical Therapy","\n",data$Medical.Therapy.Group),
c("P Value","\n",data$P.Value))
##繪制森林圖:
forestplot(labeltext=tabletext, graph.pos=5,
mean=c(NA,NA,data$Point.Estimate),
lower=c(NA,NA,data$Low), upper=c(NA,NA,data$High),
title="Hazard Ratio",##定義x軸
xlab=" <---PCI Better--- ---Medical Therapy Better--->",
##根據(jù)亞組的位置媳板,設(shè)置線型桑腮,寬度造成“區(qū)塊感”:
hrzl_lines=list("3" = gpar(lwd=1, col="#99999922"),
"7" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
"15" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
"23" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922"),
"31" = gpar(lwd=60, lineend="butt", columns=c(2:6), col="#99999922")),
#fpTxtGp函數(shù)中的cex參數(shù)設(shè)置各個(gè)組件的大小:
txt_gp=fpTxtGp(label=gpar(cex=1.25),ticks=gpar(cex=1.1),xlab=gpar(cex = 1.2),title=gpar(cex = 1.2)),
##fpColors函數(shù)設(shè)置顏色:
col=fpColors(box="#1c61b6", lines="#1c61b6", zero = "gray50",summary = "red"),
#箱線圖中基準(zhǔn)線的位置:
zero=1,
cex=0.9, lineheight = "auto",
colgap=unit(8,"mm"), #列間距:
#誤差線的寬度蛉幸,箱子大衅铺帧:
lwd.ci=2, boxsize=0.5,
#箱線圖兩端添加小豎線及高度:
ci.vertices=TRUE, ci.vertices.height = 0.4)
往期回顧
TCGA+biomarker——常見(jiàn)結(jié)果展示
TCGA+biomarker——Sample基線表
TCGA+biomarker——單因素Cox回歸
更多內(nèi)容可關(guān)注公共號(hào)“YJY技能修煉”~~~