Introducción

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.

Problema

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:

Caracteristicas Vivienda 1 Vivienda 2
Tipo Casa Apartamento
Área Contruida 200 300
parqueaderos 1 3
Baños 2 3
Habitaciones 4 5
Estrato 4 o 5 5 o 6
Zona Norte Sur
Crédito Prearobado 350 millones 850 millones

Limpieza de Datos

viviendaLD=vivienda

colSums(is.na(viviendaLD))
##           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

Se visualiza que las variables piso y parqueadero son las que más tienen N/A entre las dos suman 3243 por lo cual se decide en ambos casos reemplazar por el promedio.

viviendaLD$piso= as.integer(viviendaLD$piso)

viviendaLD$piso= round(na.aggregate(viviendaLD$piso),digits = 0) 

viviendaLD$parqueaderos= round(na.aggregate(viviendaLD$parqueaderos),digits = 0) 

colSums(is.na(viviendaLD))
##           id         zona         piso      estrato      preciom    areaconst 
##            3            3            0            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##            0            3            3            3            3            3 
##      latitud 
##            3

En el caso de las otras variables se eliminarán las filas correspondientes a los N/A, debido a que no es significante el volumen de datos.

viviendaLD=na.omit(viviendaLD)
colSums(is.na(viviendaLD))
##           id         zona         piso      estrato      preciom    areaconst 
##            0            0            0            0            0            0 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##            0            0            0            0            0            0 
##      latitud 
##            0

Primera parte

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

vivienda_Filtrada= viviendaLD[viviendaLD$tipo=="Casa" & viviendaLD$zona=="Zona Norte", ]
head(vivienda_Filtrada,3)
## # A tibble: 3 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1209 Zona N…     2       5     320       150            2      4            6
## 2  1592 Zona N…     2       5     780       380            2      3            3
## 3  4057 Zona N…     2       6     750       445            2      7            6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
unique(vivienda_Filtrada$tipo)
## [1] "Casa"
unique(vivienda_Filtrada$zona)
## [1] "Zona Norte"
oferta <- data.frame(
  lat = vivienda_Filtrada$latitud,
  long = vivienda_Filtrada$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = c(~as.character(lat),~as.character(long) ), 
    color = "red", radius = 2
  )

map # Muestra el mapa

A partir del mapa anterior se evidencian puntos que no pertenecen a la zona norte, esto puede deberse a mala gestión del sistema de información al momento de recolección, por ejemplo problemas en el GPS.

ViviendaCasaNorte <- vivienda_Filtrada[vivienda_Filtrada$longitud >= -76.535507,]
ViviendaCasaNorte <- ViviendaCasaNorte[ViviendaCasaNorte$latitud >= 3.44846,]

oferta <- data.frame(
  lat = ViviendaCasaNorte$latitud,
 long = ViviendaCasaNorte$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = c(~as.character(lat),~as.character(long) ), 
    color = "red", radius = 2
  )

map 

Analisis Exploratorio

library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
options(warn = -1)

corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$areaconst),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaCasaNorte, x = ~preciom, y = ~areaconst,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$habitaciones),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaCasaNorte, x = ~preciom, y = ~habitaciones,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$estrato),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaCasaNorte, x = ~preciom, y = ~estrato,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaCasaNorte$preciom,ViviendaCasaNorte$banios),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaCasaNorte, x = ~preciom, y = ~banios,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig

En el anaisis de las graficas de coeficiente de correlación se evidencia que ninguna de las variables posee una correlación fuerte con el precio de la vivienda, la mayor correlación que es 0.72 se encuentra entre el precio y el área y la menor correspondiente a 0.39 la tiene el precio con las habitaciones, permitiendo ver que el número de habitaciones no influye directamente en el precio de la vivienda.

Modelo de Regresión Lineal Multiple

ModeloR=lm(preciom ~ areaconst+estrato+parqueaderos+habitaciones+banios,data=ViviendaCasaNorte)
summary(ModeloR)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + habitaciones + 
##     banios, data = ViviendaCasaNorte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -865.23  -65.92  -16.34   38.36 1094.39 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -242.87089   34.35550  -7.069 4.65e-12 ***
## areaconst       0.73212    0.05136  14.256  < 2e-16 ***
## estrato        76.57457    8.33892   9.183  < 2e-16 ***
## parqueaderos   21.81034    5.91583   3.687 0.000249 ***
## habitaciones    9.07394    4.84668   1.872 0.061699 .  
## banios         20.39358    6.23830   3.269 0.001145 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 152.2 on 561 degrees of freedom
## Multiple R-squared:  0.6334, Adjusted R-squared:  0.6301 
## F-statistic: 193.8 on 5 and 561 DF,  p-value: < 2.2e-16

cuando todas las variables son cero el valor de intercepto corresponde a -242.87089

el p value debe estar por encima del 0.05, si es mayor acepto la hipotesis nula, en este caso como es menor se acepta la hipotesis alternativa.

Validacióin de los Supuestos

  1. Supuesto de Normalidad
options(scipen = 999)

normalidad <- ModeloR$residuals
shapiro.test(normalidad)
## 
##  Shapiro-Wilk normality test
## 
## data:  normalidad
## W = 0.77685, p-value < 0.00000000000000022
  1. Supuesto de Varianza Constante
gqtest(ModeloR)
## 
##  Goldfeld-Quandt test
## 
## data:  ModeloR
## GQ = 1.7836, df1 = 278, df2 = 277, p-value = 0.0000008698
## alternative hypothesis: variance increases from segment 1 to 2

este valor sugiere que no hay evidencia de heterocedasticidad.

  1. Supuesto de Independencia de errores
options(scipen = 999)
dwtest(ModeloR)
## 
##  Durbin-Watson test
## 
## data:  ModeloR
## DW = 1.6439, p-value = 0.000008704
## alternative hypothesis: true autocorrelation is greater than 0

No hay evidencias significativas de autocorrelacion en los residuos del modelo

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

vif(ModeloR)
##    areaconst      estrato parqueaderos habitaciones       banios 
##     1.663922     1.500626     1.126059     1.796337     2.052473

Debido a que los valores no son cercanos a 5 no existe multicolinealidad, por lo cual no es necesario eliminar ninguna variable.

Predicción del Precio de la vivienda tipo A



predict(ModeloR,
         newdata = data.frame(areaconst = 200, 
                               estrato = c(4, 5), 
                               parqueaderos = 1, 
                               habitaciones = 4,
                               banios =2
                               )
        ,interval = "confidence" )
##        fit      lwr      upr
## 1 308.7444 287.4161 330.0726
## 2 385.3189 355.4448 415.1930

el precio de las viviendas varian entre 308 millones de pesos y 385 millones de pesos en promedio, con un minimo de 287 millones y un maximo de 415 millones, sin embargo solo tendremos en cuenta las casas con las caracteristicas solicitadas por la empresa.

OfertasCasas <- subset(ViviendaCasaNorte,estrato >= 4 & areaconst >= 200  & preciom <=350 & parqueaderos >=1 & banios>=2 & habitaciones >= 4)

OfertasCasas <- as.data.frame(OfertasCasas)

knitr::kable(OfertasCasas, format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
4210 Zona Norte 1 5 350 200.0 3 3 4 Casa el bosque -76.53010 3.48503
4267 Zona Norte 1 5 335 202.0 1 4 5 Casa el bosque -76.53044 3.48399
4800 Zona Norte 1 5 340 250.0 2 4 4 Casa el bosque -76.53300 3.46500
4209 Zona Norte 2 5 350 300.0 3 5 6 Casa el bosque -76.53010 3.48577
4422 Zona Norte 2 5 350 240.0 2 3 6 Casa el bosque -76.53136 3.48635
4458 Zona Norte 2 4 315 270.0 2 4 4 Casa el bosque -76.53176 3.48780
4483 Zona Norte 2 5 342 250.0 1 4 6 Casa el bosque -76.53197 3.48752
852 Zona Norte 4 5 340 208.0 2 6 4 Casa el bosque -76.50400 3.46300
1009 Zona Norte 4 5 250 243.0 1 4 5 Casa el bosque -76.50755 3.47838
1270 Zona Norte 4 5 350 203.0 2 2 5 Casa el bosque -76.51448 3.48531
4727 Zona Norte 2 4 296 232.0 2 6 4 Casa granada -76.53263 3.46090
3453 Zona Norte 4 5 340 240.0 2 5 6 Casa la campiña -76.52640 3.48211
819 Zona Norte 2 5 350 264.0 2 3 4 Casa la flora -76.50330 3.46412
1343 Zona Norte 2 5 320 200.0 2 4 4 Casa la flora -76.51524 3.48893
3053 Zona Norte 2 5 320 230.0 2 4 4 Casa la flora -76.52353 3.48352
937 Zona Norte 2 4 350 280.0 2 3 4 Casa la merced -76.50603 3.46643
952 Zona Norte 2 4 330 275.0 2 3 5 Casa la merced -76.50647 3.47516
1020 Zona Norte 2 4 230 250.0 2 3 5 Casa la merced -76.50799 3.47424
1108 Zona Norte 2 4 330 260.0 1 3 4 Casa la merced -76.51060 3.48108
766 Zona Norte 4 5 321 249.0 1 5 5 Casa la merced -76.50291 3.46757
1144 Zona Norte 4 4 320 200.0 2 4 4 Casa la merced -76.51156 3.48029
1163 Zona Norte 4 5 350 216.0 2 2 4 Casa la merced -76.51218 3.48181
3043 Zona Norte 4 5 330 275.0 2 3 5 Casa la merced -76.52350 3.48329
4488 Zona Norte 1 4 350 265.0 2 4 5 Casa prados del norte -76.53198 3.45165
1849 Zona Norte 4 5 330 246.0 2 4 4 Casa prados del norte -76.51800 3.47000
5031 Zona Norte 3 4 350 350.0 1 4 5 Casa salomia -76.53464 3.44987
3101 Zona Norte 2 5 340 355.0 2 5 8 Casa san vicente -76.52377 3.46384
1151 Zona Norte 4 5 320 210.0 2 3 5 Casa urbanización la merced -76.51200 3.47600
1887 Zona Norte 1 5 340 203.0 2 3 4 Casa vipasa -76.51803 3.48257
2544 Zona Norte 1 4 340 264.5 2 4 4 Casa vipasa -76.52096 3.47665
1842 Zona Norte 2 5 350 240.0 2 3 4 Casa vipasa -76.51800 3.48100
1914 Zona Norte 2 5 300 205.0 2 5 6 Casa vipasa -76.51832 3.48138
1822 Zona Norte 4 4 340 295.0 2 2 4 Casa vipasa -76.51777 3.48060
1943 Zona Norte 4 5 350 346.0 1 2 4 Casa vipasa -76.51847 3.47503

La tabla nos arroja como resultado 34 viviendas que cumplen con los requisitos, sin embargo las casas que tienen más área, en estrato 5 con un costo menor son solo 23.

oferta <- data.frame(
  lat = OfertasCasas$latitud,
 long = OfertasCasas$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = c(~as.character(lat),~as.character(long) ), 
    color = "red", radius = 2
  )

map 

Mediante la gráfica se evidencia las viviendas geolocalizadas que cumplen con los requisitos solicitados por la empresa, mediante los cuales podemos sugerir debido a la relación área y valor la vivienda 4209 que tiene un área de 300metros cuadrados y un valor de 350 millones de pesos, la vivienda 5031 con un área de 350 metros y un valor de 350 millones de pesos, la vivienda 3101 con un área de 355 metros cuadrados y un valor de 340 millones de pesos y por último la vivienda 1943 con un área en metros cuadrados de 346 y un valor en millones de pesos de 350.

Primera parte (segunda busqueda)

Realice un filtro a la base de datos e incluya solo las ofertas de : base2: Apartamentos, 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?).

vivienda_Filtrada1= viviendaLD[viviendaLD$tipo=="Apartamento" & viviendaLD$zona=="Zona Sur", ]
head(vivienda_Filtrada1,3)
## # A tibble: 3 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  5098 Zona S…     5       4     290        96            1      2            3
## 2   698 Zona S…     2       3      78        40            1      1            2
## 3  8199 Zona S…     4       6     875       194            2      5            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
unique(vivienda_Filtrada1$tipo)
## [1] "Apartamento"
unique(vivienda_Filtrada1$zona)
## [1] "Zona Sur"
oferta1 <- data.frame(
  lat1 = vivienda_Filtrada1$latitud,
  long1 = vivienda_Filtrada1$longitud
)

# Crea un mapa
map <- leaflet(oferta1) %>%
  addTiles() %>%
  addCircles(
    lng = ~long1,
    lat = ~lat1,
    popup = c(~as.character(lat1),~as.character(long1) ), 
    color = "red", radius = 2
  )

map # Muestra el mapa

A partir del mapa anterior se evidencian puntos que no pertenecen a la zona sur, esto puede deberse a mala gestión del sistema de información al momento de recolección, por ejemplo problemas en el GPS, por lo cual se realizará un filtro donde se eliminara los puntos que no pertenecen a la zona sur.

ViviendaAptoSur <- vivienda_Filtrada1[vivienda_Filtrada1$longitud <= -76.509,]
ViviendaAptoSur <- ViviendaAptoSur[ViviendaAptoSur$longitud >= -76.551,]
ViviendaAptoSur <- ViviendaAptoSur[ViviendaAptoSur$latitud <= 3.41396,]

oferta1 <- data.frame(
  lat1 = ViviendaAptoSur$latitud,
 long1 = ViviendaAptoSur$longitud
)

# Crea un mapa
map <- leaflet(oferta1) %>%
  addTiles() %>%
  addCircles(
    lng = ~long1,
    lat = ~lat1,
    popup = c(~as.character(lat1),~as.character(long1) ), 
    color = "red", radius = 2
  )

map 

Analisis Exploratorio

library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$areaconst),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaAptoSur, x = ~preciom, y = ~areaconst,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$habitaciones),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaAptoSur, x = ~preciom, y = ~habitaciones,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$estrato),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaAptoSur, x = ~preciom, y = ~estrato,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig
library(plotly)

options(warn = -1)

corre <- round(cor(ViviendaAptoSur$preciom,ViviendaAptoSur$banios),2)
corre <- as.character(corre)

fig <- plot_ly(
  ViviendaAptoSur, x = ~preciom, y = ~banios,type = "scatter",mode = "markers",
  color = ~preciom, size = ~preciom
)
fig <- fig %>% layout(title = paste0('Cor: ',corre))

fig

En el analisis de correlación se determina que solo la relación entre el precio y el área tiene un indice alto de 0.84, mientras en los otros casos la relacion es mediana o baja, como por ejemplo para la relación precio y número de habitaciones en donde el indice es de tan solo 0,34, en la relacion de precio y estrato tenemos un indice de o,67 y por último la relación de precio y número de baños tiene un indice de 0,74, lo que nos sugiere la importancia del área para valorizar una vivienda que para este caso son apartamentos.

Modelo de Regresión Lineal Multiple

ModeloR=lm(preciom ~ areaconst+estrato+parqueaderos+habitaciones+banios,data=ViviendaAptoSur)
summary(ModeloR)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + parqueaderos + habitaciones + 
##     banios, data = ViviendaAptoSur)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1143.17   -50.85    -0.30    41.68   927.72 
## 
## Coefficients:
##                Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  -333.98650   16.17551 -20.648 < 0.0000000000000002 ***
## areaconst       1.34457    0.05642  23.831 < 0.0000000000000002 ***
## estrato        66.57079    3.19375  20.844 < 0.0000000000000002 ***
## parqueaderos   60.81971    3.82294  15.909 < 0.0000000000000002 ***
## habitaciones  -11.99306    4.09771  -2.927              0.00346 ** 
## banios         55.10969    3.59195  15.343 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 97.76 on 2133 degrees of freedom
## Multiple R-squared:  0.759,  Adjusted R-squared:  0.7585 
## F-statistic:  1344 on 5 and 2133 DF,  p-value: < 0.00000000000000022

cuando todas las variables son cero el valor de intercepto corresponde a -333.98650

el p value debe adr por encima del 0.05, si es mayor acepto la hipotesis nula, como es menor se acepta la hipotesis alternativa.

Validacióin de los Supuestos

  1. Supuesto de Normalidad
options(scipen = 999)

normalidad <- ModeloR$residuals
shapiro.test(normalidad)
## 
##  Shapiro-Wilk normality test
## 
## data:  normalidad
## W = 0.78169, p-value < 0.00000000000000022
  1. Supuesto de Varianza Constante
gqtest(ModeloR)
## 
##  Goldfeld-Quandt test
## 
## data:  ModeloR
## GQ = 0.82295, df1 = 1064, df2 = 1063, p-value = 0.9992
## alternative hypothesis: variance increases from segment 1 to 2

este valor sugiere que no hay evidencia de heterocedasticidad.

  1. Supuesto de Independencia de errores
options(scipen = 999)
dwtest(ModeloR)
## 
##  Durbin-Watson test
## 
## data:  ModeloR
## DW = 1.5938, p-value < 0.00000000000000022
## alternative hypothesis: true autocorrelation is greater than 0

No hay evidencias significativas de autocorrelacion en los residuos del modelo

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

vif(ModeloR)
##    areaconst      estrato parqueaderos habitaciones       banios 
##     2.072665     1.575221     1.398856     1.427646     2.562159

Debido a que los valores no son cercanos a 5 no existe multicolinealidad, por lo cual no es necesario eliminar ninguna variable.

Predicción del Precio de la vivienda tipo B



predict(ModeloR,
         newdata = data.frame(areaconst = 300, 
                               estrato = c(5, 6), 
                               parqueaderos = 3, 
                               habitaciones = 5,
                               banios =3
                               )
        ,interval = "confidence" )
##        fit      lwr      upr
## 1 690.0607 665.7032 714.4181
## 2 756.6315 731.9568 781.3061

el precio de las viviendas varian entre 690 millones de pesos y 756 millones de pesos en promedio, con un minimo de 665 millones y un maximo de 781 millones, sin embargo solo tendremos en cuenta los aptos con las caracteristicas solicitadas por la empresa.

OfertasAptos <- subset(ViviendaAptoSur,estrato >= 5 & areaconst >= 300  & preciom <=850 & parqueaderos >=3 & banios>=3 & habitaciones >= 5)

OfertasAptos <- as.data.frame(OfertasAptos)

knitr::kable(OfertasAptos, format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
7182 Zona Sur 4 5 730 573 3 8 5 Apartamento guadalupe -76.548 3.408
7512 Zona Sur 4 5 670 300 3 5 6 Apartamento seminario -76.550 3.409

Solo dos viviendas cumplen con los requisitos solicitados por la empresa, las dos viviendas se encuentran en estrato 5 y en el piso 4 sin embargo la primera vale 730 millones de pesos, tiene 573 metros cuadrados, tiene 3 parqueaderos, ocho baños y 5 habitaciones, la segunda vivienda vale 60 millones de pesos menos, tiene una habitación más, pero el area disminuye en casi la mitad, tiene 3 parqueaderos y 5 baños, en terminos de valor de metro cuadrado es más rentable la primera vivienda.

piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud 4 5 730 573 3 8 5 Apartamento guadalupe -76.548 3.408 4 5 670 300 3 5 6 Apartamento seminario -76.550 3.409

oferta <- data.frame(
  lat = OfertasAptos$latitud,
 long = OfertasAptos$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = c(~as.character(lat),~as.character(long) ), 
    color = "red", radius = 2
  )

map