[Este artículo fue publicado por primera vez elBlog de estadísticas R, y amablemente contribuyó aR-bloggers]. (Puede informar problemas sobre el contenido de esta páginaaquí)
¿Quieres compartir tu contenido en R-bloggers?haga clic aquísi tienes un blog, oaquísi no lo haces
La regresión lineal es un algoritmo de aprendizaje automático supervisado que se utiliza para predecir la variable continua. El algoritmo asume que la relación entre la variable dependiente (Y) y las variables independientes (X), es lineal y está representada por una línea de mejor ajuste. En este capítulo, aprenderemos cómo ejecutar la regresión lineal en R utilizando algunas funciones de selección y probaremos sus suposiciones antes de usarla para una predicción final sobre los datos de prueba.
En estadística, la regresión lineal se usa para modelar una relación entre una variable dependiente continua y una o más variables independientes. La variable independiente puede ser categórica o numérica. El caso cuando solo tenemosuna variable independienteentonces se llama comoRegresión lineal simple. si tenemosmás de una variable independiente, entonces se llama comoregresión multivariada.
Una representación matemática de un modelo de regresión lineal es la siguiente:
Y = β_0 + β_1X_1 + β_2X_2 + β_3X_3 + ….. + β_nX_n + error
En la ecuación anterior, el coeficiente β_0 representainterceptary el coeficiente β_i representapendiente. Aquí usaremos un enfoque de estudio de caso para ayudarlo a comprender el algoritmo de regresión lineal.
En el siguiente caso de estudio, usaremosDatos de vivienda de EE. UU.para predecir el precio. Veamos las seis observaciones principales de los datos de vivienda de EE. UU.
# Lectura de alojamiento de datos <- read.csv("./static/data/USA_Housing.csv", header = TRUE, sep = ",")# Imprimir las 6 observaciones principales (vivienda)
ÁreaÁrea de ingresosÁrea de la casaNúmero de habitaciones ÁreaNúmero de habitaciones ÁreaPoblación Precio1 79545.46 5.682861 7.009188 4.09 23086.80 1059033.62 79248.64 6.002900 6.730821 3.09 40173.07 1 505890.93 61287.07 5.865890 8.512727 5.13 36882.16 1058988.04 63345.24 7.188236 5.586729 3.26 34310.24 1260616.85 59982.20 5,040555 7,839388 4,23 26354,11 630943,56 80175,75 4,988408 6,104512 4,04 26748,43 1068138,1
El ejercicio de análisis exploratorio de datos es fundamental para cualquier proyecto relacionado con el aprendizaje automático. Es un enfoque para comprender y resumir las principales características de un dato dado. En su mayoría, esto implica cortar y dividir los datos en diferentes niveles, y los resultados a menudo se presentan con métodos visuales. Si se hace correctamente, puede revelar muchos aspectos de los datos, lo que seguramente lo ayudará a construir mejores modelos.
Cada conjunto de datos es diferente y, por lo tanto, no es fácil enumerar los pasos que se deben realizar como parte de la exploración de datos. Sin embargo, la clave para una EDA exitosa es seguir haciendo las preguntas que uno cree que ayudan a resolver el problema comercial o presentar todo tipo de hipótesis y luego probarlas usando las pruebas estadísticas apropiadas. Leer
En otras palabras, trate de averiguar si existe una relación estadísticamente significativa entre el objetivo y las variables independientes. ¿Cuáles son las cosas que derivan las variables objetivo?
A continuación hay algunas cosas que deberíamos considerar explorar desde el punto de vista estadístico:
1. Comprobación de la distribución de la variable objetivo– Primero, siempre debe tratar de comprender la naturaleza de su variable objetivo. Para lograr esto, dibujaremos un histograma con un gráfico de densidad.
library(ggplot2)# Building histogramggplot(data=vivienda, aes(vivienda$Precio)) + geom_histogram(aes(y =..density..), fill = "orange") + geom_density()

La variable precio sigue una distribución normal yEs bueno que la variable objetivo siga una distribución normaldesde la perspectiva de las regresiones lineales. Si te preguntas ¿por qué? Entonces no se preocupe, lo cubrimos en las próximas secciones.
2. Análisis de estadísticas resumidas– Aquí, simplemente crearemos estadísticas de resumen para todas las variables para comprender el comportamiento de todas las variables independientes. También proporcionará información sobre valores faltantes o valores atípicos, si los hubiera. Para obtener más información y funciones que puede utilizar, leaguía para principiantes al análisis exploratorio de datos.
Tanto los valores perdidos como los valores atípicos son motivo de preocupación para los modelos de Machine Learning, ya que tienden a empujar el resultado hacia valores extremos.
# cargando psych packagelibrary(psych)psych::describe(housing)
vars n mean sd mediana trimmed mad min max rangeAreaIncome 1 5000 68583.11 10657.99 68804.29 68611.84 10598.27 17796.63 107701.75 89905.12AreaHouse 2 5000 5.98 0.99 5,97 5,98 0,99 2,64 9,52 6,87ÁreaNúmero de habitaciones 3 5000 6,99 1,01 7,00 6,99 1,01 3,24 10,76 7,52ÁreaNúmero de habitaciones 4 5000 3,98 1,23 4,05 3,92 1.33 2.00 6.50 4.50ÁreaPoblación 5 5000 36163.52 9925.65 36199.41 36112.49 9997.21 172.61 69621.71 69449.10Precio 6 5000 1232072.65 353117 .63 1232669.38 1232159.69 350330.42 15938.66 2469065.59 2453126.94 curtosis sesgada seaAreaIncome -0.03 0.04 150.73AreaHouse -0.01 -0.09 0.01AreaNumberofRooms - 0.04 -0.08 0.01ÁreaNúmerodedormitorios 0.38 -0.70 0.02ÁreaPoblación 0.05 -0.01 140.37Precio 0.00 -0.06 4993.84
3. Comprobación de valores atípicos mediante diagramas de caja– Para obtener más información sobre los valores atípicos y cómo identificarlos, lea –Cómo identificar y tratar los valores atípicos mediante métodos univariados o multivariados. Aquí están usando un diagrama de caja para trazar la distribución de cada variable numérica para verificar si hay valores atípicos.
Si los puntos se encuentran más allá de los susurros, entonces tenemos presentes valores atípicos. Por ahora, solo vamos por análisis de valores atípicos univariados. Pero le animo a que busque también valores atípicos a un nivel multivariante. Si hay valores atípicos, debe eliminarlos o realizar un tratamiento adecuado antes de seguir adelante.
biblioteca(reformar)meltData <- melt(vivienda)p <- ggplot(meltData, aes(factor(variable), valor))p + geom_boxplot() + facet_wrap(~variable, scale="free")

Aparte del área del número de dormitorios, todas las demás variables parecen tener valores atípicos
4. Visualización de matriz de correlación–
Usaremos el paquete corrgram para visualizar y analizar la matriz de correlación. Para obtener más información sobre cómo verificar la importancia de la correlación y las diferentes formas de visualizar la matriz de correlación, leaCorrelación en R: una breve introducción. En teoría, la correlación entre las variables independientes debería ser cero. En la práctica, esperamos y estamos de acuerdo con una correlación débil o nula entre las variables independientes.
También esperamos que las variables independientes reflejen una alta correlación con la variable objetivo.
require(corrgram)corrgram(vivienda, pedido=VERDADERO)

Para construir una regresión lineal, usaremospelícula()
función. La función toma dos argumentos principales.
- Fórmulaindicando las variables dependientes e independientes separadas por~(tilder).
- Elconjunto de datosnombre.
- Hay otros argumentos útiles y, por lo tanto, le pediría que use
ayuda (lm)
para leer más de la documentación.
Inmersión de datos en subconjuntos de entrenamiento y prueba
Los datos de la vivienda se dividen en 70:30 división de tren y prueba. La división 70:30 es la más común y se usa principalmente durante la fase de entrenamiento. El 70 % de los datos se usa para entrenamiento, y el 30 % restante es para probar qué tan bien pudimos aprender el comportamiento de los datos.
library(caret)# Dividir datos en tren y testindex <- createDataPartition(vivienda$Precio, p = .70, lista = FALSO)tren <- vivienda[índice, ]prueba <- vivienda[-índice, ]# Comprobación de la dim de entrenar (tren)
# Salida[1] 3500 6
Puede ver que tenemos el 70 % de las observaciones aleatorias en el conjunto de datos de entrenamiento.
modelo de construcción
# Teniendo modelolmModel <- lm(Precio ~ . , datos = tren)# Imprimiendo el modelo objectprint(lmModel)
# SalidaLlamada:lm(fórmula = Precio ~ ., dato = vivienda) Coeficientes: (Intercepción) ÁreaIngreso ÁreaCasa -2637299.03 21.58 165637.03 ÁreaNúmerodeHabitaciones ÁreaNúmerodeHabitaciones ÁreaPoblación 120659.95 1651.14 15.20
Interpretación de los coeficientes de regresión
En la salida anterior,Interceptarrepresenta que el valor mínimo de Precio que se recibirá, si todas las variables son constantes o están ausentes.
tenga en cuenta
La intercepción no siempre tiene sentido en términos comerciales.
Pendiente (representada por variables independientes)nos dice acerca de la tasa de cambio que presenciará la variable Precio, con cada cambio de una unidad en la variable independiente. Por ejemplo, siÁreaCasade casa aumenta en una unidad más, laPreciode la casa aumentará en 165.637.
Debemos asegurarnos de que el valor de cada coeficiente beta sea significativo y no haya llegado por casualidad. En R, elestoy
función ejecuta unprueba t de una muestracontra cada coeficiente beta para asegurarse de que sean significativos y no se hayan producido por casualidad. Del mismo modo, necesitamos validar el modelo general. Al igual que una prueba t de una muestra,estoy
La función también genera tres estadísticas, que ayudan a los científicos de datos a validar el modelo. Estas estadísticas incluyenR Plaza,Cuadrado R ajustado, yprueba F, también conocido como prueba global.
Para ver estas estadísticas, necesitamos pasar ellmmodelo
objetar a laresumen()
función.
# Comprobación del resumen de estadísticas del modelo (lmModel)
# OutputCall:lm(fórmula = Precio ~ ., datos = vivienda)Residuales: Min 1T Median 3T Max-337020 -70236 320 69175 361870Coeficientes: Estimación Std. Error valor t Pr(>|t|) (Intercepto) -2637299.0333 17157.8092 -153.708 <0.0000000000000002 ***AreaIncome 21.5780 0.1343 160.656 <0.0000000000000002 ***AreaHouse 165637.0269 1443.4130 114.754 <0.0000000000000002 ***Número de área de habitaciones 120659.9488 1605.1604 75.170 <0.0000000000000002 *** Número de área de habitaciones 1651.1391 1308.6712 1.262 0.207 Población de área 15.2007 0.1442 105.393 <0.0000000000000002 ***---Signif. códigos: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1Error estándar residual: 101200 en 4994 grados de libertad Múltiples R-cuadrado: 0.918, R-cuadrado ajustado: 0.9179F-estadística: 1.119e+04 en 5 y 4994 DF, valor p: < 0.00000000000000022
En la salida anterior,Pr(>|t|)representa el valor p, que se puede comparar con el valor alfa de 0,05 para garantizar si el coeficiente beta correspondiente es significativo o no. Elestoy
función aquí presta una mano amiga. Todos los valores en la salida que tienen (.) punto o (*) astric en los nombres de las variables indican que estos valores son significativos. Con base en esto, ahora sabemos que todas las variables son estadísticamente significativas exceptoÁreaNúmerodedormitorios.
Para la precisión general del modelo, analicemos las estadísticas generadas porestoy
función uno por uno.
1. Múltiples R-cuadrado: 0.918– El valor R-cuadrado se denomina formalmentecoeficiente de determinación. Aquí, 0,918 indica que las variables intersección, Ingreso de área, Casa de área, Número de habitaciones de área y Población de área, cuando se juntan, pueden explicar el 91,8 % de la varianza en la variable Precio. El valor de R-cuadrado se encuentra entre 0 y 1. En aplicaciones prácticas, si el valor de R2 es superior a 0,70, lo consideramos un buen modelo.
2. R-cuadrado ajustado: 0,9179– El valor R-cuadrado ajustado indica si la adición de nueva información (variable) aporta una mejora significativa al modelo o no. Así que a partir de ahora, este valor no proporciona mucha información. Sin embargo, el aumento en el valor de R-cuadrado ajustado con la adición de una nueva variable indicará que la variable es útil y aporta una mejora significativa al modelo.
No se aprecia una gran diferencia entre el R-cuadrado y el R-cuadrado ajustado y generalmente indica que existe multicolinealidad dentro de los datos.
3. Estadístico F: 1.119e+04 en 5 y 4994 DF, valor p: < 0.00000000000000022– Esta línea habla de la prueba global del modelo. Elestoy
La función ejecuta una prueba ANOVA para verificar la importancia del modelo general. Aquí la hipótesis nula es que el modelo no es significativo, y la alternativa es que el modelo es significativo. Según los valores de p < 0,05, nuestro modelo es significativo.
Sin embargo, mirar estas estadísticas es suficiente para tomar una decisión sobre la importancia del modelo. Pero existen otros métodos de validación para la regresión lineal que pueden ser de ayuda al decidir qué tan bueno o malo es el modelo. Algunos de ellos se mencionan a continuación:
4. Valores AIC y BIC– El AIC (criterio de información de Akaike, 1974) y el BIC (criterio de información bayesiano, 1978) son criterios de verosimilitud penalizada. Ambas medidas utilizan una "medida de ajuste + penalización por complejidad" para obtener los valores finales.
AIC = – 2 * ln(probabilidad) + 2 * p
BIC = – 2 * ln(probabilidad) + ln(N) * p
Aquí p = número de parámetros estimados y N = tamaño de muestra.
Los valores AIC y BIC se pueden usar para elegir los mejores subconjuntos de predictores en la regresión y para comparar diferentes modelos. Al comparar diferentes modelos, el modelo con valores mínimos de AIC y BIC se considera el mejor modelo.
Nota
Es probable que AIC sobreajuste los datos, mientras que BIC es susceptible de sobreajuste de los datos.
# Usando la función AICAIC(lmModel)# Usando la función BICBIC(lmModel)
# Salida AIC[1] 129441.3# Salida BIC[1] 129486.9
5. Error cuadrático medio (RMSE)– Al comparar las estadísticas RMSE de diferentes modelos, podemos decidir cuál es un mejor modelo. El modelo con el valor RMSE más bajo se considera un mejor modelo. Hay otras funciones similares como MAE, MAPE, MSE, etc. que se pueden usar. Estas funciones se pueden encontrar enMétrica
Paquete R. Estas funciones toman principalmente dos argumentos: uno es el valor real y el segundo, los valores predichos. Así que veamos cómo podemos obtener estos valores. Los datos reales se pueden encontrar al 100 % a partir del conjunto de datos original o de los datos de entrenamiento en nuestro caso. Sin embargo, para encontrar los valores ajustados, necesitamos explorar el objeto modelo.
# Comprobación del objeto del modelo para los nombres de valores reales y predichos (lmModel)
# Salida [1] "coeficientes" "residuales" [3] "efectos" "rango" [5] "valores ajustados" "asignar" [7] "qr" "df.residual" [9] "xlevels" "call " [11] "términos" "modelo"
El vector anterior presenta los nombres de los objetos que constituyen el objeto modelo. Aquí, los valores ajustados son los valores predichos. Ahora, usaremos estos valores para generar elrmsevalores.
biblioteca (Métricas) rmse (real = entrenar $ Precio, predicho = lmModel $ ajustado.valores)
# Salida[1] 493370.4
La regresión lineal es paramétrica, lo que significa que el algoritmo hace algunas suposiciones sobre los datos. Un modelo de regresión lineal solo se considera adecuado si se cumplen estos supuestos. Hay alrededor de cuatro suposiciones y se mencionan a continuación. Si el modelo no cumple con estos supuestos, entonces simplemente no podemos usar este modelo.
1. Los errores deben seguir una distribución normal– Esto se puede verificar dibujando un histograma de residuos o usandotrama()
función. Eltrama
La función crea 4 gráficos diferentes. Uno de los cuales es un diagrama de NPP. El gráfico confirma si los errores siguen una distribución normal o no.
Generando histograma
# Histograma para verificar la distribución de erroreshist(lmModel$residuals, color = "grey")

El histograma de errores anterior establece claramente que los errores se distribuyen normalmente.
Generando gráfico NPP
Exceptuamos que los puntos estén muy cerca de la línea punteada en un diagrama de NPP. Los puntos que están cerca de la línea significan que los errores siguen una distribución normal.
trazar (lmModel)

2. No debe haber heterocedasticidad– Esto significa que la varianza de los términos de error debe ser constante. No veremos ningún patrón cuando dibujemos un gráfico entre residuos y valores ajustados. Y la línea media debe estar cerca de cero.
Generación del diagrama de dispersión entre residuos y valores ajustados
# Usando la función plotplot(lmModel)

Una línea roja recta más cercana al valor cero representa que no tenemos un problema de heterocedasticidad en nuestros datos.
3. No debe haber multicolinealidad– El modelo lineal asume que las variables predictoras no se correlacionan entre sí. Si exhiben una alta correlación, es un problema y se llamamulticolinealidad. Una prueba del factor de inflación de variación puede ayudar a comprobar el supuesto de multicolinealidad.
VIF = 1/(1-R2)
La implementación R de la siguiente función se puede encontraraquí.
VIF es un proceso iterativo. La función eliminará una variable a la vez, lo que es causa de multicolinealidad y repite el proceso hasta que se eliminen todas las variables que causan problemas. Entonces, finalmente, nos quedamos con la lista de variables que no tienen o tienen muy poca correlación entre ellas.
vif_func(vivienda[, 1:5])var vif AreaIncome 1.00115868968647 AreaHouse 1.00057658981485 AreaNumberofRooms 1.27353508823836 AreaNumberofBrooms 1.27441273719468 AreaPopulation 1.001265 79728799Todas las variables tienen VIF < 10, max VIF 1.27[1] "AreaIncome" [2] "AreaHouse" [3] "AreaNumberofRooms" [4] "Número de área de los dormitorios" [5] "Población del área"
No hay problema de multicolinealidad en el conjunto de datos. En general, los valores de VIF superiores a 5 o 7 son la causa de la multicolinealidad.
3. No debe haber correlación serial automática– La autocorrelación significa que los términos de error no deben correlacionarse entre sí. Para verificar esto, podemos ejecutar la prueba Durbin-Watson (prueba dw). La prueba devuelve un valor entre 0 y 4. Si el valor es dos, decimos que no hay correlación serial automática. Sin embargo, un valor superior a 2 representa (-) cinco correlación y un valor inferior a 2 representa (+) cinco correlación.
biblioteca("lmtest")dwtest(lmModel)# Datos de prueba Durbin-Watson de salida: lmModelDW = 1,9867, valor p = 0,3477hipótesis alternativa: la autocorrelación verdadera es mayor que 0
Obtuvimos un valor de 1,9867, lo que sugiere que no existe una correlación serial automática.
Nuestro modelo cumplió con los cuatro supuestos de la regresión lineal.
Predicción de la variable dependiente (Y) en el conjunto de datos de prueba
Probamos el rendimiento del modelo en un conjunto de datos de prueba para garantizar que nuestro modelo sea estable y obtengamos resultados iguales o lo suficientemente cercanos para usar este modelo entrenado para predecir y pronosticar los valores futuros de las variables dependientes. Para predecir, usamospredecir
función, y luego generamos el valor R-Squared para ver si obtenemos el mismo resultado que obtuvimos en el conjunto de datos de entrenamiento o no.
# Predicción del precio en el conjunto de datos de pruebatest$PreditedPrice <- predict(lmModel, test)# Imprimiendo las 6 filas principales del precio real y predichohead(test[, c("Precio", "PreditedPrice")])# Precio de salida PreditedPrice2 1505890.9 1494997.33 1058988.0 1253539.28 1573936.6 1572965.312 663732.4 629153.823 718887.2 727497.824 743999.8 991034.7
Generación de valor R-Squared para el conjunto de datos de prueba
Estamos utilizando una fórmula definida por el usuario para generar el valor R-Squared aquí.
real <- test$Preciopredics <- test$PreditedPricerss <- sum((preds - real) ^ 2)tss <- sum((real - mean(real)) ^ 2)rsq <- 1 - rss/tssrsq# Output[ 1] 0,9140436
Nuestro modelo está funcionando fantástico.
En el conjunto de datos de prueba, obtuvimos una precisión de 0,9140436 y en un conjunto de datos de entrenamiento, obtuvimos una precisión de 0,918.
En este capítulo, aprendimos muchas cosas relacionadas con la regresión lineal desde un punto de vista práctico y teórico. Aprendimos cuándo usar la regresión lineal, cómo usarla, cómo verificar los supuestos de la regresión lineal, cómo predecir la variable objetivo en el conjunto de datos de prueba usando un objeto de modelo entrenado, y también aprendimos cómo validar el modelo de regresión lineal usando diferentes estadísticas. métodos. En el próximo capítulo, aprenderemos sobre un modelo de regresión lineal avanzado llamado regresión de cresta.
Relacionado
ADeja un comentariopara el autor, siga el enlace y comente en su blog:Blog de estadísticas R.
R-bloggers.comofertasactualizaciones diarias por correo electrónicoacerca deRnoticias y tutoriales sobreaprendiendo ry muchos otros temas.Haga clic aquí si está buscando publicar o encontrar un trabajo de R/ciencia de datos.
¿Quieres compartir tu contenido en R-bloggers?haga clic aquísi tienes un blog, oaquísi no lo haces