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) .
## Loading required package: boot
##
## Attaching package: 'boot'
## The following object is masked from 'package:psych':
##
## logit
## Loading required package: broom
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: knitr
## Loading required package: summarytools
##
## Attaching package: 'summarytools'
## The following object is masked from 'package:lessR':
##
## label
## The following object is masked from 'package:tibble':
##
## view
“En el dataframe data01, se encuentran datos en formato de texto que incluyen palabras en mayúsculas y abreviaciones. Para evitar inconsistencias en los resultados debidas a la variación en la forma de un mismo dato, se ha decidido convertir todos los textos a minúsculas. Por ejemplo: ‘Apartamento’, ‘APARTAMENTO’ y ‘apto.’ serán unificados bajo una misma forma.”
base1 <- mutate_if(vivienda, is.character, tolower)
base1$tipo[base1$tipo == "apto"] <- "apartamento"
unique(base1$tipo)## [1] "casa" "apartamento" NA
## [1] 3 4 5 6 NA
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?).
## [conflicted] Will prefer mice::filter over any other package.
base1 <- filter(base1, tipo == "casa",zona == "zona norte")
base1 <- base1 [, c(2,4, 5, 6, 7,8,9,10,12,13)]
head(base1,3)## [1] "El numero casas en la zona norte de la ciudad de Cali es de: 722"
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.
| Name | base3 |
| Number of rows | 722 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| numeric | 5 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| zona | 0 | 1 | 10 | 10 | 0 | 1 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| estrato | 0 | 1 | 4.20 | 0.98 | 3 | 3.00 | 4 | 5.00 | 6 | ▇▅▁▇▂ |
| preciom | 0 | 1 | 445.91 | 268.36 | 89 | 261.25 | 390 | 550.00 | 1940 | ▇▃▁▁▁ |
| areaconst | 0 | 1 | 264.85 | 167.17 | 30 | 140.00 | 240 | 336.75 | 1440 | ▇▃▁▁▁ |
| banios | 0 | 1 | 3.56 | 1.52 | 0 | 2.00 | 3 | 4.00 | 10 | ▅▇▃▁▁ |
| habitaciones | 0 | 1 | 4.51 | 1.83 | 0 | 3.00 | 4 | 5.00 | 10 | ▁▇▅▂▁ |
Se indica que algunas casas carecen de baños o habitaciones, lo cual es poco común. Por esta razón, se ha decidido excluirlas del análisis.
## zona estrato preciom areaconst
## Length:722 Min. :3.000 Min. : 89.0 Min. : 30.0
## Class :character 1st Qu.:3.000 1st Qu.: 261.2 1st Qu.: 140.0
## Mode :character Median :4.000 Median : 390.0 Median : 240.0
## Mean :4.202 Mean : 445.9 Mean : 264.9
## 3rd Qu.:5.000 3rd Qu.: 550.0 3rd Qu.: 336.8
## Max. :6.000 Max. :1940.0 Max. :1440.0
## banios habitaciones
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 2.000 1st Qu.: 3.000
## Median : 3.000 Median : 4.000
## Mean : 3.555 Mean : 4.507
## 3rd Qu.: 4.000 3rd Qu.: 5.000
## Max. :10.000 Max. :10.000
Se observa que el precio de las casas en la zona norte de la ciudad de Cali varía entre 89 millones y 1.940 millones de pesos. Además, el precio promedio de la mitad de las casas es de 390 millones de pesos. En cuanto al área construida, el promedio es de 240 metros cuadrados, aunque algunas casas presentan un área mínima de 30 metros cuadrados.
correlacion <- base3 [, c(2,3,4, 5, 6)]
chart.Correlation(correlacion, hist = TRUE, method = "pearson")Se observa que el precio de las casas tiene una gran relación con el área construida, lo que indica que a mayor área, mayor será el precio. Asimismo, se observa una relación positiva entre el estrato y el precio de la casa. Sin embargo, al examinar la relación entre el precio y el número de habitaciones, así como entre el precio y el número de baños, se encuentra una relación débil.
library(plotly)
ggplotly(ggplot(base3,
aes(y=preciom, x=areaconst)) + geom_point() + geom_smooth() + theme_bw())## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Al analizar la relación entre el precio de las casas y el área construida, se observa inicialmente una relación directa y lineal entre ambas variables, lo cual también es respaldado por la matriz de correlación. Sin embargo, a medida que el tamaño de la vivienda aumenta, algunas casas muestran precios considerablemente más bajos de lo esperado. Por ejemplo, una casa con un área de 1.440 metros cuadrados tiene un precio de solo 370 millones de pesos, lo que podría indicar un valor incongruente o que la propiedad se encuentra en un estrato de menor valor. Esto no sería del todo sorprendente, ya que una casa con un área de 200 metros cuadrados no tiene el mismo precio en el estrato 3 que en el estrato 6.
Antes de comenzar, se decidió crear la variable “estrato2” como una variable de tipo texto, permitiendo así su tratamiento como categórica en la visualización de los datos. La variable original se llama “estrato”.
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).
library(fastDummies)
base4 <- dummy_cols(base3,select_columns = "estrato")
# base 4 contiene 9 variables que incluyen estrato_3,estrato_4,estrato_5,estrato_6base_mlineal <- base4[,c(2,3,4,5,6,7,8,9,10)]
base_mlineal <- na.omit(base_mlineal)
glimpse(base_mlineal)## Rows: 722
## Columns: 9
## $ estrato <dbl> 5, 5, 6, 4, 5, 4, 5, 5, 3, 3, 3, 3, 5, 3, 4, 4, 5, 5, 4, …
## $ preciom <dbl> 320, 780, 750, 625, 750, 600, 420, 490, 230, 190, 180, 50…
## $ areaconst <dbl> 150, 380, 445, 355, 237, 160, 200, 118, 160, 435, 120, 21…
## $ banios <dbl> 4, 3, 7, 5, 6, 4, 4, 4, 2, 0, 3, 6, 5, 5, 3, 3, 4, 5, 5, …
## $ habitaciones <dbl> 6, 3, 6, 5, 6, 5, 5, 4, 3, 0, 3, 6, 4, 8, 4, 3, 4, 6, 4, …
## $ estrato_3 <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, …
## $ estrato_4 <int> 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, …
## $ estrato_5 <int> 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, …
## $ estrato_6 <int> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
mod_casas <- lm(preciom ~ areaconst + estrato_4 + estrato_5 + estrato_6 + habitaciones + banios, data = base_mlineal)
summary(mod_casas)##
## Call:
## lm(formula = preciom ~ areaconst + estrato_4 + estrato_5 + estrato_6 +
## habitaciones + banios, data = base_mlineal)
##
## Residuals:
## Min 1Q Median 3Q Max
## -972.05 -73.02 -15.60 45.95 1064.25
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.27964 17.60512 1.720 0.0859 .
## areaconst 0.82657 0.04289 19.274 < 0.0000000000000002 ***
## estrato_4 85.86991 17.27886 4.970 0.00000084 ***
## estrato_5 139.49127 16.13506 8.645 < 0.0000000000000002 ***
## estrato_6 330.33116 26.46332 12.483 < 0.0000000000000002 ***
## habitaciones 1.81876 4.10123 0.443 0.6576
## banios 25.83183 5.34112 4.836 0.00000162 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 156.9 on 715 degrees of freedom
## Multiple R-squared: 0.6611, Adjusted R-squared: 0.6583
## F-statistic: 232.5 on 6 and 715 DF, p-value: < 0.00000000000000022
El intercepto del modelo indica que una vivienda en la zona norte tiene un valor autónomo de 30 millones de pesos. El parámetro asociado al área muestra que un metro cuadrado adicional incrementa el valor de la vivienda en 826.570 pesos, lo cual es teóricamente correcto, ya que a mayor área, mayor debería ser el precio, y este parámetro es estadísticamente significativo. Respecto al estrato, la variable correspondiente al estrato 3 no se incluyó en el análisis para evitar problemas de multicolinealidad perfecta. Los parámetros para los estratos 4, 5 y 6 son estadísticamente significativos, indicando que, manteniendo todo lo demás constante, pertenecer al estrato 4 agrega 85 millones al precio, al estrato 5 agrega 139 millones, y al estrato 6 agrega 330 millones. En cuanto al número de habitaciones, el parámetro, aunque teóricamente correcto al ser positivo, no es estadísticamente significativo, sugiriendo que una habitación adicional incrementa el precio en 1 millón de pesos, pero no de manera relevante ni concluyente. Por otro lado, el parámetro para el número de baños es estadísticamente significativo al 95% de confianza, indicando que un baño adicional aumenta el valor de la vivienda en 25 millones de pesos. El R² ajustado del modelo es del 66%, lo que sugiere que los regresores explican el 66% de las variaciones en el precio de la vivienda. Sin embargo, este nivel de ajuste puede no ser completamente satisfactorio, lo que podría generar incertidumbre al valorar una vivienda o al elegir la mejor opción. Para mejorar el ajuste del modelo, se podría considerar incorporar nuevos determinantes del precio, como accesibilidad, servicios públicos, cercanía a dotacionales y transporte, o explorar una forma funcional diferente, ya que el modelo podría no ser lineal.
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).
El gráfico “Residuals vs Fitted” muestra que los residuos oscilan alrededor de cero, lo cual es un indicio de linealidad en los parámetros.
##
## Shapiro-Wilk normality test
##
## data: mod_casas$residuals
## W = 0.83094, p-value < 0.00000000000000022
Los residuos no siguen una distribucion normal
##
## studentized Breusch-Pagan test
##
## data: mod_casas
## BP = 136.91, df = 6, p-value < 0.00000000000000022
Los resultados de la prueba de Breusch-Pagan generan un p-valor menor a 5%, es decir, los residuos no tienen varianza constante, o no son homocedásticos.
La relación lineal entre el número de baños y el número de habitaciones es esperada, ya que es lógico suponer que, a mayor número de habitaciones, una casa debería tener más baños. Para evaluar si esta relación genera un nivel de multicolinealidad que pueda afectar el modelo, se analiza el factor de inflación de la varianza (VIF).
## Loading required package: carData
## areaconst estrato_4 estrato_5 estrato_6 habitaciones banios
## 1.505726 1.517649 1.790770 1.445872 1.646112 1.940813
Dado que no se presentan valores superiores a 5, se puede concluir que la posible relación lineal observada en algunas variables no parece generar problemas significativos de multicolinealidad.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
## [1] "primera solicitud: "
## # A tibble: 1 × 10
## zona estrato preciom areaconst banios habitaciones estrato_3 estrato_4
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <int> <int>
## 1 zona norte 5 320 150 4 6 0 0
## # ℹ 2 more variables: estrato_5 <int>, estrato_6 <int>
prediccion_precio <- predict(mod_casas, newdata = primera_solicitud)
print(paste("El precio predicho para la primera solicitud es:", prediccion_precio, "millones."))## [1] "El precio predicho para la primera solicitud es: 407.99611774808 millones."
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.
# Selecciona la primera solicitud del dataset base4
primera_solicitud <- base4[1, ]
# Asegúrate de que la primera solicitud contiene las variables necesarias
primera_solicitud <- primera_solicitud[, c("areaconst", "estrato_4", "estrato_5", "estrato_6", "habitaciones", "banios")]
# Predice el precio de la vivienda utilizando el modelo entrenado
prediccion_precio <- predict(mod_casas, newdata = primera_solicitud)
# Imprime el precio predicho
print(paste("El precio predicho para la primera solicitud es:", round(prediccion_precio, 2), "millones."))## [1] "El precio predicho para la primera solicitud es: 408 millones."
ofertas_potenciales <- base1[base1$preciom <= 350, ]
ofertas_potenciales <- ofertas_potenciales[order(abs(ofertas_potenciales$preciom - prediccion_precio)), ]
ofertas_seleccionadas <- head(ofertas_potenciales, 5)
print("Ofertas potenciales seleccionadas:")## [1] "Ofertas potenciales seleccionadas:"
## # A tibble: 5 × 10
## zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 zona norte 4 350 118 NA 3 3 casa
## 2 zona norte 4 350 98 2 3 4 casa
## 3 zona norte 5 350 200 3 3 4 casa
## 4 zona norte 5 350 300 3 5 6 casa
## 5 zona norte 5 350 240 2 3 6 casa
## # ℹ 2 more variables: longitud <dbl>, latitud <dbl>
library(leaflet)
mapa <- leaflet() %>%
addTiles()
for (i in 1:nrow(ofertas_seleccionadas)) {
mapa <- mapa %>%
addMarkers(
lat = ofertas_seleccionadas$latitud[i],
lng = ofertas_seleccionadas$longitud[i],
popup = paste("Precio:", round(ofertas_seleccionadas$preciom[i] / 1e6, 2), "millones",
"| Habitaciones:", ofertas_seleccionadas$habitaciones[i],
"| Baños:", ofertas_seleccionadas$banios[i])
)
}
mapaRealice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.
| Name | base3 |
| Number of rows | 722 |
| Number of columns | 6 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| numeric | 5 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| zona | 0 | 1 | 10 | 10 | 0 | 1 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| estrato | 0 | 1 | 4.20 | 0.98 | 3 | 3.00 | 4 | 5.00 | 6 | ▇▅▁▇▂ |
| preciom | 0 | 1 | 445.91 | 268.36 | 89 | 261.25 | 390 | 550.00 | 1940 | ▇▃▁▁▁ |
| areaconst | 0 | 1 | 264.85 | 167.17 | 30 | 140.00 | 240 | 336.75 | 1440 | ▇▃▁▁▁ |
| banios | 0 | 1 | 3.56 | 1.52 | 0 | 2.00 | 3 | 4.00 | 10 | ▅▇▃▁▁ |
| habitaciones | 0 | 1 | 4.51 | 1.83 | 0 | 3.00 | 4 | 5.00 | 10 | ▁▇▅▂▁ |
## zona estrato preciom areaconst
## Length:722 Min. :3.000 Min. : 89.0 Min. : 30.0
## Class :character 1st Qu.:3.000 1st Qu.: 261.2 1st Qu.: 140.0
## Mode :character Median :4.000 Median : 390.0 Median : 240.0
## Mean :4.202 Mean : 445.9 Mean : 264.9
## 3rd Qu.:5.000 3rd Qu.: 550.0 3rd Qu.: 336.8
## Max. :6.000 Max. :1940.0 Max. :1440.0
## banios habitaciones
## Min. : 0.000 Min. : 0.000
## 1st Qu.: 2.000 1st Qu.: 3.000
## Median : 3.000 Median : 4.000
## Mean : 3.555 Mean : 4.507
## 3rd Qu.: 4.000 3rd Qu.: 5.000
## Max. :10.000 Max. :10.000
# Correlación
correlacion <- base3[, c(2, 3, 4, 5, 6)]
chart.Correlation(correlacion, hist = TRUE, method = "pearson")# Gráficos interactivos
library(plotly)
ggplotly(ggplot(base3, aes(y = preciom, x = areaconst)) + geom_point() + geom_smooth() + theme_bw())## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
base6 <- base3
estrato2 <- as.character(base3$estrato)
base6 <- cbind(base6, estrato2)
p_estrato <- ggplot(base6, aes(x = estrato2, y = preciom, fill = estrato2)) +
geom_boxplot() +
labs(x = "Estrato", y = "Precio en Millones", title = "Relacion estrato - precio") +
theme(panel.background = element_blank())
plotly::ggplotly(p_estrato)library(fastDummies)
base4 <- dummy_cols(base3, select_columns = "estrato")
base_mlineal <- base4[, c(2, 3, 4, 5, 6, 7, 8, 9, 10)]
base_mlineal <- na.omit(base_mlineal)
glimpse(base_mlineal)## Rows: 722
## Columns: 9
## $ estrato <dbl> 5, 5, 6, 4, 5, 4, 5, 5, 3, 3, 3, 3, 5, 3, 4, 4, 5, 5, 4, …
## $ preciom <dbl> 320, 780, 750, 625, 750, 600, 420, 490, 230, 190, 180, 50…
## $ areaconst <dbl> 150, 380, 445, 355, 237, 160, 200, 118, 160, 435, 120, 21…
## $ banios <dbl> 4, 3, 7, 5, 6, 4, 4, 4, 2, 0, 3, 6, 5, 5, 3, 3, 4, 5, 5, …
## $ habitaciones <dbl> 6, 3, 6, 5, 6, 5, 5, 4, 3, 0, 3, 6, 4, 8, 4, 3, 4, 6, 4, …
## $ estrato_3 <int> 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, …
## $ estrato_4 <int> 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, …
## $ estrato_5 <int> 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, …
## $ estrato_6 <int> 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
mod_casas <- lm(preciom ~ areaconst + estrato_4 + estrato_5 + estrato_6 + habitaciones + banios, data = base_mlineal)
summary(mod_casas)##
## Call:
## lm(formula = preciom ~ areaconst + estrato_4 + estrato_5 + estrato_6 +
## habitaciones + banios, data = base_mlineal)
##
## Residuals:
## Min 1Q Median 3Q Max
## -972.05 -73.02 -15.60 45.95 1064.25
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.27964 17.60512 1.720 0.0859 .
## areaconst 0.82657 0.04289 19.274 < 0.0000000000000002 ***
## estrato_4 85.86991 17.27886 4.970 0.00000084 ***
## estrato_5 139.49127 16.13506 8.645 < 0.0000000000000002 ***
## estrato_6 330.33116 26.46332 12.483 < 0.0000000000000002 ***
## habitaciones 1.81876 4.10123 0.443 0.6576
## banios 25.83183 5.34112 4.836 0.00000162 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 156.9 on 715 degrees of freedom
## Multiple R-squared: 0.6611, Adjusted R-squared: 0.6583
## F-statistic: 232.5 on 6 and 715 DF, p-value: < 0.00000000000000022
##
## Shapiro-Wilk normality test
##
## data: mod_casas$residuals
## W = 0.83094, p-value < 0.00000000000000022
##
## studentized Breusch-Pagan test
##
## data: mod_casas
## BP = 136.91, df = 6, p-value < 0.00000000000000022
# Multicolinealidad
library(corrplot)
pairs(base3[, c("estrato", "areaconst", "banios", "habitaciones")])## areaconst estrato_4 estrato_5 estrato_6 habitaciones banios
## 1.505726 1.517649 1.790770 1.445872 1.646112 1.940813
segunda_solicitud <- base4[2, ]
segunda_solicitud <- segunda_solicitud[, c("areaconst", "estrato_4", "estrato_5", "estrato_6", "habitaciones", "banios")]
prediccion_precio_segunda <- predict(mod_casas, newdata = segunda_solicitud)
print(paste("El precio predicho para la segunda solicitud es:", round(prediccion_precio_segunda, 2), "millones."))## [1] "El precio predicho para la segunda solicitud es: 566.82 millones."
ofertas_potenciales_segunda <- base1[base1$preciom <= 850, ]
ofertas_potenciales_segunda <- ofertas_potenciales_segunda[order(abs(ofertas_potenciales_segunda$preciom - prediccion_precio_segunda)), ]
ofertas_seleccionadas_segunda <- head(ofertas_potenciales_segunda, 5)
print("Ofertas potenciales seleccionadas para la segunda solicitud:")## [1] "Ofertas potenciales seleccionadas para la segunda solicitud:"
## # A tibble: 5 × 10
## zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 zona norte 5 570 250 NA 3 5 casa
## 2 zona norte 4 570 270 2 4 4 casa
## 3 zona norte 5 570 536 2 6 6 casa
## 4 zona norte 5 570 371 4 6 4 casa
## 5 zona norte 5 570 412 1 3 5 casa
## # ℹ 2 more variables: longitud <dbl>, latitud <dbl>
library(leaflet)
mapa_segunda <- leaflet() %>%
addTiles()
for (i in 1:nrow(ofertas_seleccionadas_segunda)) {
mapa_segunda <- mapa_segunda %>%
addMarkers(
lat = ofertas_seleccionadas_segunda$latitud[i],
lng = ofertas_seleccionadas_segunda$longitud[i],
popup = paste("Precio:", round(ofertas_seleccionadas_segunda$preciom[i] / 1e6, 2), "millones",
"| Habitaciones:", ofertas_seleccionadas_segunda$habitaciones[i],
"| Baños:", ofertas_seleccionadas_segunda$banios[i])
)
}
mapa_segunda