1. Introducción

En este proyecto, usando R, se realiza un análisis estadístico del comportamiento del mercado inmobiliario de acuerdo a la información recogida por la empresa A&C, esto con el propósito de que sea útil para la toma de decisiones comerciales.

2. Objetivo

3. Métodos

Los datos son obtenidos de la librería paqueteMETODOS de R y, analizados a través de la misma herramienta haciendo uso de diferentes paquetes que permiten realizar un análisis estadístico descriptivo, de acuerdo a la siguiente metodología.

3.1. Cargue de datos

Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a \(200\) \(m^{2}\) \((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.

data(vivienda4)
head(vivienda4)

3.2. Filtro de datos de interés

  • Se filtran los tipos de vivienda igual a “Apartamento” y el área construida menor a \(200\) \(m^{2}\).
AyC <- vivienda4
AyC <- subset(vivienda4, vivienda4$tipo == "Apartamento" & vivienda4$areaconst < 200)
AyC
## # A tibble: 1,360 × 5
##    zona       estrato preciom areaconst tipo       
##    <fct>      <fct>     <dbl>     <dbl> <fct>      
##  1 Zona Norte 4          232.        52 Apartamento
##  2 Zona Norte 4          255.       108 Apartamento
##  3 Zona Sur   4          258.        96 Apartamento
##  4 Zona Norte 4          250.        82 Apartamento
##  5 Zona Norte 4          247.        75 Apartamento
##  6 Zona Norte 4          222.        60 Apartamento
##  7 Zona Norte 4          227.        84 Apartamento
##  8 Zona Norte 4          255.       117 Apartamento
##  9 Zona Norte 4          232.        60 Apartamento
## 10 Zona Norte 4          237.        75 Apartamento
## # ℹ 1,350 more rows

3.3. Identificación de datos faltantes por variable

  • Se evalua la existencia de datos faltantes.
faltantes4 <- colSums(is.na(AyC)) %>% as.data.frame() 
faltantes4
##           .
## zona      0
## estrato   0
## preciom   0
## areaconst 0
## tipo      0
  • Se crea la variable “preciom2” equivalente al precio de venta por metro cuadrado.
AyC$preciom2 <- AyC$preciom/AyC$areaconst
AyC
## # A tibble: 1,360 × 6
##    zona       estrato preciom areaconst tipo        preciom2
##    <fct>      <fct>     <dbl>     <dbl> <fct>          <dbl>
##  1 Zona Norte 4          232.        52 Apartamento     4.47
##  2 Zona Norte 4          255.       108 Apartamento     2.36
##  3 Zona Sur   4          258.        96 Apartamento     2.69
##  4 Zona Norte 4          250.        82 Apartamento     3.05
##  5 Zona Norte 4          247.        75 Apartamento     3.30
##  6 Zona Norte 4          222.        60 Apartamento     3.71
##  7 Zona Norte 4          227.        84 Apartamento     2.70
##  8 Zona Norte 4          255.       117 Apartamento     2.18
##  9 Zona Norte 4          232.        60 Apartamento     3.86
## 10 Zona Norte 4          237.        75 Apartamento     3.16
## # ℹ 1,350 more rows

4. Análisis

El equipo de asesores ha diseñado los siguientes pasos para obtener un modelo y así determinar los precios de los inmuebles a negociar en el futuro.

4.1. Análisis exploratorio univariado

Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.

  • Precio de vivienda (M COP).

tipo n Min. Q1 Median Q3 Max. Mean Sd
Apartamento 1360 207.4 228.8 236.1 243.6 300.4 237.5 12.9
zona n Min. Q1 Median Q3 Max. Mean Sd
Zona Centro 7 236.2 236.4 257.3 278.2 279.0 256.4 17.9
Zona Norte 236 216.2 230.0 236.7 243.7 296.7 238.8 13.3
Zona Oeste 52 215.4 227.3 238.3 247.7 275.2 238.9 14.6
Zona Oriente 2 236.8 236.8 240.4 244.0 244.0 240.4 5.1
Zona Sur 1063 207.4 228.6 235.7 243.2 300.4 237.1 12.7
  • Área de la vivienda (metros cuadrados).

tipo n Min. Q1 Median Q3 Max. Mean Sd
Apartamento 1360 40 60 70 83 198 75.2 21.8
zona n Min. Q1 Median Q3 Max. Mean Sd
Zona Centro 7 62 72.0 120 129.0 155 107.7 32.9
Zona Norte 236 51 61.0 73 82.8 198 78.2 23.6
Zona Oeste 52 48 56.8 63 82.0 144 74.9 26.1
Zona Oriente 2 84 84.0 87 90.0 90 87.0 4.2
Zona Sur 1063 40 60.0 70 83.0 198 74.3 20.9

El número de apartamentos en la zona oriente y zona centro no es significativa, por lo que se debe analizar en conjunto.

El mayor número de apartamentos ofertados está ubicado en la zona sur en donde el 50% de los precios de venta se encuentra entre \(207.4\)M COP y \(235.7\)M COP,

La dispersión de precios y área construida para la zona oriente es baja \(5.1\) y \(4.2\), respectivamente, sin embargo, esto no es significativo ya que tiene un \(n=2\).

4.2. Ánálisis exploratorio bivariado

Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (área construida) - incluir gráficos e indicadores apropiados interpretados.

cor.test(AyC$areaconst, AyC$preciom)
## 
##  Pearson's product-moment correlation
## 
## data:  AyC$areaconst and AyC$preciom
## t = 56.37, df = 1358, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8203549 0.8522488
## sample estimates:
##       cor 
## 0.8370114
cor.test(AyC$areaconst, AyC$preciom, method="spearman")
## Warning in cor.test.default(AyC$areaconst, AyC$preciom, method = "spearman"):
## Cannot compute exact p-value with ties
## 
##  Spearman's rank correlation rho
## 
## data:  AyC$areaconst and AyC$preciom
## S = 109351031, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.7391699

Se evidencia que entre el precio de venta y el área construida existe una correlación positiva directamente proporcional, es decir, a mayor área mayor es el precio. Adicionalmente, el mayor volumen de viviendas tienen un área igual o inferior a \(100m^2\).

Al plantear la hipótesis nula \(H_{0}\) : Correlación es cero y utilizando la prueba Spearman’s se tiene que \(p-value\) es cercano a \(0\), no se rechaza \(H_{0}\), lo que indica que ambas variables están correlacionadas.

cor.test(AyC$areaconst,AyC$preciom)
## 
##  Pearson's product-moment correlation
## 
## data:  AyC$areaconst and AyC$preciom
## t = 56.37, df = 1358, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.8203549 0.8522488
## sample estimates:
##       cor 
## 0.8370114

4.3. Modelo de regresión lineal

Estime el modelo de regresión lineal simple entre \(precio=f(area)+ε\). Interprete los coeficientes del modelo \(β_{0}\), \(β_{1}\) en caso de ser correcto.

El modelo de regresión lineal \(Y=β_{0}+β_{1}X+ε\) obtenido es \(Y=200.1863+0.4967X\)

mrl<- lm(preciom~areaconst, data=AyC)
mrl
## 
## Call:
## lm(formula = preciom ~ areaconst, data = AyC)
## 
## Coefficients:
## (Intercept)    areaconst  
##    200.1863       0.4967
mrl_summary <- summary(mrl)
mrl_summary
## 
## Call:
## lm(formula = preciom ~ areaconst, data = AyC)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -26.4010  -5.0783  -0.0175   4.6173  24.3353 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.002e+02  6.899e-01  290.15   <2e-16 ***
## areaconst   4.967e-01  8.811e-03   56.37   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.087 on 1358 degrees of freedom
## Multiple R-squared:  0.7006, Adjusted R-squared:  0.7004 
## F-statistic:  3178 on 1 and 1358 DF,  p-value: < 2.2e-16

4.4. Intervalos de confianza

Construir un intervalo de confianza \((95\%)\) para el coeficiente \(β _{1}\), interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t.

Con una confianza del \(95\%\), se puede concluir que por cada metro cuadrado que incremente el apartamento, el precio puede incrementar entre \(0.479\)M COP y \(0.514\)M COP.

Se plantea la hipótesis nula \(H_0 : β1=0\). Se utiliza la prueba \(t\) para determinar si el coeficiente \(β_{1}\) es igual a cero, obteniendo como resultado igual a \(Pr(>|t|)=0\), es decir que, no hay una linealidad entre el precio y el área construida.

confint(mrl, level=0.95)
##                   2.5 %      97.5 %
## (Intercept) 198.8328481 201.5398110
## areaconst     0.4794099   0.5139806

4.5. Indicador de bondad de ajuste

Calcule e interprete el indicador de bondad \(R^{2}\).

El coeficiente de determinación \(R^{2}\) es una medida utilizada para explicar cuánta variabilidad de un factor puede ser causada por su relación con otro factor relacionado. Esta correlación, conocida como “bondad de ajuste”, se representa como un valor entre 0,0 y 1,0. Un valor de 1,0 indica un ajuste perfecto y, por tanto, un modelo muy fiable para las previsiones futuras, mientras que un valor de 0,0 indicaría que el cálculo no logra modelar los datos con precisión en absoluto.

En este caso, se tiene que \(R^{2}=0.700588\), lo que sugiere que el \(70\%\) de la variable dependiente (Precio de vivienda (M COP)) es predicha por la variable independiente (Área construida (Metros cuadrados)).

summary(mrl)$r.squared
## [1] 0.700588

4.6. Predicción de precio promedio

¿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?.

De acuerdo con el modelo, el precio promedio estimado para los apartamentos de \(110 m^{2}\) sería de \(254.8\)M COP, con un intervalo de confianza del \(95\%\) con un límite inferior \(L_{i}=254.1\) y límite superior \(L_{s}=255.5\).

predict.lm(mrl, list(areaconst=110), interval="confidence", level=0.95)
##        fit     lwr      upr
## 1 254.8228 254.113 255.5326

Para determinar si un apartamento de \(110 m^{2}\) en un precio de \(200\)M COP sería una oferta atractiva en una zona, se debe calcular el precio promedio estimado para cada zona, estimando modelos por zona, obteniendo que:

  • Zona Centro: \(257.6\)M COP
  • Zona Norte: \(254.3\)M COP
  • Zona Oeste: \(255.4\)M COP
  • Zona Oriente: \(267.8\)M COP
  • Zona Sur: \(254.9\)M COP
AyC_centro <- subset(AyC, zona == "Zona Centro")
AyC_norte <- subset(AyC, zona == "Zona Norte")
AyC_oeste <- subset(AyC, zona == "Zona Oeste")
AyC_oriente <- subset(AyC, zona == "Zona Oriente")
AyC_sur <- subset(AyC, zona == "Zona Sur")

n_ce = n(AyC_centro$zona)
n_no = n(AyC_norte$zona)
n_oe = n(AyC_oeste$zona)
n_or = n(AyC_oriente$zona)
n_su = n(AyC_sur$zona)

mrl_ce <- lm(preciom~areaconst, data=AyC_centro)
mrl_no <- lm(preciom~areaconst, data=AyC_norte)
mrl_oe <- lm(preciom~areaconst, data=AyC_oeste)
mrl_or <- lm(preciom~areaconst, data=AyC_oriente)
mrl_su <- lm(preciom~areaconst, data=AyC_sur)

ce <- predict.lm(mrl_ce, list(areaconst=110))
no <- predict.lm(mrl_no, list(areaconst=110))
oe <- predict.lm(mrl_oe, list(areaconst=110))
or <- predict.lm(mrl_or, list(areaconst=110))
su <- predict.lm(mrl_su, list(areaconst=110))
data.frame(
  "zona" = as.character(c("Zona Centro","Zona Norte","Zona Oeste","Zona Oriente","Zona Sur")),
  "n" = c(n_ce,n_no,n_oe,n_or,n_su),
  "Predict. fit" = c(ce,no,oe,or,su)
)
##           zona    n Predict..fit
## 1  Zona Centro    7     257.5557
## 2   Zona Norte  236     254.2524
## 3   Zona Oeste   52     255.4371
## 4 Zona Oriente    2     267.8277
## 5     Zona Sur 1063     254.9250

De acuerdo con lo anterior, se determina que el precio de \(200\)M COP para un apartamento de \(110 m^{2}\) en cualquier zona es una oferta muy atractiva para comprador, es importante tener en cuenta que en la zona oriente \(n=2\) y en la zona centro \(n=7\). Adicionalmente, se deben considerar características específicas del apartamento, tales como, número de habitaciones y baños, piso en el que se encuentra ubicado, ascensor, antigüedad, estado general del inmueble, etc.

4.7. Validación de supuestos

Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

Los supuestos teóricos sobre los que se sustenta el modelo de regresión lineal simple son cuatro:

4.7.1. Linealidad: La relación entre las variables es lineal

Se plantea la hipótesis nula \(H_{0}\) : La relación entre las variables es lineal. Para evaluar la linealidad se calcula la media de los residuos del modelo. Dado que la media de residuos es \(-2.311717e-16\), es decir, cercana a \(0\), no se rechaza \(H_{0}\) de linealidad. Según el gráfico de los residuos, se evidencia cómo oscilan alrededor de su media la cual es cercana a \(0\).

mean(mrl$residuals)
## [1] -2.311717e-16

4.7.2. Independencia: Los residuos son independientes

Se plantea la hipótesis nula \(H_{0}\) : Los residuos son independientes. Para evaluar la independencia se utiliza la prueba Durbin-Watson. Dado que el \(p-value=0.6536\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de independencia.

dwtest(mrl)
## 
##  Durbin-Watson test
## 
## data:  mrl
## DW = 2.0219, p-value = 0.6536
## alternative hypothesis: true autocorrelation is greater than 0

4.7.3. Homocedasticidad: Los residuos tienen una varianza constante

Se plantea la hipótesis nula \(H_{0}\) : Los residuos tienen una varianza constante. Para evaluar la homocedasticidad se utiliza la prueba Breusch-Pagan. Dado que el \(p-value=0.4897\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de homocedasticidad. Según el gráfico se evidencia que los residuos estudentizados oscilan alrededor de \(0\).

bptest(mrl)
## 
##  studentized Breusch-Pagan test
## 
## data:  mrl
## BP = 0.47718, df = 1, p-value = 0.4897

4.7.4. Normalidad: Los residuos tienen una distribución normal

Se plantea la hipótesis nula \(H_{0}\) : Los residuos tienen una distribución normal. Para evaluar la normalidad se utiliza la prueba Shapiro-Wilk. Dado que el \(p-value=0.5243\) es mayor que \(0.05\) no se rechaza \(H_{0}\) de normalidad. Según los gráficos se evidencia cómo los residuos siguen una distribución normal.

shapiro.test(mrl$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mrl$residuals
## W = 0.99883, p-value = 0.5243

En conclusión, para el modelo de regresión lineal \(Y=β_{0}+β_{1}X+ε\) obtenido \(Y=200.1863+0.4967X\) se cumplen los 4 supuestos.

4.8. Transformación

De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

Se plantean 4 modelos:

  • mod_1: lin-lin
  • mod_2: log-lin
  • mod_3: lin-log
  • mod_4: log-log
x <- AyC$areaconst
y <- AyC$preciom
log_x <- log(AyC$areaconst)
log_y <- log(AyC$preciom)

mod_1 <- lm(y~x, data=AyC) 
mod_2 <- lm(log_y~x, data=AyC)
mod_3 <- lm(y~log_x, data=AyC)
mod_4 <- lm(log_y~log_x, data=AyC)

library(stargazer)
## 
## 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
stargazer(mod_1,mod_2,mod_3,mod_4, type = "text", df=FALSE)
## 
## =======================================================================
##                                     Dependent variable:                
##                     ---------------------------------------------------
##                          y          log_y          y          log_y    
##                         (1)          (2)          (3)          (4)     
## -----------------------------------------------------------------------
## x                     0.497***     0.002***                            
##                       (0.009)     (0.00004)                            
##                                                                        
## log_x                                          42.112***     0.172***  
##                                                 (0.801)      (0.003)   
##                                                                        
## Constant             200.186***    5.318***    57.054***     4.733***  
##                       (0.690)      (0.003)      (3.437)      (0.014)   
##                                                                        
## -----------------------------------------------------------------------
## Observations           1,360        1,360        1,360        1,360    
## R2                     0.701        0.682        0.671        0.663    
## Adjusted R2            0.700        0.681        0.671        0.662    
## Residual Std. Error    7.087        0.030        7.432        0.031    
## F Statistic         3,177.556*** 2,906.067*** 2,766.449*** 2,667.104***
## =======================================================================
## Note:                                       *p<0.1; **p<0.05; ***p<0.01

Se concluye que todos los modelos tienen coeficientes de determinación similares, sin embargo, el modelo 1 (lin-lin) tiene el mayor \(R^2=0.701\).

Se utiliza la transformacion Box Cox para calcular un lambda \(\lambda=1.01\), dado que es cercano a \(1\) se ajusta a un modelo lineal.

## [1] 1.010101

4.9. Comparación de modelo inicial y modelo transformado

De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

Se evalúan los supuestos de independencia, homocedasticidad y normalidad en los 4 modelos planteados en el punto 4.8.

  • Independencia:

Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos son independientes y utilizando la prueba Durbin-Watson, se tiene que para los 4 modelos el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de independencia.

dwtest(mod_1)
## 
##  Durbin-Watson test
## 
## data:  mod_1
## DW = 2.0219, p-value = 0.6536
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_2)
## 
##  Durbin-Watson test
## 
## data:  mod_2
## DW = 2.0218, p-value = 0.6523
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_3)
## 
##  Durbin-Watson test
## 
## data:  mod_3
## DW = 1.9505, p-value = 0.1778
## alternative hypothesis: true autocorrelation is greater than 0
dwtest(mod_4)
## 
##  Durbin-Watson test
## 
## data:  mod_4
## DW = 1.9678, p-value = 0.2727
## alternative hypothesis: true autocorrelation is greater than 0
  • Homocedasticidad:

Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos tienen una varianza constante y utilizando la prueba Breusch-Pagan, se tiene que para los modelos 1 y 4, el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de homocedasticidad. Mientras que, para los modelos 2 y 3, el \(p-value\) es menor que \(0.05\), rechazando \(H_{0}\), los residuos no tienen varianza constante.

bptest(mod_1)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_1
## BP = 0.47718, df = 1, p-value = 0.4897
bptest(mod_2)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_2
## BP = 5.8661, df = 1, p-value = 0.01544
bptest(mod_3)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_3
## BP = 7.6515, df = 1, p-value = 0.005672
bptest(mod_4)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod_4
## BP = 0.83834, df = 1, p-value = 0.3599
  • Normalidad:

Teniendo en cuenta la hipótesis nula \(H_{0}\) : Los residuos tienen una distribución normal y utilizando la prueba Shapiro-Wilk, se tiene que para los modelos 1, 2 y 4, el \(p-value\) es mayor que \(0.05\), por lo tanto no se rechaza \(H_{0}\), se cumple el supuesto de normalidad. Mientras que, para el modelo 3, el \(p-value\) es menor que \(0.05\), rechazando \(H_{0}\), los residuos no siguen una distribución normal.

shapiro.test(mod_1$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mod_1$residuals
## W = 0.99883, p-value = 0.5243
shapiro.test(mod_2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mod_2$residuals
## W = 0.99904, p-value = 0.7137
shapiro.test(mod_3$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mod_3$residuals
## W = 0.99736, p-value = 0.02368
shapiro.test(mod_4$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  mod_4$residuals
## W = 0.99855, p-value = 0.3145

4.10. Estimación de modelos

Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

De los modelos estimados, los modelos 1 y 4 cumplen los supuestos de independencia, homocedasticidad y normalidad.

Modelo Independencia Homocedasticidad Normalidad
Modelo 1: lin-lin Se cumple Se cumple Se cumple
Modelo 2: log-lin Se cumple No se cumple Se cumple
Modelo 3: lin-log Se cumple No se cumple No se cumple
Modelo 4: log-log Se cumple Se cumple Se cumple