如何在R的meta包漏斗图X轴绘制未转换比例
问题解决:meta包漏斗图X轴显示原始比例并按年份分组着色
问题背景
使用R语言的meta包绘制比例漏斗图,按年份分为"1980年前"(蓝色)和"1980年及以后"(红色)两组着色。需要让X轴显示未转换的原始比例,但尝试设置backtransf=F和atransf参数均无效,当前生成的漏斗图X轴为对数转换后的数值。
原代码如下:
library(meta); library(metafor) data(Fleiss1993bin) m1 <- metaprop(d.asp, n.asp, data = Fleiss1993bin, sm = "PLO") Fleiss1993bin$year_2gps<-"1980年前" Fleiss1993bin$year_2gps[Fleiss1993bin$year >=1980 ]<-"1980年及以后" # 尝试显示原始比例但无效 funnel(m1, backtransf = F,# sm="PLO", order = c("1980年前","1980年及以后"), pch = c(7,7,7), col = c("blue", "red"), linreg = F) legend(-2.5, 0, c("1980年前","1980年及以后"), fill = c("blue", "red"))
解决方法
因为使用了sm="PLO"(比例的对数转换),meta包默认会基于转换后的数值绘制漏斗图。要显示原始比例,需要开启逆转换并指定正确的逆转换函数,同时修正分组颜色的映射逻辑:
修改后的代码
library(meta); library(metafor) data(Fleiss1993bin) # 处理年份分组并转为因子,确保顺序正确 Fleiss1993bin$year_2gps <- ifelse(Fleiss1993bin$year >=1980, "1980年及以后", "1980年前") Fleiss1993bin$year_2gps <- factor(Fleiss1993bin$year_2gps, levels = c("1980年前", "1980年及以后")) # 构建meta分析对象 m1 <- metaprop(d.asp, n.asp, data = Fleiss1993bin, sm = "PLO") # 绘制漏斗图:开启逆转换,还原为原始比例,按分组着色 funnel(m1, backtransf = TRUE, # 开启逆转换开关 atransf = plogit, # 指定对数转换的逆函数,将X轴转回原始比例 col = c("blue", "red")[Fleiss1993bin$year_2gps], # 按分组映射颜色 pch = 7, linreg = FALSE) # 调整图例位置适配0-1的X轴范围 legend("topright", legend = levels(Fleiss1993bin$year_2gps), fill = c("blue", "red"), bty = "n")
关键说明
- 逆转换逻辑:
backtransf=TRUE触发逆转换,atransf=plogit指定用对数转换的逆函数(plogit()),将X轴的对数刻度还原为0-1之间的原始比例。 - 颜色映射修正:直接通过
col = c("blue", "red")[Fleiss1993bin$year_2gps]让每个数据点的颜色对应自身分组,避免order参数可能导致的颜色错位。 - 图例适配:X轴转为0-1范围后,将图例移至右上角更合理,关闭图例边框(
bty="n")可让图表更整洁。
内容的提问来源于stack exchange,提问作者Mohamed Rahouma
相关产品推荐
相关产品推荐

