Regresión de lazo en R (paso a paso)

Actualizado por ultima vez el 7 de mayo de 2021, por .

La regresión de lazo es un método que podemos utilizar para ajustar un modelo de regresión cuando la multicolinealidad está presente en los datos.

En pocas palabras, la regresión de mínimos cuadrados intenta encontrar estimaciones de coeficientes que minimicen la suma de los residuos al cuadrado (RSS):

RSS = Σ (y i – ŷ i ) 2

dónde:

  • Σ : símbolo griego que significa suma
  • y i : El valor de respuesta real para la i- ésima observación
  • ŷ i : el valor de respuesta predicho basado en el modelo de regresión lineal múltiple

Por el contrario, la regresión de lazo busca minimizar lo siguiente:

RSS + λΣ | β j |

donde j varía de 1 a p variables predictoras y lambda ≥ 0.

Este segundo término de la ecuación se conoce como penalización por contracción . En la regresión de lazo, seleccionamos un valor para λ que produce el MSE de prueba más bajo posible (error cuadrático medio).

Este tutorial proporciona un ejemplo paso a paso de cómo realizar la regresión de lazo en R.

Paso 1: cargue los datos

Para este ejemplo, usaremos el conjunto de datos integrado de R llamado mtcars . Usaremos hp como variable de respuesta y las siguientes variables como predictores:

  • mpg
  • peso
  • maldita sea
  • qsec

Para realizar la regresión de lazo, usaremos funciones del paquete glmnet . Este paquete requiere que la variable de respuesta sea ​​un vector y que el conjunto de variables predictoras sea de la clase data.matrix .

El siguiente código muestra cómo definir nuestros datos:

#define variable de respuesta
y <- mtcars $ hp

#definir matriz de variables predictoras
 x <- data.matrix (mtcars [, c ('mpg', 'wt', 'drat', 'qsec')])

Paso 2: ajuste el modelo de regresión de lazo

A continuación, usaremos la función glmnet () para ajustar el modelo de regresión de lazo y especificaremos alpha = 1 .

Tenga en cuenta que establecer alfa igual a 0 es equivalente a usar la regresión de crestas y establecer alfa en algún valor entre 0 y 1 es equivalente a usar una red elástica.

Para determinar qué valor usar para lambda, realizaremos una validación cruzada de k veces e identificaremos el valor lambda que produce el error cuadrático medio de prueba (MSE) más bajo.

Tenga en cuenta que la función cv.glmnet () realiza automáticamente una validación cruzada de k veces utilizando k = 10 veces.

biblioteca (glmnet)

# Realice una validación cruzada de k veces para encontrar el valor lambda óptimo
cv_model <- cv. glmnet (x, y, alpha = 1 )

# encontrar un valor lambda óptimo que minimice la prueba MSE
 best_lambda <- cv_model $ lambda . min
best_lambda

[1] 5.616345

#produce la gráfica de prueba MSE por valor lambda
parcela (cv_model) 

Pruebe MSE para la regresión de lazo en R

El valor lambda que minimiza la prueba MSE resulta ser 5.616345 .

Paso 3: Analizar el modelo final

Por último, podemos analizar el modelo final producido por el valor lambda óptimo.

Podemos usar el siguiente código para obtener las estimaciones de coeficientes para este modelo:

# encontrar coeficientes del mejor modelo
 best_model <- glmnet (x, y, alpha = 1 , lambda = best_lambda)
coef (mejor_modelo)

Matriz dispersa 5 x 1 de clase "dgCMatrix"
                   s0
(Intercepción) 484.20742
mpg -2.95796
peso 21.37988
maldición.      
qsec -19.43425

No se muestra ningún coeficiente para el predictor drat porque la regresión de lazo redujo el coeficiente hasta cero. Esto significa que se eliminó por completo del modelo porque no fue lo suficientemente influyente.

Tenga en cuenta que esta es una diferencia clave entre la regresión de cresta y la regresión de lazo . La regresión de crestas reduce todos los coeficientes hacia cero, pero la regresión de lazo tiene el potencial de eliminar los predictores del modelo al reducir los coeficientes completamente a cero.

También podemos usar el modelo de regresión de lazo final para hacer predicciones sobre nuevas observaciones. Por ejemplo, supongamos que tenemos un automóvil nuevo con los siguientes atributos:

  • millas por galón: 24
  • peso: 2.5
  • maldita sea: 3.5
  • qsec: 18,5

El siguiente código muestra cómo utilizar el modelo de regresión de lazo ajustado para predecir el valor de hp de esta nueva observación:

#definir nueva observación
 new = matrix (c (24, 2.5, 3.5, 18.5), nrow = 1 , ncol = 4 )

#utilice el modelo de regresión de lazo para predecir el valor de respuesta
 predecir (best_model, s = best_lambda, newx = new)

[1,] 109.0842

Según los valores de entrada, el modelo predice que este automóvil tendrá un valor de hp de 109.0842 .

Por último, podemos calcular el R cuadrado del modelo en los datos de entrenamiento:

#utilice el mejor modelo ajustado para hacer predicciones
 y_predicted <- predict (best_model, s = best_lambda, newx = x)

#find SST y SSE 
sst <- sum ((y - mean (y)) ^ 2)
sse <- suma ((y_predicionado - y) ^ 2)

#find R-Squared
 rsq <- 1 - sse / sst
rsq

[1] 0,8047064

El R cuadrado resulta ser 0,8047064 . Es decir, el mejor modelo fue capaz de explicar el 80,47% de la variación en los valores de respuesta de los datos de entrenamiento.

Puede encontrar el código R completo utilizado en este ejemplo aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

A menudo, en estadística, nos interesa medir la correlación entre dos variables. Esto nos ayuda a comprender lo siguiente: La…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!