Problema

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.

Punto 1. Análisis exploratorio

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.

Punto 2. Análisis Exploratorio Bivariado

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'

Test normalidad variable área construida

shapiro.test(viviendas_filtrado$areaconst)
## 
##  Shapiro-Wilk normality test
## 
## data:  viviendas_filtrado$areaconst
## W = 0.8307, p-value < 2.2e-16

Test normalidad variable precio

shapiro.test(viviendas_filtrado$preciom)
## 
##  Shapiro-Wilk normality test
## 
## data:  viviendas_filtrado$preciom
## W = 0.90493, p-value < 2.2e-16

Correlación de Pearson

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.

Punto 3. Regresión Lineal Simple

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.

Punto 4. Intervalo de confianza

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.

Punto 5. Indicador de Bondad R2

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.

Punto 6. Estimación precio para apartamento de 110m2

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.

Punto 7. Validación de supuestos

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.

Punto 8. Tramsformación del modelo

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.

Punto 9. Comparaciones del modelo inicial y el transformado

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)

Supuestos modelo transformado

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.

Punto 10. Comparación de modelos

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

Supuestos de la comparación de los modelos

Normalidad

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.

Homocedasticidad

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.

Autocorrelación de los residuos

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.

Punto 11. Informe Inmobiliaria A&C

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.