Enunciado
Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.
Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.
Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:
Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .
## [1] "Primeras filas de los datos"
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1147 | Zona Oriente | NA | 3 | 250 | 70 | 1 | 3 | 6 | Casa | 20 de julio | -76.51168 | 3.43382 |
| 1169 | Zona Oriente | NA | 3 | 320 | 120 | 1 | 2 | 3 | Casa | 20 de julio | -76.51237 | 3.43369 |
| 1350 | Zona Oriente | NA | 3 | 350 | 220 | 2 | 2 | 4 | Casa | 20 de julio | -76.51537 | 3.43566 |
| 5992 | Zona Sur | 02 | 4 | 400 | 280 | 3 | 5 | 3 | Casa | 3 de julio | -76.54000 | 3.43500 |
| 1212 | Zona Norte | 01 | 5 | 260 | 90 | 1 | 2 | 3 | Apartamento | acopi | -76.51350 | 3.45891 |
| 1724 | Zona Norte | 01 | 5 | 240 | 87 | 1 | 3 | 3 | Apartamento | acopi | -76.51700 | 3.36971 |
## [1] "Resumen de los datos"
## id zona piso estrato
## Min. : 1 Length:8322 Length:8322 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## NA's :3 NA's :3
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.835 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## NA's :2 NA's :3 NA's :1605 NA's :3
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8322 Length:8322 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## NA's :3 NA's :3
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
## NA's :3
## [1] "Valores faltantes"
## id zona piso estrato preciom areaconst
## 3 3 2638 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 1605 3 3 3 3 3
## latitud
## 3
## [1] "Primeros 3 registros de la base filtrada (casas en la zona norte):"
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1209 | Zona Norte | 02 | 5 | 320 | 150 | 2 | 4 | 6 | Casa | acopi | -76.51341 | 3.47968 |
| 1592 | Zona Norte | 02 | 5 | 780 | 380 | 2 | 3 | 3 | Casa | acopi | -76.51674 | 3.48721 |
| 4057 | Zona Norte | 02 | 6 | 750 | 445 | 0 | 7 | 6 | Casa | acopi | -76.52950 | 3.38527 |
## [1] "Conteo de registros por zona en la base filtrada:"
| Var1 | Freq |
|---|---|
| Zona Norte | 722 |
Se evidencia una incorrecta clasificación de algunas casas, debido a que según su longitud y latitud están ubicadas en zonas diferentes a la zona norte, en la cual están etiquetados.
Aunque Las coordenadas (latitud y longitud) podrían estar incorrectas para algunos registros, lo cual puede ocurrir si si hubo errores al ingresar o capturar los datos o si se usó un sistema de referencia incorrecto, es más problable que se trate de una etiqueta incorrecta.
A partir de la matriz de correlación se observa que las correlaciones positivas de valor más alto respecto al precio son el área construida con 0.69 y baños con 0.67. Teniendo en cuenta que la correlación entre baños y área construida así como con habitaciones es alta, se puede deducir que tanto la variable baños como habitaciones tienden a una mayor dependencia del área construida. Además al revisar los boplots se puede evidenciar algunos datos atipicos no solo en el precio de los inmuebles sino también en los datos como el número de baños y habitaciones, los cuales presentan valores poco frecuentes para este tipo de viviendas que podría obedecer a errores de imputación o captura de datos.
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(preciom ~ areaconst + habitaciones + parqueaderos + banios, data = vivienda)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = preciom ~ areaconst + habitaciones + parqueaderos +
## banios, data = vivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1825.78 -88.31 -20.62 55.20 1212.40
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 70.1773 6.0456 11.61 <2e-16 ***
## areaconst 0.9755 0.0203 48.06 <2e-16 ***
## habitaciones -54.2398 1.8519 -29.29 <2e-16 ***
## parqueaderos 73.7139 2.0609 35.77 <2e-16 ***
## banios 89.8027 2.2374 40.14 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 189.5 on 8314 degrees of freedom
## Multiple R-squared: 0.6676, Adjusted R-squared: 0.6674
## F-statistic: 4174 on 4 and 8314 DF, p-value: < 2.2e-16
Área construida (0.98): Cada metro cuadrado adicional de construcción se asocia con un aumento promedio de aproximadamente 0.98 millones en el precio de la vivienda, manteniendo las demás variables constantes. Este resultado es intuitivo, ya que mayor área construida generalmente implica mayor precio.
Habitaciones (-54.24): Cada habitación adicional se asocia con una reducción promedio de 54.24 millones en el precio, manteniendo las demás variables constantes. Esto podría indicar que las viviendas más grandes pueden tener un menor precio por metro cuadrado o que hay una relación inversa con otras características no modeladas (como la ubicación o el estado de la vivienda).
Parqueaderos (73.71): Cada parqueadero adicional se asocia con un incremento promedio de 73.71 millones en el precio, lo cual es lógico, ya que los parqueaderos son una característica valiosa en las viviendas urbanas.
Baños (89.80): Cada baño adicional incrementa el precio en 89.80 millones, lo que sugiere que los baños son una característica importante en la valoración de una vivienda.
Evaluación de la significancia estadística:
Todos los coeficientes tienen valores p < 0.001, lo que indica que son altamente significativos y que tienen una influencia estadísticamente relevante sobre el precio de la vivienda.
Evaluación del ajuste del modelo:
R² = 0.6676: Indica que el modelo explica aproximadamente 66.76% de la variabilidad en el precio de las viviendas. Es un buen nivel de ajuste, aunque aún hay un 33.24% de la variabilidad no explicada, lo que sugiere que hay otros factores importantes que no están siendo considerados (como ubicación exacta, antigüedad del inmueble, acabados, demanda del mercado, etc.).
Error estándar de los residuos = 189.5: Indica que, en promedio, las predicciones del modelo tienen un error de aproximadamente 189.5 millones.
Posibles mejoras del modelo:
Incluir más variables: Podría ser útil incorporar variables como ubicación geográfica, antigüedad del inmueble, tipo de construcción. A aunque el estrato no se considera una variable numérica, esta puede ayudar a enteder mejor variaciones en los datos del modelo, debido a que un inmueble con caracteristicas similares en cuanto a tamaño y caracteristicas, podría variar en su precio de acuerdo al estrato.
modeloR <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda)
# Mejora el R2
summary(modeloR)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = vivienda)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1596.26 -89.52 -18.63 54.31 1192.21
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -318.31275 11.68459 -27.24 <2e-16 ***
## areaconst 0.96050 0.01875 51.23 <2e-16 ***
## estrato 92.22507 2.43661 37.85 <2e-16 ***
## habitaciones -25.72893 1.86899 -13.77 <2e-16 ***
## parqueaderos 48.32521 2.01829 23.94 <2e-16 ***
## banios 57.21454 2.23875 25.56 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 175.1 on 8313 degrees of freedom
## Multiple R-squared: 0.7164, Adjusted R-squared: 0.7163
## F-statistic: 4200 on 5 and 8313 DF, p-value: < 2.2e-16
Transformaciones de variables: Se podría probar con transformaciones logarítmicas para mejorar la linealidad.
Detección de atípicos: Algunos valores extremos en el precio podrían estar afectando el ajuste del modelo.
## areaconst estrato habitaciones parqueaderos banios
## areaconst 1.0000000 0.27432332 0.51691292 0.4823840 0.6484165
## estrato 0.2743233 1.00000000 -0.07137615 0.5127889 0.4203218
## habitaciones 0.5169129 -0.07137615 1.00000000 0.1987555 0.5899064
## parqueaderos 0.4823840 0.51278892 0.19875551 1.0000000 0.5231299
## banios 0.6484165 0.42032178 0.58990641 0.5231299 1.0000000
Homocedasticidad :
Se observa que los residuos tienen una mayor dispersión a medida que los valores ajustados aumenta. De igual manera se observa que en el gráfico de escala-locación la línea roja tiene una pendiente positiva, lo que indica que los residuos estandarizados aumentan a medida que crecen los valores ajustados. Esto indica una posible heterocedasticidad, que sugiere que la varianza de los errores no es constante.
En un modelo bien ajustado, los residuos deben distribuirse aleatoriamente alrededor de la línea roja (cercana a cero). Parece haber cierta estructura en los residuos, lo que podría indicar que el modelo no está capturando correctamente algunas relaciones en los datos.
En la parte derecha del grafico de escala-locación (valores ajustados altos), los residuos se dispersan más, lo que sugiere que el modelo predice con menor precisión en los valores más altos de la variable dependiente.
Hay algunos puntos fuera del patrón general, lo que sugiere la existencia de outliers que pueden influir en el ajuste del modelo.
Distribución de los datos:
En el gráfico de residuos estandarizados vs valores teóricos, Los puntos en los extremos (tanto en la cola inferior como en la superior) se desvían significativamente de la línea diagonal punteada.Esto sugiere que los residuos no siguen una distribución normal y pueden tener colas más pesadas de lo esperado en una distribución normal.
Residuals vs Leverage:
El gráfico de Residuals vs Leverage con la Distancia de Cook ayuda a identificar observaciones que podrían tener un alto impacto en el modelo.
Se identifican observaciones como 3155, 8073 y 419, que tienen valores de leverage más altos.
El punto 3155, tiene un leverage relativamente alto y un residuo estandarizado extremo.
Esto sugiere que podría estar influyendo significativamente en el ajuste del modelo.
La curva punteada indica el umbral de 0.5 para la Distancia de Cook. El punto 3155 parece estar cerca o por encima de este umbral, lo que indica que tiene una gran influencia en los coeficientes del modelo.
Recomendaciones:
Evaluar la inclusión de nuevas variables o la eliminación de valores atípicos.
Aplicar una transformación a la variable dependiente (como logaritmo o raíz cuadrada) para estabilizar la varianza.
Se observa que algunas variables tienen correlaciones relativamente altas, por ejemplo: Área construida (areaconst) y baños: 0.6484 Habitaciones y baños: 0.5899 Esto puede generar problemas de multicolinealidad, afectando la estabilidad del modelo.
Calcular el VIF (Variance Inflation Factor) para evaluar si alguna de estas variables debe excluirse o transformarse.
Validar los puntos como 3155, 8073 y 419.
# Ver los datos de los puntos atípicos
outliers <- c(3155, 8073, 419) # IDs detectados en los gráficos
vivienda[outliers, ] # Inspeccionar las filas en el dataset original
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 3324 Zona O… <NA> 3 255 1745 2 3 2
## 2 534 Zona N… 03 3 370 1440 1 4 10
## 3 1017 Zona O… <NA> 3 200 1365 0 1 4
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
## [1] "Predicción para estrato 4: 301.636875502016"
## [1] "Predicción para estrato 5: 301.636875502016"
Según el modelo, precio estimado para la Vivienda 1 con las características dadas es 301.64 millones, el comprador tiene 350 millones aprobados, por lo que la vivienda está dentro del presupuesto.
Para esto, se filtra el dataset de viviendas con los valores de:
Precio (Dentro del presupuesto) <= 350, Área Construida (No menor a lo solicitado) >= 200 Habitaciones >=4 Vivienda de tipo Casa ubicada en Zona Norte Parqueadero >=1 Baños >= 2, Estrato 5 ó 6
# Filtrar viviendas con condiciones similares a Vivienda 1
ofertas_potenciales <- vivienda %>%
filter(preciom <= 350, # Dentro del presupuesto
areaconst >= 200, # Similar en área construida
habitaciones >=4, # Habitaciones en el rango
tipo == 'Casa',
zona == 'Zona Norte',
parqueaderos >= 1, # Al menos 1 parqueadero
banios >= 2,
estrato >= 4 & estrato <= 5) # Estrato dentro del rango
# Seleccionar 5 opciones
ofertas_seleccionadas <- ofertas_potenciales %>% slice(1:5)
# Crear mapa con ubicaciones
leaflet(ofertas_seleccionadas) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud,
popup = ~paste("Precio:", preciom, "millones", "<br>",
"Área:", areaconst, "m²", "<br>",
"Habitaciones:", habitaciones, "<br>",
"Parqueaderos:", parqueaderos, "<br>",
"Zona:",zona))
## [1] "Primeros 3 registros de la base filtrada (apartamentos en la zona sur):"
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 5098 | Zona Sur | 05 | 4 | 290 | 96 | 1 | 2 | 3 | Apartamento | acopi | -76.53464 | 3.44987 |
| 698 | Zona Sur | 02 | 3 | 78 | 40 | 1 | 1 | 2 | Apartamento | aguablanca | -76.50100 | 3.40000 |
| 8199 | Zona Sur | NA | 6 | 875 | 194 | 2 | 5 | 3 | Apartamento | aguacatal | -76.55700 | 3.45900 |
## [1] "Conteo de registros por zona en la base filtrada:"
| Var1 | Freq |
|---|---|
| Zona Sur | 2787 |
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1252.31 -42.15 -2.06 36.32 934.06
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -221.04614 13.47771 -16.401 < 2e-16 ***
## areaconst 1.46061 0.04876 29.956 < 2e-16 ***
## estrato 57.00608 2.79648 20.385 < 2e-16 ***
## habitaciones -22.71789 3.39549 -6.691 2.68e-11 ***
## parqueaderos 48.36353 3.02343 15.996 < 2e-16 ***
## banios 48.60871 3.04050 15.987 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 95.17 on 2781 degrees of freedom
## Multiple R-squared: 0.7536, Adjusted R-squared: 0.7531
## F-statistic: 1701 on 5 and 2781 DF, p-value: < 2.2e-16
## areaconst estrato habitaciones parqueaderos banios
## areaconst 1.0000000 0.4815593 0.4339608 0.5586775 0.6618179
## estrato 0.4815593 1.0000000 0.2125953 0.5491353 0.5686171
## habitaciones 0.4339608 0.2125953 1.0000000 0.2863117 0.5149227
## parqueaderos 0.5586775 0.5491353 0.2863117 1.0000000 0.5651455
## banios 0.6618179 0.5686171 0.5149227 0.5651455 1.0000000
## [1] "Precio con las caracteristicas dadas:"
## 1
## 679.4951
## [1] "Ofertas potenciales para la Vivienda 2:"
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7182 | Zona Sur | NA | 5 | 730 | 573 | 3 | 8 | 5 | Apartamento | guadalupe | -76.548 | 3.408 |
| 7512 | Zona Sur | NA | 5 | 670 | 300 | 3 | 5 | 6 | Apartamento | seminario | -76.550 | 3.409 |
## [1] "Solo dos ofertas se asjutan a la solicitud"