Consider this code:
options(parameters_labels = TRUE)
mydf <- pscl::bioChemists
labelled::var_label(mydf) <- list(art="MyCount", fem="MyGender",
mar="MyMarried")
model <- lm(art ~ fem + mar, data = mydf)
parameters::model_parameters(model)
Which returns:
Parameter | Coefficient | SE | 95% CI | t(912) | p
---------------------------------------------------------------------------
(Intercept) | 1.85 | 0.14 | [ 1.58, 2.12] | 13.46 | < .001
MyGender [Women] | -0.40 | 0.13 | [-0.66, -0.14] | -3.06 | 0.002
MyMarried [Married] | 0.05 | 0.14 | [-0.23, 0.32] | 0.34 | 0.737
With correct variable labels.
Then consider:
model <- pscl::zeroinfl(art ~ fem + mar, data = mydf)
parameters::model_parameters(model)
Which returns:
# Fixed Effects
Parameter | Log-Mean | SE | 95% CI | z | p
-----------------------------------------------------------------
(Intercept) | 0.85 | 0.06 | [ 0.72, 0.97] | 13.29 | < .001
fem [Women] | -0.24 | 0.06 | [-0.36, -0.11] | -3.70 | < .001
mar [Married] | 0.01 | 0.07 | [-0.12, 0.14] | 0.17 | 0.868
# Zero-Inflation
Parameter | Log-Odds | SE | 95% CI | z | p
-----------------------------------------------------------------
(Intercept) | -1.32 | 0.24 | [-1.79, -0.86] | -5.55 | < .001
fem [Women] | 0.02 | 0.24 | [-0.46, 0.50] | 0.08 | 0.939
mar [Married] | -0.09 | 0.25 | [-0.58, 0.40] | -0.37 | 0.715
With no parameter labels.
How can I have parameters
return variable labels also for pscl
models?
It's not the most elegant solution, but you can work around this by manually replacing the parameter labels after the fact. The issue seems to be that the {parameters}
doesn't fully support custom variable labels for pscl::zeroinfl
models, even though it works fine for basic lm
models.
options(parameters_labels = FALSE)
mydf <- pscl::bioChemists
model <- pscl::zeroinfl(art ~ fem + mar, data = mydf)
name_mapping <- c(
"fem [Women]" = "MyGender [Women]",
"mar [Married]" = "MyMarried [Married]"
)
custom_labels <- function(result, label_mapping) {
pretty_names <- attr(result, "pretty_names")
for (i in seq_along(pretty_names)) {
original_name <- pretty_names[i]
if (original_name %in% names(label_mapping)) {
pretty_names[i] <- label_mapping[original_name]
}
}
attr(result, "pretty_names") <- pretty_names
return(result)
}
custom_labels(parameters::model_parameters(model), name_mapping)
#> # Fixed Effects
#>
#> Parameter | Log-Mean | SE | 95% CI | z | p
#> -----------------------------------------------------------------------
#> (Intercept) | 0.85 | 0.06 | [ 0.72, 0.97] | 13.29 | < .001
#> MyGender [Women] | -0.24 | 0.06 | [-0.36, -0.11] | -3.70 | < .001
#> MyMarried [Married] | 0.01 | 0.07 | [-0.12, 0.14] | 0.17 | 0.868
#>
#> # Zero-Inflation
#>
#> Parameter | Log-Odds | SE | 95% CI | z | p
#> -----------------------------------------------------------------------
#> (Intercept) | -1.32 | 0.24 | [-1.79, -0.86] | -5.55 | < .001
#> MyGender [Women] | 0.02 | 0.24 | [-0.46, 0.50] | 0.08 | 0.939
#> MyMarried [Married] | -0.09 | 0.25 | [-0.58, 0.40] | -0.37 | 0.715
#>
#> The model has a log- or logit-link. Consider using `exponentiate =
#> TRUE` to interpret coefficients as ratios.
Created on 2025-07-08 with reprex v2.1.1