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

R语言混合效应模型绘制Y轴为OR值点图问题求解

解决方案

核心需求对应实现逻辑

针对两个问题的实现思路如下:

  • 坐标轴调整:plot_model()原生支持坐标轴交换,旧版本可通过ggplot2的坐标翻转函数实现
  • 变量筛选:无需手动枚举因子水平或待排除变量,可通过正则自动匹配目标变量的所有因子水平,适配任意数量的协变量

完整可复现代码

library(lme4)
library(sjPlot)
library(dplyr)
library(ggplot2)

# 数据处理
df <- sleepstudy %>% 
  mutate(
    slow = ifelse(Reaction >= 300, 1, 0),
    Days = as.factor(Days)
  )

# 拟合混合效应逻辑回归
m <- glmer(slow ~ Days + (1 | Subject), data = df, family = binomial)

# 自动匹配所有Days对应的固定效应项,无需手动逐个输入水平名
# sjPlot版本≥2.8.10可直接写 terms = "Days",无需grep步骤
selected_terms <- grep("^Days", names(fixef(m)), value = TRUE)

# 输出目标图形
plot_model(
  m,
  terms = selected_terms,
  exponentiate = TRUE, # 返回OR值,而非logit变换后的系数
  show.reflvl = TRUE, # 自动展示参考组(Days=0),OR固定为1
  swap.axes = TRUE, # 交换坐标轴:X轴为天数,Y轴为OR值
  title = "反应时慢于300ms的比值比随时间变化趋势",
  axis.title = c("天数", "比值比(OR)"),
  dot.size = 2,
  ci.lvl = 0.95
) +
  # 可选美化:添加OR=1的无差异参考线,固定X轴天数按数值顺序排列
  geom_hline(yintercept = 1, linetype = "dashed", color = "grey50") +
  scale_x_discrete(limits = levels(df$Days))

参数说明

  • 变量自动筛选:grep("^Days", names(fixef(m)), value = TRUE)会匹配所有以"Days"开头的固定效应系数,不管Days有多少个因子水平、模型中包含多少其他协变量,都能一键选中所有Days对应的效应,完全避免手动输入的繁琐操作。如果模型中存在Days相关的交互项不需要展示,可以调整正则规则进一步筛选。
  • 坐标轴调整:swap.axes = TRUE是sjPlot内置的坐标轴交换参数,设置后直接将分类变量(天数)放在X轴,效应值(OR)放在Y轴;如果使用的旧版本包没有这个参数,删掉该参数,在代码末尾加+ coord_flip()即可实现完全一致的效果。
  • 参考组展示:show.reflvl = TRUE会自动把因子的参考水平(Days=0)加入图中,不需要手动构造数据点,时间趋势从基线OR=1开始展示,更符合纵向研究的展示逻辑。

内容的提问来源于stack exchange,提问作者Tan Sing Chee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:06:51