En este documento se tratará de ilustrar la idea de inflación de la varianza (VIF por sus siglas en inglés). Este análisis tiene importancia al trabajar modelos de regresión lineal con múltiples variables predictoras y sirve para diagnosticar la colinealidad entre esas variables.
Se tienen tres variables predictivas generadas aleatoriamente y se compara la varianza para x1 en modelos que van incorporando las otras dos variables una a una. Se obtiene que la varianza de x1 no tiene gran alteración, ya que las variables fueron generadas aleatoriamente y no tienen relación entre sí.
n <- 100; nosim <- 1000
x1 <- rnorm(n); x2 <- rnorm(n); x3 <- rnorm(n)
betas <- sapply(1:nosim, function(i){
y <- x1 + rnorm(n, sd= .3)
c(coef(lm(y ~ x1))[2],
coef(lm(y ~ x1 + x2))[2],
coef(lm(y ~ x1 + x2 + x3))[2])
})
round(apply(betas, 1, sd), 5)
## x1 x1 x1
## 0.02942 0.02945 0.02959
Se hace la misma operación, pero esta vez generando variables x2 y x3 que sean altamente dependientes de los valores de x1 (colineales). El resultado de esto es que la varianza se incrementa al incluir estas variables, indicando debilidad del modelo predictivo.
n <- 100; nosim <- 1000
x1 <- rnorm(n)
x2 <- x1/sqrt(2) + rnorm(n) /sqrt(2)
x3 <- x1*0.95 + rnorm(n) * sqrt(1 - 0.95^2)
betas <- sapply(1:nosim, function(i){
y <- x1 + rnorm(n, sd= .3)
c(coef(lm(y ~ x1))[2],
coef(lm(y ~ x1 + x2))[2],
coef(lm(y ~ x1 + x2 + x3))[2])
})
round(apply(betas, 1, sd), 5)
## x1 x1 x1
## 0.02711 0.04128 0.09228
Esto nos demuestra que en un modelo de regresión lineal multivariado es mejor tener un sustento teórico al considerar las variables antes que preferir una gran cantidad de variables.
Para esto se usa como ejemplo la base de datos swiss del paquete car. Se ve que el valor de inflación de la varianza es más alto en las variables Education y Examination porque están correlacionadas.
#if (!require("car")) install.packages("car") #usar esto para verificar si se tiene instalado "car"
library(car)
## Loading required package: carData
fit <- lm(Fertility ~ ., data= swiss)
vif(fit)
## Agriculture Examination Education Catholic
## 2.284129 3.675420 2.774943 1.937160
## Infant.Mortality
## 1.107542
sqrt(vif(fit))#Cuando se prefiere usar la desviación estándar
## Agriculture Examination Education Catholic
## 1.511334 1.917138 1.665816 1.391819
## Infant.Mortality
## 1.052398
============= En este documento se reproduce el código trabajado por Brian Caffo en Coursera´s Data Science Specialization de John’s Hopkins University.