之前的推文参考《R语言实战》介绍了R语言做Logistic回归分析的简单小例子,今天的推文继续,介绍一些Logistic回归分析结果的展示方法。



在文献中,我们常常看到以表格的形式展示各种回归结果(如Logistic回归,多重线性,Cox回归等),比如2019年发表在 ​Environment International​ 上的论文 ​Exposure of metals and PAH through local foods and risk of cancer in a historically contaminated glassworks area


R语言画森林图展示Logistic回归分析的结果_f5 image.png

R语言画森林图展示Logistic回归分析的结果_logistic回归_02 image.png


就采用表格的形式展示Logistic回归分析的结果,上述表格把有统计学意义的结果进行了加粗,使得读者看起来不那么费劲。那么,有没有更加直观的方法展示回归结果呢?当然有,那就是森林图。近年来,越来越多文献用森林图来展示回归的结果。接下来我们一起来学习一下如何用R作森林图。


第一步是准备数据


森林图展示的数据通常是Logistic回归分析的系数和95%置信区间以及显著性检验的P值,那么如何获得这些结果呢?


logistic回归分析的代码

data(Affairs,package = "AER")
df<-Affairs
df$ynaffairs<-ifelse(df$affairs>0,1,0)
df$ynaffairs<-factor(df$ynaffairs,
levels = c(0,1),
labels = c("No","Yes"))
fit.full<-glm(ynaffairs~gender+age+yearsmarried+
children+religiousness+education+occupation+rating,
data=df,family = binomial())

fit.result<-summary(fit.full)
df1<-fit.result$coefficients
df2<-confint(fit.full)
df3<-cbind(df1,df2)
df4<-data.frame(df3[-1,c(1,4,5,6)])
df4$Var<-rownames(df4)
colnames(df4)<-c("OR","Pvalue","OR_1","OR_2","Var")
df5<-df4[,c(5,1,2,3,4)]
df5$OR_mean<-df5$OR
df5$OR<-paste0(round(df5$OR,2),
"(",
round(df5$OR_1,2),
"~",
round(df5$OR_2,2),
")")
df5$Pvalue<-round(df5$Pvalue,3)
write.csv(df5,file = "forestplot_example.csv",
quote = F,row.names = F)

导出数据以后需要自己手动添加一行,

最终作图的数据如下


R语言画森林图展示Logistic回归分析的结果_f5_03 image.png


这里准备数据的过程稍微有些繁琐了,不知道大家有没有简便的方法呢?欢迎留言讨论呀!


接下来作图使用forestplot这个包

首先是安装

install.packages("forestplot")

读入数据并作图

library(forestplot)
fp<-read.csv("forestplot_example.csv",header=T)

forestplot(labeltext=as.matrix(fp[,1:3]),
mean=fp$OR_mean,
lower=fp$OR_1,
upper=fp$OR_2,
zero=0,
boxsize=0.2,
graph.pos=2)

R语言画森林图展示Logistic回归分析的结果_数据_04 image.png

接下来是简单的美化

forestplot(labeltext=as.matrix(fp[,1:3]),
mean=fp$OR_mean,
lower=fp$OR_1,
upper=fp$OR_2,
zero=0,
boxsize=0.2,
lineheight = unit(7,'mm'),
colgap=unit(2,'mm'),
lwd.zero=1.5,
lwd.ci=2,
col=fpColors(box='#458B00',
summary='#8B008B',
lines = 'black',
zero = '#7AC5CD'),
xlab="OR",
lwd.xaxis =1,
txt_gp = fpTxtGp(ticks = gpar(cex = 0.85),
xlab = gpar(cex = 0.8),
cex = 0.9),
lty.ci = "solid",
title = "Forestplot",
line.margin = 0.08,
graph.pos=2)

R语言画森林图展示Logistic回归分析的结果_数据_05 image.png

欢迎大家关注我的公众号

小明的数据分析笔记本