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

如何在R中计算brms位置尺度模型的位置与尺度预测值?

解决brms位置-尺度模型的预测值计算与可视化问题

一、生成位置和尺度部分的预测值

brms对位置-尺度模型的多响应部分支持直接通过fitted()或predict()函数指定resp参数,分别计算均值(位置部分,resp="mu")和标准差(尺度部分,resp="sigma")的预测值,步骤如下:

  1. 构造预测网格数据
    先创建包含所有自变量组合的新数据集,覆盖edu_lvl的所有类别和SSI1Z的全范围,固定wave和S003为典型值(如中位数),后续可通过参数设置边缘化随机效应:
# 构造预测用的网格数据
new_data <- expand.grid(
  edu_lvl = unique(Data$edu_lvl),
  SSI1Z = seq(min(Data$SSI1Z), max(Data$SSI1Z), length.out = 100),
  wave = median(Data$wave),
  S003 = median(Data$S003)
)
  1. 计算位置部分(预测均值)
    使用fitted()函数指定resp="mu",添加re_formula=NA可边缘化随机效应,得到总体层面的边际预测:
# 计算均值的预测值及95%置信区间
pred_mu <- fitted(modelout, 
                  newdata = new_data,
                  resp = "mu",
                  re_formula = NA)
# 合并到新数据集
new_data$mu_est <- pred_mu[, "Estimate"]
new_data$mu_low <- pred_mu[, "Q2.5"]
new_data$mu_high <- pred_mu[, "Q97.5"]
  1. 计算尺度部分(预测sigma)
    同理,指定resp="sigma"计算标准差的预测值:
# 计算sigma的预测值及95%置信区间
pred_sigma <- fitted(modelout, 
                     newdata = new_data,
                     resp = "sigma",
                     re_formula = NA)
# 合并到新数据集
new_data$sigma_est <- pred_sigma[, "Estimate"]
new_data$sigma_low <- pred_sigma[, "Q2.5"]
new_data$sigma_high <- pred_sigma[, "Q97.5"]

二、可视化跨层交互效应

直接使用ggplot2绘制所需的交互图,灵活性更高:

  1. 图1:SSI1Z与预测均值的交互(按教育水平分组)
library(ggplot2)

ggplot(new_data, aes(x = SSI1Z, y = mu_est)) +
  geom_line(aes(color = as.factor(edu_lvl), linetype = as.factor(edu_lvl)), linewidth = 1) +
  geom_ribbon(aes(ymin = mu_low, ymax = mu_high, fill = as.factor(edu_lvl)), alpha = 0.2, color = NA) +
  labs(x = "SSI1Z", 
       y = "political_interestZ预测均值", 
       color = "教育水平", 
       linetype = "教育水平", 
       fill = "教育水平") +
  theme_minimal()
  1. 图2:SSI1Z与预测sigma的交互(按教育水平分组)
ggplot(new_data, aes(x = SSI1Z, y = sigma_est)) +
  geom_line(aes(color = as.factor(edu_lvl), linetype = as.factor(edu_lvl)), linewidth = 1) +
  geom_ribbon(aes(ymin = sigma_low, ymax = sigma_high, fill = as.factor(edu_lvl)), alpha = 0.2, color = NA) +
  labs(x = "SSI1Z", 
       y = "political_interestZ预测标准差", 
       color = "教育水平", 
       linetype = "教育水平", 
       fill = "教育水平") +
  theme_minimal()

补充说明

  • 若需要保留特定随机效应(如针对某个国家或调查波次),移除re_formula=NA即可,但边际预测(边缘化随机效应)通常更适合展示总体的交互模式。
  • fitted()返回的是模型拟合的均值/标准差估计,而predict()返回的是因变量的预测值(包含随机误差),此处我们需要的是位置和尺度参数的估计,因此fitted()更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:55:13