Con base en los datos de ofertas de vivienda descargadas 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 cientifico de datos en la construcción de un modelo que lo oriente sobre los precios de inmuebles.
data(vivienda4)
viviendas_filtrado <- subset(vivienda4, estrato == 4 & areaconst < 200)
viviendas_filtrado$preciom <- as.numeric(as.character(viviendas_filtrado$preciom))
viviendas_filtrado$areaconst <- as.numeric(as.character(viviendas_filtrado$areaconst))
hist(viviendas_filtrado$preciom, xlab="Precio (Millones de pesos COP)", col="Blue", main="Histograma - Precio", freq=FALSE)
summary(viviendas_filtrado$preciom)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 207.4 230.6 238.5 242.7 250.4 309.4
Teniendo en cuenta la variable precio podemos encontrar que la media se encuentra en 242 millones de pesos COP y que sus valores minimo y máximo se encuentran entre 207 y 309 millones de pesos respectivamente. Por su parte tambipen encontramos que el 25% de los aparamentos tienen un precio menor o igual a 230 millones de pesos y el 75% de los apartamentos titne un valor menor o igual a 250 millones de pesos
hist(viviendas_filtrado$areaconst, xlab="Metros Cuadrados", col="Green", main="Histograma - Area Construida", freq=FALSE)
summary(viviendas_filtrado$areaconst)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 40.00 60.00 75.00 85.62 96.00 199.00
Teniendo en cuenta la información de la variable área construida encontramos que la media se encuentra en 85m2 y que los valores minimo y máximo se encuentran en 40 y 199 metros cuadrados respectivamente. Por su parte analizando los cuartiles encontramos que el 25% de los aparamentos tienen un igual o menor a 60m2 y el 75% de los apartamentos tienen un área igual o menor a 96 m2.
ggplot(viviendas_filtrado, aes(x = areaconst, y = preciom)) +
geom_point() +
geom_smooth(mapping = aes(x = areaconst, y = preciom), method = "lm", se = FALSE, color = "Blue")+
labs(x = "Área Construida (metros cuadrados)", y = "Precio de Vivienda (millones de pesos COP)")+
theme(plot.title = element_text(hjust = 0.5))
## `geom_smooth()` using formula = 'y ~ x'
shapiro.test(viviendas_filtrado$areaconst)
##
## Shapiro-Wilk normality test
##
## data: viviendas_filtrado$areaconst
## W = 0.8307, p-value < 2.2e-16
shapiro.test(viviendas_filtrado$preciom)
##
## Shapiro-Wilk normality test
##
## data: viviendas_filtrado$preciom
## W = 0.90493, p-value < 2.2e-16
cor.test (viviendas_filtrado$preciom, viviendas_filtrado$areaconst)
##
## Pearson's product-moment correlation
##
## data: viviendas_filtrado$preciom and viviendas_filtrado$areaconst
## t = 95.71, df = 1674, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.9117680 0.9265929
## sample estimates:
## cor
## 0.9195068
Teniendo en cuenta los datos anteriormente mostrados podemos encontrar que en cuanto a los test de normalidad de las variables precio y área construido no se cumple el supuesto de normalidad ya que tenemos valores inferiores 0.05. Por su parte en cuanto a la correlación de pearson encontramos que un 0.92, es decir que la relación es alta.
modelo1 <- lm(preciom ~ areaconst, data=viviendas_filtrado)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst, data = viviendas_filtrado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.6635 -5.0287 -0.0385 4.6787 24.4030
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.997e+02 4.819e-01 414.45 <2e-16 ***
## areaconst 5.019e-01 5.244e-03 95.71 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.165 on 1674 degrees of freedom
## Multiple R-squared: 0.8455, Adjusted R-squared: 0.8454
## F-statistic: 9160 on 1 and 1674 DF, p-value: < 2.2e-16
El modelo de regresión lineal que acabamos de construir tiene un buen desemepeño al encontrar que su r2 es de 0.84, es decir que puede explicar en un 84% la variablidad que esta presente en la información ingresada y que está logrando ser capturada por el modelo, más adelante realizaremos la validación de los supuestos que se deben cumplir en los modelos de regresión lineal.
Por su parte también encontramos que que el intercepto es igual a 190 millones cop, lo que quiere decir que cuando el área construida es igual a 0 el precio estimado es de $ 190 millones de pesos pesos COP (para un apartamento estrato 4)
por otro lado el coheficiente de la pendiente es 501,000 additional decir, que por cada metro cuadrado adicional se incrementa en 500.000 pesos el valor del inmueble.
confint(modelo1, level = 0.95)
## 2.5 % 97.5 %
## (Intercept) 198.7857025 200.6761499
## areaconst 0.4916497 0.5122219
En este caso podemos identificar que el p-valor es menor a 0.05, en este caso podemos deducir que el área construida tiene un efecto significativo en el precio de los apartamentos. Por lo tanto se puede afirmar que el area construida actua como un buen predictor del precio del inmueble que en este caso son apartamentos.
summary(modelo1)$r.squared
## [1] 0.8454927
Teniendo en cuenta el dato de R2 observado podemos decir que la variable area construida puede dar cuenta hasta en un 84,5% de la variabilidad que está presente en los datos y que está logrando ser capturada por el modelo propuesto. Por lo tanto concluimos que nuestro modelo es estadísticamente significativo.
predict(modelo1, data.frame(areaconst=110), interval = "prediction", level = 0.95)
## fit lwr upr
## 1 254.9439 240.8833 269.0044
En este caso nuestro modelo de regresión lineal con un nivel del confianza del 95% indica que la predicción del precio de un aparamento de 110 m2 es de 254 millones de pesos COP, sin embargo tenemos que tener algunas consideraciones, por ejemplo que según la predicción realizada el valor mínimo que se espera del aparamento son 240 millones de pesos (lwr) y el valor máximo 269 millones de pesos (upr) con un precio estimado específico de 254 millones de pesos.
par(mfrow=c(2,2))
plot(modelo1)
shapiro.test(modelo1$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo1$residuals
## W = 0.99911, p-value = 0.6043
Teniendo en cuenta la prueba de normalidad shapiro wilk encontramos que los residuos se distribuyen de manera normal al encontrar una significancia mayor a 0.05
lmtest::bptest(modelo1)
##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 0.11868, df = 1, p-value = 0.7305
En este caso encontramos que el valor de la prueba de Breush-pagan indican que no hay evidencia suficiente para rechazar la homocedasticidad es decir la varianza de los errores es constante
lmtest::dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 2.0578, p-value = 0.8799
## alternative hypothesis: true autocorrelation is greater than 0
El valor de 0.879 indica que sí se cumple con el supuesto de Durbin Watson es decir que no se tienen problemas de autocorrelación de los errores.
library(MASS)
##
## Adjuntando el paquete: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
par(mfrow = c(1,2))
boxcox(lm(viviendas_filtrado$preciom ~ viviendas_filtrado$areaconst, data=viviendas_filtrado), lambda = -3:3)
bc<-boxcox(lm(viviendas_filtrado$preciom ~ viviendas_filtrado$areaconst), lambda = -1:1)
(lambda <- bc$x[which.max(bc$y)])
## [1] 0.7979798
el resultado de lamba sugiere que no es necesario realizar una transformación, sin embargo realizaremos el proceso de validación de modelos en escala logaritmica para ver su desempeño, lo vamos a analizar en el siguiente punto.
modelo2<- lm(log(preciom)~ areaconst, data = viviendas_filtrado)
summary(modelo2)
##
## Call:
## lm(formula = log(preciom) ~ areaconst, data = viviendas_filtrado)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.104620 -0.020036 0.000161 0.019042 0.099334
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.320e+00 1.999e-03 2660.85 <2e-16 ***
## areaconst 1.973e-03 2.176e-05 90.69 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.02973 on 1674 degrees of freedom
## Multiple R-squared: 0.8309, Adjusted R-squared: 0.8308
## F-statistic: 8226 on 1 and 1674 DF, p-value: < 2.2e-16
Teniendo en cuenta el modelo transformado podemos observar que tiene un desepeño similar pero inferior al modelo anteriormente propuesto, ya que el modelo1 tiene un r2 del 0.84
par(mfrow=c(2,2))
plot(modelo2)
shapiro.test(modelo2$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo2$residuals
## W = 0.99935, p-value = 0.8564
Teniendo en cuenta la prueba de normalidad shapiro wilk encontramos que los residuos se distribuyen de manera normal al encontrar una significancia mayor a 0.05
lmtest::bptest(modelo2)
##
## studentized Breusch-Pagan test
##
## data: modelo2
## BP = 9.3766, df = 1, p-value = 0.002198
En este caso encontramos que el valor de la prueba de Breush-pagan indican que no se cumple con el supuesto de homocedasticidad
lmtest::dwtest(modelo2)
##
## Durbin-Watson test
##
## data: modelo2
## DW = 2.0615, p-value = 0.8945
## alternative hypothesis: true autocorrelation is greater than 0
El valor de 0.89 indica que sí se cumple con el supuesto de Durbin Watson es decir que no se tienen problemas de autocorrelación de los errores.
A continuación realizaremos la comparación de 4 modelos en los cuales se ajustará la escala logaritmica a las variables de interés de la siguiente manera:
m1 = lm(preciom~areaconst, data = viviendas_filtrado)
m2 = lm(preciom~log(areaconst), data = viviendas_filtrado)
m3 = lm(log(preciom)~areaconst, data = viviendas_filtrado)
m4 = lm(log(preciom)~log(areaconst), data = viviendas_filtrado)
##
## Please cite as:
## Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
##
## =======================================================================
## Dependent variable:
## ---------------------------------------------------
## preciom log(preciom)
## (1) (2) (3) (4)
## -----------------------------------------------------------------------
## areaconst 0.502*** 0.002***
## (0.005) (0.00002)
##
## log(areaconst) 48.674*** 0.193***
## (0.575) (0.002)
##
## Constant 199.731*** 29.128*** 5.320*** 4.643***
## (0.482) (2.532) (0.002) (0.010)
##
## -----------------------------------------------------------------------
## Observations 1,676 1,676 1,676 1,676
## R2 0.845 0.810 0.831 0.808
## Adjusted R2 0.845 0.810 0.831 0.808
## Residual Std. Error 7.165 7.937 0.030 0.032
## F Statistic 9,160.442*** 7,155.404*** 8,225.642*** 7,055.048***
## =======================================================================
## Note: *p<0.1; **p<0.05; ***p<0.01
Para validar este supuesto realizaremos la prueba de shapiro Wilk en todos los modelos propuestos
resultados_shapiro <- lapply(modelos, function(mod) shapiro.test(resid(mod)))
resultados_shapiro
## [[1]]
##
## Shapiro-Wilk normality test
##
## data: resid(mod)
## W = 0.99911, p-value = 0.6043
##
##
## [[2]]
##
## Shapiro-Wilk normality test
##
## data: resid(mod)
## W = 0.99723, p-value = 0.004719
##
##
## [[3]]
##
## Shapiro-Wilk normality test
##
## data: resid(mod)
## W = 0.99935, p-value = 0.8564
##
##
## [[4]]
##
## Shapiro-Wilk normality test
##
## data: resid(mod)
## W = 0.99858, p-value = 0.1808
Observamos que se cumple el supuesto de normalidad en todos los modelos excepto en el modelo número 2.
resultados_bptest <- lapply(modelos, function(mod) lmtest::bptest(mod))
resultados_bptest
## [[1]]
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 0.11868, df = 1, p-value = 0.7305
##
##
## [[2]]
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 20.152, df = 1, p-value = 7.153e-06
##
##
## [[3]]
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 9.3766, df = 1, p-value = 0.002198
##
##
## [[4]]
##
## studentized Breusch-Pagan test
##
## data: mod
## BP = 0.46135, df = 1, p-value = 0.497
Teniendo en cuenta los valores de la prueba de Breush pagan se puede decir que solamente en los modelos 1 y 4 se cumplen con este supuesto, sin embargo en los modelos 2 y 3 los p.valores son menores a 0.05, por lo tanto concluimos que estos dos modelos tienen heterocedasticidad es decir que la varianza de los errores no es constante.
resultados_dwtest <- lapply(modelos, function(mod) lmtest::dwtest(mod))
resultados_dwtest
## [[1]]
##
## Durbin-Watson test
##
## data: mod
## DW = 2.0578, p-value = 0.8799
## alternative hypothesis: true autocorrelation is greater than 0
##
##
## [[2]]
##
## Durbin-Watson test
##
## data: mod
## DW = 1.8925, p-value = 0.01353
## alternative hypothesis: true autocorrelation is greater than 0
##
##
## [[3]]
##
## Durbin-Watson test
##
## data: mod
## DW = 2.0615, p-value = 0.8945
## alternative hypothesis: true autocorrelation is greater than 0
##
##
## [[4]]
##
## Durbin-Watson test
##
## data: mod
## DW = 1.9335, p-value = 0.08502
## alternative hypothesis: true autocorrelation is greater than 0
En este caso encontramos que en los modelos 1,3 y 4 se cumple con el supuesto de Durbin Watson es decir que no hay evidencia de autocorrelación de los residuos, sin embargo en el modelo 2 se encuentra que no se cumple con este supuesto lo que indica que existe autocorrelación positiva en sus residuos.
1.A partir del análisis exploratorio de los datos presentes en la base de datos entregada, se puede decir que en la variable “precio” los valores mínimo y máximo se encuentran entre 207 y 309 millones de pesos, respectivamente. Por su parte, también encontramos que el 25% de los apartamentos tienen un precio menor o igual a 230 millones de pesos, y el 75% de los apartamentos tienen un valor menor o igual a 250 millones de pesos. En cuanto a la variable “área construida”, observamos que el promedio es de 85 m², y que los valores mínimo y máximo están entre 40 y 199 metros cuadrados, respectivamente. Al analizar los cuartiles, encontramos que el 25% de los apartamentos tienen un área igual o menor a 60 m², y el 75% de los apartamentos tienen un área igual o menor a 96 m². Estos datos fueron un insumo importante para la construcción de un modelo que pudiera pronosticar el precio de un inmueble en relación con su área construida.
2.Teniendo en cuenta la información analizada en este informe, se sugiere a la inmobiliaria A&C adoptar el modelo de regresión lineal simple para la estimación de precios de apartamentos de estrato 4 con un área construida menor a 200 metros cuadrados. Este modelo fue validado en sus supuestos, lo que permite mejorar la calidad de las estimaciones realizadas, proporcionando información útil para la entidad. Además, este enfoque le ofrece a la inmobiliaria la posibilidad de ajustar sus estrategias de precios, basándose en la relación proporcional entre el tamaño del inmueble y su valor, lo cual es útil para dirigir las estrategias de marketing asociadas.
3.Los modelos de regresión también pueden ser utilizados para estimar el valor de los inmuebles considerando no solo el área construida, sino también información adicional que la inmobiliaria posee y que puede emplearse para pronosticar con mayor precisión el valor de los inmuebles, así como otros datos de interés para la entidad. En este caso, pueden utilizarse variables como la zona y las características internas de cada inmueble, tales como el número de habitaciones, parqueadero, entre otras.
4.Es importante destacar que el modelo que presentó mejores métricas de desempeño fue el de regresión lineal simple, con un R² de 0.845, lo que indica su alta precisión para capturar la información presente en los datos y predecir de manera confiable el precio final de un inmueble en relación con su área. Cabe mencionar que para llegar a esta conclusión se hicieron comparaciones entre cuatro modelos, en los cuales se evaluó el desempeño del R² y se validaron los supuestos de los modelos estudiados.