如何用tidybayes绘制brms模型的随机效应图?
用Tidybayes绘制含固定效应+随机截距&斜率的贝叶斯模型可视化
针对你提到的modd1这类包含固定效应、随机截距和斜率的混合效应模型,核心是正确结合固定效应参数与对应组的随机效应偏移,再用Tidybayes的工具可视化。以下是具体操作方法:
先明确模型结构
你的模型公式是:
modd1 <- brm(hp ~ mpg + cyl + am + (1 + gear|mpg), data = mtcars)
对应的数学表达式为:
hp = b_Intercept + b_mpg×mpg + b_cyl×cyl + b_am×am + (r_mpg[mpg,Intercept] + r_mpg[mpg,gear]×gear)
其中:
b_*是固定效应参数r_mpg[mpg, Intercept]是每个mpg组的截距随机偏移r_mpg[mpg, gear]是每个mpg组的gear斜率随机偏移
可视化方向1:每个mpg组的gear总斜率(固定+随机偏移)
如果想展示每个mpg组中,gear对hp的实际影响(固定效应加上该组的随机偏移),可以这样做:
# 先查看模型所有变量,确认随机效应命名 get_variables(modd1) # 提取参数并计算总斜率 modd1 %>% spread_draws(b_mpg, r_mpg[mpg, gear]) %>% mutate(total_gear_slope = b_mpg + r_mpg) %>% # 固定斜率+组内随机偏移 ggplot(aes(y = factor(mpg), x = total_gear_slope)) + stat_halfeye() + # 同时展示密度分布和区间 labs( y = "mpg分组", x = "gear对hp的总斜率(固定+随机偏移)", title = "各mpg组的gear斜率分布" )
可视化方向2:特定gear值下,各mpg组的预测hp均值
如果想展示在特定gear值(比如gear=4)时,不同mpg组的hp预测分布,可以结合所有固定效应和随机效应计算预测值:
modd1 %>% # 提取所有需要的参数:固定截距、固定系数、随机截距和斜率 spread_draws(b_Intercept, b_mpg, b_cyl, b_am, r_mpg[mpg, Intercept], r_mpg[mpg, gear]) %>% # 这里用cyl和am的均值简化计算,也可以替换为你关注的特定值 mutate( avg_cyl = mean(mtcars$cyl), avg_am = mean(mtcars$am), # 计算gear=4时,每个mpg组的预测hp均值 hp_pred_gear4 = b_Intercept + b_mpg*mpg + b_cyl*avg_cyl + b_am*avg_am + r_mpg[mpg, Intercept] + r_mpg[mpg, gear]*4 ) %>% ggplot(aes(y = factor(mpg), x = hp_pred_gear4)) + stat_halfeye() + labs( y = "mpg分组", x = "gear=4时的预测hp均值", title = "不同mpg组在gear=4下的hp分布" )
关键注意点
- 使用
spread_draws()可以同时提取多个参数,包括多维随机效应(r_mpg[mpg, term]会自动展开为每个mpg组的对应随机效应项) - 必须严格按照模型公式组合参数,确保计算的量符合模型逻辑
stat_halfeye()是Tidybayes的核心可视化组件,能同时呈现后验密度分布和区间估计,非常适合贝叶斯结果展示
内容的提问来源于stack exchange,提问作者Annemarie
相关产品推荐
相关产品推荐

