library(tidyverse)
library(here)
library(lmtest)
ventas <- readxl::read_excel(
here(
"Unidad 3", "YDRAY-datos_vivienda-3.xlsx"
)
)
hist(ventas$precio_millon)
hist(ventas$Area_contruida)
mean(ventas$Area_contruida)
## [1] 115.7469
mean(ventas$precio_millon)
## [1] 332.0769
Se puede observar una distribucion bimodal de los precios de las viviendas con picos en el rango entre 200 y 300 millones de pesos, asi como tambien en el rango entre 350 y 450 millones de pesos. Por otro lado, la distribucion del area tiene una distribucion con un sesgo hacia el rango entre 80 y 100 metros cuadrados. El area media de las viviendas es de 115.7 metros cuadrados y el precio medio de las viviendas es de 332 millones de pesos.
ventas %>%
ggplot(aes(Area_contruida, precio_millon)) +
geom_point() +
geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
Se puede ver una relacion positiva entre el area construida y el precio de las viviendas. Una relacion con una pendiente mas pronunciada para rangos de vivienda entre 75 metros y 120 metros, que se aplana un poco para viviendas con mayor area.
modelo <- lm(precio_millon ~ Area_contruida, ventas)
summary(modelo)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = ventas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.673 -25.612 -6.085 24.875 67.650
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.234 22.479 3.836 0.000796 ***
## Area_contruida 2.124 0.186 11.422 3.45e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared: 0.8446, Adjusted R-squared: 0.8381
## F-statistic: 130.5 on 1 and 24 DF, p-value: 3.45e-11
El beta 0 es de 86.2 lo que implica que segun el modelo el precio inicial de las viviendas parte desde ese punto (en millones), pues ese valor asume que ese seria el precio de una vivienda si el area construida es cero. El beta 1 es de 2.12 lo que implica que por cada unidad de area adicional en promedio se incrementa el precio en 2.1 millones de pesos.
limite_izquierdo <- 2.124 - (1.96 * 0.186)
limite_derecho <- 2.124 + (1.96 * 0.186)
data.frame(limite_izquierdo, limite_derecho)
## limite_izquierdo limite_derecho
## 1 1.75944 2.48856
Lo que se infiere al observar el intervalo de confianza al 95% es que el cero no esta incluido en el intervalo por lo cual se puede sostener que el beta1 es diferente de cero. Al comparar este resultado con la prueba de hipotesis t desplegada en el resumen del modelo, la cual nos dio un resultado de 3.45e-11 muy por debajo del 0.005 que se utiliza como el umbral para determinar si la variable es significativa, es coherente con el resultado del intervalo de confianza, es decir, que se rechaza la hipotesis de que el beta1 es cero.
El indicador de bondad de ajuste expuesto mas arriba fue de 0.8446 lo que significa que el modelo es capaz de explicar el 84.5% de la varianza de lo datos, en otras palabras, el modelo es capaz de explicar aproximadamente el 85% del comportamiento de los precios.
predict(modelo, list(Area_contruida = 110), interval = "confidence")
## fit lwr upr
## 1 319.8706 306.3133 333.4279
Para el modelo el precio estimado para un apartamento de 110 metros cuadrados es de 319.8 millones de pesos. Para determinar si un apartamento en la misma zona con 110 metros cuadrados a un precio de 200 millones seria una buena oferta hay otros factores que analizar, como el estado del apartamento el cual no esta siendo considerado por el modelo, puesto que puede acarrear costos adicionales para el comprador.
hist(modelo$residuals, breaks = 30)
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.95489, p-value = 0.3009
par(mfrow = c(2,2))
plot(modelo)
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.8831, p-value = 0.3831
## alternative hypothesis: true autocorrelation is greater than 0
Normalidad de los errores: Al analizar el histograma y realizar el test de shapito wilks con un valor-p mayor a 0.05, No rechazamos la hipotesis nula de que la distribucion es normal. Por lo tanto, podemos asumir que los errores tienen distribucion normal. Homogeneidad de la varianza: Con el grafico se puede ver que la varianza no es homogenea por lo cual el supuesto de homocedasticidad no se estaria cumpliendo. Independencia de los errores: Al realizar el test de Durbin Watson se observa que no se rechaza la hipotesis nula de que la autocorrelacion es cero. Por tanto, podemos asumir que hay independencia de los errores. No colinealidad: Como solo hay una variable explicativa no puede existir colinealidad.
Para mejorar el ajuste y supuestos del modelo en este caso para hacer que se cumpla la homocedasticidad se hace una transformacion de la variable respuesta (precios), se eleva al cuadrado.
ventas <- ventas %>%
mutate(precio_2 = precio_millon ^ 2)
modelo_2 <- lm(precio_2 ~ Area_contruida, ventas)
summary(modelo_2)
##
## Call:
## lm(formula = precio_2 ~ Area_contruida, data = ventas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37353 -13858 -2935 11632 47135
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -53790.3 14520.0 -3.705 0.00111 **
## Area_contruida 1473.5 120.1 12.267 7.91e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21350 on 24 degrees of freedom
## Multiple R-squared: 0.8624, Adjusted R-squared: 0.8567
## F-statistic: 150.5 on 1 and 24 DF, p-value: 7.914e-12
par(mfrow = c(2,2))
plot(modelo_2)
La transformacion del precio a un precio cuadrado resulta en una mejora del R2 del modelo. Pasando de 0.8446 a 0.8624.
summary(modelo)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida, data = ventas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -51.673 -25.612 -6.085 24.875 67.650
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 86.234 22.479 3.836 0.000796 ***
## Area_contruida 2.124 0.186 11.422 3.45e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 33.05 on 24 degrees of freedom
## Multiple R-squared: 0.8446, Adjusted R-squared: 0.8381
## F-statistic: 130.5 on 1 and 24 DF, p-value: 3.45e-11
summary(modelo_2)
##
## Call:
## lm(formula = precio_2 ~ Area_contruida, data = ventas)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37353 -13858 -2935 11632 47135
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -53790.3 14520.0 -3.705 0.00111 **
## Area_contruida 1473.5 120.1 12.267 7.91e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21350 on 24 degrees of freedom
## Multiple R-squared: 0.8624, Adjusted R-squared: 0.8567
## F-statistic: 150.5 on 1 and 24 DF, p-value: 7.914e-12
El segundo modelo con el precio elevado al cuadrado presenta una mejora en la bondad de ajusta presentando un mayor R2