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

如何用plotREsim仅显示效应范围不跨0的x轴刻度标签

解决plotREsim毛虫图仅显示CI不跨0组标签的问题

核心思路是直接利用plotREsim返回的绘图数据(而非手动计算置信区间)来筛选符合条件的组,确保标签与图形完全匹配:

步骤1:生成绘图对象并提取内部数据

plotREsim返回的ggplot对象中包含了用于绘图的随机效应模拟数据,直接提取这些数据就能保证和图形显示的置信区间一致:

library(lme4)
library(merTools)

# 假设你已经有训练好的reEX1_model模型
# 生成毛虫图对象,sims参数控制模拟次数(建议至少1000次)
p <- plotREsim(reEX1_model, sims = 1000, facet = FALSE)
# 提取绘图用的随机效应及置信区间数据
re_data <- p$data

步骤2:筛选置信区间不跨越0的组

筛选出lower > 0(效应全部为正)或upper < 0(效应全部为负)的组:

valid_groups <- re_data$group[re_data$lower > 0 | re_data$upper < 0]

步骤3:自定义x轴标签并更新绘图

通过scale_x_discrete设置仅显示符合条件的组标签,其余标签设为空:

# 自定义标签函数
custom_x_labels <- function(x) {
  ifelse(x %in% valid_groups, as.character(x), "")
}

# 更新绘图,可选添加标签旋转避免重叠
p_final <- p + 
  scale_x_discrete(labels = custom_x_labels) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# 查看结果
print(p_final)

为什么手动计算会出错?

plotREsim是通过模拟随机效应分布来生成置信区间的,和你手动用ranef()或fixef()计算的置信区间逻辑不同,两者的结果会存在差异。直接使用函数内部生成的数据,才能保证标签和图形显示的区间完全对应。

完整示例(含模拟数据)

如果需要验证,可以用以下模拟数据测试:

set.seed(123)
# 模拟分层数据
dat <- data.frame(
  y = rbinom(1000, 1, 0.5),
  x = rnorm(1000),
  group = sample(letters[1:20], 1000, replace = TRUE)
)
# 训练逻辑斯蒂混合模型
reEX1_model <- glmer(y ~ x + (1|group), data = dat, family = binomial)

# 执行上述绘图流程
p <- plotREsim(reEX1_model, sims = 1000, facet = FALSE)
re_data <- p$data
valid_groups <- re_data$group[re_data$lower > 0 | re_data$upper < 0]

p + scale_x_discrete(labels = function(x) ifelse(x %in% valid_groups, x, "")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

内容的提问来源于stack exchange,提问作者Anonymous Tervuren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:49:48