如何为brm模型生成带标签的固定参数预测值?
解决brms中posterior_predict/posterior_epred输出无标签矩阵的问题
当用brms模型针对固定length值生成预测时,posterior_predict()和posterior_epred()会返回无标签的大型矩阵,难以对应到newdata中的分组(如site、sex)。以下是两种实用的解决方法:
方法1:用tidybayes生成带标签的tidy数据框
tidybayes包提供的add_predicted_draws()(对应posterior_predict)和add_epred_draws()(对应posterior_epred),可以直接将后验预测结果与newdata合并,生成带分组标签的长格式数据,无需手动处理矩阵。
library(tidyverse) library(brms) library(tidybayes) set.seed(42) df <- data.frame(mass = rnorm(100, mean = 50, sd = 5), length = rnorm(100, mean = 20, sd = 2), sex = sample(c("f", "m"), 100, replace = TRUE), site = sample(LETTERS[1:3], 100, replace = TRUE)) m <- brm(mass ~ length * sex + site, data = df, prior = prior(normal(0, 10))) newdata <- data.frame(site = rep(LETTERS[1:3], each = 30), sex = rep(c("f", "m"), 45), length = 20) # 生成带标签的后验预测值(对应posterior_predict) pred_tidy_predict <- newdata %>% add_predicted_draws(m) # 生成带标签的期望预测值(对应posterior_epred) pred_tidy_epred <- newdata %>% add_epred_draws(m) # 用tidy数据绘图,展示posterior_predict结果 ggplot(pred_tidy_predict, aes(x = .prediction, y = site, color = sex)) + geom_violin(alpha = 0.5) + labs(x = "预测mass值", y = "采样点", color = "性别")
方法2:手动转换矩阵为带标签的数据框
如果不想额外加载包,可以手动将posterior_predict()/posterior_epred()返回的矩阵转换为长格式,再与newdata的分组信息绑定:
# 处理posterior_predict的结果 pred2 <- posterior_predict(m, newdata) pred2_tidy <- pred2 %>% as.data.frame() %>% pivot_longer(everything(), names_to = "row_id", values_to = "pred_mass") %>% mutate(row_id = as.integer(str_remove(row_id, "V"))) %>% bind_cols(newdata[.$row_id, ]) # 处理posterior_epred的结果 pred3 <- posterior_epred(m, newdata) pred3_tidy <- pred3 %>% as.data.frame() %>% pivot_longer(everything(), names_to = "row_id", values_to = "epred_mass") %>% mutate(row_id = as.integer(str_remove(row_id, "V"))) %>% bind_cols(newdata[.$row_id, ]) # 绘图示例 ggplot(pred2_tidy, aes(x = pred_mass, y = site, color = sex)) + geom_violin(alpha = 0.5)
补充说明
posterior_predict()生成包含残差的预测分布(模拟实际观测值),posterior_epred()生成期望预测分布(模型拟合均值),按需选择即可。- 两种方法生成的tidy数据框都能直接用于可视化,且保留了完整后验分布信息,适合做不确定性分析。

内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

