A plot()
method exists for blavaan objects,
with this method making use of the bayesplot package (Gabry and Mahr 2021). We provide details here
about how this functionality works. We will use a 3-factor model for
demonstration:
HS.model <- ' visual =~ x1 + x2 + x3
textual =~ x4 + x5 + x6
speed =~ x7 + x8 + x9 '
fit <- bcfa(HS.model, data=HolzingerSwineford1939)
Basics
Because many blavaan models will have many parameters, users
generally need to specify which parameters they wish to plot. This is
accomplished by supplying numbers to the pars
argument,
where the numbers correspond to the order of parameters from the
coef()
command (the numbers also appear in the
free
column of the parameter table). Users must also
specify the type of plot that they desire via the plot.type
argument. So, for example, a trace plot of the first four model
parameters looks like
plot(fit, pars = 1:4, plot.type = "trace")
Many other plot types are available, coming from the
bayesplot package. In general, for bayesplot functions
that begin with mcmc_
, the corresponding
plot.type
is the remainder of the function name without the
leading mcmc_
. Examples of many of these plots can be found
in this
bayesplot vignette.
Customization
Users may wish to customize some aspects of the resulting plots. For
this, the plot()
function will output a ggplot
object. This makes it possible to modify the plot as if it were any
other ggplot object, which allows for many possibilities. One
starting point for exploring ggplot2 is here.
p <- plot(fit, pars = 1:4, plot.type = "trace", showplot = FALSE)
p + facet_text(size=15) + legend_none()
Alternatively, users may wish to create a plot that is entirely
different from what is available via plot()
. This can be
facilitated by extracting the posterior samples or the Stan model, via
blavInspect()
:
## list of draws
## (one list entry per chain):
draws <- blavInspect(fit, "mcmc")
## convert the list to a matrix
## (each row is a sample,
## each column is a parameter)
draws <- do.call("rbind", draws)
## Stan (or JAGS) model
modobj <- blavInspect(fit, "mcobj")