Calculate generalised variance inflation factors for terms in a fitted model(s) via the variance-covariance matrix of coefficients.
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.
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