I have noticed an issue where performance::check_collinearity() seems to miscalculate or heavily inflate Variance Inflation Factors (VIFs) when applied to Cumulative Link Mixed Models (clmm objects from the ordinal package).
When passing perfectly orthogonal, simulated predictors into a clmm, the resulting VIFs are flagged as highly collinear. Fitting a standard linear mixed model (lmer) to the exact same predictors correctly returns VIFs near 1.0.
I suspect the VIF calculation algorithm might be accidentally catching the multiple ordinal threshold estimates (the internal intercepts) from the clmm variance-covariance matrix, which artificially explodes the collinearity penalty for the fixed predictors.
Reproducible Example:
library(ordinal)
library(lme4)
#> Loading required package: Matrix
library(performance)
set.seed(999)
n <- 500
# 1. Simulate perfectly orthogonal predictors
x_continuous <- rnorm(n, mean = 0, sd = 1)
x_binary <- sample(c(-0.5, 0.5), size = n, replace = TRUE, prob = c(0.85, 0.15))
subject_id <- factor(rep(1:50, each = 10))
# 2. Generate an ordinal outcome with MANY categories
random_intercepts <- rnorm(50, 0, 1)
latent_y <- 2 * x_continuous + 3 * x_binary + random_intercepts[as.numeric(subject_id)] + rlogis(n)
# Cut into 15 categories to generate 14 distinct thresholds
y_ordinal <- cut(
latent_y,
breaks = 15,
ordered_result = TRUE
)
dat <- data.frame(y_ordinal, x_continuous, x_binary, subject_id)
# 3. Fit models
mod_lmer <- lmer(as.numeric(y_ordinal) ~ x_continuous + x_binary + (1 | subject_id), data = dat)
mod_clmm <- clmm(y_ordinal ~ x_continuous + x_binary + (1 | subject_id), data = dat)
# 4. Compare Collinearity Checks
check_collinearity(mod_lmer)
#> # Check for Multicollinearity
#>
#> Low Correlation
#>
#> Term VIF VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
#> x_continuous 1.00 [1.00, Inf] 1.00 1.00 [0.00, 1.00]
#> x_binary 1.00 [1.00, Inf] 1.00 1.00 [0.00, 1.00]
check_collinearity(mod_clmm)
#> # Check for Multicollinearity
#>
#> Low Correlation
#>
#> Term VIF VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
#> x_continuous 1.79 [1.60, 2.04] 1.34 0.56 [0.49, 0.63]
#> x_binary 4.36 [3.77, 5.08] 2.09 0.23 [0.20, 0.27]
Created on 2026-04-21 with reprex v2.1.1
Expected Behavior:
The VIF values for the fixed effects in the clmm object should roughly match the VIF values of the lmer object, as the fixed-effect design matrix is identical.
System Information:
R version 4.5.3 (2026-03-11 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 11 x64 (build 26100)
Matrix products: default
LAPACK version 3.12.1
locale:
[1] LC_COLLATE=English_United States.utf8
[2] LC_CTYPE=English_United States.utf8
[3] LC_MONETARY=English_United States.utf8
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.utf8
time zone: America/Chicago
tzcode source: internal
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] performance_0.16.0 lme4_2.0-1 Matrix_1.7-5
[4] ordinal_2025.12-29
loaded via a namespace (and not attached):
[1] numDeriv_2016.8-1.1 lattice_0.22-9 splines_4.5.3
[4] ucminf_1.2.3 cli_3.6.6 Rdpack_2.6.6
[7] nloptr_2.2.1 grid_4.5.3 reformulas_0.4.4
[10] compiler_4.5.3 boot_1.3-32 rbibutils_2.4.1
[13] rstudioapi_0.18.0 tools_4.5.3 nlme_3.1-169
[16] minqa_1.2.8 Rcpp_1.1.1-1 rlang_1.2.0
[19] MASS_7.3-65 insight_1.5.0
I have noticed an issue where
performance::check_collinearity()seems to miscalculate or heavily inflate Variance Inflation Factors (VIFs) when applied to Cumulative Link Mixed Models (clmm objects from the ordinal package).When passing perfectly orthogonal, simulated predictors into a clmm, the resulting VIFs are flagged as highly collinear. Fitting a standard linear mixed model (lmer) to the exact same predictors correctly returns VIFs near 1.0.
I suspect the VIF calculation algorithm might be accidentally catching the multiple ordinal threshold estimates (the internal intercepts) from the clmm variance-covariance matrix, which artificially explodes the collinearity penalty for the fixed predictors.
Reproducible Example:
Created on 2026-04-21 with reprex v2.1.1
Expected Behavior:
The VIF values for the fixed effects in the clmm object should roughly match the VIF values of the lmer object, as the fixed-effect design matrix is identical.
System Information: