For models fit using MCMC (algorithm="sampling"
), the posterior sample
---the post-warmup draws from the posterior distribution--- can be extracted
from a fitted model object as a matrix, data frame, or array. The
as.matrix
and as.data.frame
methods merge all chains together,
whereas the as.array
method keeps the chains separate. For models fit
using optimization ("optimizing"
) or variational inference
("meanfield"
or "fullrank"
), there is no posterior sample but
rather a matrix (or data frame) of 1000 draws from either the asymptotic
multivariate Gaussian sampling distribution of the parameters or the
variational approximation to the posterior distribution.
# S3 method for stanreg
as.matrix(x, ..., pars = NULL, regex_pars = NULL)# S3 method for stanreg
as.array(x, ..., pars = NULL, regex_pars = NULL)
# S3 method for stanreg
as.data.frame(x, ..., pars = NULL, regex_pars = NULL)
A matrix, data.frame, or array, the dimensions of which depend on
pars
and regex_pars
, as well as the model and estimation
algorithm (see the Description section above).
A fitted model object returned by one of the
rstanarm modeling functions. See stanreg-objects
.
Ignored.
An optional character vector of parameter names.
An optional character vector of regular
expressions to use for parameter selection. regex_pars
can be used
in place of pars
or in addition to pars
. Currently, all
functions that accept a regex_pars
argument ignore it for models fit
using optimization.
stanreg-draws-formats
, stanreg-methods
if (.Platform$OS.type != "windows" || .Platform$r_arch != "i386") {
# \donttest{
if (!exists("example_model")) example(example_model)
# Extract posterior sample after MCMC
draws <- as.matrix(example_model)
print(dim(draws))
# For example, we can see that the median of the draws for the intercept
# is the same as the point estimate rstanarm uses
print(median(draws[, "(Intercept)"]))
print(example_model$coefficients[["(Intercept)"]])
# The as.array method keeps the chains separate
draws_array <- as.array(example_model)
print(dim(draws_array)) # iterations x chains x parameters
# Extract draws from asymptotic Gaussian sampling distribution
# after optimization
fit <- stan_glm(mpg ~ wt, data = mtcars, algorithm = "optimizing")
draws <- as.data.frame(fit)
print(colnames(draws))
print(nrow(draws)) # 1000 draws are taken
# Extract draws from variational approximation to the posterior distribution
fit2 <- update(fit, algorithm = "meanfield")
draws <- as.data.frame(fit2, pars = "wt")
print(colnames(draws))
print(nrow(draws)) # 1000 draws are taken
# }
}
Run the code above in your browser using DataLab