Calculate generalised variance inflation factors for terms in a fitted model(s) via the variance-covariance matrix of coefficients.
VIF(mod, data = NULL, env = NULL)
A fitted model object, or a list or nested list of such objects.
An optional dataset, used to first refit the model(s).
Environment in which to look for model data (if none supplied).
Defaults to the formula()
environment.
A numeric vector of the VIFs, or an array, list of vectors/arrays, or nested list.
VIF()
calculates generalised variance inflation factors (GVIF) as
described in Fox & Monette (1992), and also implemented in
car::vif()
. However, whereas
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
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).
Fox, J., & Monette, G. (1992). Generalized Collinearity Diagnostics. Journal of the American Statistical Association, 87, 178-183. doi:10/dm9wbw
# 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.021036 1.021036 1.013976 1.013976 1.013976 NA