【发布时间】:2018-10-18 13:54:35
【问题描述】:
我正在使用出色的绘图库 bayesplot 来可视化我使用 rstanarm 估计的模型的后验概率区间。我想通过将系数的后验间隔放到同一个图上来以图形方式比较来自不同模型的绘图。
例如,想象一下,对于两个不同的模型,我有 1000 个来自后验的三个参数beta1, beta2, beta3:
# load the plotting library
library(bayesplot)
#> This is bayesplot version 1.6.0
#> - Online documentation and vignettes at mc-stan.org/bayesplot
#> - bayesplot theme set to bayesplot::theme_default()
#> * Does _not_ affect other ggplot2 plots
#> * See ?bayesplot_theme_set for details on theme setting
library(ggplot2)
# generate fake posterior draws from model1
fdata <- matrix(rnorm(1000 * 3), ncol = 3)
colnames(fdata) <- c('beta1', 'beta2', 'beta3')
# fake posterior draws from model 2
fdata2 <- matrix(rnorm(1000 * 3, 1, 2), ncol = 3)
colnames(fdata2) <- c('beta1', 'beta2', 'beta3')
Bayesplot 为单个模型绘制提供了出色的可视化效果,它是 ggplot2 的“底层”,所以我可以随意自定义:
# a nice plot of 1
color_scheme_set("orange")
mcmc_intervals(fdata) + theme_minimal() + ggtitle("Model 1")
# a nice plot of 2
color_scheme_set("blue")
mcmc_intervals(fdata2) + ggtitle("Model 2")
但我想要实现的是将这两个模型一起绘制在同一个图上,这样对于每个系数我都有两个区间,并且可以通过将颜色映射到模型来区分哪个区间。但是我无法弄清楚如何做到这一点。一些不起作用的东西:
# doesnt work
mcmc_intervals(fdata) + mcmc_intervals(fdata2)
#> Error: Don't know how to add mcmc_intervals(fdata2) to a plot
# appears to pool
mcmc_intervals(list(fdata, fdata2))
关于如何做到这一点的任何想法?或者如何在给定后验矩阵的情况下手动完成?
由reprex package (v0.2.1) 于 2018 年 10 月 18 日创建
【问题讨论】: