From bc19f10fd79e26fdf12d2d84ab3514e27f73a3b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 29 Sep 2026 06:47:14 +0000 Subject: [PATCH 1/5] Initial plan From 1b2980e072b596a9ab9ab2bdd8fa63e5f4f7572c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 29 Sep 2026 06:49:30 +0000 Subject: [PATCH 2/5] Format repeated group-level factor labels consistently Co-authored-by: strengejacke <26301769+strengejacke@users.noreply.github.com> --- R/format_parameters.R | 4 +++- tests/testthat/test-model_parameters.mixed.R | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) 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-model_parameters.mixed.R b/tests/testthat/test-model_parameters.mixed.R index b2c992cdf..5afbb1a14 100644 --- a/tests/testthat/test-model_parameters.mixed.R +++ b/tests/testthat/test-model_parameters.mixed.R @@ -116,6 +116,23 @@ 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(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)) From 97d5d9890524fee3c9d99a80159fdda7678629d2 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 29 Sep 2026 10:45:38 +0200 Subject: [PATCH 3/5] fix --- tests/testthat/test-glmmTMB.R | 4 ++-- tests/testthat/test-model_parameters.mixed.R | 15 ++++++--------- 2 files changed, 8 insertions(+), 11 deletions(-) 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 5afbb1a14..3e7aa6d5f 100644 --- a/tests/testthat/test-model_parameters.mixed.R +++ b/tests/testthat/test-model_parameters.mixed.R @@ -117,20 +117,17 @@ test_that("model_parameters.mixed-random, grouplevel", { }) 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 - ) + 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(treatment_labels, rep("treatment [1]", length(treatment_labels))) + expect_identical( + as.character(treatment_labels), + rep("treatment [1]", length(treatment_labels)) + ) }) test_that("model_parameters.mixed-ran_pars", { From bccfbdac1dfde0a307df38ac9a61ae721ed06a3f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 29 Sep 2026 08:44:20 +0000 Subject: [PATCH 4/5] Bump development version and note group label fix Co-authored-by: strengejacke <26301769+strengejacke@users.noreply.github.com> --- DESCRIPTION | 2 +- NEWS.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) 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..85c98e4de 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,9 @@ ## Bug fixes +* `estimate_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. From 20eb0d3ec9a7a01fd0e02036d080e4b4b00f2a46 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 29 Sep 2026 10:51:32 +0200 Subject: [PATCH 5/5] update --- NEWS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index 85c98e4de..f14831947 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,8 +7,8 @@ ## Bug fixes -* `estimate_grouplevel()` now formats categorical random-slope labels - consistently across all grouping levels. +* `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()`