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

如何用marginaleffects绘制lme4多水平模型所有集群的平均预测图?

多水平模型群体平均预测结果绘图解决方案

问题背景

使用lme4构建多水平模型mod5后,希望展示:当fem_parl_mean_diff变化、其余预测变量取均值时,不同性别群体的satislife预测变化,且呈现所有国家集群的平均结果。但marginaleffects::plot_predictions默认仅输出众数国家集群的图,分面图为单个国家结果,by参数也无法满足需求。

模型代码:

mod5 <- lmer (satislife ~ 1 + gender * (fem_parl_mean + fem_parl_mean_diff + intdate_day  + poly(age, degree = 3) + GDP) + (1 + gender | country), data = merged_df)

解决方案

核心是边缘化随机效应,即对所有国家集群的随机效应取平均,得到群体层面的预测结果,而非单个国家的结果。

方法1:用predictions()生成数据后自定义绘图

先生成群体平均的预测数据集,再用ggplot灵活绘图:

library(marginaleffects)
library(ggplot2)

# 生成预测数据:边缘化随机效应,其余变量取均值
preds <- predictions(
    mod5,
    newdata = datagrid(
        # 按区间生成fem_parl_mean_diff的取值,保证曲线平滑
        fem_parl_mean_diff = seq(min(merged_df$fem_parl_mean_diff, na.rm = TRUE), 
                                max(merged_df$fem_parl_mean_diff, na.rm = TRUE), 
                                length.out = 100),
        gender = unique(merged_df$gender),
        grid_type = "balanced",
        # 其余协变量取均值
        fem_parl_mean = mean(merged_df$fem_parl_mean, na.rm = TRUE),
        intdate_day = mean(merged_df$intdate_day, na.rm = TRUE),
        age = mean(merged_df$age, na.rm = TRUE),
        GDP = mean(merged_df$GDP, na.rm = TRUE)
    ),
    # 关键参数:边缘化随机效应,得到所有国家的平均结果
    re.form = ~0
)

# 绘制带置信区间的折线图
ggplot(preds, aes(x = fem_parl_mean_diff, y = estimate, color = gender)) +
    geom_line(linewidth = 1) +
    geom_ribbon(aes(ymin = conf.low, ymax = conf.high, fill = gender), 
                alpha = 0.2, color = NA) +
    labs(
        x = "fem_parl_mean_diff",
        y = "预测生活满意度",
        color = "性别",
        fill = "性别",
        title = "不同性别群体的生活满意度预测(所有国家平均)"
    ) +
    theme_minimal()

方法2:直接用plot_predictions()指定边缘化参数

如果想直接用plot_predictions(),只需添加re.form = ~0参数,即可跳过单个国家的随机效应,输出群体平均结果:

plot_predictions(
    mod5,
    condition = c("fem_parl_mean_diff", "gender"),
    newdata = datagrid(grid_type = "balanced"),
    # 边缘化随机效应,得到群体平均
    re.form = ~0
)

原理说明

re.form = ~0参数告诉模型不计算单个国家的随机效应预测值,而是对所有国家的随机效应进行边缘化处理,最终得到的是**群体平均(population-averaged)**的预测结果,完美匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:19