Una vez extraidos los datos de ofertas de vivienda desde del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS) la inmobiliaria A&C requiere el apoyo de un científico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.
Con este propósito el equipo de asesores ha diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar
A continuación se evidencia el resultado del análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados).
Esta base de datos contiene 1706 registros. Se observa que existen dos variables de tipo cuantitativo (precio y area construida) y tres variables de tipo cualitativo (tipo de vivienda, zona de ubicación y estrato sociodemografico), la base no presenta valores perdidos por lo cual no se realiza ningun tipo de transformación.
El precio promedio de los inmuebles es de 225.37 millones de pesos, con una desviación estándar de 85.89 millones de pesos, lo que sugiere que los precios varian considerablemente alrededor de la media. el 50% de los inmuebles tienen un precio de 210 millones de pesos o menos. El inmueble que tiene el valor comercial más bajo es de 78MM, mientras que el que tiene al mayor valor es de 760MM; obteniendo así un rango de precios de 682 millones de pesos.
par(mfrow=c(1,2))
hist(precio, xlab="Millón COP$", col="#6495ED", main="Histograma [Precio]", freq=FALSE)
lines(density(precio), col = "red", lwd = 2)
boxplot(precio, xlab="Millón COP$", col="#6495ED", main="Caja [Precio]")En el histograma se observa que hay una asimetria positiva y que los previos estan concentrados en viviendas más económicas. Así mismo se observa que la distribución presentan un sesgo a la derecha. Por otro lado, se evidencia en el gráfico de cajas que el precio presenta valores atípicos, es decir, valores de precios muy extremos y que solo se dan en unas pocas viviendas, esto es lo que causa el sesgo de la distribución.
El área promedio de los inmuebles es de 87.63 metros cuadrados, con una desviación estándar de 36.35 metros cuadrados, lo que sugiere que las áreas varian considerablemente alrededor de la media. El 50% de los inmuebles tienen un área de 75 metros cuadrados o menos. El inmueble con menor área es de 40 metros mientras que aquel que tiene una mayor àrea es de 200 metros cuadrados, obteniendo así un rango de área de 160 metros cuadrados.
par(mfrow=c(1,2))
hist(area, xlab="Metros Cuadrados", col="#6495ED", main="Histograma [Área Construida]", freq=FALSE)
lines(density(area), col = "red", lwd = 2)
boxplot(area, xlab="Metros Cuadrados", col="#6495ED", main="Caja [Área Construida]")Al igual que con la variable de precio, el histograma de la variable de área confirma lo mencionado sobre la forma de la distribución de las áreas y a eso le agregamos que la distribución presentan un sesgo a la derecha, pero esta vez con frecuencias mayores en el sesgo. Por otro lado, se evidencia en el gráfico de cajas que el precio presenta valores atípicos, es decir, valores de precios muy extremos y que solo se dan en unas pocas viviendas, esto es lo que causa el sesgo de la distribución.
El análisis esta enfocado en la relación entre la variable respuesta (y=precio) en función de la variable predictora (x=area).
## [1] 0.7630166
El coeficiente de correlación de Pearson de 0.763, indica que la relación entre el área de las viviendas (x) y el precio de estas (y) es alta y es directamente proporcional, es decir, entre mayor sea el área de una vivienda, tiende a se mayor el precio. A continuación se representa de manera gráfica.
ggplot2::ggplot(vivienda4, aes(x=area, y=precio)) + geom_point(colour=9) + labs (title = "Distribucion de los precios de apartamentos (millones COP) segun area construida (m2)")El gráfico reafirma la correlación existente entre el área y el precio de las viviendas; a través de una tendencia lineal entre ambas variables por lo que se concluye que entre mayor es el área construida de un inmueble, el precio del mismo tiende a ser mayor.
A continuación se presentan los resultados de un modelo de regresión lineal simple entre precio=f(area)+ε. Así mismo la interpretación de los coeficientes del modelo β0, β1 en caso de ser correcto.
##
## Call:
## lm(formula = precio ~ area)
##
## Residuals:
## Min 1Q Median 3Q Max
## -195.86 -31.95 -8.95 27.87 431.17
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.381 3.510 19.20 <2e-16 ***
## area 1.803 0.037 48.73 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 55.53 on 1704 degrees of freedom
## Multiple R-squared: 0.5822, Adjusted R-squared: 0.5819
## F-statistic: 2374 on 1 and 1704 DF, p-value: < 2.2e-16
De acuerdo a los indicadores de regresión lineal simple, tenemos: La ecuación: Y = β0 + β1X + ε donde, X, es la variable dependiente o de respuesta, en este caso Área Construida Y, es la variable independiente o predictora, en este caso Precio β0, es el intercepto de la recta con el eje vertical. En este caso igual a 67,381 β1, se conoce como pendiente y determina la inclinación de la recta. En este caso igual a 1,803
Precio = 67.381 + 1.803 (Area) + ε
En cuanto a la interpretación de los coeficientes, podemos mencionar que β0 no se puede interpretar porque no es coherente considerar alguna vivienda sin área construida o lo que es igual a indicar con cero (0) metros cuadrados construidos. Para el caso del coeficiente β1 podemos interpretar: que por cada metro cuadrado adicional que tenga la vivienda el precio de la misma se incrementa en 1,803 millones de pesos colombianos.
Lo que se busca es construir un intervalo de confianza (95 %) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Así mismo comparar este resultado con una prueba de hipótesis t.
## 2.5 % 97.5 %
## (Intercept) 60.496208 74.265055
## area 1.730404 1.875547
El intervalo de confianza para la pendiente β1 en el modelo se encuentra entre 1.73 y 1.87; es decir, por cada metro cuadrado adicional, el precio promedio del apartamento aumenta entre 2.06 y 1.87 millones con una confianza del 95%.
En las pruebas t realizadas en el modeloap se tiene como hipótesis nula que los coeficientes β0 y β1 son iguales a cero. Al obtener valores inferiores a 0.05 tanto para β0 como β1, decimos que los coeficientes son significativos y por tanto se rechaza hipotesis nula y se acepta la hipótesis alterna, donde ambos valores (estimadores) son diferentes de cero.
H0:β1 = 0
H1:β1 ≠ 0
El resumen del modelo de regresión nos proporciona los estadísticos t y los p−valores de cada coefiente de la regresión.
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 67.380631 3.51003056 19.19659 1.648523e-74
## area 1.802976 0.03700055 48.72834 0.000000e+00
Como el p-valor de el coeficiente β1 (área) es menor que el nivel de significancia de 0.05, se rechaza H0, por lo que no hay evidencias para afirmar que el coeficiente β1 es igual a cero y se concluye que el área de las viviendas sí tiene un efecto significativo sobre el precio de estas.
Tanto el intervalo de confianza del 95 % como la prueba t nos llevaron a la misma conlcusión: β1 sí es significativo.
## [1] 0.5821944
El modelo de regresión se ajusta un 58.22 % a nuestros datos, es decir, 58.22% de la variabilidad del precio está siendo explicada por el modelo de regresión. Por lo que existen otras variables (covariables) que influyen en el precio y que no han sido tenidas en cuenta para este modelo, no obstante el indicador muestra un ajuste bastante significativo con tan solo una variable.
¿Cuál sería el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.
Modelo :Precio=67.380631+1.802976(Área)
Modelo :ŷ =67.380631+1.802976(x)
Si Área(x)=110 m2
Precio=67.380631+1.802976(110 m2)
Precio=265.708 millones de pesos
Un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sí sería una atractiva esta oferta. Hay que tener en cuenta que el modelo no es tan bueno y que las predicciones hechas con este pueden estar muy lejos de la realidad, se deben validar los supuestos del modelo y mejorar su rendimiento para tener seguridad de que es factible hacer predicciones con este.
A continuación se realizara la validación de los supuestos del modelo por medio de gráficos, se interpretaran y sugeriran posibles soluciones si se violan algunos de ellos. Se emplearan las pruebas de hipótesis para la validación de supuestos y compararan los resultados con lo observado en los gráficos asociados.
plot(area, precio, main='Área (m^2) vs Precio (Millones de pesos)', xlab='Área', ylab='Precio', col='#88aaff')
abline(modelo1, col = "red")Como ya se había visto en el análisis exploratorio, si existe una relación lineal entre el área y el precio de las viviendas.
H0:Los errores siguen una distribución normal
H1:Los errores no siguen una distribución normal
par(mfrow=c(1,2))
hist(residuos, main="Histograma de residuales", xlab="Residuos", ylab="Frecuencia", col="#3344aa")
qqnorm(residuos, main="QQplot de residuales", xlab="Cuantiles teóricos", ylab="Cuantile de muestra", col="#44cc1188")
qqline(residuos, col = "red", lwd="1")##
## Shapiro-Wilk normality test
##
## data: residuos
## W = 0.92671, p-value < 2.2e-16
El p-valor es menor al nivel de significancia de 0.05, por tanto, se rechaza H0 y se concluye que hay evidencias para afirmar que lo residuos no siguen una distribución normal. Además, el histograma muestra una cola derecha bastante ancha, lo que indica una fuerte asimetría positiva; y, en el qqplot los puntos no se ajustan a la línea recta, lo cual apoya la no normalidad de los residuales. Esto puede deberse a la presencia de valores atípicos tanto en la variable predictora como en la variable objetivo, imputar o eliminar los outliers muy extremos o aplicar transformaciones podrían ayudarnos a solucionar el incumplimiento de este supuesto.
H0:Los errores tiene varianza constante (Homogeneidad)
H1:Los errores no tienen varianza constante (Heterocedasticidad)
plot(ajustados, residuos, main="Ajustados vs Residuales", xlab="Valores ajustados", ylab="Residuales", col="#838bc7")
abline(0,0, col="#d3122f")El gráfico de dispersión de los valores ajustados vs los residuos muestra un patrón de cono o embudo, lo que indica que la dispersión de los residuos cambia a lo largo de los valores ajustados, esto sugiere heterocedasticidad. Además, dado que el p-valor de la prueba Breusch-Pagan es menor al nivel de significancia de 0.05, se rechaza la hipótesis nula, por lo que podemos afirmar que hay evidencias de heterocedasticidad. Los outliers también podrían estar afectando la varianza de los errores. Como el modelo es lineal, la recta se encuentra lejos de precios muy extremos y esto hace más grande el error.
H0:No existe correlación serial entre los residuales
H1:Existe correlación serial entre los residuales
indices <- row.names(vivienda4)
plot(vivienda4$preciom, residuos, xlab="Precio", ylab="Residuos", main = "Precio vs Residuales", col="#670d12")Cómo el p-valor en la prueba Durbin-Watson es menor al nivel de significancia de 0.05, se rechaza la hipótesis nula y hay evidencias para afirmar que los residuos presentan autocorrelación. Además, en el gráfico de dispersión de los residuos vs la variable objetivo, se observa una dependencia lineal positiva. Igualmente, los valores muy extremos también podrían estar afectando la independencia de los errores. Aunque la relación entre precio y área es lineal, la varianza del precio se hace más grande a medida que el área crece, por tanto, los errores también crecen.
El modelo de regresión lineal simple no cumple con los supuestos de normalidad, homocedasticidad e independencia. Por lo que se cuestiona la validez y precisión del modelo para predecir el precio de las viviendas con el área, lo que puede llevar a resultados sesgados y conclusiones poco confiables. Por tanto, antes de explorar una alternativa que requiera tratar los valores atípicos, se explora la alternativa de aplicar una transformación logarítmica a la variable independiente.
De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.
Transformación logarítmica a la variable predictora o independiente (área).
Modelo con log(área):
##
## Call:
## lm(formula = precio ~ area_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -192.72 -27.27 -3.56 23.58 419.52
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -610.083 16.085 -37.93 <2e-16 ***
## area_log 189.708 3.641 52.11 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 53.35 on 1704 degrees of freedom
## Multiple R-squared: 0.6144, Adjusted R-squared: 0.6142
## F-statistic: 2715 on 1 and 1704 DF, p-value: < 2.2e-16
De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.
Este modelo de regresión se ajusta un 61.44 % a nuestros datos, es decir, 61.44 % de la variabilidad del precio está siendo explicada por el modelo de regresión. Esto es mejor que el 58.22 % , pero sigue siendo un valor regular.
Gráfico del modelo con log(area):
ajustados2 <- modelo2$fitted.values
residuos2 <- modelo2$residuals
plot(area_log, precio, main='Log(Área (m^2)) vs Precio (Millones de pesos)', xlab='Log(Área)', ylab='Precio', col='#88aaff')
abline(modelo2, col = "red")
#### Validación de supuestos
Obervar si el nuevo modelo con log(area) cumple los supuestos:
par(mfrow=c(2,2))
hist(residuos2, main="Histograma de residuales", xlab="Residuos", ylab="Frecuencia", col="#3344aa")
qqnorm(residuos2, main="QQplot de residuales", xlab="Cuantiles teóricos", ylab="Cuantile de muestra", col="#44cc1188")
qqline(residuos2, col = "red", lwd="1")
plot(ajustados2, residuos2, main="Ajustados vs Residuales", xlab="Valores ajustados", ylab="Residuales", col="#838bc7")
abline(0,0, col="#d3122f")
plot(precio, residuos2, xlab="Precio", ylab="Residuos", main = "Precio vs Residuales", col="#670d12")##
## Shapiro-Wilk normality test
##
## data: residuos2
## W = 0.91387, p-value < 2.2e-16
Se evidencia, gráficamente y con por los p-valores menores a 0.05, que el modelo con log(area) tampoco cumple con los supuestos de normalidad, homocedasticidad e independencia de los errores.
Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?
Se obta por probar otro modelo después de haber tratado los valores atípicos con el método del rango intercuartílico y con el logaritmo de la variable Área.
Q1_area <- quantile(area, 0.25)
Q3_area <- quantile(area, 0.75)
IQR_area <- Q3_area - Q1_area
lim_inf_area <- Q1_area - 2 * IQR_area
lim_sup_area <- Q3_area + 2 * IQR_area
Q1_precio <- quantile(precio, 0.25)
Q3_precio <- quantile(precio, 0.75)
IQR_precio <- Q3_precio - Q1_precio
lim_inf_precio <- Q1_precio - 1.5 * IQR_precio
lim_sup_precio <- Q3_precio + 1.5 * IQR_precio
datos <- vivienda4[,c("preciom", "areaconst")]
datos2 <- datos[datos$areaconst > lim_inf_area & datos$areaconst < lim_sup_area,]
datos_sin_outliers <- datos2[datos2$preciom > lim_inf_precio & datos2$preciom < lim_sup_precio,]
area2 <- datos_sin_outliers$areaconst
precio2 <- datos_sin_outliers$preciom
plot(area2, precio2)##
## Call:
## lm(formula = precio2 ~ log(area2))
##
## Residuals:
## Min 1Q Median 3Q Max
## -176.799 -24.754 -3.389 23.358 198.773
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -534.616 16.212 -32.98 <2e-16 ***
## log(area2) 171.701 3.722 46.14 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43.35 on 1586 degrees of freedom
## Multiple R-squared: 0.573, Adjusted R-squared: 0.5728
## F-statistic: 2128 on 1 and 1586 DF, p-value: < 2.2e-16
ajustados3 <- modelo3$fitted.values
residuos3 <- modelo3$residuals
plot(area2, precio2, main='Log(Área (m^2)) vs Precio (Millones de pesos)', xlab='Log(Área)', ylab='Precio', col='#88aaff')
abline(modelo3, col = "red")Obervar si el nuevo modelo sín aoutliers y con log(area) cumple los supuestos:
par(mfrow=c(2,2))
hist(residuos3, main="Histograma de residuales", xlab="Residuos", ylab="Frecuencia", col="#3344aa")
qqnorm(residuos3, main="QQplot de residuales", xlab="Cuantiles teóricos", ylab="Cuantile de muestra", col="#44cc1188")
qqline(residuos3, col = "red", lwd="1")
plot(ajustados3, residuos3, main="Ajustados vs Residuales", xlab="Valores ajustados", ylab="Residuales", col="#838bc7")
abline(0,0, col="#d3122f")
plot(precio2, residuos3, xlab="Precio", ylab="Residuos", main = "Precio vs Residuales", col="#670d12")##
## Shapiro-Wilk normality test
##
## data: residuos3
## W = 0.97859, p-value = 1.202e-14
Se evidencia, gráficamente y con por los p-valores menores a 0.05, que el modelo sin outliers y con log(area) tampoco cumple con los supuestos de normalidad, homocedasticidad e independencia de los errores.
El sesgo que presentan tanto el precio como el área, no permite ajustar un modelo lineal confiable.
Ninguno de los modelos ajustado cumple con los supuestos de normalidad, homocedasticidad e independencia de los errores.
El mejor modelo es el modelo2, sin eliminación de outliers y la tranformación logarítmica de la variable independiente. Este modelo de regresión se ajusta un 61.44 % a nuestros datos, es decir, 61.44 % de la variabilidad del precio está siendo explicada por el modelo de regresión. Esto es mejor que el 58.22 % y el 57.3 % de los modelos 1 y 3, respectivamente.
De los 3 modelos ajustados, se recomienda usar el modelo2, ya que fue el que dio el mayor porcentaje de explicabilidad. Pero, con precausión porque es muy propenso a dar errores altos en el precio con áreas muy grandes.