You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 08:31:48