diff --git a/DESCRIPTION b/DESCRIPTION index 8f37c85cc..77a645af1 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: parameters Title: Processing of Model Parameters -Version: 0.29.3.2 +Version: 0.29.3.3 Authors@R: c(person(given = "Daniel", family = "Lüdecke", diff --git a/NEWS.md b/NEWS.md index 1d7f07726..f14831947 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,9 @@ ## Bug fixes +* `model_parameters(..., effects = "grouplevel")` now formats categorical + random-slope labels consistently across all grouping levels. + * `standard_error()` and hence `model_parameters()` returned wrong (recycled) standard errors for models of class `glmmTMB` fitted with the new `ordinal()` family, because the thresholds are not part of the summary coefficient table. diff --git a/R/format_parameters.R b/R/format_parameters.R index 9886a5af6..ffbec0393 100644 --- a/R/format_parameters.R +++ b/R/format_parameters.R @@ -593,7 +593,9 @@ format_parameters.parameters_model <- function(model, ...) { # missing labels return original parameter name (e.g., variance components in mixed models) out <- stats::setNames(params$Parameter, params$Parameter) pretty_labels <- pretty_labels[names(pretty_labels) %in% params$Parameter] - out[match(names(pretty_labels), params$Parameter)] <- pretty_labels + label_idx <- match(params$Parameter, names(pretty_labels)) + has_label <- !is.na(label_idx) + out[has_label] <- pretty_labels[label_idx[has_label]] out } diff --git a/tests/testthat/test-glmmTMB.R b/tests/testthat/test-glmmTMB.R index 9ddec0b3c..1cb7b99a2 100644 --- a/tests/testthat/test-glmmTMB.R +++ b/tests/testthat/test-glmmTMB.R @@ -855,12 +855,12 @@ withr::with_options(list(parameters_exponentiate = FALSE), { camper1 = "camper [1]", `(Intercept)` = "(Intercept)", child = "child", - camper1 = "camper1", # nolint + camper1 = "camper [1]", `SD (Intercept)` = "SD (Intercept)", `SD (xb)` = "SD (xb)", `Cor (Intercept~xb)` = "Cor (Intercept~xb)", `SD (Intercept)` = "SD (Intercept)", - `SD (zg)` = "SD (zg)", # nolint + `SD (zg)` = "SD (zg)", `Cor (Intercept~zg)` = "Cor (Intercept~zg)" ) ) diff --git a/tests/testthat/test-model_parameters.mixed.R b/tests/testthat/test-model_parameters.mixed.R index b2c992cdf..3e7aa6d5f 100644 --- a/tests/testthat/test-model_parameters.mixed.R +++ b/tests/testthat/test-model_parameters.mixed.R @@ -116,6 +116,20 @@ test_that("model_parameters.mixed-random, grouplevel", { expect_equal(params$Coefficient, c(0.1692, 0.0566, -0.2259), tolerance = 1e-2) }) +test_that("model_parameters.mixed-random, grouplevel factor labels", { + dat <- transform(lme4::sleepstudy, treatment = factor(ifelse(Days > 4, "1", "0"))) + model <- lme4::lmer(Reaction ~ treatment + (1 + treatment | Subject), data = dat) + params <- model_parameters(model, effects = "grouplevel") + pretty_labels <- attr(params, "pretty_labels") + treatment_labels <- pretty_labels[grepl("^treatment", names(pretty_labels))] + + expect_length(treatment_labels, length(unique(dat$Subject))) + expect_identical( + as.character(treatment_labels), + rep("treatment [1]", length(treatment_labels)) + ) +}) + test_that("model_parameters.mixed-ran_pars", { params <- model_parameters(m1, effects = "random") expect_identical(c(nrow(params), ncol(params)), c(2L, 8L))