1 Caso de estudio

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:

Características

Definición

Características Vivienda 1 Vivienda 2
Tipo Capa Apartamento
Área construida 200 300
Parquaderos 1 3
Baños 2 3
Habitaciones 4 5
Estrato 4 o 5 5 o 6
Zona Norte Sur
Crédito preaprobado 350 millones 850 millones


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) .

Datos Los datos de los tres últimos meses se adjuntan en la base que puede obtener con el siguiente código en R

Tabla de Variables

Tabla de Variables y Descripciones

Variable Descripción
zona Ubicación de la vivienda: Zona Centro, Zona Norte,…
piso Piso que ocupa la vivienda: primer piso, segundo piso…
estrato Estrato socio-económico: 3, 4, 5, 6
preciom Precio de la vivienda en millones de pesos
areaconst Área construida
parqueaderos Número de parqueaderos
banios Número de baños
habitaciones Número de habitaciones
tipo Tipo de vivienda: Casa, Apartamento
barrio Barrio de ubicación de la vivienda: 20 de Julio, Alamos,…
longitud Coordenada geográfica
latitud Coordenada geográfica
data("vivienda")
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id          : num [1:8322] 1147 1169 1350 5992 1212 ...
##  $ zona        : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr [1:8322] NA NA NA "02" ...
##  $ estrato     : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_double(),
##   ..   zona = col_character(),
##   ..   piso = col_character(),
##   ..   estrato = col_double(),
##   ..   preciom = col_double(),
##   ..   areaconst = col_double(),
##   ..   parqueaderos = col_double(),
##   ..   banios = col_double(),
##   ..   habitaciones = col_double(),
##   ..   tipo = col_character(),
##   ..   barrio = col_character(),
##   ..   longitud = col_double(),
##   ..   latitud = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

2 Aálisis de los datos

head(vivienda)
## # A tibble: 6 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## 6  1724 Zona N… 01          5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
summary(vivienda)
##        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

Transformación y limpieza de datos

vivienda$parqueaderos[is.na(vivienda$parqueaderos)] <- 0
moda_piso <- Mode(vivienda$piso, na.rm = TRUE)
vivienda$piso[is.na(vivienda$piso)] <- moda_piso
vivienda <- na.omit(vivienda)
vivienda$tipo <- ifelse(vivienda$tipo=="Casa","CASA",ifelse(vivienda$tipo=="casa","CASA",vivienda$tipo))
vivienda$tipo <- ifelse(vivienda$tipo=="apto","APARTAMENTO",ifelse(vivienda$tipo=="Apartamento","APARTAMENTO",vivienda$tipo))
vivienda$barrio <- trimws(chartr("ÁÉÍÓÚ", "AEIOU", toupper(vivienda$barrio)))
vivienda$longitud <- ifelse(vivienda$longitud<=-90,vivienda$longitud/1000,vivienda$longitud)
vivienda$latitud <- ifelse(vivienda$latitud>=270,vivienda$latitud/1000,vivienda$latitud)
vivienda$estrato <- as.character(vivienda$estrato) 
vivienda$piso <- as.character(vivienda$piso) 
vivienda <- data.frame(vivienda)

2.1 Punto 1.1

Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).

vivienda1 <- dplyr::filter(vivienda, tipo=="CASA" & zona=="Zona Norte")
nrow(vivienda1)
## [1] 722
vivienda1 <- dplyr::filter(vivienda, tipo=="CASA" & zona=="Zona Norte" & banios>0 & habitaciones>0
                           & latitud>=3.4556 & longitud>=-76.5403)

library(DT)
## Warning: package 'DT' was built under R version 4.4.2
datatable(vivienda1, list(pageLength=3))
vivienda1.coord <- data.frame(
  lat = c(vivienda1$latitud),
  long = c(vivienda1$longitud)
)

# Crea mapa
map <- leaflet(vivienda1.coord) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    layerId = 1,
    popup = ~as.character(lat)
  ) %>%
  addRectangles(
    lng1=-76.5403, lat1=3.4556,
    lng2=max(vivienda1$longitud), lat2=max(vivienda1$latitud),
    fillColor = "transparent",color="red"
  ) 

# Mostrar mapa
map

2.2 Punto 1.2

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

plot_ly(vivienda1, x = ~estrato, y = ~preciom, type = 'box') 
kruskal.test(preciom ~ estrato, data = vivienda1)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  preciom by estrato
## Kruskal-Wallis chi-squared = 278.2, df = 3, p-value < 2.2e-16
plot1 <- ggplot(vivienda1, aes(x = areaconst, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "Área Construida (m2)",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot1)
round(cor(vivienda1$areaconst, vivienda1$preciom),4)
## [1] 0.7419
plot3 <- ggplot(vivienda1, aes(x = banios, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# baños",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot3)
round(cor(vivienda1$banios, vivienda1$preciom),4)
## [1] 0.555
plot4 <- ggplot(vivienda1, aes(x = parqueaderos, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# parqueaderos",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot4)
round(cor(vivienda1$parqueaderos, vivienda1$preciom),4)
## [1] 0.4616
plot2 <- ggplot(vivienda1, aes(x = habitaciones, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# habitaciones",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot2)
round(cor(vivienda1$habitaciones, vivienda1$preciom),4)
## [1] 0.421

2.3 Punto 1.3

Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños)) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

ModeloRLM = lm(data=vivienda1, preciom~areaconst+habitaciones+banios+parqueaderos+estrato) 
summary(ModeloRLM)
## 
## Call:
## lm(formula = preciom ~ areaconst + habitaciones + banios + parqueaderos + 
##     estrato, data = vivienda1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -886.52  -63.40  -13.09   34.15 1105.27 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   33.37412   20.28759   1.645  0.10057    
## areaconst      0.74076    0.05195  14.258  < 2e-16 ***
## habitaciones   7.91285    5.13864   1.540  0.12421    
## banios        15.66939    6.49960   2.411  0.01627 *  
## parqueaderos  14.64259    4.68507   3.125  0.00188 ** 
## estrato4      85.73019   19.27868   4.447 1.07e-05 ***
## estrato5     126.34566   18.75614   6.736 4.37e-11 ***
## estrato6     267.78089   34.63721   7.731 5.66e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 144.2 on 514 degrees of freedom
## Multiple R-squared:  0.6571, Adjusted R-squared:  0.6524 
## F-statistic: 140.7 on 7 and 514 DF,  p-value: < 2.2e-16
coef(ModeloRLM)
##  (Intercept)    areaconst habitaciones       banios parqueaderos     estrato4 
##   33.3741159    0.7407591    7.9128491   15.6693901   14.6425928   85.7301878 
##     estrato5     estrato6 
##  126.3456615  267.7808927
print(summary(ModeloRLM)$r.squared)
## [1] 0.6571137

2.4 Punto 1.4

Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer)

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

Normalidad <- shapiro.test(ModeloRLM$residuals)
homocedasticidad <- lmtest::bptest(ModeloRLM)
autocorrelacion <- lmtest::dwtest(ModeloRLM)

resultados <- rbind(
  c("Normalidad", Normalidad$method, format(Normalidad$p.value, 
                                            scientific = TRUE)),
  c("Homocedasticidad", homocedasticidad$method, format(homocedasticidad$p.value, 
                                                        scientific = TRUE)),
  c("No Autocorrelación", autocorrelacion$method, format(autocorrelacion$p.value, 
                                                      scientific = TRUE)))
colnames(resultados) <- c("Prueba", "Método", "Valor p")
kable(resultados)
Prueba Método Valor p
Normalidad Shapiro-Wilk normality test 5.493929e-26
Homocedasticidad studentized Breusch-Pagan test 1.372001e-19
No Autocorrelación Durbin-Watson test 2.166482e-02

2.5 Punto 1.5

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

Vivienda_1 = data.frame( areaconst=c(200,200),
                         habitaciones=c(4,4),
                         banios=c(2,2),
                         parqueaderos=c(1,1), 
                         estrato=c("4","5")
)

knitr::kable(Vivienda_1)
areaconst habitaciones banios parqueaderos estrato
200 4 2 1 4
200 4 2 1 5
predict(ModeloRLM, newdata = Vivienda_1)
##        1        2 
## 344.8889 385.5044

2.6 Punto 1.6

Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre-aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

parametros_vivienda_1 <- which((vivienda1$estrato=="4" | vivienda1$estrato=="5") & vivienda1$areaconst>=200 & vivienda1$parqueaderos>=1 & vivienda1$banios>=2 & vivienda1$habitaciones>=4 & vivienda1$preciom<=350)
oferta <- vivienda1[parametros_vivienda_1,]
oferta_5 = oferta[order(oferta$areaconst, decreasing = TRUE), ]

knitr::kable(head(oferta_5, 5))
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
326 3101 Zona Norte 02 5 340 355 2 5 8 CASA SAN VICENTE -76.52377 3.46384
503 1943 Zona Norte 02 5 350 346 1 2 4 CASA VIPASA -76.51847 3.47503
75 4209 Zona Norte 02 5 350 300 3 5 6 CASA EL BOSQUE -76.53010 3.48577
500 1822 Zona Norte 02 4 340 295 2 2 4 CASA VIPASA -76.51777 3.48060
203 937 Zona Norte 02 4 350 280 2 3 4 CASA LA MERCED -76.50603 3.46643
oferta_5 <- head(oferta_5, 5)

oferta_5.coord <- data.frame(
  lat = c(oferta_5$latitud),
  long = c(oferta_5$longitud)
)

map_oferta <- leaflet(oferta_5.coord) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    layerId = 1,
    popup = ~as.character(lat)
  ) %>%
  addRectangles(
    lng1=-76.5403, lat1=3.4556,
    lng2=max(oferta_5$longitud), lat2=max(oferta_5$latitud),
    fillColor = "transparent",color="red"
  ) 

map_oferta

2.7 Punto 2.1

Realice un filtro a la base de datos e incluya solo las ofertas de : base2: apto, de la zona sur de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).

vivienda2 <- dplyr::filter(vivienda, tipo=="APARTAMENTO" & zona=="Zona Sur")
nrow(vivienda2)
## [1] 2787
vivienda2 <- dplyr::filter(vivienda, tipo=="APARTAMENTO" & zona=="Zona Sur" & banios>0 & habitaciones>0
                           & latitud>=3.4556 & longitud>=-76.5403)

library(DT)
datatable(vivienda2, list(pageLength=3))
vivienda2.coord <- data.frame(
  lat = c(vivienda2$latitud),
  long = c(vivienda2$longitud)
)

# Crea mapa
map <- leaflet(vivienda2.coord) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    layerId = 1,
    popup = ~as.character(lat)
  ) %>%
  addRectangles(
    lng1=-76.5403, lat1=3.4556,
    lng2=max(vivienda2$longitud), lat2=max(vivienda2$latitud),
    fillColor = "transparent",color="red"
  ) 

# Mostrar mapa
map

2.8 Punto 2.2

Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apto) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

plot_ly(vivienda2, x = ~estrato, y = ~preciom, type = 'box') 
kruskal.test(preciom ~ estrato, data = vivienda2)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  preciom by estrato
## Kruskal-Wallis chi-squared = 25.714, df = 3, p-value = 1.094e-05
plot1 <- ggplot(vivienda2, aes(x = areaconst, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "Área Construida (m2)",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot1)
round(cor(vivienda2$areaconst, vivienda2$preciom),4)
## [1] 0.7979
plot3 <- ggplot(vivienda2, aes(x = banios, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# baños",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot3)
round(cor(vivienda2$banios, vivienda2$preciom),4)
## [1] 0.675
plot4 <- ggplot(vivienda2, aes(x = parqueaderos, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# parqueaderos",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot4)
round(cor(vivienda2$parqueaderos, vivienda2$preciom),4)
## [1] 0.2624
plot2 <- ggplot(vivienda2, aes(x = habitaciones, y = preciom)) +
  geom_point(aes(color = estrato)) +
  labs(x = "# habitaciones",
       y = "Precio (millones)") +
  theme_minimal()

ggplotly(plot2)
round(cor(vivienda2$habitaciones, vivienda2$preciom),4)
## [1] 0.3233

2.9 Punto 2.3

Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños)) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

ModeloRLM = lm(data=vivienda2, preciom~areaconst+habitaciones+banios+parqueaderos+estrato) 
summary(ModeloRLM)
## 
## Call:
## lm(formula = preciom ~ areaconst + habitaciones + banios + parqueaderos + 
##     estrato, data = vivienda2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -266.301  -15.215   -1.521   24.410  219.318 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -39.002     61.021  -0.639    0.525    
## areaconst       1.928      0.365   5.284 1.79e-06 ***
## habitaciones    4.267     16.487   0.259    0.797    
## banios         20.547     16.882   1.217    0.228    
## parqueaderos    5.061      6.333   0.799    0.427    
## estrato4       39.562     45.219   0.875    0.385    
## estrato5       71.700     45.829   1.565    0.123    
## estrato6      238.301     56.149   4.244 7.60e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 60.62 on 61 degrees of freedom
## Multiple R-squared:  0.779,  Adjusted R-squared:  0.7537 
## F-statistic: 30.73 on 7 and 61 DF,  p-value: < 2.2e-16
coef(ModeloRLM)
##  (Intercept)    areaconst habitaciones       banios parqueaderos     estrato4 
##   -39.002047     1.928432     4.267389    20.547518     5.061100    39.561726 
##     estrato5     estrato6 
##    71.699735   238.301372
print(summary(ModeloRLM)$r.squared)
## [1] 0.779047

2.10 Punto 2.4

Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer)

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

Normalidad <- shapiro.test(ModeloRLM$residuals)
homocedasticidad <- lmtest::bptest(ModeloRLM)
autocorrelacion <- lmtest::dwtest(ModeloRLM)

resultados <- rbind(
  c("Normalidad", Normalidad$method, format(Normalidad$p.value, 
                                            scientific = TRUE)),
  c("Homocedasticidad", homocedasticidad$method, format(homocedasticidad$p.value, 
                                                        scientific = TRUE)),
  c("No Autocorrelación", autocorrelacion$method, format(autocorrelacion$p.value, 
                                                      scientific = TRUE)))
colnames(resultados) <- c("Prueba", "Método", "Valor p")
kable(resultados)
Prueba Método Valor p
Normalidad Shapiro-Wilk normality test 2.862657e-07
Homocedasticidad studentized Breusch-Pagan test 4.938793e-06
No Autocorrelación Durbin-Watson test 5.642057e-03

2.11 Punto 2.5

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

Vivienda_2 = data.frame( areaconst=c(300,300),
                         habitaciones=c(5,5),
                         banios=c(3,3),
                         parqueaderos=c(3,3), 
                         estrato=c("5","6")
)

knitr::kable(Vivienda_2)
areaconst habitaciones banios parqueaderos estrato
300 5 3 3 5
300 5 3 3 6
predict(ModeloRLM, newdata = Vivienda_2)
##        1        2 
## 709.3900 875.9916

2.12 Punto 2.6

Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre-aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

parametros_vivienda_2 <- which((vivienda2$estrato=="5" | vivienda2$estrato=="6") & vivienda2$areaconst>=300 & vivienda2$parqueaderos>=3 & vivienda2$banios>=3 & vivienda2$habitaciones>=5 & vivienda2$preciom<=850)
oferta <- vivienda2[parametros_vivienda_2,]
oferta_5 = oferta[order(oferta$areaconst, decreasing = TRUE), ]

knitr::kable(head(oferta_5, 5))
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
oferta_5 <- head(oferta_5, 5)

oferta_5.coord <- data.frame(
  lat = c(oferta_5$latitud),
  long = c(oferta_5$longitud)
)

map_oferta <- leaflet(oferta_5.coord) %>%
  addTiles() %>%
  addMarkers(
    lng = ~long,
    lat = ~lat,
    layerId = 1,
    popup = ~as.character(lat)
  ) %>%
  addRectangles(
    lng1=-76.5403, lat1=3.4556,
    lng2=max(oferta_5$longitud), lat2=max(oferta_5$latitud),
    fillColor = "transparent",color="red"
  ) 
## Warning in max(oferta_5$longitud): ningun argumento finito para max; retornando
## -Inf
## Warning in max(oferta_5$latitud): ningun argumento finito para max; retornando
## -Inf
map_oferta