El gráfico proporciona un resumen visual de las relaciones entre variables en correl_data
. Los valores de correlación van de -1 a 1, donde los valores más cercanos a 1 indican una correlación positiva fuerte, los valores más cercanos a -1 indican una correlación negativa fuerte, y los valores alrededor de 0 sugieren que no hay correlación. Es evidente que no hay una correlación pareja fuerte entre las variables, ya que ninguno de los valores de correlación supera siquiera 0.6.
El siguiente paso es calcular los valores VIF para las variables predictoras. El código a continuación calcula los valores para cada variable predictora en el conjunto de datos para verificar la multicolinealidad.
Primero, define X
eliminando la columna objetivo Rendimiento
y agregando una intercepción. Luego, crea un DataFrame, datacamp_vif_data
, para almacenar los nombres de los predictores y sus valores VIF. Utilizando un bucle, calcula el VIF para cada predictor con la función variance_inflation_factor()
, donde VIFs más altos indican presencia de multicolinealidad.
# Define las variables predictoras X = datacamp_retail_data.drop(columns=['Performance']) # Agrega una constante al modelo (intercepción) X = add_constant(X) # Calcula el VIF para cada característica datacamp_vif_data = pd.DataFrame() datacamp_vif_data['Feature'] = X.columns datacamp_vif_data['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])] print(datacamp_vif_data)
Salida:
Salida mostrando los valores de VIF. Imagen por el autor
Esta salida muestra el valor de VIF para cada variable predictora, lo que indica niveles de multicolinealidad en el conjunto de datos. La fila const
representa el término de intercepción, con un VIF cercano a 1, lo que significa que no tiene multicolinealidad. Entre las variables predictoras, Product_range
tiene el VIF más alto (5.94), lo que sugiere que necesita medidas correctivas. Todas las demás variables predictoras tienen valores de VIF por debajo de 3, lo que indica baja multicolinealidad.
Enfoque manual para el cálculo de VIF
El otro enfoque es calcular los valores por separado al regresar cada variable independiente contra las otras variables predictoras.
Entonces, cómo funciona es que para cada característica en retail_data
, se establece esa característica como la variable dependiente (y) y las demás características como variables independientes (X). Luego se ajusta un modelo de regresión lineal para predecir y usando X, y el valor de R-cuadrado del modelo se utiliza para calcular VIF utilizando la fórmula que discutimos en la sección inicial.
Posteriormente, cada característica y sus valores VIF correspondientes se almacenan en un diccionario (vif_manual
), que luego se convierte en un DataFrame (vif_manual_df
) para su visualización.
datacamp_retail_data = retail_data.drop(columns=['Performance']) # Cálculo manual del VIF vif_manual = {} for feature in retail_data.columns: # Definir la variable objetivo (característica actual) y los predictores (todas las demás características) y = datacamp_retail_data[feature] X = datacamp_retail_data.drop(columns=[feature]) # Ajustar el modelo de regresión lineal model = LinearRegression().fit(X, y) # Calcular R-cuadrado r_squared = model.score(X, y) # Calcular VIF vif = 1 / (1 - r_squared) vif_manual[feature] = vif # Convertir el diccionario a un DataFrame para una mejor visualización vif_manual_df = pd.DataFrame(list(vif_manual.items()), columns=['Feature', 'VIF']) print(vif_manual_df)
Salida:
Salida que muestra los valores VIF. Imagen por Autor
La salida muestra cada característica junto con su valor de VIF, lo que ayuda a identificar posibles problemas de multicolinealidad. Puedes ver que el resultado es obviamente el mismo que obtuvimos anteriormente; y así será su interpretación, que es que la variable Product_range
está exhibiendo multicolinealidad.
Factor de inflación de la varianza en R
En esta sección, repetiremos el ejercicio del factor de inflación de la varianza anterior en la sección de Python, especialmente para desarrolladores que trabajan con el lenguaje de programación R. Comenzamos cargando el conjunto de datos y las bibliotecas necesarias.
library(tidyverse) library(car) library(corrplot) data <- read.csv('vif_data.csv') str(data)
Salida:
El siguiente paso es calcular la matriz de correlación par a par y visualizarla con el mapa de calor. Las funciones cor()
y corrplot
nos ayudan a lograr esta tarea.
# Eliminar la columna objetivo predictors_data <- data[, !(names(data) %in% "Performance")] # Calcular la matriz de correlación correlation_matrix <- cor(predictors_data) # Graficar el mapa de calor de correlación # Cargar las bibliotecas necesarias library(ggplot2) library(reshape2) melted_corr_matrix <- melt(correlation_matrix) # Graficar el mapa de calor con ggplot2 ggplot(data = melted_corr_matrix, aes(x = Var1, y = Var2, fill = value)) + geom_tile(color = "white") + scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1, 1), space = "Lab", name="Correlation") + theme_minimal() + # Tema mínimo para una apariencia limpia theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) + labs(x = "", y = "") + # Eliminar las etiquetas de los ejes geom_text(aes(Var1, Var2, label = round(value, 2)), color = "black", size = 4) + theme(axis.text=element_text(size=15))
Salida:
Correlación entre las variables. Imagen por el autor
Es evidente a partir del mapa de calor de correlación que no hay una fuerte correlación par a par entre las variables, con ninguno de los valores de correlación siendo siquiera mayor a 0.6. Ahora, calcularemos los valores de VIF y veremos si hay algo alarmante. La siguiente línea de código realiza esa tarea.
# Ajustar un modelo de regresión model <- lm(Performance ~ Ambience + Customer_service + Offers + Product_range, data = data) # Calcular VIF vif(model)
Salida:
Desde la salida, podemos ver que entre las variables predictoras, solo la variable Product_range
tiene un valor VIF mayor que 5, lo que sugiere una alta multicolinealidad que necesita medidas correctivas.
Enfoque manual para el cálculo de VIF
Otro enfoque para el cálculo de VIF sería calcular los valores VIF para cada variable por separado al regresar cada variable independiente contra las otras variables predictoras.
Esto se realiza en el código a continuación, que utiliza la función sapply()
a través de cada predictor, donde cada predictor se establece como la variable dependiente en un modelo de regresión lineal con los otros predictores como variables independientes.
El valor R-cuadrado de cada modelo se utiliza para calcular los valores de VIF con su fórmula. Finalmente, el resultado, vif_values
, muestra el VIF para cada predictor, ayudando a identificar problemas de multicolinealidad.
# Cálculo de VIF para cada predictor manualmente predictors <- c("Ambience", "Customer_service", "Offers", "Product_range") vif_values <- sapply(predictors, function(pred) { formula <- as.formula(paste(pred, "~ .")) model <- lm(formula, data = data[, predictors]) 1 / (1 - summary(model)$r.squared) }) print(vif_values)
Salida:
Obtenemos el mismo resultado y es evidente que la variable Product_range
con un alto valor de VIF por encima de 5 necesita intervención.
VIF vs. Matriz de Correlación y Otros Métodos
Como resumen, aquí están los métodos populares para detectar la multicolinealidad:
- Valores altos de VIF: Un valor alto de VIF es un claro indicador de multicolinealidad. Cuando estos valores exceden ciertos umbrales, indican que un predictor está fuertemente relacionado con otros predictores, lo que puede afectar la estabilidad, confiabilidad y rendimiento del modelo.
- Matrices de correlación: Al examinar una matriz de correlación, se pueden ver las correlaciones entre pares de predictores. Altas correlaciones entre pares sugieren multicolinealidad entre esos predictores específicos. Sin embargo, este método solo detecta relaciones lineales directas entre dos variables y puede pasar por alto la multicolinealidad que involucra interacciones más complejas entre varias variables.
- Cambios en los coeficientes: Si los coeficientes de los predictores cambian significativamente cuando se agregan o eliminan otras variables del modelo, esto puede ser un signo de multicolinealidad. Tales fluctuaciones indican que ciertos predictores pueden estar compartiendo información común, lo que dificulta identificar el impacto único de cada variable en el resultado.
Entre todos estos métodos, el VIF es particularmente útil porque puede detectar la multicolinealidad incluso cuando las correlaciones en pares son bajas, como vimos en nuestro propio ejemplo. Esto hace que el VIF sea una herramienta más completa.
Ideas adicionales sobre cómo abordar valores altos de VIF
Si los valores de VIF indican una alta multicolinealidad y no desea necesariamente eliminar la variable, hay algunas estrategias más avanzadas para mitigar la multicolinealidad:
- Selección de características: Elimina uno de los predictores altamente correlacionados y recalcula el VIF para ver si ayuda a simplificar el modelo y mejorar la estabilidad.
- Análisis de Componentes Principales (PCA): Usa PCA para combinar tus predictores en un conjunto más pequeño de componentes no correlacionados. Esto transforma las variables originales en nuevas, independientes y no correlacionadas que capturan la mayor parte de la variación de los datos, ayudando a abordar la multicolinealidad sin perder información valiosa.
- Técnicas de Regularización: Aplica regresión ridge o lasso, que añaden términos de penalización al modelo. Estas técnicas ayudan a reducir la multicolinealidad al disminuir la influencia de variables correlacionadas, lo que hace que el modelo sea más estable y confiable.
Conclusion
Saber cómo usar el VIF es clave para identificar y solucionar la multicolinealidad, lo que mejora la precisión y claridad de los modelos de regresión. Revisar regularmente los valores de VIF y aplicar medidas correctivas cuando sea necesario ayuda a los profesionales de datos y analistas a construir modelos en los que puedan confiar. Este enfoque garantiza que el efecto de cada predictor sea claro, lo que facilita extraer conclusiones fiables del modelo y tomar decisiones mejores basadas en los resultados. Toma nuestra carrera de Científico de Aprendizaje Automático en Python para comprender realmente cómo construir modelos y utilizarlos. Además, completar el programa queda genial en un currículum.
Source:
https://www.datacamp.com/tutorial/variance-inflation-factor