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, Maria recibió una carta solicitando asesoria 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:

Ofertas entregada por C&A
Caracteristicas Vivienda1 Vivienda2
Tipo casa Apartamento
área construida 200 300
parqueaderos 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

Lectura y ajuste de variables en las base de datos vivienda.xlsx.

Nota: Se presento dificultad para acceder a “dgonxalex80/paqueteMOD” despues de uan actualización realizada en R, por lo cual, se trabajo con la base de datos “viviendas.xlsx” para dar respuesta a las soluciones de la actividad.

library(readxl)
vivienda <- read_excel("viviendas.xlsx", col_types = c("numeric", "text", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "numeric", "numeric")
        )
#vivienda$estrato <- as.numeric(levels(vivienda$estrato))[vivienda$estrato]

Vista general del base de datos de Vivienda contenidad en “dgonxalex80/paqueteMOD”.

knitr::kable(head(vivienda, 10), caption = "Base de Datos VIVIENDA")
Base de Datos VIVIENDA
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 2 4 400 280 3 5 3 Casa 3 de julio -76.54000 3.43500
1212 Zona Norte 1 5 260 90 1 2 3 Apartamento acopi -76.51350 3.45891
1724 Zona Norte 1 5 240 87 1 3 3 Apartamento acopi -76.51700 3.36971
2326 Zona Norte 1 4 220 52 2 2 3 Apartamento acopi -76.51974 3.42627
4386 Zona Norte 1 5 310 137 2 3 4 Apartamento acopi -76.53105 3.38296
1209 Zona Norte 2 5 320 150 2 4 6 Casa acopi -76.51341 3.47968
1592 Zona Norte 2 5 780 380 2 3 3 Casa acopi -76.51674 3.48721

Nota: convertimos las variables piso, estrato en números y ajustamos el punto decimal en longitud: -76.xxxx y laitud: 3.xxxx.

BASE 1: Análisis de vivienda tipo “CASA”.

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

Base1 Norte

knitr::kable(head(BASE1_Norte, 3), caption = "Base1 Norte")
Base1 Norte
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
1209 Zona Norte 2 5 320 150 2 4 6 Casa acopi -76.51341 3.47968
1592 Zona Norte 2 5 780 380 2 3 3 Casa acopi -76.51674 3.48721
4057 Zona Norte 2 6 750 445 NA 7 6 Casa acopi -76.52950 3.38527
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Norte$longitud,
                   lat = BASE1_Norte$latitud,
                   label = as.character(paste0(BASE1_Norte$tipo, " est:", BASE1_Norte$estrato, " Precio:",BASE1_Norte$preciom, "'000.000", " Pisos:", BASE1_Norte$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'red'
                   )

Base1 Oriente.

knitr::kable(head(BASE1_Oriente, 3), caption = "Base1 Oriente")
Base1 Oriente
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
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Oriente$longitud,
                   lat = BASE1_Oriente$latitud,
                   label = as.character(paste0(BASE1_Oriente$tipo, " est:", BASE1_Oriente$estrato, " Precio:",BASE1_Oriente$preciom, "'000.000", " #Pisos:", BASE1_Oriente$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'orange'
                   )

Base1 Sur.

knitr::kable(head(BASE1_Sur, 3), caption = "Base1 Sur")
Base1 Sur
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5992 Zona Sur 2 4 400 280 3 5 3 Casa 3 de julio -76.540 3.435
5157 Zona Sur 2 3 500 354 1 2 4 Casa alameda -76.535 3.437
5501 Zona Sur 2 3 175 102 NA 2 4 Casa alameda -76.537 3.435
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Sur$longitud,
                   lat = BASE1_Sur$latitud,
                   label = as.character(paste0(BASE1_Sur$tipo, " est:", BASE1_Sur$estrato, " Precio:",BASE1_Sur$preciom, "'000.000", " #Pisos:", BASE1_Sur$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'blue'
                   )

Base1 Oeste.

knitr::kable(head(BASE1_Oeste, 3), caption = "Base1 Oeste")
Base1 Oeste
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
6928 Zona Oeste 3 6 1850 302 4 4 3 Casa aguacatal -76.54600 3.44400
7510 Zona Oeste 3 6 1950 400 4 5 3 Casa aguacatal -76.55000 3.45600
7586 Zona Oeste 3 6 870 275 3 5 4 Casa aguacatal -76.55074 3.45649
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Oeste$longitud,
                   lat = BASE1_Oeste$latitud,
                   label = as.character(paste0(BASE1_Oeste$tipo, " est:", BASE1_Oeste$estrato, " Precio:",BASE1_Oeste$preciom, "'000.000", " #Pisos:", BASE1_Oeste$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'green'
                   )

Base1 Centro.

knitr::kable(head(BASE1_Centro, 3), caption = "Base1 Centro")
Base1 Centro
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5298 Zona Centro 1 3 650 240 2 4 4 Casa alameda -76.53564 3.43521
5107 Zona Centro 2 4 400 460 NA 5 7 Casa alameda -76.53471 3.43627
5117 Zona Centro 2 3 380 290 NA 4 8 Casa alameda -76.53481 3.43712
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Centro$longitud,
                   lat = BASE1_Centro$latitud,
                   label = as.character(paste0(BASE1_Centro$tipo, " est:", BASE1_Centro$estrato, " Precio:",BASE1_Centro$preciom, "'000.000", " #Pisos:", BASE1_Centro$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'brown'
                   )

Pueden existir varias razones por las cuales podrían aparecer registros de una zona en otra zona del mapa cuando se aplican filtros de zona en un mapa de datos; algunas posibles explicaciones, son:

1. Error humano: Es muy probable que se haya cometido un error humano en la toma de información en campo, o al momento de tabular o al definir las zonas o al asignar los registros a las zonas correspondientes. En este caso, es necesario revisar cuidadosamente la configuración de las zonas y la asignación de los registros para asegurarse de que todo esté correctamente definido.

2. Problemas con los datos: Es posible que estos datos estén incompletos o desactualizados. Esto fácilmente podría provocar que los registros se asignen a zonas equivocadas o que no se muestren correctamente en el mapa.

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

Segmentamos la Base de datos que solo contendra información de las Casas para hacer comparación o busqueda de mejores oferta que Vivienda 1 presentada por la compañia C&A.

pos <- which(vivienda$tipo=="Casa")
vivienda_casas <- vivienda[pos,]

-Vista general de la estructura de datos de la Base de Datos con solo Casas.

glimpse(vivienda_casas)
Rows: 3,219
Columns: 13
$ id           <dbl> 1147, 1169, 1350, 5992, 1209, 1592, 4057, 4460, 6081, 782…
$ zona         <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
$ piso         <dbl> NA, NA, NA, 2, 2, 2, 2, 2, 2, 2, 2, 3, NA, NA, NA, NA, NA…
$ estrato      <dbl> 3, 3, 3, 4, 5, 5, 6, 4, 5, 4, 5, 5, 3, 3, 3, 3, 5, 3, 4, …
$ preciom      <dbl> 250, 320, 350, 400, 320, 780, 750, 625, 750, 600, 420, 49…
$ areaconst    <dbl> 70, 120, 220, 280, 150, 380, 445, 355, 237, 160, 200, 118…
$ parqueaderos <dbl> 1, 1, 2, 3, 2, 2, NA, 3, 2, 1, 4, 2, NA, NA, NA, NA, NA, …
$ banios       <dbl> 3, 2, 2, 5, 4, 3, 7, 5, 6, 4, 4, 4, 2, 0, 3, 6, 5, 5, 3, …
$ habitaciones <dbl> 6, 3, 4, 3, 6, 3, 6, 5, 6, 5, 5, 4, 3, 0, 3, 6, 4, 8, 4, …
$ tipo         <chr> "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "Casa", "…
$ barrio       <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
$ longitud     <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51341, -7…
$ latitud      <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.47968, 3.48721, 3.3…

-Análisis general y descriptivos de las variables en Base de Datos.

result <- summary(vivienda_casas[,3:9])
knitr::kable(result, caption = "Análisis generar las variable BASE1")
Análisis generar las variable BASE1
piso estrato preciom areaconst parqueaderos banios habitaciones
Min. : 1.000 Min. :3.000 Min. : 77 Min. : 30.0 Min. : 1.00 Min. : 0.000 Min. : 0.00
1st Qu.: 2.000 1st Qu.:3.000 1st Qu.: 300 1st Qu.: 154.0 1st Qu.: 1.00 1st Qu.: 3.000 1st Qu.: 3.00
Median : 2.000 Median :5.000 Median : 430 Median : 240.0 Median : 2.00 Median : 4.000 Median : 4.00
Mean : 2.138 Mean :4.485 Mean : 540 Mean : 273.4 Mean : 2.29 Mean : 3.894 Mean : 4.61
3rd Qu.: 3.000 3rd Qu.:5.000 3rd Qu.: 670 3rd Qu.: 350.0 3rd Qu.: 3.00 3rd Qu.: 5.000 3rd Qu.: 5.00
Max. :10.000 Max. :6.000 Max. :1999 Max. :1745.0 Max. :10.00 Max. :10.000 Max. :10.00
NA’s :1254 NA NA NA NA’s :733 NA NA

-Histograma de la variable Piso.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~piso, name = "Piso")
plot

A partir de esta información, podemos concluir que la mayoría de las casas tienen entre 1 y 3 pisos, ya que estos son los valores más comunes (la mediana y los cuartiles). Sin embargo, hay una un datos de una casa con una gran cantidad de pisos, puesto ya que el valor máximo es 10 pisos.

-Histograma de la variable Estrato.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~estrato, name = "estrato")
plot

-Histograma de la variable Preciom.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~preciom, name = "Precio de casa")
plot

Los datos para la variable precio de las viviendas fluctúa ampliamente, identificando que algunos precios son muy altos, y debido a estos aumentan el valor promedio. La mediana de los precios de las viviendas es de 430 millones, por lo que se infiere que la mayoría de las viviendas tienen un precio inferior a este valor. Los cuartiles muestran que hay una gran variación en los precios de las viviendas, mostrando una diferencia con un 25% de las viviendas con precios muy bajos y otro 25% con precios muy altos.

-Histograma de la variable Area construida.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~areaconst, name = "estrato")
plot

La variable área construida en m2 presenta una gran dispersión de los datos, puesto que se observa un rango que va desde los 30 m2 hasta 47,463 m2. Otro dato relevante es que la media es de 402.1 m2 y la mediana se sitúa en 240 m2, lo anterior indica que la mitad de la cantidad de casas de la base de datos tienen un área construida menor a este valor. En los datos el tercer cuartil, indica que la mayoría de las propiedades tienen un área construida inferior a 350 m2. Estos datos son relevantes para la evaluación de precios y tiene una correlación directa con el precio de la vivienda, indispensable para la toma de decisiones en el mercado inmobiliario.

-Histograma de la variable Parqueaderos.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~parqueaderos, name = "estrato")
plot

-Histograma de la variable Baños.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~banios, name = "Baños")
plot

-Histograma de la variable Habitaciones.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~habitaciones, name = "Habitaciones")
plot

Esta variable corresponde a la cantidad de habitaciones en una casa, según el histograma se infiere que presenta una distribución asimétrica positiva con una media de 4.61 habitaciones. El valor mínimo es 0 habitaciones, lo que puede significar que es una característica de casas pequeñas o monoambientes, es decir en las cuales se comparten cocina, sala y dormitorio en un solo ambiente. El valor máximo es de 10 habitaciones en una casa, lo que sugiere casas muy grandes o mansiones. En general, la cantidad de habitaciones en una casa varía significativamente y puede ser un indicador importante que puede tener correlación con las variables de área construida y precio de la vivienda.

-Histograma de la variable Zona.

plot <- plot_ly(vivienda_casas, type = "histogram")
plot <- plot %>% add_trace(x = ~zona, name = "Zona")
plot

-Correlación usando la libreria “GGally”.

La tabla de correlaciones proporcionada por la herramienta GGally, muestra información de la relación entre diferentes variables. En este caso para la base de datos de vivienda, se evidencia la correlación para 6 variables: precio de vivienda, estrato, parqueadero, baños y habitaciones.

La correlación entre el precio de la vivienda y el estrato es de 0.666. Esta correlación es positiva y fuerte, que mediante el indicador se evidencia que existe una relación directa entre el precio de la vivienda y el estrato. Es decir, a medida que aumenta el estrato, también lo hace el precio de la vivienda.

La correlación entre el precio de la vivienda y el parqueadero es de 0.639. Esta correlación también es positiva y fuerte de acuerdo al indicador corr, lo que indica que existe una relación directa entre el precio de la vivienda y la cantidad de parqueaderos por vivienda. Es decir, a medida que aumenta el precio de la vivienda, hace también que exista mayor probabilidad de que esta tenga un parqueadero o más.

La correlación entre el precio de la vivienda y los baños es de 0.558. Esta correlación es positiva y fuerte al igual que las dos anteriormente analizadas, lo que indica que existe una relación directa entre el precio de la vivienda y el número de baños. Es decir, a medida que aumenta el número de baños, también lo hace el precio de la vivienda.

La correlación entre los baños y las habitaciones es de 0.476. Esta correlación es positiva y fuerte, lo que muestra que existe un indicador de relación directa entre el número de baños y el número de habitaciones. Es decir, a medida que aumenta el número de habitaciones, también lo hace el número de baños.

La correlación entre los baños y el estrato es de 0.449. Esta correlación es positiva y fuerte, lo que muestra que existe una relación directa entre el número de baños y el estrato. Es decir, a medida que aumenta el estrato, también lo hace el número de baños.

La correlación entre los parqueaderos y el estrato es de 0.463. Esta correlación indica que existe una relación directa entre la disponibilidad de parqueaderos y el estrato. Es decir, a medida que aumenta el estrato, también lo hace la probabilidad de que una vivienda tenga un parqueadero.

Finalmente, la correlación entre los baños y los parqueaderos es de 0.447. Esta correlación es positiva e indica que existe una relación directa entre el número de baños y la disponibilidad de parqueaderos. Es decir, a medida que aumenta el número de baños, también lo hace la probabilidad de que una vivienda tenga un parqueadero.

En resumen, la tabla de correlaciones muestra que existe una relación directa y moderadamente fuerte entre el precio de la vivienda, el estrato, el número de baños, la disponibilidad de parqueaderos y el número de habitaciones. Esta información puede ser útil para entender las tendencias en el mercado inmobiliario y para tomar decisiones de inversión en este sector.

  1. Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos,numero 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).

3. Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos,numero 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).

modelo_casas = lm(preciom ~ areaconst + estrato + parqueaderos + banios + habitaciones, data = vivienda_casas)
summary(modelo_casas)

Call:
lm(formula = preciom ~ areaconst + estrato + parqueaderos + banios + 
    habitaciones, data = vivienda_casas)

Residuals:
     Min       1Q   Median       3Q      Max 
-1190.80  -114.52   -25.94    74.59   986.16 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -413.87536   25.58852 -16.174  < 2e-16 ***
areaconst       0.74227    0.02941  25.235  < 2e-16 ***
estrato       116.07109    5.26618  22.041  < 2e-16 ***
parqueaderos   64.29943    3.47719  18.492  < 2e-16 ***
banios         39.03498    4.05083   9.636  < 2e-16 ***
habitaciones  -14.74995    3.18137  -4.636 3.73e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 205.2 on 2480 degrees of freedom
  (733 observations deleted due to missingness)
Multiple R-squared:  0.6834,    Adjusted R-squared:  0.6828 
F-statistic:  1071 on 5 and 2480 DF,  p-value: < 2.2e-16

En la estimación de los coeficiente, en el modelos de casas, la determinación de R2 e de 0.6834, lo que intepreta como el 68.34% de las variaciones del precio son explicadas por las variables del modelo llamado modelo_casas. Con respecto a los estimadores de los parametros se destaca que todas las variable son significativas para el modelo. El modelo tiene la siguiente construcción: Precio = -413.87536+0.74227(areaconst)+116.07109(estrato)+64.29943(parqueaderos)+39.03498(banios)-14.74995(habitaciones)

Para verificar la multicolianialidad de las variables:

knitr::kable(vif(modelo_casas), caption = "Datos para predicción de Modelo_Casas.")
Datos para predicción de Modelo_Casas.
x
areaconst 1.541765
estrato 1.694080
parqueaderos 1.535105
banios 2.059733
habitaciones 1.594265

los factores calculados por el VIF estan por debajo de 5 y muy sutilmente por encima de 1, de tal forma, podemos decir que existe una multicoliniadad muy leve en las variables.

  1. 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(modelo_casas)

Obtención de los errores:

e = modelo_casas$residuals

-Supuesto de normalidad de los errores.

H0: los errores tienen distribución normal.

shapiro.test(e)

    Shapiro-Wilk normality test

data:  e
W = 0.89699, p-value < 2.2e-16

Los residuales NO cumple los criterios de distribution normal debido a que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0.

-Supuesto de independencia de errores.

H0: Los errores sin independientes (no estan relacionados).

Loading required package: zoo

Attaching package: 'zoo'
The following objects are masked from 'package:base':

    as.Date, as.Date.numeric
dwtest(modelo_casas)

    Durbin-Watson test

data:  modelo_casas
DW = 1.5759, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0

Los errores son dependientes debido a que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0 y acepta la hipostesis alternativa.De igual forma, este supuesto no aplica para este conjunto de datos debido aque no existe una relación temporal(tiempo) en la recolección de los mismo.

-Supuesto de varianza constante.

H0: la varianza de los erroes es constante.

gqtest(modelo_casas)

    Goldfeld-Quandt test

data:  modelo_casas
GQ = 1.268, df1 = 1237, df2 = 1237, p-value = 1.525e-05
alternative hypothesis: variance increases from segment 1 to 2

Los errores NO cumple con el supuesto de varianza constante debido que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0.

Una propuesta para mejorar los supuestos sobre los errores seria realizar transformación de linealidad a esas variables que no tienen un comportamiento lineal.

  1. 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),                                
                         estrato=c(4,5), 
                         parqueaderos=c(1,1), 
                         banios=c(2,2),
                         habitaciones=c(4,4)
)

knitr::kable(Vivienda_1, caption = "Datos para predicción de Modelo_Casas.")
Datos para predicción de Modelo_Casas.
areaconst estrato parqueaderos banios habitaciones
200 4 1 2 4
200 5 1 2 4

Predicción de las viviendas:

       1        2 
282.2318 398.3029 

Según la predicción del modelo, para:

Datos para predicción de Modelo_Casas.
prediccion areaconst estrato parqueaderos banios habitaciones predicción_precio escala
1 200 4 1 2 4 249.2789 Millones
2 200 5 1 2 4 381.7347 Millones

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 preaprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

pos <- which(vivienda_casas$estrato>=4 & vivienda_casas$areaconst>= 200 & vivienda_casas$parqueaderos>=1 & vivienda_casas$banios>=2 & vivienda_casas$habitaciones>=4 & vivienda_casas$estrato>=4 & vivienda_casas$estrato<=5 & vivienda_casas$preciom<=350 )
Ofertas_casas <- vivienda_casas[pos,]
Ofertas_casas_5 = Ofertas_casas[order(Ofertas_casas$areaconst, decreasing = TRUE), ]
ofertac5 <- head(Ofertas_casas_5, 5)
knitr::kable(head(Ofertas_casas_5, 5), caption = "5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.")
5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
7436 Zona Sur 1 4 330 400 2 4 4 Casa el lido -76.54973 3.42484
7499 Zona Oeste 3 4 320 380 2 4 4 Casa santa rita -76.55000 3.45400
6922 Zona Sur NA 4 345 360 3 3 5 Casa nueva tequendama -76.54600 3.41100
3101 Zona Norte 2 5 340 355 2 5 8 Casa san vicente -76.52377 3.46384
7903 Zona Oeste 2 4 325 355 2 3 4 Casa santa rita -76.55300 3.45300
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = ofertac5$longitud,
                   lat = ofertac5$latitud,
                   label = as.character(paste0(ofertac5$tipo, " est:", ofertac5$estrato, " Precio:",ofertac5$preciom, "'000.000", " Pisos:", ofertac5$piso, " Parqueaderos: ", ofertac5$parqueaderos)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 8,
                   color = 'blue'
                   )

———————————————————————————————————————–

BASE 2: Análisis de vivienda tipo “APARTAMENTO”.

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

Base2 Norte

knitr::kable(head(BASE2_Norte, 3), caption = "Base2 Sur")
Base2 Sur
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
1212 Zona Norte 1 5 260 90 1 2 3 Apartamento acopi -76.51350 3.45891
1724 Zona Norte 1 5 240 87 1 3 3 Apartamento acopi -76.51700 3.36971
2326 Zona Norte 1 4 220 52 2 2 3 Apartamento acopi -76.51974 3.42627
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE2_Norte$longitud,
                   lat = BASE2_Norte$latitud,
                   label = as.character(paste0(BASE2_Norte$tipo, " est:", BASE2_Norte$estrato, " Precio:",BASE2_Norte$preciom, "'000.000", " Pisos:", BASE2_Norte$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'red'
                   )

Base2 Oriente.

knitr::kable(head(BASE2_Oriente, 3), caption = "Base2 Oriente")
Base2 Oriente
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
82 Zona Oriente 1 3 115 111 1 2 4 Apartamento alfonso lópez -76.48141 3.45379
78 Zona Oriente 2 3 58 50 1 1 2 Apartamento alfonso lópez -76.47978 3.45131
999 Zona Oriente 2 3 135 120 NA 2 4 Apartamento atanasio girardot -76.50737 3.44454
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE2_Oriente$longitud,
                   lat = BASE2_Oriente$latitud,
                   label = as.character(paste0(BASE2_Oriente$tipo, " est:", BASE2_Oriente$estrato, " Precio:",BASE2_Oriente$preciom, "'000.000", " Pisos:", BASE2_Oriente$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'orange'
                   )

Base2 Sur.

knitr::kable(head(BASE2_Sur, 3), caption = "Base2 Sur")
Base2 Sur
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5098 Zona Sur 5 4 290 96 1 2 3 Apartamento acopi -76.53464 3.44987
698 Zona Sur 2 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
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE2_Sur$longitud,
                   lat = BASE2_Sur$latitud,
                   label = as.character(paste0(BASE2_Sur$tipo, " est:", BASE2_Sur$estrato, " Precio:",BASE2_Sur$preciom, "'000.000", " Pisos:", BASE2_Sur$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'blue'
                   )

Base2 Oeste.

knitr::kable(head(BASE2_Oeste, 3), caption = "Base2 Oeste")
Base2 Oeste
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
6999 Zona Oeste 1 6 870 200 2 5 3 Apartamento aguacatal -76.54666 3.44624
8037 Zona Oeste 1 4 130 50 NA 1 3 Apartamento aguacatal -76.55409 3.44338
8055 Zona Oeste 1 4 165 61 1 2 3 Apartamento aguacatal -76.55447 3.45783
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE1_Oeste$longitud,
                   lat = BASE1_Oeste$latitud,
                   label = as.character(paste0(BASE1_Oeste$tipo, " est:", BASE1_Oeste$estrato, " Precio:",BASE1_Oeste$preciom, "'000.000", " Pisos:", BASE1_Oeste$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'green'
                   )

Base2 Centro.

knitr::kable(head(BASE2_Centro, 3), caption = "Base2 Centro")
Base2 Centro
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
4654 Zona Centro 3 3 100 70.00 NA 2 3 Apartamento alameda -76.53200 3.45200
4408 Zona Centro 5 3 120 84.00 1 2 3 Apartamento alameda -76.53123 3.44011
4395 Zona Centro 4 3 125 66.76 NA 2 3 Apartamento bretaña -76.53111 3.44034
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = BASE2_Centro$longitud,
                   lat = BASE2_Centro$latitud,
                   label = as.character(paste0(BASE2_Centro$tipo, " est:", BASE2_Centro$estrato, " Precio:",BASE2_Centro$preciom, "'000.000", " Pisos:", BASE2_Centro$piso)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 4,
                   color = 'brown'
                   )

Pueden existir varias razones por las cuales podrían aparecer registros de una zona en otra zona del mapa cuando se aplican filtros de zona en un mapa de datos; algunas posibles explicaciones, son:

1. Error humano: Es muy probable que se haya cometido un error humano en la toma de información en campo, o al momento de tabular o al definir las zonas o al asignar los registros a las zonas correspondientes. En este caso, es necesario revisar cuidadosamente la configuración de las zonas y la asignación de los registros para asegurarse de que todo esté correctamente definido.

2. Problemas con los datos: Es posible que estos datos estén incompletos o desactualizados. Esto fácilmente podría provocar que los registros se asignen a zonas equivocadas o que no se muestren correctamente en el mapa.

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

Segmentamos la Base de datos que solo contendra información de los Apartamentos para hacer comparación o busqueda de mejores oferta que Vivienda 2 presentada por la compañia C&A.

vivienda <- read_excel("viviendas.xlsx", col_types = c("numeric", "text", "numeric", 
        "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", 
        "text", "text", "numeric", "numeric")
        )

pos <- which(vivienda$tipo=="Apartamento")
vivienda_apartamentos <- vivienda[pos,]

-Vista general de la estructura de datos de la Base de Datos con solo Apartamento.

glimpse(vivienda_apartamentos)
Rows: 5,100
Columns: 13
$ id           <dbl> 1212, 1724, 2326, 4386, 7497, 5424, 6271, 6857, 3817, 509…
$ zona         <chr> "Zona Norte", "Zona Norte", "Zona Norte", "Zona Norte", "…
$ piso         <dbl> 1, 1, 1, 1, 2, 3, 3, 3, 4, 5, 5, 5, 5, 5, 6, NA, NA, NA, …
$ estrato      <dbl> 5, 5, 4, 5, 6, 4, 5, 3, 3, 6, 6, 4, 5, 6, 5, 5, 3, 5, 5, …
$ preciom      <dbl> 260, 240, 220, 310, 520, 320, 385, 100, 175, 820, 450, 29…
$ areaconst    <dbl> 90, 87, 52, 137, 98, 108, 103, 49, 80, 377, 103, 96, 124,…
$ parqueaderos <dbl> 1, 1, 2, 2, 2, 2, 2, NA, 1, 1, 2, 1, 3, 2, 1, NA, NA, NA,…
$ banios       <dbl> 2, 3, 2, 3, 2, 3, 2, 1, 2, 4, 3, 2, 3, 3, 1, 3, 1, 4, 2, …
$ habitaciones <dbl> 3, 3, 3, 4, 2, 3, 3, 2, 3, 4, 4, 3, 3, 4, 2, 3, 5, 4, 2, …
$ tipo         <chr> "Apartamento", "Apartamento", "Apartamento", "Apartamento…
$ barrio       <chr> "acopi", "acopi", "acopi", "acopi", "acopi", "acopi", "ac…
$ longitud     <dbl> -76.51350, -76.51700, -76.51974, -76.53105, -76.54999, -7…
$ latitud      <dbl> 3.45891, 3.36971, 3.42627, 3.38296, 3.43505, 3.40770, 3.4…

-Análisis general y descriptivos de las variables en Base de Datos.

vivienda_apartamento <- vivienda_apartamentos[,3:9]
knitr::kable(summary(vivienda_apartamento), caption = "Análisis generar las variable BASE2")
Análisis generar las variable BASE2
piso estrato preciom areaconst parqueaderos banios habitaciones
Min. : 1.000 Min. :3.000 Min. : 58.0 Min. : 35.0 Min. : 1.000 Min. :0.000 Min. :0.000
1st Qu.: 2.000 1st Qu.:4.000 1st Qu.: 175.0 1st Qu.: 68.0 1st Qu.: 1.000 1st Qu.:2.000 1st Qu.:3.000
Median : 4.000 Median :5.000 Median : 279.0 Median : 90.0 Median : 1.000 Median :2.000 Median :3.000
Mean : 4.634 Mean :4.727 Mean : 366.9 Mean :112.8 Mean : 1.568 Mean :2.617 Mean :2.971
3rd Qu.: 6.000 3rd Qu.:6.000 3rd Qu.: 430.0 3rd Qu.:130.0 3rd Qu.: 2.000 3rd Qu.:3.000 3rd Qu.:3.000
Max. :12.000 Max. :6.000 Max. :1950.0 Max. :932.0 Max. :10.000 Max. :8.000 Max. :9.000
NA’s :1381 NA NA NA NA’s :869 NA NA

-Histograma de la variable Piso.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~piso, name = "Piso")
plot

A partir de esta información, podemos concluir que la mayoría de las ofertas de apartamentos estan entre el 1 y el 5 pisos, ya que estos son los valores más comunes (la mediana y los cuartiles).

-Histograma de la variable Estrato.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~estrato, name = "Estrato")
plot

-Histograma de la variable Preciom.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~preciom, name = "Precio de casa")
plot

Los datos para la variable precio de las viviendas fluctúa ampliamente, identificando que algunos precios son muy altos, y debido a estos aumentan el valor promedio. La mediana de los precios de las viviendas es de 366.9 millones, por lo que se infiere que la mayoría de las viviendas tienen un precio inferior a este valor.

-Histograma de la variable Area construida.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~areaconst, name = "Área construida")
plot

-Histograma de la variable Parqueaderos.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~parqueaderos, name = "Parqueaderos")
plot

Las ofertas en las base de datos comprende una cantidad de parqueaderos entre la cantidad de 1 y 2.

-Histograma de la variable Baños.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~banios, name = "Baños")
plot

-Histograma de la variable Habitaciones.

plot <- plot_ly(vivienda_apartamento, type = "histogram")
plot <- plot %>% add_trace(x = ~habitaciones, name = "Habitaciones")
plot

-Correlación usando la libreria “GGally”.

La tabla de correlaciones proporcionada por la herramienta GGally, muestra información de la relación entre diferentes variables. En este caso para la base de datos de vivienda, se evidencia la correlación para 6 variables: precio de vivienda, estrato, parqueadero, baños y habitaciones.

La correlación entre el precio de la vivienda y el estrato es de 0.667. Esta correlación es positiva y fuerte, que mediante el indicador se evidencia que existe una relación directa entre el precio de la vivienda y el estrato. Es decir, a medida que aumenta el estrato, también lo hace el precio de la vivienda.

La correlación entre el precio de la vivienda y el parqueadero es de 0.739. Esta correlación también es positiva y fuerte de acuerdo al indicador corr, lo que indica que existe una relación directa entre el precio de la vivienda y la cantidad de parqueaderos por vivienda. Es decir, a medida que aumenta el precio de la vivienda, hace también que exista mayor probabilidad de que esta tenga un parqueadero o más.

La correlación entre el precio de la vivienda y los baños es de 0.740. Esta correlación es positiva y fuerte al igual que las dos anteriormente analizadas, lo que indica que existe una relación directa entre el precio de la vivienda y el número de baños. Es decir, a medida que aumenta el número de baños, también lo hace el precio de la vivienda.

En resumen, la tabla de correlaciones muestra que existe una relación directa y moderadamente fuerte entre el precio de la vivienda, el estrato, el número de baños, la disponibilidad de parqueaderos y el número de habitaciones. Esta información puede ser útil para entender las tendencias en el mercado inmobiliario y para tomar decisiones de inversión en este sector.

3. Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos,numero 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).

modelo_apartamento = lm(preciom ~ areaconst + estrato + parqueaderos + banios + habitaciones, data = vivienda_apartamento)
summary(modelo_apartamento)

Call:
lm(formula = preciom ~ areaconst + estrato + parqueaderos + banios + 
    habitaciones, data = vivienda_apartamento)

Residuals:
   Min     1Q Median     3Q    Max 
-63847    142    237    447  63406 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -722.3912    92.7632  -7.787 8.54e-15 ***
areaconst       5.7988     0.8068   7.188 7.75e-13 ***
estrato      -144.8864    21.3764  -6.778 1.39e-11 ***
parqueaderos  393.8946    55.0190   7.159 9.52e-13 ***
banios       -240.7140    25.9108  -9.290  < 2e-16 ***
habitaciones  273.1798    11.3656  24.036  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2274 on 4225 degrees of freedom
  (869 observations deleted due to missingness)
Multiple R-squared:  0.4864,    Adjusted R-squared:  0.4858 
F-statistic: 800.2 on 5 and 4225 DF,  p-value: < 2.2e-16

En la estimación de los coeficiente, en el modelos de casas, la determinación de R2 e de 0.6029, lo que intepreta como el 60.29% de las variaciones del precio son explicadas por las variables del modelo llamado modelo_casas. Con respecto a los estimadores de los parametros se destaca que la variable habitaciones no es significativas para el modelo. El modelo tiene la siguiente construcción: Precio = -232.0195+4.6219(areaconst)-118.2008(estrato)+8.954e+01(parqueaderos)+419.0192(banios)+259.9397(habitaciones)

Para verificar la multicolianialidad de las variables:

vif(modelo_apartamento)
   areaconst      estrato parqueaderos       banios habitaciones 
    10.14804     39.45984     59.61042     55.25645     15.09084 
<p style=“text-align: justify;”Los factores calculados por el VIF estan por debajo del factos 5 y 10 para algunas variables, por lo cual, podemos concluir que hay una alta dependencia de estas variables con repecto al precio de venta de la vivienda 2, de tal forma, podemos decir que existe problemas de multicoliniadad significativos en el modelo para apartamentos.

  1. 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(modelo_apartamento)
## Warning: not plotting observations with leverage one:
##   1, 2, 3, 4, 5, 6

Obtención de los errores:

e = modelo_apartamento$residuals

-Supuesto de normalidad de los errores.

H0: los errores tienen distribución normal.

shapiro.test(e)

    Shapiro-Wilk normality test

data:  e
W = 0.067892, p-value < 2.2e-16

Los residuales NO cumple los criterios de distribution normal debido a que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0.

-Supuesto de independencia de errores.

H0: Los errores sin independientes (no estan relacionados).

dwtest(modelo_apartamento)

    Durbin-Watson test

data:  modelo_apartamento
DW = 1.4458, p-value < 2.2e-16
alternative hypothesis: true autocorrelation is greater than 0

Los errores son dependientes debido a que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0 y acepta la hipostesis alternativa.De igual forma, este supuesto no aplica para este conjunto de datos debido aque no existe una relación temporal(tiempo) en la recolección de los mismo.

-Supuesto de varianza constante.

H0: la varianza de los erroes es constante.

gqtest(modelo_apartamento)

    Goldfeld-Quandt test

data:  modelo_apartamento
GQ = 1.5813, df1 = 2110, df2 = 2109, p-value < 2.2e-16
alternative hypothesis: variance increases from segment 1 to 2

Los errores NO cumple con el supuesto de varianza constante debido que p-value < 5% de significancia. Por lo tanto, se rechaza la hipotesis H0.

Una propuesta para mejorar los supuestos sobre los errores seria realizar transformación de linealidad a esas variables que no tienen un comportamiento lineal.

  1. 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),                                
                         estrato=c(5,6), 
                         parqueaderos=c(3,3), 
                         banios=c(3,3),
                         habitaciones=c(5,5)
)

knitr::kable(Vivienda_2, caption = "Datos para predicción de Modelo_Apartamento.")
Datos para predicción de Modelo_Apartamento.
areaconst estrato parqueaderos banios habitaciones
300 5 3 3 5
300 6 3 3 5

Predicción de las viviendas:

       1        2 
2118.265 1973.378 

Según la predicción del modelo, para:

Datos para predicción de Modelo_Apartamentos.
prediccion areaconst estrato parqueaderos banios habitaciones predicción_precio escala
1 200 5 3 3 5 1229.139 Millones
2 200 6 3 3 5 1110.938 Millones

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

pos <- which(vivienda_apartamentos$estrato>=5 & vivienda_apartamentos$estrato<=6 & vivienda_apartamentos$areaconst>= 300 & vivienda_apartamentos$parqueaderos>=3 & vivienda_apartamentos$banios>=3 & vivienda_apartamentos$habitaciones>=5 & vivienda_apartamentos$preciom<=850 )
Ofertas_apartamentos <- vivienda_apartamentos[pos,]
Ofertas_apartamento_5 = Ofertas_apartamentos[order(Ofertas_apartamentos$areaconst, decreasing = TRUE), ]
oferta5 <- head(Ofertas_apartamento_5, 5)
knitr::kable(head(Ofertas_apartamento_5, 5), caption = "5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.")
5 Ofertas que cumple las caracterisiticas, discriminada por area construida en m2.
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.54800 3.40800
3572 Zona Norte 5 5 450 307 4 4 5 Apartamento versalles -76.52708 3.46439
7512 Zona Sur NA 5 670 300 3 5 6 Apartamento seminario -76.55000 3.40900
require(leaflet)

leaflet() %>% addTiles() %>% 
  setView(lng =  -76.51595234451665, lat = 3.436834062816008, zoom = 12)  %>%
  addCircleMarkers(lng = oferta5$longitud,
                   lat = oferta5$latitud,
                   label = as.character(paste0(oferta5$tipo, " est:", oferta5$estrato, " Precio:",oferta5$preciom, "'000.000", " Pisos:", oferta5$piso, " Parqueaderos: ", oferta5$parqueaderos)), 
                   stroke = FALSE, 
                   fillOpacity = 0.5,
                   radius = 8,
                   color = 'blue'
                   )