Skip to contents

Calculate generalised variance inflation factors for terms in a fitted model(s) via the variance-covariance matrix of coefficients.

Usage

VIF(mod, data = NULL, env = NULL)

Arguments

mod

A fitted model object, or a list or nested list of such objects.

data

An optional dataset, used to first refit the model(s).

env

Environment in which to look for model data (if none supplied). Defaults to the formula() environment.

Value

A numeric vector of the VIFs, or an array, list of vectors/arrays, or nested list.

Details

VIF() calculates generalised variance inflation factors (GVIF) as described in Fox & Monette (1992), and also implemented in car::vif(). However, whereas car::vif() returns both GVIF and GVIF^(1/(2*Df)) values, VIF() simply returns the squared result of the latter measure, which equals the standard VIF for single-coefficient terms and is the equivalent measure for multi-coefficient terms (e.g. categorical or polynomial). Also, while car::vif() returns values per model term (i.e. predictor variable), VIF() returns values per coefficient, meaning that the same value will be returned per coefficient for multi-coefficient terms. Finally, NA is returned for any terms which could not be estimated in the model (e.g. aliased).

References

Fox, J., & Monette, G. (1992). Generalized Collinearity Diagnostics. Journal of the American Statistical Association, 87, 178-183. doi:10/dm9wbw

Examples

# Model with two correlated terms
m <- shipley.growth[[3]]
VIF(m)  # Date & DD somewhat correlated
#>     Date       DD      lat 
#> 6.062838 6.077410 1.012151 
VIF(update(m, . ~ . - DD))  # drop DD
#>     Date      lat 
#> 1.009793 1.009793 

# Model with different types of predictor (some multi-coefficient terms)
d <- data.frame(
  y = rnorm(100),
  x1 = rnorm(100),
  x2 = as.factor(rep(c("a", "b", "c", "d"), each = 25)),
  x3 = rep(1, 100)
)
m <- lm(y ~ poly(x1, 2) + x2 + x3, data = d)
VIF(m)
#> poly(x1, 2)1 poly(x1, 2)2          x2b          x2c          x2d           x3 
#>     1.036899     1.036899     1.024451     1.024451     1.024451           NA