rlabelpsclr-labelled

easystats parameters package doesn't respect variable labels for pscl models


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?


Solution

  • 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