La multicolinealidad ocurre cuando hay dos o más variables independientes en un modelo de regresión múltiple, que tienen una alta correlación entre sí. Cuando algunas características están altamente correlacionadas, es posible que tengamos dificultades para distinguir entre sus efectos individuales sobre la variable dependiente. La multicolinealidad se puede detectar usando varias técnicas, una de las cuales es el factor de inflación de varianza ( VIF ).
En el método VIF, elegimos cada función y la retrocedemos contra todas las demás funciones. Para cada regresión, el factor se calcula como:
Donde, R-cuadrado es el coeficiente de determinación en regresión lineal. Su valor se encuentra entre 0 y 1.
Como vemos en la fórmula, cuanto mayor sea el valor de R-cuadrado, mayor es el VIF. Por lo tanto, mayor VIF denota mayor correlación. Esto está de acuerdo con el hecho de que un valor alto de R-cuadrado denota una colinealidad más fuerte. Generalmente, un VIF superior a 5 indica una alta multicolinealidad.
Implementando VIF usando statsmodels:
statsmodels proporciona una función llamada variance_inflation_factor() para calcular el VIF.
Sintaxis: statsmodels.stats.outliers_influence.variance_inflation_factor(exog, exog_idx)
Parámetros:
- exog: una array que contiene características en las que se realiza una regresión lineal.
- exog_idx : índice de la característica adicional cuya influencia sobre las otras características se quiere medir.
Veamos un ejemplo para implementar el método en este conjunto de datos.
El conjunto de datos:
El conjunto de datos utilizado en el siguiente ejemplo contiene la altura, el peso, el sexo y el índice de masa corporal de 500 personas. Aquí la variable dependiente es Index .
Python3
import pandas as pd # the dataset data = pd.read_csv('BMI.csv') # printing first few rows print(data.head())
Producción :
Gender Height Weight Index 0 Male 174 96 4 1 Male 189 87 2 2 Female 185 110 4 3 Female 195 104 3 4 Male 149 61 3
Acercarse :
- Cada uno de los índices de características se pasa a variance_inflation_factor() para encontrar el VIF correspondiente.
- Estos valores se almacenan en forma de Pandas DataFrame.
Python3
from statsmodels.stats.outliers_influence import variance_inflation_factor # creating dummies for gender data['Gender'] = data['Gender'].map({'Male':0, 'Female':1}) # the independent variables set X = data[['Gender', 'Height', 'Weight']] # VIF dataframe vif_data = pd.DataFrame() vif_data["feature"] = X.columns # calculating VIF for each feature vif_data["VIF"] = [variance_inflation_factor(X.values, i) for i in range(len(X.columns))] print(vif_data)
Producción :
feature VIF 0 Gender 2.028864 1 Height 11.623103 2 Weight 10.688377
Como podemos ver, la altura y el peso tienen valores muy altos de VIF, lo que indica que estas dos variables están altamente correlacionadas. Esto es de esperar ya que la altura de una persona influye en su peso. Por lo tanto, considerar estas dos características juntas conduce a un modelo con alta multicolinealidad.
Publicación traducida automáticamente
Artículo escrito por cosine1509 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA