Skip to content

Commit 16d3e01

Browse files
committed
add brms method
1 parent 725ef7b commit 16d3e01

File tree

3 files changed

+53
-19
lines changed

3 files changed

+53
-19
lines changed

R/group_level_total.R

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,48 @@
8585

8686
.group_level_total.brmsfit <- function(x, ...) {
8787
# extract random effects information
88-
group_factors <- insight::find_random(x)
88+
group_factors <- insight::find_random(x, split_nested = TRUE, flatten = TRUE)
8989
random_slopes <- insight::find_random_slopes(x)
90+
params <- NULL
9091

91-
for (i in group_factors) {
92+
# create full data frame of all random effects retrieved from coef()
93+
params <- do.call(rbind, lapply(group_factors, function(i) {
94+
# we want the posterior distribution from coef(), so we can
95+
# use bayestestR
9296
ranef <- stats::coef(x, summary = FALSE)[[i]]
9397
parameter_names <- dimnames(ranef)[[3]]
9498
out <- lapply(
9599
parameter_names,
96-
function(pn) bayestestR::describe_posterior(as.data.frame(x[, , pn]), ...)
100+
function(pn) {
101+
# summary of posterior
102+
d <- bayestestR::describe_posterior(as.data.frame(ranef[, , pn]), verbose = FALSE, ...)
103+
# add information about group factor and levels
104+
d$Group <- i
105+
# Parameters in the returned data frame are actually the levels
106+
# # from the group factors
107+
d$Level <- d$Parameter
108+
# the parameter names can be taken from dimnames
109+
d$Parameter <- pn
110+
d
111+
}
97112
)
98113
names(out) <- parameter_names
99-
}
114+
do.call(rbind, out)
115+
}))
116+
117+
# select parameters to keep. We want all intercepts, and all random slopes
118+
# from conditional and potential zero-inflation component
119+
parameters_to_keep <- params$Parameter %in% c("Intercept", random_slopes$random)
120+
parameters_to_keep <- parameters_to_keep | params$Parameter %in% c("zi_Intercept", random_slopes$zero_inflated_random)
121+
# furthermore, categorical random slopes have levels in their name, so we
122+
# try to find those parameters here, too
123+
parameters_to_keep <- parameters_to_keep | startsWith(params$Parameter, random_slopes$random)
124+
parameters_to_keep <- parameters_to_keep | startsWith(params$Parameter, random_slopes$zero_inflated_random)
125+
126+
# clean names
127+
params$Parameter <- gsub("^zi_", "", params$Parameter)
128+
129+
params
100130
}
101131

102132

R/methods_brms.R

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,14 @@
5252
#'
5353
#' @inheritSection model_parameters.zcpglm Model components
5454
#'
55-
#' @examples
55+
#' @examplesIf require("rstanarm")
5656
#' \donttest{
5757
#' library(parameters)
58-
#' if (require("rstanarm")) {
59-
#' model <- suppressWarnings(stan_glm(
60-
#' Sepal.Length ~ Petal.Length * Species,
61-
#' data = iris, iter = 500, refresh = 0
62-
#' ))
63-
#' model_parameters(model)
64-
#' }
58+
#' model <- suppressWarnings(stan_glm(
59+
#' Sepal.Length ~ Petal.Length * Species,
60+
#' data = iris, iter = 500, refresh = 0
61+
#' ))
62+
#' model_parameters(model)
6563
#' }
6664
#' @return A data frame of indices related to the model's parameters.
6765
#' @export
@@ -107,6 +105,12 @@ model_parameters.brmsfit <- function(model,
107105
drop_parameters = drop,
108106
...
109107
)
108+
} else if (identical(effects, "total")) {
109+
# group level total effects (coef())
110+
params <- .group_level_total(model, centrality, dispersion, ci, ci_method, test, rope_range, rope_ci, ...)
111+
params$Effects <- "total"
112+
class(params) <- c("parameters_coef", "see_parameters_coef", class(params))
113+
return(params)
110114
} else {
111115
# Processing
112116
params <- .extract_parameters_bayesian(

man/model_parameters.brmsfit.Rd

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)