Análisis de regresión lineal múltiple | Hacia la ciencia de los datos

Código completo para este ejemplo en la parte inferior de esta publicación.

Se utiliza la regresión múltiple cuando su variable de respuesta es continua y tiene al menos K covariables, o variables independientes que están correlacionadas linealmente con ella. Los datos son del formulario:

(Y₁, x₁), …, (yᵢ, xᵢ), …, (yₙ, xₙ)

donde xᵢ = (xᵢ₁, …, xᵢₖ) es un vector de covariables y N es el número de observaciones. Aquí, Xi es el vector de los valores de K covariables para la observación ésima.

Comprender los datos

Para hacer esto concreto, imagine el siguiente escenario:

Le gusta correr y rastrear su rendimiento grabando la distancia que ejecuta cada día. Más de 100 días consecutivos, recopila cuatro piezas de información:

  • La distancia que corres,
  • La cantidad de horas que pasaste corriendo
  • La cantidad de horas que dormiste anoche
  • Y la cantidad de horas que trabajaste

Ahora, en el día 101, grabaste todo excepto la distancia que corriste. Desea estimar ese valor faltante usando la información que tiene: la cantidad de horas que pasó en funcionamiento, la cantidad de horas que durmió la noche anterior y la cantidad de horas que trabajó ese día.

Para hacer esto, puede confiar en los datos de los 100 días anteriores, lo que toma el formulario:

(Y₁, x₁), …, (yᵢ, xᵢ), …, (y₁₀₀, x₁₀₀)

Aquí, cada uno Yᵢ es la distancia que corriste en el día iy cada vector covariable Xᵢ = (xᵢ₁, xᵢ₂, xᵢ₃) corresponde a:

  • Xᵢ₁: Número de horas dedicadas a correr,
  • Xᵢ₂: Número de horas durmió la noche anterior,
  • Xᵢ₃: Número de horas trabajadas ese día.

El índice i = 1, …, 100 se refiere a los 100 días con datos completos. Con este conjunto de datos, ahora puede ajustar un modelo de regresión lineal múltiple para estimar la variable de respuesta faltante para el día 101.

Especificación del modelo

Si asumimos la relación lineal entre la variable de respuesta y las covariables, que puede medir utilizando la correlación de Pearson, podemos especificar el modelo como:

Especificación del modelo de regresión lineal

para i = 1, …, n donde e (ϵᵢ | xᵢ₁, …, xᵢₖ). Para tener en cuenta la intersección, la primera variable se establece en Xᵢ₁ = 1, para i = 1, …, n. Para estimar el coeficiente, el modelo se expresa en la notación de la matriz.

Variable de resultado.

Y las covariables serán denotadas por:

X es el matriz de diseño (con una intersección y K covariables)
β es un vector de columna de coeficientes, utilizado en el modelo de regresión lineal; ε es un vector de columna de términos de error aleatorio, uno para cada observación.

Entonces, podemos reescribir el modelo como:

Y = xβ + ε

Estimación de coeficientes

Suponiendo que la matriz (k+1)*(k+1) es invertible, la forma de la estimación de mínimos cuadrados viene dada por:

La estimación de mínimos cuadrados de β.

Podemos derivar la estimación de la función de regresión, una estimación imparcial de σ² y un intervalo de confianza 1 -α aproximado para βⱼ:

  • Estimación de la función de regresión: r (x) = ∑ⱼ₌₁ᵏ βⱼ xⱼ
  • σ̂² = (1 / (n – k)) × ∑ᵢ₌₁ⁿ ε̂ᵢ² donde ϵ̂ = y – xβ̂ es el vector de los residuos.
  • Y β̂ⱼ ± Tₙ₋ₖ, ₁₋α⁄₂ × SE (β̂ⱼ) es una aproximación (1 – α) intervalo de confianza. Donde se (β̂ⱼ) es el elemento diagonal JTH de la matriz σ̂² (xᵀ x) ⁻¹

Ejemplo de aplicación

Debido a que no registramos los datos de nuestro rendimiento en ejecución, utilizaremos un conjunto de datos de delitos de 47 estados en 1960 que se puede obtener de aquí. Antes de ajustar una regresión lineal, hay muchos pasos que debemos seguir.

Comprender diferentes variables de los datos.

Las primeras 9 observaciones de los datos están dadas por:

 R	   Age	S	Ed	Ex0	Ex1	LF	M	N	NW	U1	U2	W	X
79.1	151	1	91	58	56	510	950	33	301	108	41	394	261
163.5	143	0	113	103	95	583	1012 13	102	96	36	557	194
57.8	142	1	89	45	44	533	969	18	219	94	33	318	250
196.9	136	0	121	149	141	577	994	157	80	102	39	673	167
123.4	141	0	121	109	101	591	985	18	30	91	20	578	174
68.2	121	0	110	118	115	547	964	25	44	84	29	689	126
96.3	127	1	111	82	79	519	982	4	139	97	38	620	168
155.5	131	1	109	115	109	542	969	50	179	79	35	472	206
85.6	157	1	90	65	62	553	955	39	286	81	28	421	239

Los datos tienen 14 variables continuas (la variable de respuesta R, las 12 variables predictoras y una variable categórica s):

  1. R: Tasa de criminalidad: # de delitos reportados a la policía por millón de población
  2. Edad: el número de hombres de 14 a 24 años por 1000 población
  3. S: variable indicadora para estados del sur (0 = no, 1 = sí)
  4. Ed: Media # de años de escolarización x 10 para personas de 25 años o más
  5. Ej0: 1960 Gasto per cápita en la policía por parte del gobierno estatal y local
  6. EX1: 1959 Gasto per cápita en la policía por parte del gobierno estatal y local
  7. LF: tasa de participación de la fuerza laboral por 1000 hombres urbanos civiles de 14 a 24 años.
  8. M: El número de hombres por 1000 hembras
  9. N: tamaño de la población estatal en cientos de miles
  10. NW: El número de no blancos por 1000 población
  11. U1: Tasa de desempleo de los hombres urbanos por cada 1000 de 14 a 24 años
  12. U2: Tasa de desempleo de los hombres urbanos por 1000 de 35 a 35 años
  13. W: Valor mediano de bienes y activos transferibles o ingresos familiares en decenas de $
  14. X: El número de familias por 1000 ganando por debajo de 1/2 el ingreso medio

Los datos no tienen valores faltantes.

Análisis gráfico de la relación entre las covariables x y la variable de respuesta Y

El análisis gráfico de la relación entre las variables explicativas y la variable de respuesta es un paso cuando se realiza una regresión lineal.

Ayuda a visualizar tendencias lineales, detectar anomalías y evaluar la relevancia de las variables antes de construir cualquier modelo.

Gráficos de caja y gráficos de dispersión con líneas de regresión lineal ajustadas ilustrar la tendencia entre cada variable y Riñonal.

Algunas variables se correlacionan positivamente con la tasa de criminalidad, mientras que otras se correlacionan negativamente.

Por ejemplo, observamos una fuerte relación positiva entre R (la tasa de criminalidad) y EX1.

En contraste, la edad parece estar correlacionada negativamente con el crimen.

Finalmente, el diagrama de caja de la variable binaria S (región que indica: norte o sur) sugiere que la tasa de criminalidad es relativamente similar entre las dos regiones. Luego, podemos analizar la matriz de correlación.

Mapa de calor de la matriz de correlación de Pearson

La matriz de correlación nos permite estudiar la fuerza de la relación entre variables. Mientras que la correlación de Pearson se usa comúnmente para medir las relaciones lineales, el Correlación de Spearman es más apropiado cuando queremos capturar relaciones monotónicas y potencialmente no lineales entre variables.

En este análisis, utilizaremos la correlación de Spearman para explicar mejor tales asociaciones no lineales.

A mapa de calor de la matriz de correlación en Python

La primera fila de la matriz de correlación muestra la fuerza de la relación entre cada covariable y la variable de respuesta R.

Por ejemplo, EX0 y EX1 muestran una correlación superior al 60% con R, lo que indica una asociación fuerte. Estas variables parecen ser buenos predictores de la tasa de criminalidad.

Sin embargo, dado que la correlación entre EX0 y EX1 es casi perfecta, probablemente transmiten información similar. Para evitar la redundancia, podemos seleccionar solo uno de ellos, preferiblemente el que tiene la correlación más fuerte con R.

Cuando varias variables son fuertemente correlacionados entre sí (una correlación del 60%, por ejemplo)tienden a transportar información redundante. En tales casos, mantenemos solo uno de ellos, el que está más fuertemente correlacionado con la variable de respuesta R. Esto nos permite reducir la multicolinealidad.

Este ejercicio nos permite seleccionar estas variables: [‘Ex1’, ‘LF’, ‘M’, ’N’, ‘NW’, ‘U2’].

Estudio de multicolinealidad utilizando el VIF (factores de inflación de varianza)

Antes de ajustar la regresión logística, es importante estudiar la multicolinealidad.

Cuando existe una correlación entre los predictores, los errores estándar de las estimaciones del coeficiente aumentan, lo que lleva a una inflación de sus variaciones. El factor de inflación de la varianza (VIF) es una herramienta de diagnóstico utilizada para medir cuánto se infla la varianza del coeficiente de un predictor debido a la multicolinealidad, y generalmente se proporciona en la salida de regresión bajo una columna “VIF”.

Interpretación VIF

Este VIF se calcula para cada predictor en el modelo. El enfoque es retroceder la variable predictor I-TH contra todos los demás predictores. Luego obtenemos Rᵢ², que se puede usar para calcular el VIF usando la fórmula:

El VIF de la variable ésica

La siguiente tabla presenta los valores de VIF para las seis variables restantes, todas las cuales están por debajo de 5. Esto indica que la multicolinealidad no es una preocupación, y podemos continuar con el ajuste del modelo de regresión lineal.

El VIF de cada variable está por encima de 5.

Ajuste de una regresión lineal en seis variables

Si ajustamos una regresión lineal de la tasa de criminalidad en 10 variables, obtenemos lo siguiente:

Salida del análisis de regresión lineal múltiple. El código correspondiente se proporciona en el apéndice.

Diagnóstico de residuos

Antes de interpretar los resultados de la regresión, primero debemos evaluar la calidad de los residuos, particularmente verificando la autocorrelación, la homoscedasticidad (varianza constante) y la normalidad. El diagnóstico de residuos viene dado por la tabla a continuación:

Diagnóstico de los residuos. Ven al resumen de la regresión
  • El Durbin-Watson ≈2 no indica autocorrelación en los residuos.
  • Desde el omnibus hasta la curtosis, todos los valores muestran que los residuos son simétricos y tienen una distribución normal.
  • El bajo número de condición (3.06) confirma que no existe multicolinealidad entre los predictores.

Puntos principales para recordar

También podemos evaluar la calidad general del modelo a través de indicadores como la estadística R-cuadrado y F, que muestran resultados satisfactorios en este caso. (Consulte el Apéndice para obtener más detalles).

Ahora podemos interpretar los coeficientes de regresión desde una perspectiva estadística.
Excluyimos intencionalmente cualquier interpretación específica del negocio de los resultados.
El objetivo de este análisis es ilustrar algunos pasos simples y esenciales para modelar un problema utilizando una regresión lineal múltiple.

En el nivel de significancia del 5%, dos coeficientes son estadísticamente significativos: EX1 y NW.

Esto no es sorprendente, ya que estas fueron las dos variables que mostraron una correlación superior al 40% con la variable de respuesta R. Las variables que no son estadísticamente significativas pueden eliminarse o reevaluarse, o retener, dependiendo del contexto y los objetivos del estudio.

Esta publicación le ofrece algunas pautas para realizar una regresión lineal:

  • Es importante verificar linealidad a través del análisis gráfico y para estudiar el correlación entre la variable de respuesta y los predictores.
  • Examinar las correlaciones entre las variables ayuda a reducir multicolinealidad y apoya selección de variables.
  • Cuando dos predictores están altamente correlacionados, pueden transmitir información redundante. En tales casos, puede retener el que es más fuertemente correlacionado con la respuestao, basado en la experiencia en el dominio, el que tiene mayor relevancia comercial o interpretabilidad práctica.
  • El Factor de inflación de varianza (VIF) es una herramienta útil para cuantificar y evaluar la multicolinealidad.
  • Antes de interpretar estadísticamente los coeficientes del modelo, es esencial verificar la autocorrelación, la normalidad y la homoscedasticidad de los residuos para garantizar que se cumplan los supuestos del modelo.

Si bien este análisis proporciona información valiosa, también tiene ciertas limitaciones.

La ausencia de valores faltantes en el conjunto de datos simplifica el estudio, pero este rara vez es el caso en los escenarios del mundo real.

Si estás construyendo un modelo predictivoes importante dividir los datos en capacitación, pruebasy potencialmente un Conjunto de validación fuera del tiempo para garantizar una evaluación robusta.

Para selección de variablestécnicas como selección paso a paso y se pueden aplicar otros métodos de selección de características.

Al comparar múltiples modelos, es esencial definir apropiado Métricas de rendimiento.

En el caso de la regresión lineal, las métricas de uso común incluyen la Error absoluto medio (MAE) y el Error cuadrado medio (MSE).

Créditos de imagen

Todas las imágenes y visualizaciones en este artículo fueron creadas por el autor utilizando Python (Pandas, Matplotlib, Seaborn y Plotly) y Excel, a menos que se indique lo contrario.

Referencias

Wasserman, L. (2013). Todas las estadísticas: un curso conciso de inferencia estadística. Springer Science & Business Media.

Datos y licencias

El conjunto de datos utilizado en este artículo contiene estadísticas demográficas y relacionadas con el crimen para 47 estados de EE. UU. En 1960.
Se origina en el programa de informes de delitos uniformes (UCR) del FBI y fuentes adicionales del gobierno de los Estados Unidos.

Como trabajo del gobierno de EE. UU., Los datos están en el dominio público bajo 17 Código de los Estados Unidos § 105 y es libre de usar, compartir y reproducir sin restricción.

Fuentes:

Codos

Importar datos

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Load the dataset
df = pd.read_csv('data/Multiple_Regression_Dataset.csv')
df.head()

Análisis visual de las variables

Create a new figure

# Extract response variable and covariates
response = 'R'
covariates = [col for col in df.columns if col != response]

fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(20, 18))
axes = axes.flatten()

# Plot boxplot for binary variable 'S'
sns.boxplot(data=df, x='S', y='R', ax=axes[0])
axes[0].set_title('Boxplot of R by S')
axes[0].set_xlabel('S')
axes[0].set_ylabel('R')

# Plot regression lines for all other covariates
plot_index = 1
for cov in covariates:
    if cov != 'S':
        sns.regplot(data=df, x=cov, y='R', ax=axes[plot_index], scatter=True, line_kws={"color": "red"})
        axes[plot_index].set_title(f'{cov} vs R')
        axes[plot_index].set_xlabel(cov)
        axes[plot_index].set_ylabel('R')
        plot_index += 1

# Hide unused subplots
for i in range(plot_index, len(axes)):
    fig.delaxes(axes[i])

fig.tight_layout()
plt.show()

Análisis de la correlación entre variables

spearman_corr = df.corr(method='spearman')
plt.figure(figsize=(12, 10))
sns.heatmap(spearman_corr, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)
plt.title("Correlation Matrix Heatmap")
plt.show()

Filtrando predictores con alta intercorrelación (ρ> 0.6)

# Step 2: Correlation of each variable with response R
spearman_corr_with_R = spearman_corr['R'].drop('R')  # exclude R-R

# Step 3: Identify pairs of covariates with strong inter-correlation (e.g., > 0.9)
strong_pairs = []
threshold = 0.6
covariates = spearman_corr_with_R.index

for i, var1 in enumerate(covariates):
    for var2 in covariates[i+1:]:
        if abs(spearman_corr.loc[var1, var2]) > threshold:
            strong_pairs.append((var1, var2))

# Step 4: From each correlated pair, keep only the variable most correlated with R
to_keep = set()
to_discard = set()

for var1, var2 in strong_pairs:
    if abs(spearman_corr_with_R[var1]) >= abs(spearman_corr_with_R[var2]):
        to_keep.add(var1)
        to_discard.add(var2)
    else:
        to_keep.add(var2)
        to_discard.add(var1)

# Final selection: all covariates excluding the ones to discard due to redundancy
final_selected_variables = [var for var in covariates if var not in to_discard]

final_selected_variables

Análisis de multicolinealidad utilizando VIF

from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
from sklearn.preprocessing import StandardScaler

X = df[final_selected_variables]  

X_with_const = add_constant(X)  

vif_data = pd.DataFrame()
vif_data["variable"] = X_with_const.columns
vif_data["VIF"] = [variance_inflation_factor(X_with_const.values, i)
                   for i in range(X_with_const.shape[1])]

vif_data = vif_data[vif_data["variable"] != "const"]

print(vif_data)

Coloque un modelo de regresión lineal en seis variables después de la estandarización, no dividir los datos en tren y prueba

from sklearn.preprocessing import StandardScaler
from statsmodels.api import OLS, add_constant
import pandas as pd

# Variables
X = df[final_selected_variables]
y = df['R']

scaler = StandardScaler()
X_scaled_vars = scaler.fit_transform(X)

X_scaled_df = pd.DataFrame(X_scaled_vars, columns=final_selected_variables)

X_scaled_df = add_constant(X_scaled_df)

model = OLS(y, X_scaled_df).fit()
print(model.summary())
Imagen del autor: Resultados de regresión de OLS