Contenido de este artículo
- 0
- 0
- 0
- 0
Actualizado el 17 de julio de 2024, por Luis Benites.
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)
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/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: