Bayesplot 包:可视化贝叶斯模型
点击下方公众号,回复资料分享,收获惊喜
简介
Bayesplot[1]包,提供了广泛的绘图函数库,用于在拟合贝叶斯模型后使用(通常使用 MCMC )。由 bayesplot 创建的图形是 ggplot 对象,这意味着在创建图形后,可以使用 ggplot2[2] 包中的各种函数进一步自定义。
目前,bayesplot 提供了各种后验抽样绘图、视觉 MCMC 诊断和图形后验(或先验)预测检查的绘图功能。未来的版本将添加其他功能(例如,用于预测/样本外预测和其他推断相关任务)。
bayesplot 的理念不仅是为用户提供方便的功能,还提供了一个共同的函数集,可以轻松地由开发人员在各种贝叶斯建模包上使用,特别是(但不一定是)由 RStan[3] 提供支持的包。
关于贝叶斯分析的推文,小编还写了:贝叶斯 RStan 包入门教程、资料分享|贝叶斯数据分析、从贝叶斯滤波到粒子滤波。
安装
从 CRAN 安装最新版本:
install.packages("bayesplot")
从 GitHub 安装最新的开发版本:
if (!require("devtools")) {
install.packages("devtools")
}
devtools::install_github("stan-dev/bayesplot")
例子1:回归模型
利用rstanarm[4]和rstan[5]包获得 MCMC 样本,根据这个抽样样本,我们给出 bayesplot 包的入门示例。其他更加详细的教程可见:
Plotting MCMC draws using the bayesplot package[6] Visual MCMC diagnostics using the bayesplot package[7] Graphical posterior predictive checks using the bayesplot package[8]
我们以 mtcars 数据集作为例子,使用 stan_glm()
构建贝叶斯框架下的回归模型。根据后验样本,使用 bayesplot 包中的各种函数进行可视化。
library("bayesplot")
library("rstanarm")
library("ggplot2")
fit <- stan_glm(mpg ~ ., data = mtcars)
posterior <- as.matrix(fit)
使用 mcmc_areas()
绘制后验分布的面积图
plot_title <- ggtitle("Posterior distributions",
"with medians and 80% intervals")
mcmc_areas(posterior,
pars = c("cyl", "drat", "am", "wt"),
prob = 0.8) + plot_title
使用 ppc_dens_overlay()
绘制预测分布和真实分布
color_scheme_set("red")
ppc_dens_overlay(y = fit$y,
yrep = posterior_predict(fit, draws = 50))
使用 ppc_stat_grouped()
绘制预测分布柱状图
# also works nicely with piping
library("dplyr")
color_scheme_set("brightblue")
fit %>%
posterior_predict(draws = 500) %>%
ppc_stat_grouped(y = mtcars$mpg,
group = mtcars$carb,
stat = "median")
例子2: rstan 中的八校数据
使用《贝叶斯数据分析》中最经典的八校数据进行分析。具体可见推文:贝叶斯 RStan 包入门教程。
library("rstan")
fit2 <- stan_demo("eight_schools", warmup = 300, iter = 700)
posterior2 <- extract(fit2, inc_warmup = TRUE, permuted = FALSE)
使用 mcmc_trace()
绘制各链轨迹图
color_scheme_set("mix-blue-pink")
p <- mcmc_trace(posterior2, pars = c("mu", "tau"), n_warmup = 300,
facet_args = list(nrow = 2, labeller = label_parsed))
p + facet_text(size = 15)
使用 mcmc_scatter()
绘制散点图
# scatter plot also showing divergences
color_scheme_set("darkgray")
mcmc_scatter(
as.matrix(fit2),
pars = c("tau", "theta[1]"),
np = nuts_params(fit2),
np_style = scatter_style_np(div_color = "green", div_alpha = 0.8)
)
使用 mcmc_nuts_energy()
进行 NUTS 能量诊断
color_scheme_set("red")
np <- nuts_params(fit2)
mcmc_nuts_energy(np) + ggtitle("NUTS Energy Diagnostic")
小编有话说
读者可以使用自己数据集在贝叶斯框架下进行分析,之后使用本文的 R 包进行结果可视化。
参考资料
Bayesplot: https://mc-stan.org/bayesplot/index.html
[2]ggplot2: https://ggplot2.tidyverse.org/
[3]RStan: https://mc-stan.org/rstan/
[4]rstanarm: https://mc-stan.org/rstanarm/
[5]rstan: https://mc-stan.org/rstan/
[6]Plotting MCMC draws using the bayesplot package: https://mc-stan.org/bayesplot/articles/plotting-mcmc-draws.html
[7]Visual MCMC diagnostics using the bayesplot package: https://mc-stan.org/bayesplot/articles/visual-mcmc-diagnostics.html
[8]Graphical posterior predictive checks using the bayesplot package: https://mc-stan.org/bayesplot/articles/graphical-ppcs.html
相关推文指南
cowplot包,ggplot2图形排版R包
使用 ggpubr 包制图
使用 ggcharts 高亮部分内容
使用 ggTimeSeries 包构建日历图
基于 ggdensity 包的等高线绘制
贝叶斯 RStan 包入门教程