Este documento presenta un caso de estudio para ejemplificar como se construye e interpreta un modelo de regresión lineal, utilizando R como lenguaje de análisis de datos.
Se asume que existe un conocimiento previo de estadística básica y un nivel básico de manejo del lenguaje R.
El ejemplo usa las siguientes librerías:
Se obtuvieron datos históricos del mercado de bienes raíces del distrito Sindian en la ciudad de Nueva Taipei, en Taiwan. Las características son:
Queremos averiguar si el precio de las propiedades puede ser estimado (predicho) a partir de alguna o algunas de las demás variables,
Descarga el archivo de datos aquí
Los datos fueron tomados del UCI Machine Learning Repository (https://archive.ics.uci.edu/ml/datasets/Real+estate+valuation+data+set) y fueron adaptados para este ejemplo.
Referencia: Yeh, I. C., & Hsu, T. K. (2018). Building real estate valuation models with comparative approach through case-based reasoning. Applied Soft Computing, 65, 260-271.
Primero se identifican las características de los datos que se analizarán:
| Variable | Tipo | Subtipo | Nivel de medición |
|---|---|---|---|
| edad | Cuantitativa | Continua | De Razón |
| distancia | Cuantitativa | Continua | De Razón |
| tiendas | Cuantitativa | Discreta | De Razón |
| latitud | Cuantitativa | Continua | De Razón |
| longitud | Cuantitativa | Continua | De Razón |
| precio | Cuantitativa | Continua | De Razón |
Se cargan los datos y se verifica que el tipo de R sea consistente con las características indicadas:
bienesraices <- read.csv(file='bienesraices.csv', sep=';')
datatable(bienesraices, options=list(pageLength=6))## 'data.frame': 414 obs. of 6 variables:
## $ edad : num 32 19.5 13.3 13.3 5 7.1 34.5 20.3 31.7 17.9 ...
## $ distancia: num 84.9 306.6 562 562 390.6 ...
## $ tiendas : int 10 9 5 5 5 3 7 6 1 3 ...
## $ latitud : num 25 25 25 25 25 ...
## $ longitud : num 122 122 122 122 122 ...
## $ precio : num 37.9 42.2 47.3 54.8 43.1 32.1 40.3 46.7 18.8 22.1 ...
Se observa que R clasificó las variables como num o int, lo que es correcto con base en el nivel de medición.
Obtenemos el resumen básico de las variables.
## edad distancia tiendas latitud
## Min. : 0.000 Min. : 23.38 Min. : 0.000 Min. :24.93
## 1st Qu.: 9.025 1st Qu.: 289.32 1st Qu.: 1.000 1st Qu.:24.96
## Median :16.100 Median : 492.23 Median : 4.000 Median :24.97
## Mean :17.713 Mean :1083.89 Mean : 4.094 Mean :24.97
## 3rd Qu.:28.150 3rd Qu.:1454.28 3rd Qu.: 6.000 3rd Qu.:24.98
## Max. :43.800 Max. :6488.02 Max. :10.000 Max. :25.01
## longitud precio
## Min. :121.5 Min. : 7.60
## 1st Qu.:121.5 1st Qu.: 27.70
## Median :121.5 Median : 38.45
## Mean :121.5 Mean : 37.98
## 3rd Qu.:121.5 3rd Qu.: 46.60
## Max. :121.6 Max. :117.50
Se observa que todos los valores parecen ser correctos en función de su definición (por ejemplo, no hay distancias negativas), igualmente se observa que no hay datos faltantes ni datos vacíos.
Se checa si existen valores extremos (outliers).
par(mfrow=c(2,3))
boxplot(bienesraices$edad, main='Edad', col='lightblue')
boxplot(bienesraices$distancia, main='Distancia', col='lightblue')
boxplot(bienesraices$tiendas, main='Tiendas', col='lightblue')
boxplot(bienesraices$latitud, main='Latitud', col='lightblue')
boxplot(bienesraices$longitud, main='Longitud', col='lightblue')
boxplot(bienesraices$precio, main='Precio', col='lightblue')Se observa que a excepción de edad y tiendas, las demás variables presentan valores extremos (outliers), sin embargo, el manejo de esta situación se discutirá más adelante.
A partir de este momento, procedemos a realizar los análisis de regresión lineal.
Procederemos a ejemplificar como se realiza y evalúa un modelo de regresión lineal simple.
En estadística, regresión lineal es un modelo matemático que busca explicar la relación entre un efecto o respuesta y una o más causas.
A la variable del efecto se le llama variable dependiente (y) y a la variable o variables de las causas se les llama variables explicativas o independientes (xi) y se asume que la relación entre las variables dependiente e independiente(s) es lineal. A partir de los datos, se estiman los parámetros del modelo.
El caso más sencillo es cuando existe únicamente una variable independiente y se denomina regresión lineal simple y el modelo se escribe:
y = \(\beta\)0 + \(\beta\)1 x
Los valores de los parámetros \(\beta\)0 y \(\beta\)1 son los que se estiman para encontrar el modelo adecuado a los datos analizados.
Existen varios supuestos para que sea válido usar regresión lineal simple:
Queremos entender que factores afectan el precio que las personas están dispuestas a pagar por las propiedades y ya que estamos usando regresión lineal simple, debe existir una sola variable que esté relacionada con el precio.
Asumamos que la movilidad es un factor crítico para comprar estas propiedades, por lo tanto, la distancia a la estación de transporte MRT más cercana sería la variable explicativa a considerar.
Analicemos su comportamiento con una gráfica de dispersión (scatter plot).
Se observa una relación entre las variables, ya que conforme aumenta la distancia, el precio se reduce; obtengamos el coeficiente de correlación para tener una medida de la fuerza de asociación entre ambas variables.
## [1] -0.6736129
El signo negativo nos indica que la relación es inversa, es decir, una variable aumenta mientras que la otra disminuye (y viceversa), lo que confirma lo observado en la gráfica; el valor obtenido indica una correlación importante entre ambas variables.
La hipótesis es que el precio depende de distancia.
En R se usa la función lm para crear un modelo de regresión lineal.
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices)
##
## Coefficients:
## (Intercept) distancia
## 45.851427 -0.007262
Obtenemos el detalle del modelo.
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices)
##
## Residuals:
## Min 1Q Median 3Q Max
## -35.396 -6.007 -1.195 4.831 73.483
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.8514271 0.6526105 70.26 <2e-16 ***
## distancia -0.0072621 0.0003925 -18.50 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.07 on 412 degrees of freedom
## Multiple R-squared: 0.4538, Adjusted R-squared: 0.4524
## F-statistic: 342.2 on 1 and 412 DF, p-value: < 2.2e-16
La columna Estimate indica el valor estimado de los parámetros del modelo; en el caso de regresión lineal simple, (Intercept) indica el punto donde la línea recta corta el eje Y (la ordenada al origen) mientras que el segundo estimado, distancia en este caso, indica la pendiente de la línea recta.
La columna t value indica el valor del estadístico t asociado a cada coeficiente, mientras que la columna Pr(>|t|) es el valor p correspondiente de la prueba de hipótesis; la hipótesis a validar es que el coeficiente es igual a cero, es decir, no tiene impacto en el fenómeno. Observamos que para ambos coeficientes, el valor p es menor a 0.05 por lo tanto, ambos coeficientes son diferentes de cero (estadísticamente significativos) para un nivel de confianza del 95%.
El valor Múltiple R-squared, conocido como coeficiente de determinación, indica la proporción del fenómeno que es explicado por el modelo de regresión; en este caso, 45.38% del comportamiento del precio es explicado por la distancia.
El valor F-statistic y p-value (valor p) corresponden a la prueba F del modelo de regresión que verifica la existencia de una relación lineal entre las variables, dado que el valor p es menor que 0.05, la interpretación es que el modelo es significativo con un nivel de confianza del 95%.
En este punto, se asume que el modelo es válido y explica una proporción aceptable del fenómeno.
## (Intercept) distancia
## 45.851427058 -0.007262052
El modelo de regresión lineal simple para nuestro caso es:
y = \(\beta\)0 + \(\beta\)1 x
precio = 45.851427058 - 0.007262052 * distancia
Los valores ajustados (fitted values) son el valor de la variable de respuesta cuando se evalúan los valores de las variables predictoras en el modelo. Por ejemplo, para las primeras seis propiedades, los valores ajustados serían:
## [1] 45.23503 43.62492 41.77027 41.77027 43.01510 30.05625
En el modelo, estos valores están contenidos en la propiedad fitted.values:
## 1 2 3 4 5 6
## 45.23503 43.62492 41.77027 41.77027 43.01510 30.05625
Los residuales (residuals) son la diferencia entre el valor real y el valor ajustado, es decir, es el error que no es explicado por la línea de regresión. Por ejemplo, para las primeras seis observaciones, los residuales serían:
## 1 2 3 4 5 6
## -7.33503269 -1.42492052 5.52973339 13.02973339 0.08490082 2.04375307
En el modelo, estos valores están contenidos en la propiedad residuals:
## 1 2 3 4 5 6
## -7.33503269 -1.42492052 5.52973339 13.02973339 0.08490082 2.04375307
El modelo obtenido en R contiene gráficas de diagnóstico para evaluar ciertos aspectos del mismo:
En la primera gráfica, residuales vs valores ajustados, si el modelo predice adecuadamente los datos, los residuales deben observarse distribuidos de manera aleatoria alrededor de la línea punteada horizontal, es decir, no debe observarse un patrón sistemático. Si existe linealidad, la línea roja sólida roja debe ser horizontal y lineal. Si existe homocedasticidad, los residuales deben distribuirse parejo a lo largo de la línea y = 0. Para nuestro modelo, se observa que hay haber problemas con la linealidad y la homocedasticidad, ya que los residuales se agrupan.
En la segunda gráfica, de distribución normal, si los residuales se distribuyen normalmente, los puntos deben situarse a lo largo de la línea punteada. En nuestro caso, se observa que en general, los puntos siguen la línea sin embargo, al acercarse a la derecha, los puntos abandonan la línea recta, lo que implica un problema con la normalidad.
En la tercera gráfica, de escala-ubicación, si la varianza es constante (homocedasticidad) se debe observar una línea roja horizontal y los residuales deben estar distribuidos de manera constante a lo largo de ella. En nuestro caso, se observa que los residuales se concentran a la derecha de la gráfica, lo que indica que la varianza no es constante (heterocedasticidad) y esto contradice unos de los supuestos básicos para poder utilizar un modelo de regresión.
En la cuarta gráfica, residuales vs valor de palanca, sirve para encontrar las observaciones influyentes (leverage), Si no existen observaciones influyentes, no debe observarse una curva punteada roja, o en caso de verse ligeramente en las esquinas de la gráfica, no deben existir puntos en esa zona. En nuestro modelo, aunque se identifican ciertas observaciones (149, 250, 271), ninguna cruza la curva de distancia, por lo tanto no tenemos problema de valores influyentes.
También es posible desplegar las 4 gráficas combinadas.
Es posible usar la función gvlma que aplica varias pruebas para verificar los supuestos para el modelo de regresión lineal.
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices)
##
## Coefficients:
## (Intercept) distancia
## 45.851427 -0.007262
##
##
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance = 0.05
##
## Call:
## gvlma(x = modelo)
##
## Value p-value Decision
## Global Stat 1043.9332 0.000e+00 Assumptions NOT satisfied!
## Skewness 109.9943 0.000e+00 Assumptions NOT satisfied!
## Kurtosis 878.2889 0.000e+00 Assumptions NOT satisfied!
## Link Function 55.4943 9.370e-14 Assumptions NOT satisfied!
## Heteroscedasticity 0.1557 6.931e-01 Assumptions acceptable.
Para este punto, usamos la función outlierTest que detecta los valores extremos por medio de la prueba de Bonferroni.
## rstudent unadjusted p-value Bonferroni p
## 271 7.827433 4.2664e-14 1.7663e-11
La observación 271 quedó identificada como valor extremo (outlier).
Existen diversas estrategias para corregir los problemas que presenta un modelo, una de ellas es eliminar los valores identificados en las gráficas, es decir, valores extremos y valores influyentes. Para nuestro modelo, eliminaremos las observaciones 114, 149, 250, 271 y 313, repitiendo todo el procedimiento.
bienesraices.ajustado <- bienesraices[c(-114,-149,-250,-271,-313),]
ggplot(data=bienesraices.ajustado) +
geom_point(aes(x=distancia, y=precio), color='darkgreen')## [1] -0.7130446
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices.ajustado)
##
## Coefficients:
## (Intercept) distancia
## 45.724787 -0.007405
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices.ajustado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -24.359 -5.638 -0.932 4.887 33.956
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.7247873 0.5891226 77.61 <2e-16 ***
## distancia -0.0074046 0.0003609 -20.52 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.997 on 407 degrees of freedom
## Multiple R-squared: 0.5084, Adjusted R-squared: 0.5072
## F-statistic: 421 on 1 and 407 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = precio ~ distancia, data = bienesraices.ajustado)
##
## Coefficients:
## (Intercept) distancia
## 45.724787 -0.007405
##
##
## ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Significance = 0.05
##
## Call:
## gvlma(x = modelo.ajustado)
##
## Value p-value Decision
## Global Stat 91.1703 0.000e+00 Assumptions NOT satisfied!
## Skewness 15.1171 1.010e-04 Assumptions NOT satisfied!
## Kurtosis 11.0580 8.830e-04 Assumptions NOT satisfied!
## Link Function 64.4997 9.992e-16 Assumptions NOT satisfied!
## Heteroscedasticity 0.4955 4.815e-01 Assumptions acceptable.
Con toda la información previa, aún después de hacer algunos ajustes, se concluye que no es válido el modelo encontrado ya que no se cumplen los supuestos necesarios.
Ciaburro, G. (2018). Regression analysis with R. Packt Publishing.
Zumel, N; Mount, J. (2020), Practical data science with R. Manning Publications Co.
Dr. José Luis Barrera Canto
jose.luis.barrera.canto@gmail.com