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.

Con este propósito el equipo de asesores a diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar

1 Punto 1

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.

Se procede a quitar los inmuebles de tipo casa del dataset y se hace un resumen de los datos

-Analisis del Precio

library(paqueteMETODOS)
library(agricolae)
apartamentos4= subset(vivienda4, tipo != "Casa")##Asi se asegura que solo se se trabajara con los Apartamentos
summary(apartamentos4)
##            zona      estrato     preciom        areaconst     
##  Zona Centro :   7   3:   0   Min.   : 78.0   Min.   : 40.00  
##  Zona Norte  : 237   4:1363   1st Qu.:153.5   1st Qu.: 60.00  
##  Zona Oeste  :  52   5:   0   Median :185.0   Median : 70.00  
##  Zona Oriente:   2   6:   0   Mean   :202.4   Mean   : 75.48  
##  Zona Sur    :1065            3rd Qu.:240.0   3rd Qu.: 84.00  
##                               Max.   :645.0   Max.   :200.00  
##           tipo     
##  Apartamento:1363  
##  Casa       :   0  
##                    
##                    
##                    
## 
summary(apartamentos4$preciom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    78.0   153.5   185.0   202.4   240.0   645.0
shapiro.test(apartamentos4$preciom)
## 
##  Shapiro-Wilk normality test
## 
## data:  apartamentos4$preciom
## W = 0.89881, p-value < 2.2e-16
x=apartamentos4$preciom
n=length(x)
k=nclass.Sturges(x)
intervalos=cut(x,breaks = k)
rango=max(x)-min(x)
a=rango/k

par(mfrow=c(1,2))
histograma= hist(x, breaks = seq(min(x), max(x), by = a), col = "Skyblue",main = "Histograma de Precio", xlab="Precio")

mediana = median(x)
abline(v = mediana, col = "red", lwd = 2)#Linea vertical para la mediana

boxplot(apartamentos4$preciom, main = "Boxplot de Precio")

Tabla_Frecuencias_precio=(table.freq(histograma))
Tabla_Frecuencias_precio
##     Lower  Upper    Main Frequency Percentage   CF   CPF
## 1   78.00 125.25 101.625        63        4.6   63   4.6
## 2  125.25 172.50 148.875       522       38.3  585  42.9
## 3  172.50 219.75 196.125       263       19.3  848  62.2
## 4  219.75 267.00 243.375       327       24.0 1175  86.2
## 5  267.00 314.25 290.625       111        8.1 1286  94.4
## 6  314.25 361.50 337.875        48        3.5 1334  97.9
## 7  361.50 408.75 385.125        14        1.0 1348  98.9
## 8  408.75 456.00 432.375         9        0.7 1357  99.6
## 9  456.00 503.25 479.625         2        0.1 1359  99.7
## 10 503.25 550.50 526.875         2        0.1 1361  99.9
## 11 550.50 597.75 574.125         1        0.1 1362  99.9
## 12 597.75 645.00 621.375         1        0.1 1363 100.0
asimetria <- skewness(apartamentos4$preciom)

print(paste("Asimetría:", asimetria))
## [1] "Asimetría: 1.44584499740574"

Se puede observar que aproximadamente el 86.2% de los apartamentos tienen precios entre 78 millones y 243.37 millones de pesos. Además, el promedio de los precios de los apartamentos es de 202.4 millones de pesos. Aunque se recomienda utilizar la mediana como medida de tendencia central, ya que esta es menos sensible a los valores atípicos y a la falta de normalidad en los datos.

-Analisis del Área

summary(apartamentos4$areaconst)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   40.00   60.00   70.00   75.48   84.00  200.00
shapiro.test(apartamentos4$areaconst)
## 
##  Shapiro-Wilk normality test
## 
## data:  apartamentos4$areaconst
## W = 0.82347, p-value < 2.2e-16
x=apartamentos4$areaconst
n=length(x)
k=nclass.Sturges(x)
intervalos=cut(x,breaks = k)
rango=max(x)-min(x)
a=rango/k

par(mfrow=c(1,2))
histograma= hist(x, breaks = seq(min(x), max(x), by = a), col = "Skyblue", main = "Histograma de Area(metros cuadrados)", xlab="Metros Cuadrados")
mediana <- median(x)
abline(v = mediana, col = "red", lwd = 2)#Linea vertical para la mediana
boxplot(apartamentos4$areaconst, main = "Boxplot de Area")

Tabla_Frecuencias_area=(table.freq(histograma))
Tabla_Frecuencias_area
##        Lower     Upper      Main Frequency Percentage   CF   CPF
## 1   40.00000  53.33333  46.66667        80        5.9   80   5.9
## 2   53.33333  66.66667  60.00000       505       37.1  585  42.9
## 3   66.66667  80.00000  73.33333       392       28.8  977  71.7
## 4   80.00000  93.33333  86.66667       183       13.4 1160  85.1
## 5   93.33333 106.66667 100.00000        85        6.2 1245  91.3
## 6  106.66667 120.00000 113.33333        53        3.9 1298  95.2
## 7  120.00000 133.33333 126.66667        26        1.9 1324  97.1
## 8  133.33333 146.66667 140.00000        14        1.0 1338  98.2
## 9  146.66667 160.00000 153.33333        12        0.9 1350  99.0
## 10 160.00000 173.33333 166.66667         2        0.1 1352  99.2
## 11 173.33333 186.66667 180.00000         4        0.3 1356  99.5
## 12 186.66667 200.00000 193.33333         7        0.5 1363 100.0
asimetria <- skewness(apartamentos4$areaconst)

print(paste("Asimetría:", asimetria))
## [1] "Asimetría: 2.08678637982857"

Aquí se puede observar que aproximadamente el 85% de los apartamentos tienen un área entre 40 y 86.7 metros cuadrados. Además, el promedio del área en metros cuadrados de los apartamentos es de 75.48 metros cuadrados. En este caso también se recomienda utilizar la mediana como medida de tendencia central, ya que esta es menos sensible a los valores atípicos y a la falta de normalidad en los datos.

2 Punto 2

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.

library(ggplot2)
plot(apartamentos4$areaconst, apartamentos4$preciom, 
     xlab = "Área Construida (m^2)", ylab = "Precio ($)",
     main = "Relación entre Precio y Área Construida")

correlacion = cor(apartamentos4$preciom, apartamentos4$areaconst)
correlacion
## [1] 0.7481389

Del gráfico y el resultado de la correlación, se puede afirmar que hay una relación lineal positiva entre el precio y el área construida de los apartamentos. El coeficiente de correlación de 0.748 indica una relación positiva moderadamente fuerte entre el precio y el área construida. La tendencia ascendente en el gráfico de dispersión sugiere que la relación entre el precio y el área construida sigue una tendencia lineal positiva. Sin embargo, es importante tener en cuenta que la correlación no implica una relación causal directa entre el precio y el área construida.

3 Punto 3

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

modelo1 = lm(preciom ~ areaconst, data = apartamentos4)
summary(modelo1)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = apartamentos4)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -225.404  -23.902   -4.754   25.763  209.021 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 39.04679    4.09977   9.524   <2e-16 ***
## areaconst    2.16473    0.05204  41.595   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared:  0.5597, Adjusted R-squared:  0.5594 
## F-statistic:  1730 on 1 and 1361 DF,  p-value: < 2.2e-16
grafico1 = ggplot(apartamentos4, aes(preciom,areaconst))
grafico1 + geom_point() + geom_smooth(method = "lm", colour="Red")

Aqui se procede a interpretar el coeficiente del intercepto (β0), el cual fue de 39.04679, este representa el valor estimado del precio cuando el área construida es igual a cero, aunque un apartamento nunca va a tener un area igual a cero. Por otro lado el coeficiente de la variable de área construida(β1) es de 2.16473, el cual indica, en promedio, el aumento del precio del apartamento por cada unidad adicional de área construida.

4 Punto 4

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.

confint(modelo1)
##                2.5 %    97.5 %
## (Intercept) 31.00423 47.089340
## areaconst    2.06264  2.266826
# Obtener el resumen del modelo
summary_modelo <- summary(modelo1)

# Imprimir solo los valores de "t value" y valor p asociado a beta1
print(summary_modelo$coefficients["areaconst", c("t value", "Pr(>|t|)"), drop = FALSE])
##            t value      Pr(>|t|)
## areaconst 41.59515 1.056327e-244

Se observa que tanto el intervalo de confianza como la prueba de hipótesis t respaldan la conclusión de que el coeficiente β1 no es igual a cero. Esto sugiere que la relación entre el área construida y el precio del apartamento es significativa, ya que el coeficiente β1 representa el cambio esperado en el precio del apartamento por cada unidad adicional de área construida. Por lo tanto, estos resultados indican que el área construida tiene un efecto estadísticamente significativo en el precio del apartamento.

5 Punto 5

Calcule e interprete el indicador de bondad R2.

summary_modelo <- summary(modelo1)
r_squared <- summary_modelo$r.squared
print(r_squared)
## [1] 0.5597117

Este indicador de bondad R2 de 0.5597117 indica que aproximadamente el 55.97% de la variabilidad en el precio del apartamento esta explicada por la variable independiente (area construida). Sin embargo, aún queda aproximadamente el 44.03% de la variabilidad en el precio del apartamento que no está explicada por el modelo y puede ser atribuible a otros factores no incluidos en el análisis.

6 Punto 6

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

predict(modelo1, newdata = data.frame(areaconst = 110), interval = "prediction", level = 0.95)
##        fit      lwr      upr
## 1 277.1674 192.0449 362.2899

Con un nivel de confianza del 95%, se estima que el precio promedio de un apartamento de 110 metros cuadrados se encuentra en el rango de [192.0449, 362.2899] millones de pesos. Ahora bien, una oferta de 200 millones por un apartamento de 110 metros cuadrados en la misma zona se puede considerar muy atractiva, ya que está dentro del rango estimado y está por debajo del límite superior del intervalo de confianza. Aunque se deben tener en cuenta algunos aspectos como la ubicación específica, calidad y estado del apartamento.

7 Punto 7

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.

# install.packages("lmtest") Instala y carga el paquete lmtest si aún no lo has hecho
library(lmtest)

par(mfrow=c(2,2))
plot(modelo1)

shapiro.test(modelo1$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo1$residuals
## W = 0.96486, p-value < 2.2e-16
# Aplica el test de Breusch-Pagan para la homocedasticidad
bptest(modelo1)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo1
## BP = 292.99, df = 1, p-value < 2.2e-16
# Aplica el test de Durbin-Watson para la autocorrelación
dwtest(modelo1)
## 
##  Durbin-Watson test
## 
## data:  modelo1
## DW = 1.443, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
  • Supuesto de Normalidad: Se aprecia en el gráfico Normal Q-Q y a través de la prueba de Shapiro-Wilk que los errores no siguen una distribución normal. Por lo tanto, este supuesto no se cumple

  • Supuesto de Homoscedasticidad: Se puede observar en el gráfico Residuals vs Fitted que los puntos no están distribuidos de manera que no se evidencie un patrón. Además, el test de Breusch-Pagan también confirma que el supuesto de homocedasticidad no se cumple

  • Supuesto de no autocorrelación: De acuerdo con el gráfico Scale-Location observado y la prueba de Durbin-Watson, se puede afirmar que no existe independencia entre los errores. Por lo tanto, este supuesto no se cumple

En cuanto a los outliers en el gráfico Residuals vs Leverage, podemos ver las observaciones influyentes en nuestro modelo de regresión lineal. Hay bastantes, pero esto también está relacionado con algunos apartamentos que tienen precios altos, los cuales pueden ser inmuebles de lujo para cierto tipo de cliente.

8 Puntos 8, 9 y 10

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

En este punto se procede a realizar las siguientes transformaciones, Lin-Log (Modelo 2), Log-Log (Modelo 3) y BoxCox (Modelo 4).

library(stargazer)
library(MASS)
modelo2 = lm(preciom ~ log(areaconst), data=apartamentos4)# Lin - Log
modelo3 = lm(log(preciom) ~ log(areaconst), data=apartamentos4)# Log - Log
# Aplicando la transformación de Box-Cox
resultado_boxcox <- boxcox(preciom ~ areaconst, data = apartamentos4)

# Encontrando el lambda óptimo
lambda_optimo <- resultado_boxcox$x[which.max(resultado_boxcox$y)]
# Imprimir el lambda óptimo
print(lambda_optimo)
## [1] -0.06060606
# MODELO BOXCOX
y_boxcox = (apartamentos4$preciom ^ lambda_optimo - 1) / lambda_optimo
modelo4=lm(y_boxcox ~ areaconst, data=apartamentos4)

De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado. Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

Aquí se procede a comparar los cuatro modelos para elegir el mejor de entre ellos y determinar si la mejora es significativa en comparación con el modelo anterior.

stargazer(modelo1, modelo2, modelo3, modelo4, type = "text", df=FALSE)
## 
## =======================================================================
##                                     Dependent variable:                
##                     ---------------------------------------------------
##                              preciom          log(preciom)   y_boxcox  
##                         (1)          (2)          (3)          (4)     
## -----------------------------------------------------------------------
## areaconst             2.165***                               0.007***  
##                       (0.052)                                (0.0002)  
##                                                                        
## log(areaconst)                    195.419***    0.882***               
##                                    (4.445)      (0.020)                
##                                                                        
## Constant             39.047***   -635.532***    1.484***     3.991***  
##                       (4.100)      (19.092)     (0.087)      (0.014)   
##                                                                        
## -----------------------------------------------------------------------
## Observations           1,363        1,363        1,363        1,363    
## R2                     0.560        0.587        0.582        0.516    
## Adjusted R2            0.559        0.587        0.582        0.516    
## Residual Std. Error    43.339       41.982       0.191        0.149    
## F Statistic         1,730.157*** 1,933.199*** 1,894.288*** 1,452.728***
## =======================================================================
## Note:                                       *p<0.1; **p<0.05; ***p<0.01

De acuerdo a los resultados observados, el Modelo 2 evidencia una ligera mejora. Se puede observar que el Modelo 2 muestra una mejora en varias métricas de rendimiento en comparación con el Modelo 1. Por ejemplo, el coeficiente de determinación ajustado (Adjusted R-squared) del Modelo 2 es ligeramente mayor que el del Modelo 1 (0.5865 frente a 0.5594). Esto indica que el Modelo 2 explica una mayor proporción de la variabilidad en los precios de los apartamentos en comparación con el Modelo 1. Por lo tanto, se evaluará si esto representa un cambio significativo en el cumplimiento de los supuestos.

EVALUACION DE SUPUESTOS MODELO 2

summary(modelo2)
## 
## Call:
## lm(formula = preciom ~ log(areaconst), data = apartamentos4)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -196.252  -21.338   -1.579   22.096  261.436 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    -635.532     19.092  -33.29   <2e-16 ***
## log(areaconst)  195.419      4.445   43.97   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 41.98 on 1361 degrees of freedom
## Multiple R-squared:  0.5868, Adjusted R-squared:  0.5865 
## F-statistic:  1933 on 1 and 1361 DF,  p-value: < 2.2e-16
par(mfrow=c(2,2))
plot(modelo2)

shapiro.test(modelo2$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo2$residuals
## W = 0.95826, p-value < 2.2e-16
# Aplica el test de Breusch-Pagan para la homocedasticidad
bptest(modelo2)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo2
## BP = 214.66, df = 1, p-value < 2.2e-16
# Aplica el test de Durbin-Watson para la autocorrelación
dwtest(modelo2)
## 
##  Durbin-Watson test
## 
## data:  modelo2
## DW = 1.4775, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0

En los graficos y en las diferentes pruebas, al igual que el Modelo inicial, los supuestos tampoco se cumplen.

  • Supuesto de Normalidad: En la prueba Normalidad de Shapiro-Wilk El p-valor es significativamente menor que 0.05, lo que indica que los residuos no siguen una distribución normal.
  • Supuesto de Homoscedasticidad: En la prueba de Breusch-Pagan El p-valor es significativamente menor que 0.05, lo que sugiere que hay heterocedasticidad en los residuos, es decir, la varianza de los errores no es constante en todo el rango de los valores ajustados.
  • Supuesto de no autocorrelación: En la prueba de Durbin-Watson El p-valor es significativamente menor que 0.05, lo que sugiere que hay autocorrelación positiva en los residuos, es decir, los residuos están correlacionados entre sí.

En el gráfico Residuals vs Leverage, al igual que en el Modelo 1, se aprecian observaciones influyentes en nuestro modelo de regresión lineal. La presencia de varios outliers puede estar relacionada con algunos apartamentos que tienen precios altos, los cuales podrían ser inmuebles de lujo para un segmento específico de clientes.

9 Punto 11

Con los resultados obtenidos construya un informe para los directivos de la inmobiliaria, indicando el modelo apropiado y sus principales características. A este informe se deben añadir los anexos como evidencia de la realización de los pasos anteriores.

INFORME PARA LOS DIRECTIVOS

Después de realizar exhaustivos análisis y cálculos, evaluamos dos modelos distintos para predecir los precios de los apartamentos. El primero fue nuestro modelo inicial, mientras que el segundo fue una versión transformada de este último. Aunque observamos una mejora en el desempeño del segundo modelo, esta no fue lo suficientemente significativa como para justificar su elección sobre el modelo inicial. Por lo tanto, decidimos seleccionar el modelo inicial debido a la necesidad de simplicidad y claridad en la interpretación de los resultados.

El modelo revela que el precio de los apartamentos está significativamente influenciado por el área construida. Según el coeficiente de determinación ajustado, aproximadamente el 56% de la variabilidad en los precios de los apartamentos se puede explicar por el área construida. Se recomienda utilizar este modelo como una primera aproximación en la predicción de precios de apartamentos. Aunque el modelo no captura toda la complejidad del mercado inmobiliario, proporciona una aproximación útil y fácilmente interpretable para estimar los precios de los apartamentos en función del área construida.

Además, se sugiere realizar un análisis más exhaustivo para lograr una mayor precisión en las predicciones. Esto incluiría la consideración de variables adicionales que pueden desempeñar un papel importante en la determinación de los precios de los apartamentos. Por ejemplo, la ubicación del inmueble es un factor crucial que puede influir significativamente en los precios, ya que la demanda y las características del entorno pueden variar según la zona. Además, las características específicas del inmueble, como el tamaño, la distribución interna, la calidad de la construcción y las comodidades ofrecidas, también pueden tener un impacto en los precios. Por último, las condiciones del mercado, como la oferta y la demanda de viviendas en una determinada área, las tasas de interés hipotecarias y los cambios en la economía local, pueden afectar la dinámica de precios en el mercado inmobiliario. Por lo tanto, al considerar estas variables adicionales en el análisis, podemos obtener modelos predictivos más precisos y robustos que reflejen mejor la complejidad y la variabilidad del mercado de bienes raíces.