1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#' Simulate Model Parameters
#'
#' Compute simulated draws of parameters and their related indices such as Confidence Intervals (CI) and p-values. Simulating parameter draws can be seen as a (computationally faster) alternative to bootstrapping.
#'
#' @inheritParams simulate_model
#' @inheritParams bayestestR::describe_posterior
#'
#' @return A data frame with simulated parameters.
#'
#' @references Gelman A, Hill J. Data analysis using regression and multilevel/hierarchical models. Cambridge; New York: Cambridge University Press 2007: 140-143
#'
#' @seealso \code{\link{bootstrap_model}}, \code{\link{bootstrap_parameters}}, \code{\link{simulate_model}}
#'
#' @note There is also a \href{https://easystats.github.io/see/articles/parameters.html}{\code{plot()}-method} implemented in the \href{https://easystats.github.io/see/}{\pkg{see}-package}.
#'
#' @details
#' \subsection{Technical Details}{
#' \code{simulate_parameters()} is a computationally faster alternative
#' to \code{bootstrap_parameters()}. Simulated draws for coefficients are based
#' on a multivariate normal distribution (\code{MASS::mvrnorm()}) with mean
#' \code{mu = coef(model)} and variance \code{Sigma = vcov(model)}.
#' }
#' \subsection{Models with Zero-Inflation Component}{
#' For models from packages \pkg{glmmTMB}, \pkg{pscl}, \pkg{GLMMadaptive} and
#' \pkg{countreg}, the \code{component} argument can be used to specify
#' which parameters should be simulated. For all other models, parameters
#' from the conditional component (fixed effects) are simulated. This may
#' include smooth terms, but not random effects.
#' }
#'
#' @examples
#' library(parameters)
#'
#' model <- lm(Sepal.Length ~ Species * Petal.Width + Petal.Length, data = iris)
#' simulate_parameters(model)
#' \donttest{
#' if (require("glmmTMB")) {
#' model <- glmmTMB(
#' count ~ spp + mined + (1 | site),
#' ziformula = ~mined,
#' family = poisson(),
#' data = Salamanders
#' )
#' simulate_parameters(model, centrality = "mean")
#' simulate_parameters(model, ci = c(.8, .95), component = "zero_inflated")
#' }
#' }
#' @importFrom bayestestR describe_posterior
#' @export
simulate_parameters <- function(model, ...) {
UseMethod("simulate_parameters")
}
#' @rdname simulate_parameters
#' @export
simulate_parameters.default <- function(model,
iterations = 1000,
centrality = "median",
ci = .95,
ci_method = "quantile",
test = "p-value",
...) {
data <- simulate_model(model, iterations = iterations, ...)
out <-
.summary_bootstrap(
data = data,
test = test,
centrality = centrality,
ci = ci,
ci_method = ci_method,
...
)
params <- insight::get_parameters(model)
if ("Effects" %in% colnames(params) && .n_unique(params$Effects) > 1) {
out$Effects <- params$Effects
}
class(out) <- c("parameters_simulate", "see_parameters_simulate", class(out))
attr(out, "object_name") <- deparse(substitute(model), width.cutoff = 500)
attr(out, "iterations") <- iterations
attr(out, "ci") <- ci
out
}
|