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

如何从brms分层贝叶斯模型提取无分组后验样本及conditional_effects数据?

分层贝叶斯模型后验样本提取与conditional_effects数据说明

一、提取不含分层分组的后验样本(查看通用关系分布)

当然可以,你需要的是**群体水平(population-level)**的后验结果——也就是只保留固定效应、排除所有随机效应的后验分布,对应变量间的通用关系。有两种常用方法:

方法1:用posterior_epred()直接生成群体水平后验预测

通过指定re_formula = ~0,可以让函数只基于固定效应计算后验预测,完全排除随机效应的影响:

# 提取群体水平的后验预测样本(不含任何随机效应)
population_draws <- posterior_epred(m, re_formula = ~0)
# 转换为数据框便于查看和分析
population_draws_df <- as.data.frame(population_draws)

得到的population_draws每一列对应原始数据中一个观测的群体水平后验预测,每一行对应一个后验样本。

方法2:手动提取固定效应后验样本计算

如果你想针对特定的自变量取值计算通用关系,也可以直接提取固定效应的后验样本自己计算:

# 提取固定效应的原始后验样本(每行是一个样本,每列是一个参数)
fixed_effects <- fixef(m, summary = FALSE)
# 示例:计算water=0.5时的群体水平预测分布
target_water <- 0.5
population_pred_dist <- fixed_effects[, "(Intercept)"] + fixed_effects[, "water"] * target_water

population_pred_dist就是water取0.5时,通用关系对应的后验分布向量。

二、conditional_effects()的绘图数据提取

conditional_effects()默认使用群体水平的预测数据(即排除随机效应)来绘制效应曲线,它会自动生成自变量的网格取值,然后计算每个网格点对应的后验预测均值、置信区间等统计量。

要提取这些原始数据非常简单,只需将函数结果保存为对象,直接访问即可:

1. 提取默认的效应统计数据

# 保存conditional_effects的结果
ce_results <- conditional_effects(m)
# 查看结果结构(每个元素对应一个预测变量的效应数据)
str(ce_results)
# 提取water变量的效应数据(包含网格点、预测均值、置信区间等)
water_effect_data <- ce_results$water

water_effect_data是一个数据框,包含自变量water的网格取值、后验预测均值estimate__,以及置信区间的上下限lower__和upper__。

2. 提取原始后验样本

如果需要获取绘图背后的所有后验预测样本,可以在调用函数时加上draws = TRUE参数:

# 带原始后验样本的效应结果
ce_with_draws <- conditional_effects(m, draws = TRUE)
# 提取water效应对应的所有后验样本(列名以draw开头)
water_raw_draws <- ce_with_draws$water[, grep("^draw", colnames(ce_with_draws$water))]

water_raw_draws的每一行对应一个自变量网格点,每一列对应一个后验预测样本。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:44:58