Forest plot(森林图)
森林图在临床数据分析中很常见,通过图片的形式直接展示一些常见回归分析的结果,比表格更直观和清晰。
思路流程大概是这样:
安装必备软件包----> 获取数据----> 构建模型----> 绘制森林图----> 图片优化
1)安装必备软件包
#安装并载入R包
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("survival")
BiocManager::install("survminer")
library(survival)
library(survminer)
2)获取数据
由于懒得下载数据,而且TCGAbiolinks包太大,安装容易下载失败,因此数据自己构建。
tumor_data <- data.frame(patient_ID = seq(1,1000),
gender = as.character(sample(c("Male","Female"),1000,replace = TRUE)),
status = sample(c(0,1),1000,replace = TRUE), #结局事件,0代表死亡,1代表生存
time = rnorm(1000,312,120), #生存时间
age = round(runif(1000,min=23,max=90)),
grade = as.character(paste("G",round(runif(1000,min=0,max=4)),sep = "")),
height = round(runif(1000,min=155,max=190)),
weight = round(runif(1000,min=80,max=200)))
3) 构建模型
临床数据模型的构建,这里统称临床预测模型,因为主要是基于已有的数据,通过数学模型(如logistics回归、COX回归等),
估算患有某病的概率或者将来某结局发生的概率。
临床预测模型包括诊断模型(Diagnosticmodels)和预后模型(Prognostic Models)。
诊断模型关注的是基于研究对象的临床症状和特征,诊断当前患有某种疾病的概率,多见于横断面研究。
预后模型关注的是在当下的疾病状态下,未来某段时间内疾病复发、死亡,伤残以及出现并发症等结局的概率,多见于队列研究。
如图所示:
因为构建的是肿瘤数据,因此包含生存时间(time)和结局事件(生存、死亡或者删失),模型选择COX多因素回归模型。
即 比例风险(Cox)回归模型——Proportional hazards model 通常是time-to-event
然而数据中也包生存时间,因此可以做生存分析,本文暂不说明,下次再深究。
#这里,Surv(time, status) 即生存时间即time;结局事件即status
#~ age + gender + grade 即你想纳入分析的变量,根据情况自己添加或者删除
model <- coxph( Surv(time, status) ~ age + gender + grade , data = tumor_data )
4)绘制森林图
ggforest(model, data = tumor_data )
结果大概是这个亚子,但是因为数据是随机生成的,显示的数值会不一样,不用担心。
5)图片调整和优化
model <- coxph( Surv(time, status) ~ age + gender + grade , data = tumor_data )
ggforest(model,
data = tumor_data ,
main = 'Hazard ratio of LIHC', #标题
cpositions = c(0.05, 0.15, 0.35), #前三列距离
fontsize = 1, #字体大小
refLabel = 'reference', #相对变量的数值标签,也可改为1
noDigits = 3 #保留HR值以及95%CI的小数位数
)
这个亚子
到此,基础的森林图就结束了。
附上原创诗一首:
意将寒夜锥悬梁
不可枉自虚寸光
待到夏荷映满日
为君奉上酒一池