Actividad 2 - Caso C&A

#Cargamos los datos y paquetes adicionales necesarios

#install.packages("tidyverse")
#install.packages("corrplot")
#install.packages("leaflet")
#install.packages("mapview")
#install.packages("table1")
#install.packages("leaflet.extras")
#install.packages("base")
#install.packages("zoo")
#install.packages("factoextra")
#install.packages("missForest")
#install.packages("plotly")
#install.packages("ggpubr")

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(corrplot)
## corrplot 0.92 loaded
library(leaflet)
library(leaflet.extras)
library(base)
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(missForest)
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
library(ggpubr)
library(knitr)
library(dplyr)
# Importación de datos
#install.packages(devtools) # solo una vez
#devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
# Carga los datos
datos <- read.csv("vivienda.csv")

vivienda <- data.frame(datos)

str(vivienda)
## 'data.frame':    8322 obs. of  13 variables:
##  $ id          : int  1147 1169 1350 5992 1212 1724 2326 4386 1209 1592 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : int  NA NA NA 2 1 1 1 1 2 2 ...
##  $ estrato     : int  3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : int  250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num  70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: int  1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : int  3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: int  6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...
#library(paqueteMODELOS)
data(vivienda)
## Warning in data(vivienda): data set 'vivienda' not found
str(vivienda)
## 'data.frame':    8322 obs. of  13 variables:
##  $ id          : int  1147 1169 1350 5992 1212 1724 2326 4386 1209 1592 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : int  NA NA NA 2 1 1 1 1 2 2 ...
##  $ estrato     : int  3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : int  250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num  70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: int  1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : int  3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: int  6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...
# Realizamos una copia del database vivienda
copia_vivienda <- vivienda
head(copia_vivienda)
##     id         zona piso estrato preciom areaconst parqueaderos banios
## 1 1147 Zona Oriente   NA       3     250        70            1      3
## 2 1169 Zona Oriente   NA       3     320       120            1      2
## 3 1350 Zona Oriente   NA       3     350       220            2      2
## 4 5992     Zona Sur    2       4     400       280            3      5
## 5 1212   Zona Norte    1       5     260        90            1      2
## 6 1724   Zona Norte    1       5     240        87            1      3
##   habitaciones        tipo      barrio  longitud latitud
## 1            6        Casa 20 de julio -76.51168 3.43382
## 2            3        Casa 20 de julio -76.51237 3.43369
## 3            4        Casa 20 de julio -76.51537 3.43566
## 4            3        Casa  3 de julio -76.54000 3.43500
## 5            3 Apartamento       acopi -76.51350 3.45891
## 6            3 Apartamento       acopi -76.51700 3.36971

Iniciamos la construcción del informe de acuerdo a los requisitos solicitados.

1. Realizamos filtro para tener únicamente las casas de la zona norte.

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?).
viviendas_casa_norte <- subset(vivienda, tipo == "Casa" & zona == "Zona Norte")
str(viviendas_casa_norte)
## 'data.frame':    722 obs. of  13 variables:
##  $ id          : int  1209 1592 4057 4460 6081 7824 7987 3495 141 243 ...
##  $ zona        : chr  "Zona Norte" "Zona Norte" "Zona Norte" "Zona Norte" ...
##  $ piso        : int  2 2 2 2 2 2 2 3 NA NA ...
##  $ estrato     : int  5 5 6 4 5 4 5 5 3 3 ...
##  $ preciom     : int  320 780 750 625 750 600 420 490 230 190 ...
##  $ areaconst   : num  150 380 445 355 237 160 200 118 160 435 ...
##  $ parqueaderos: int  2 2 NA 3 2 1 4 2 NA NA ...
##  $ banios      : int  4 3 7 5 6 4 4 4 2 0 ...
##  $ habitaciones: int  6 3 6 5 6 5 5 4 3 0 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "acopi" "acopi" "acopi" "acopi" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.48 3.49 3.39 3.41 3.37 ...
head(viviendas_casa_norte)
##      id       zona piso estrato preciom areaconst parqueaderos banios
## 9  1209 Zona Norte    2       5     320       150            2      4
## 10 1592 Zona Norte    2       5     780       380            2      3
## 11 4057 Zona Norte    2       6     750       445           NA      7
## 12 4460 Zona Norte    2       4     625       355            3      5
## 13 6081 Zona Norte    2       5     750       237            2      6
## 15 7824 Zona Norte    2       4     600       160            1      4
##    habitaciones tipo barrio  longitud latitud
## 9             6 Casa  acopi -76.51341 3.47968
## 10            3 Casa  acopi -76.51674 3.48721
## 11            6 Casa  acopi -76.52950 3.38527
## 12            5 Casa  acopi -76.53179 3.40590
## 13            6 Casa  acopi -76.54044 3.36862
## 15            5 Casa  acopi -76.55210 3.42125

Realizamos un resumen estadístico de la información de la Base 1

# Muestra un resumen estadístico de las variables numéricas en el dataset.
summary(viviendas_casa_norte)  
##        id             zona                piso          estrato     
##  Min.   :  58.0   Length:722         Min.   :1.000   Min.   :3.000  
##  1st Qu.: 766.2   Class :character   1st Qu.:2.000   1st Qu.:3.000  
##  Median :2257.0   Mode  :character   Median :2.000   Median :4.000  
##  Mean   :2574.6                      Mean   :1.994   Mean   :4.202  
##  3rd Qu.:4225.0                      3rd Qu.:2.000   3rd Qu.:5.000  
##  Max.   :8319.0                      Max.   :7.000   Max.   :6.000  
##                                      NA's   :372                    
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  89.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 261.2   1st Qu.: 140.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 390.0   Median : 240.0   Median : 2.000   Median : 3.000  
##  Mean   : 445.9   Mean   : 264.9   Mean   : 2.182   Mean   : 3.555  
##  3rd Qu.: 550.0   3rd Qu.: 336.8   3rd Qu.: 3.000   3rd Qu.: 4.000  
##  Max.   :1940.0   Max.   :1440.0   Max.   :10.000   Max.   :10.000  
##                                    NA's   :287                      
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:722         Length:722         Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.53  
##  Median : 4.000   Mode  :character   Mode  :character   Median :-76.52  
##  Mean   : 4.507                                         Mean   :-76.52  
##  3rd Qu.: 5.000                                         3rd Qu.:-76.50  
##  Max.   :10.000                                         Max.   :-76.47  
##                                                                         
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.452  
##  Median :3.468  
##  Mean   :3.460  
##  3rd Qu.:3.482  
##  Max.   :3.496  
## 
#Porcentaje de distribución de las zonas
Dist_Zonas = table(viviendas_casa_norte$zona)/length(viviendas_casa_norte$estrato)*100
Dist_Zonas
## 
## Zona Norte 
##        100
#Histograma de distribución de los estratos

ggplot(viviendas_casa_norte, aes(x = estrato)) +
  geom_histogram(bins = 30)

#Cómo se distribuyen los precios de las viviendas

ggplot(viviendas_casa_norte, aes(x = preciom)) +
  geom_histogram(bins = 30)

# Cambiamos a valor numérico el campo de latitud y longitud para hacer un mapa
viviendas_casa_norte$longitud <- as.numeric(viviendas_casa_norte$longitud)
viviendas_casa_norte$latitud <- as.numeric(viviendas_casa_norte$latitud)
mapa <- leaflet() %>%
  addProviderTiles("CartoDB.Positron")
mapa <- mapa %>%
  addCircleMarkers(data = viviendas_casa_norte,
                  lng = ~longitud,
                  lat = ~latitud,
                  popup = ~paste("ID:", id))
mapa
#Asignamos un color a la zona y al estrato para identificarlo más claro en el mapa.
color_estrato<- colorFactor(palette = "Set2", domain=viviendas_casa_norte$estrato)
color_zona<- colorFactor(palette = "Set2", domain=viviendas_casa_norte$zona)
# Graficamos las coordenadas de las casas en el norte

# Creamos un mapa que nos segmente con colores las zonas.
leaflet(data = viviendas_casa_norte) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, radius = 2,
                   color = ~rgb(1, 0, 0))

Revisando los puntos marcados en los mapas y buscando información de la distribución de las zonas en Cali, vemos que no todos los puntos están en la Zona Norte, algunos puntos están situados más hacia el oriente de la ciudad, una pequeña proporción (3 casas aproximadamente) están en el occidente y otras incluso están hacia el centro de la ciudad.

2. Realizamos un Análisis Exploratorio de Datos (EDA)

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.
2.1 Correlación precio - área construida
ggplot(viviendas_casa_norte, aes_string(x = "areaconst", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Área construida", x = "Área construida (m²)", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

Observamos que existe una correlación positiva entre el área construida y el precio de la vivienda. A medida que aumenta el área construida, también aumenta el precio de la vivienda.
2.2 Correlación precio - estrato
viviendas_casa_norte %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = estrato)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ estrato, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

Se observa una diferencia en el precio de la vivienda según el estrato.En general, el precio de la vivienda aumenta con el estrato.Adicional, vemos que hay algunos outliers con casos de viviendas en estrato 5 pero con precios muy por encima del promedio, esto se observa en todos los estratos pero es más marcado en el estrato 5.
2.3 Correlación precio - número de baños
viviendas_casa_norte %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = banios)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ banios, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

ggplot(viviendas_casa_norte, aes_string(x = "banios", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Baños", x = "Número de baños", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## `geom_smooth()` using formula = 'y ~ x'

Teniendo en cuenta que la correlación de la cantidad de baños y el precio de la vivienda no es directa (0.52), observamos en los boxplot que existen Casas con un solo baño y con altos precios, en otras casas de tenemos una muestra de que la cantidad de baños si incide en el precio pero no es netamente concluyente.
2.4 Correlación precio - número de habitaciones
ggplot(viviendas_casa_norte, aes_string(x = "habitaciones", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Hab", x = "Num Habitaciones", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## `geom_smooth()` using formula = 'y ~ x'

viviendas_casa_norte %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = habitaciones)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ habitaciones, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

Aunque observamos algunas casas con muchas habitaciones y altos precios, el coeficiente de correlación es relativamente bajo (0.32), en las casas con mayor número de habitaciones se obseva un precio mayor, pero hay algunas con pocas habitaciones y altos precios que según el boxplot muestra algunos datos atípicos en esos casos (ejemplo casas con 3 habitaciones y precios superiores a 700 millones).
2.5 Correlación precio - zona
ggplot(viviendas_casa_norte, aes_string(x = "zona", y = "preciom")) +
  geom_boxplot() +
  labs(title = "Precio vs Zona", x = "Zona", y = "Precio (COP)")

Observamos que la gran mayoría de casas que hay en la zona norte están entre los 300 y los 500 millones, pero existen también un número importante de casas con valores superiores a los Mil millones.
# Creacion de mapas de calor para visualizar correlaciones entre las variables


# Calcula la matriz de correlación.
cor_matrix <- cor(viviendas_casa_norte[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])

# Crea el mapa de calor.
corrplot(cor_matrix, method = "color")

3. Estimación de un modelo de regresión lineal múltiple

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ár 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).
# Creamos el modelo
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = viviendas_casa_norte)
summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = viviendas_casa_norte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -784.29  -77.56  -16.03   47.67  978.61 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -238.17090   44.40551  -5.364 1.34e-07 ***
## areaconst       0.67673    0.05281  12.814  < 2e-16 ***
## estrato        80.63495    9.82632   8.206 2.70e-15 ***
## habitaciones    7.64511    5.65873   1.351    0.177    
## parqueaderos   24.00598    5.86889   4.090 5.14e-05 ***
## banios         18.89938    7.48800   2.524    0.012 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 155.1 on 429 degrees of freedom
##   (287 observations deleted due to missingness)
## Multiple R-squared:  0.6041, Adjusted R-squared:  0.5995 
## F-statistic: 130.9 on 5 and 429 DF,  p-value: < 2.2e-16
Revisando los estadísticos que arroja el modelo, vemos que el precio del apartamento crece 0.67 millones por cada metro de la vivienda, 80 millones por el estrato, 7.6 millones por las habitaciones, 24 millones por los parqueaderos y 18 millones en relación con los baños.
A continuación una interpretación de los coeficientes:
- Intercepto: El valor del precio cuando todas las demás variables son iguales a 0.
- Coeficiente de areaconst: El cambio en el precio por cada metro cuadrado adicional de área construida.
- Coeficiente de estrato: El cambio en el precio por cada unidad de aumento en el estrato.
- Coeficiente de habitaciones: El cambio en el precio por cada habitación adicional.
- Coeficiente de parqueaderos: El cambio en el precio por cada parqueadero adicional.
- Coeficiente de banios: El cambio en el precio por cada baño adicional.

Como dato de contexto importante, para determinar si los coeficientes son estadísticamente significativos, debemos observar el valor p asociado a cada coeficiente. Un valor p menor a 0.05 indica que el coeficiente es significativamente diferente de 0. De acuerdo a lo anterior y validando los estadísticos del modelo, vemos que el area construida, el estrato y los parqueaderos son significativos.

Interpretación de R²: El R² indica la proporción de la variabilidad del precio explicada por las variables del modelo. Un valor de R² cercano a 1 indica que las variables del modelo explican una gran parte de la variabilidad del precio. En nuestro modelo, en R cuadrado nos da un valor de 0.6041, esto quiere decir que la variación del precio se explica en un 60% por los atributos que tenemos.
Para mejorar el modelo, podríamos agregar otras variables que ayuden a mejorar el ajuste, también podríamos revisar qué variables están altamente correlacionadas para evitar problemas de multicolinealidad, también podríamos transformar las variables que sea necesario (escalar) para mejorar la linealidad de la relación, también podemos utilizar técnicas de selección de variables para identificar las variables más importantes.

4. Validación de supuestos del modelo

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).
# Transformamos el estrato en una variable dummy

estrato_dummy <- model.matrix(~estrato, data = viviendas_casa_norte)
# Agregamos la variable barrio y la transformamos una variable dummy

barrio_dummy <- model.matrix(~barrio, data = viviendas_casa_norte)
# Ajustar un modelo de regresión lineal con las variables dummy
modelo_ajustado <- lm(preciom ~ areaconst + estrato_dummy + habitaciones + parqueaderos + banios + barrio_dummy, data = viviendas_casa_norte)

# Ver el resumen del modelo
summary(modelo_ajustado)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato_dummy + habitaciones + 
##     parqueaderos + banios + barrio_dummy, data = viviendas_casa_norte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -551.34  -51.02    0.00   36.98  931.58 
## 
## Coefficients: (34 not defined because of singularities)
##                                               Estimate Std. Error t value
## (Intercept)                                  143.75533   96.70337   1.487
## areaconst                                      0.63275    0.05233  12.091
## estrato_dummy(Intercept)                            NA         NA      NA
## estrato_dummyestrato                          25.42311   16.60823   1.531
## habitaciones                                   7.41688    5.82174   1.274
## parqueaderos                                  17.22837    5.96737   2.887
## banios                                        19.98416    7.39568   2.702
## barrio_dummy(Intercept)                             NA         NA      NA
## barrio_dummybarrioalameda del río           -177.73233  151.72486  -1.171
## barrio_dummybarrioalamos                    -157.52146  114.29485  -1.378
## barrio_dummybarrioatanasio girardot          -44.03594  153.01909  -0.288
## barrio_dummybarriobarranquilla              -208.74847  152.29858  -1.371
## barrio_dummybarriobarrio tranquilo y                NA         NA      NA
## barrio_dummybarriobase aérea               -112.59014  115.91523  -0.971
## barrio_dummybarrioberlin                            NA         NA      NA
## barrio_dummybarriobrisas de los             -196.30863   80.28687  -2.445
## barrio_dummybarriobrisas del guabito                NA         NA      NA
## barrio_dummybarrioCali                              NA         NA      NA
## barrio_dummybarriocalibella                 -202.74683  152.10681  -1.333
## barrio_dummybarriocalima                    -197.63188  115.93165  -1.705
## barrio_dummybarriocalimio norte             -256.70476  101.15900  -2.538
## barrio_dummybarriocambulos                  -118.17301  149.71818  -0.789
## barrio_dummybarriocentenario                 220.65401  149.88407   1.472
## barrio_dummybarriochapinero                         NA         NA      NA
## barrio_dummybarriochipichape                 -17.20080   81.68154  -0.211
## barrio_dummybarriociudad los álamos         -157.14816   91.51567  -1.717
## barrio_dummybarriocolinas del bosque        -132.91402  149.42602  -0.889
## barrio_dummybarriocristales                         NA         NA      NA
## barrio_dummybarrioel bosque                 -192.59728   58.16064  -3.311
## barrio_dummybarrioel cedro                          NA         NA      NA
## barrio_dummybarrioel gran limonar            157.81100  149.46209   1.056
## barrio_dummybarrioel guabito                -214.58309  152.10808  -1.411
## barrio_dummybarrioel sena                    -83.41607  153.19582  -0.545
## barrio_dummybarrioel trébol                 -81.37446  153.56692  -0.530
## barrio_dummybarrioevaristo garcía                   NA         NA      NA
## barrio_dummybarrioflora industrial          -100.16560   97.35723  -1.029
## barrio_dummybarriofloralia                  -269.14616  152.20420  -1.768
## barrio_dummybarriogaitan                            NA         NA      NA
## barrio_dummybarriogranada                      3.01720   75.19668   0.040
## barrio_dummybarriojorge eliecer gaitán      -222.22301  153.20464  -1.450
## barrio_dummybarriojuanamb√∫                   -2.06605   71.93339  -0.029
## barrio_dummybarriola base                   -240.31531  152.59494  -1.575
## barrio_dummybarriola campiña                -141.05828   88.03797  -1.602
## barrio_dummybarriola esmeralda              -194.36284  151.98002  -1.279
## barrio_dummybarriola flora                  -111.48816   55.15844  -2.021
## barrio_dummybarrioLa Flora                    31.10450  149.94755   0.207
## barrio_dummybarriola floresta               -234.40470  152.53702  -1.537
## barrio_dummybarriola merced                 -170.30849   61.02559  -2.791
## barrio_dummybarriola rivera                 -203.63363  101.36457  -2.009
## barrio_dummybarriola rivera i                       NA         NA      NA
## barrio_dummybarriola rivera ii              -145.72757  152.67476  -0.954
## barrio_dummybarriola riviera                -221.62503  152.51791  -1.453
## barrio_dummybarriola villa del              -126.24204  151.89832  -0.831
## barrio_dummybarriolas acacias               -225.02651  152.35007  -1.477
## barrio_dummybarriolas américas              -59.21801  152.51382  -0.388
## barrio_dummybarriolas ceibas                        NA         NA      NA
## barrio_dummybarriolas delicias                      NA         NA      NA
## barrio_dummybarriolas granjas                       NA         NA      NA
## barrio_dummybarriolos andes                 -211.00498   81.93677  -2.575
## barrio_dummybarriolos guaduales             -177.00037   86.94457  -2.036
## barrio_dummybarriolos guayacanes                    NA         NA      NA
## barrio_dummybarriomanzanares                -333.40615  160.21039  -2.081
## barrio_dummybarriomenga                      681.94678  113.39314   6.014
## barrio_dummybarriometropolitano del norte   -154.35761  149.76630  -1.031
## barrio_dummybarrionueva tequendama                  NA         NA      NA
## barrio_dummybarriooasis de comfandi                 NA         NA      NA
## barrio_dummybarriooccidente                         NA         NA      NA
## barrio_dummybarriopacara                    -164.98804  112.54428  -1.466
## barrio_dummybarrioparque residencial el             NA         NA      NA
## barrio_dummybarriopaseo de los              -137.62201  115.63724  -1.190
## barrio_dummybarriopaso del comercio         -220.91798  118.73329  -1.861
## barrio_dummybarriopoblado campestre         -124.11442  152.14744  -0.816
## barrio_dummybarriopopular                   -179.16011  116.88377  -1.533
## barrio_dummybarrioportada de comfandi               NA         NA      NA
## barrio_dummybarrioportales de comfandi              NA         NA      NA
## barrio_dummybarrioporvenir                          NA         NA      NA
## barrio_dummybarrioprados del norte          -163.17244   59.25128  -2.754
## barrio_dummybarrioquintas de salomia                NA         NA      NA
## barrio_dummybarriorozo la torre             -219.69418  152.16091  -1.444
## barrio_dummybarriosalomia                   -177.50001   73.61466  -2.411
## barrio_dummybarriosan luis                  -221.80113  152.20517  -1.457
## barrio_dummybarriosan luís                          NA         NA      NA
## barrio_dummybarriosan vicente                -12.61278   61.60959  -0.205
## barrio_dummybarriosanta bárbara                     NA         NA      NA
## barrio_dummybarriosanta monica                48.32734   66.16086   0.730
## barrio_dummybarrioSanta Monica               230.34731  149.82284   1.537
## barrio_dummybarriosanta mónica                      NA         NA      NA
## barrio_dummybarriosanta monica norte          96.86529  149.29366   0.649
## barrio_dummybarriosanta monica residencial   -72.34450   83.32149  -0.868
## barrio_dummybarriosanta mónica residencial    32.57600   65.65623   0.496
## barrio_dummybarriosantander                         NA         NA      NA
## barrio_dummybarriotejares de san             -78.75818  150.20261  -0.524
## barrio_dummybarriotorres de comfandi        -175.13157  115.63743  -1.514
## barrio_dummybarriounión de vivienda                 NA         NA      NA
## barrio_dummybarriourbanización barranquilla -218.74847  152.29858  -1.436
## barrio_dummybarriourbanización la flora      -92.49016   61.03449  -1.515
## barrio_dummybarriourbanización la merced    -175.66030   87.84669  -2.000
## barrio_dummybarriourbanización la nueva             NA         NA      NA
## barrio_dummybarriovalle del lili                    NA         NA      NA
## barrio_dummybarrioversalles                   46.03241   66.31463   0.694
## barrio_dummybarriovilla colombia            -263.19432  153.59896  -1.714
## barrio_dummybarriovilla de veracruz         -223.05676  152.11286  -1.466
## barrio_dummybarriovilla del prado           -381.17515   94.00689  -4.055
## barrio_dummybarrioVilla Del Prado           -241.47536  151.88968  -1.590
## barrio_dummybarriovilla del sol             -172.73853   79.45429  -2.174
## barrio_dummybarriovillas de veracruz                NA         NA      NA
## barrio_dummybarrioVillas De Veracruz                NA         NA      NA
## barrio_dummybarriovipasa                    -167.91215   60.47889  -2.776
## barrio_dummybarriozona norte                -158.08404   71.51571  -2.210
## barrio_dummybarriozona oriente                      NA         NA      NA
##                                             Pr(>|t|)    
## (Intercept)                                  0.13801    
## areaconst                                    < 2e-16 ***
## estrato_dummy(Intercept)                          NA    
## estrato_dummyestrato                         0.12671    
## habitaciones                                 0.20349    
## parqueaderos                                 0.00412 ** 
## banios                                       0.00722 ** 
## barrio_dummy(Intercept)                           NA    
## barrio_dummybarrioalameda del río            0.24221    
## barrio_dummybarrioalamos                     0.16900    
## barrio_dummybarrioatanasio girardot          0.77368    
## barrio_dummybarriobarranquilla               0.17134    
## barrio_dummybarriobarrio tranquilo y              NA    
## barrio_dummybarriobase aérea                0.33205    
## barrio_dummybarrioberlin                          NA    
## barrio_dummybarriobrisas de los              0.01496 *  
## barrio_dummybarriobrisas del guabito              NA    
## barrio_dummybarrioCali                            NA    
## barrio_dummybarriocalibella                  0.18340    
## barrio_dummybarriocalima                     0.08911 .  
## barrio_dummybarriocalimio norte              0.01158 *  
## barrio_dummybarriocambulos                   0.43046    
## barrio_dummybarriocentenario                 0.14185    
## barrio_dummybarriochapinero                       NA    
## barrio_dummybarriochipichape                 0.83333    
## barrio_dummybarriociudad los álamos          0.08681 .  
## barrio_dummybarriocolinas del bosque         0.37433    
## barrio_dummybarriocristales                       NA    
## barrio_dummybarrioel bosque                  0.00102 ** 
## barrio_dummybarrioel cedro                        NA    
## barrio_dummybarrioel gran limonar            0.29174    
## barrio_dummybarrioel guabito                 0.15919    
## barrio_dummybarrioel sena                    0.58643    
## barrio_dummybarrioel trébol                 0.59651    
## barrio_dummybarrioevaristo garcía                 NA    
## barrio_dummybarrioflora industrial           0.30424    
## barrio_dummybarriofloralia                   0.07786 .  
## barrio_dummybarriogaitan                          NA    
## barrio_dummybarriogranada                    0.96802    
## barrio_dummybarriojorge eliecer gaitán       0.14779    
## barrio_dummybarriojuanamb√∫                  0.97710    
## barrio_dummybarriola base                    0.11617    
## barrio_dummybarriola campiña                 0.10998    
## barrio_dummybarriola esmeralda               0.20177    
## barrio_dummybarriola flora                   0.04400 *  
## barrio_dummybarrioLa Flora                   0.83579    
## barrio_dummybarriola floresta                0.12525    
## barrio_dummybarriola merced                  0.00554 ** 
## barrio_dummybarriola rivera                  0.04529 *  
## barrio_dummybarriola rivera i                     NA    
## barrio_dummybarriola rivera ii               0.34047    
## barrio_dummybarriola riviera                 0.14707    
## barrio_dummybarriola villa del               0.40647    
## barrio_dummybarriolas acacias                0.14054    
## barrio_dummybarriolas américas              0.69804    
## barrio_dummybarriolas ceibas                      NA    
## barrio_dummybarriolas delicias                    NA    
## barrio_dummybarriolas granjas                     NA    
## barrio_dummybarriolos andes                  0.01042 *  
## barrio_dummybarriolos guaduales              0.04251 *  
## barrio_dummybarriolos guayacanes                  NA    
## barrio_dummybarriomanzanares                 0.03814 *  
## barrio_dummybarriomenga                     4.46e-09 ***
## barrio_dummybarriometropolitano del norte    0.30340    
## barrio_dummybarrionueva tequendama                NA    
## barrio_dummybarriooasis de comfandi               NA    
## barrio_dummybarriooccidente                       NA    
## barrio_dummybarriopacara                     0.14353    
## barrio_dummybarrioparque residencial el           NA    
## barrio_dummybarriopaseo de los               0.23479    
## barrio_dummybarriopaso del comercio          0.06361 .  
## barrio_dummybarriopoblado campestre          0.41518    
## barrio_dummybarriopopular                    0.12620    
## barrio_dummybarrioportada de comfandi             NA    
## barrio_dummybarrioportales de comfandi            NA    
## barrio_dummybarrioporvenir                        NA    
## barrio_dummybarrioprados del norte           0.00619 ** 
## barrio_dummybarrioquintas de salomia              NA    
## barrio_dummybarriorozo la torre              0.14966    
## barrio_dummybarriosalomia                    0.01640 *  
## barrio_dummybarriosan luis                   0.14592    
## barrio_dummybarriosan luís                        NA    
## barrio_dummybarriosan vicente                0.83791    
## barrio_dummybarriosanta bárbara                   NA    
## barrio_dummybarriosanta monica               0.46559    
## barrio_dummybarrioSanta Monica               0.12506    
## barrio_dummybarriosanta mónica                    NA    
## barrio_dummybarriosanta monica norte         0.51687    
## barrio_dummybarriosanta monica residencial   0.38583    
## barrio_dummybarriosanta mónica residencial   0.62009    
## barrio_dummybarriosantander                       NA    
## barrio_dummybarriotejares de san             0.60036    
## barrio_dummybarriotorres de comfandi         0.13078    
## barrio_dummybarriounión de vivienda               NA    
## barrio_dummybarriourbanización barranquilla  0.15178    
## barrio_dummybarriourbanización la flora      0.13056    
## barrio_dummybarriourbanización la merced     0.04629 *  
## barrio_dummybarriourbanización la nueva           NA    
## barrio_dummybarriovalle del lili                  NA    
## barrio_dummybarrioversalles                  0.48804    
## barrio_dummybarriovilla colombia             0.08748 .  
## barrio_dummybarriovilla de veracruz          0.14342    
## barrio_dummybarriovilla del prado           6.16e-05 ***
## barrio_dummybarrioVilla Del Prado            0.11276    
## barrio_dummybarriovilla del sol              0.03035 *  
## barrio_dummybarriovillas de veracruz              NA    
## barrio_dummybarrioVillas De Veracruz              NA    
## barrio_dummybarriovipasa                     0.00579 ** 
## barrio_dummybarriozona norte                 0.02770 *  
## barrio_dummybarriozona oriente                    NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 139.4 on 359 degrees of freedom
##   (287 observations deleted due to missingness)
## Multiple R-squared:  0.7326, Adjusted R-squared:  0.6767 
## F-statistic: 13.11 on 75 and 359 DF,  p-value: < 2.2e-16
Observando los resultados obtenidos con los ajustes de las variables dummy, el estrato pierde relevancia y se vuelve estadisticamente no significativo, se recomienda dejar la variable como se tiene inicialmente. En cuanto a los barrios, vemos que la gran mayoria no son significativos, aunque se resaltan algunos que si son importantes estadísticamente, como por ejemplo: El barrio Menga y el Barrio Villa del Prado y en una menor medida los barrios El Bosque, La Merced y Prados del Norte. La variable Barrio puede ser importante pero se recomienda primero hacer una estandarización de los datos, que estén homologados, con la misma ortografía, etc.
En cuanto al R² y al R² ajustado, vemos que suben significativamente a 0.7326 y a 0.6767 respectivamente, mientras que con el modelo anterior se situaban en 0.6041 y 0.5995.

5. Predecimos el precio de la vivienda del Caso 1

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Las condiciones de la primera solicitud son las siguientes:
tabla <- kable(data.frame(
  Características = c("Tipo", "Área construida", "Parqueaderos", "Baños", "Habitaciones", "Estrato", "Zona", "Crédito preaprobado"),
  "Vivienda 1" = c("Casa", 200, 1, 2, 4, "4 o 5", "Norte", "350 millones")
), format = "html", caption = "Características de la Vivienda 1")

print(tabla)
## <table>
## <caption>Características de la Vivienda 1</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> Características </th>
##    <th style="text-align:left;"> Vivienda.1 </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> Tipo </td>
##    <td style="text-align:left;"> Casa </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Área construida </td>
##    <td style="text-align:left;"> 200 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Parqueaderos </td>
##    <td style="text-align:left;"> 1 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Baños </td>
##    <td style="text-align:left;"> 2 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Habitaciones </td>
##    <td style="text-align:left;"> 4 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Estrato </td>
##    <td style="text-align:left;"> 4 o 5 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Zona </td>
##    <td style="text-align:left;"> Norte </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Crédito preaprobado </td>
##    <td style="text-align:left;"> 350 millones </td>
##   </tr>
## </tbody>
## </table>
#Predecimos el valor de la casa de acuerdo a las condiciones
nueva_vivienda_4 <- data.frame(
  areaconst = 200, # Área construida
  estrato = 4, # Estrato
  habitaciones = 4, # Número de habitaciones
  parqueaderos = 1, # Número de parqueaderos
  banios = 2 # Número de baños
)
prediccion_4 <- predict(modelo, nueva_vivienda_4)
print(paste("El precio predicho de la vivienda en estrato 4 es:", prediccion_4))
## [1] "El precio predicho de la vivienda en estrato 4 es: 312.100986320264"
#Predecimos el valor de la casa de acuerdo a las condiciones
nueva_vivienda_5 <- data.frame(
  areaconst = 200, # Área construida
  estrato = 5, # Estrato
  habitaciones = 4, # Número de habitaciones
  parqueaderos = 1, # Número de parqueaderos
  banios = 2 # Número de baños
)
prediccion_5 <- predict(modelo, nueva_vivienda_5)
print(paste("El precio predicho de la vivienda en estrato 5 es:", prediccion_5))
## [1] "El precio predicho de la vivienda en estrato 5 es: 392.735934055628"
Teniendo en cuenta el resultado de ambas predicciones, vemos que la más opcionada es el primer resultado, una casa en estrato 4 con un precio estimado de $312 MM COP, ya que este se ajusta al valor del crédito preaprobado por $350 MM COP.

6. Sugerencias para la vivienda del Caso 1 de acuerdo a los resultados.

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.
De acuerdo a los resultados de la predicción, nos enfocaremos en casas de estrato 4 donde el precio oscile entre $ 310 MM COP y $ 350 MM COP y que cumplen con las características solicitadas por la empresa que busca la casa.
viviendas_opcionadas <- viviendas_casa_norte %>%
  filter(preciom >= 310 & preciom <= 350,
         estrato == 4,
         parqueaderos >= 1,
         banios >= 2,
         habitaciones >= 4,
         areaconst >= 200)

print(viviendas_opcionadas)
##      id       zona piso estrato preciom areaconst parqueaderos banios
## 1  4458 Zona Norte    2       4     315     270.0            2      4
## 2  3352 Zona Norte   NA       4     335     300.0            3      4
## 3   937 Zona Norte    2       4     350     280.0            2      3
## 4   952 Zona Norte    2       4     330     275.0            2      3
## 5  1108 Zona Norte    2       4     330     260.0            1      3
## 6  1144 Zona Norte   NA       4     320     200.0            2      4
## 7  5031 Zona Norte    3       4     350     350.0            1      4
## 8  2544 Zona Norte    1       4     340     264.5            2      4
## 9  7470 Zona Norte    2       4     340     264.0            2      5
## 10 1822 Zona Norte   NA       4     340     295.0            2      2
##    habitaciones tipo    barrio  longitud latitud
## 1             4 Casa el bosque -76.53176 3.48780
## 2             4 Casa el bosque -76.52600 3.43400
## 3             4 Casa la merced -76.50603 3.46643
## 4             5 Casa la merced -76.50647 3.47516
## 5             4 Casa la merced -76.51060 3.48108
## 6             4 Casa la merced -76.51156 3.48029
## 7             5 Casa   salomia -76.53464 3.44987
## 8             4 Casa    vipasa -76.52096 3.47665
## 9             7 Casa    vipasa -76.54980 3.37556
## 10            4 Casa    vipasa -76.51777 3.48060
Generamos un mapa con las Viviendas Opcionadas
# Creamos un mapa que nos segmente con colores las zonas.
leaflet(data = viviendas_opcionadas) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, radius = 3,
                   color = ~rgb(0, 0, 0))
Mostramos un resumen final de la cantidad de casas que cumplen las condiciones por Barrios de la Zona Norte.
viviendas_por_barrio <- viviendas_opcionadas %>%
  group_by(barrio) %>%
  summarise(Cantidad = n())
print(viviendas_por_barrio)
## # A tibble: 4 × 2
##   barrio    Cantidad
##   <chr>        <int>
## 1 el bosque        2
## 2 la merced        4
## 3 salomia          1
## 4 vipasa           3
Las viviendas mejor opcionadas (por área, número de habitaciones, cantidad de baños y parqueaderos) son las que están identificadas con los ID: 5031, 3352, 1822, 937 y 952.
# Mejores cinco casas
mejores_casas <- viviendas_opcionadas %>%
  filter(id %in% c(5031, 3352, 1822, 937, 952))

print(mejores_casas)
##     id       zona piso estrato preciom areaconst parqueaderos banios
## 1 3352 Zona Norte   NA       4     335       300            3      4
## 2  937 Zona Norte    2       4     350       280            2      3
## 3  952 Zona Norte    2       4     330       275            2      3
## 4 5031 Zona Norte    3       4     350       350            1      4
## 5 1822 Zona Norte   NA       4     340       295            2      2
##   habitaciones tipo    barrio  longitud latitud
## 1            4 Casa el bosque -76.52600 3.43400
## 2            4 Casa la merced -76.50603 3.46643
## 3            5 Casa la merced -76.50647 3.47516
## 4            5 Casa   salomia -76.53464 3.44987
## 5            4 Casa    vipasa -76.51777 3.48060
leaflet(data = mejores_casas) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, radius = 5,
                   color = ~rgb(0, 0, 1))

Iniciamos la construcción del informe para la segunda solicitud.

1. Realizamos filtro para tener únicamente los apartamentos de la zona Sur.

# Carga los datos
datos <- read.csv("vivienda.csv", encoding = "UTF-8")

vivienda_2 <- data.frame(datos)

str(vivienda_2)
## 'data.frame':    8322 obs. of  13 variables:
##  $ id          : int  1147 1169 1350 5992 1212 1724 2326 4386 1209 1592 ...
##  $ zona        : chr  "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : int  NA NA NA 2 1 1 1 1 2 2 ...
##  $ estrato     : int  3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : int  250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num  70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: int  1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : int  3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: int  6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr  "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr  "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num  -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num  3.43 3.43 3.44 3.44 3.46 ...
viviendas_aptos_sur <- subset(vivienda_2, tipo == "Apartamento" & zona == "Zona Sur")
#str(viviendas_aptos_sur)
head(viviendas_aptos_sur, n=4)
##       id     zona piso estrato preciom areaconst parqueaderos banios
## 24  5098 Zona Sur    5       4     290        96            1      2
## 164  698 Zona Sur    2       3      78        40            1      1
## 264 8199 Zona Sur   NA       6     875       194            2      5
## 284 1241 Zona Sur   NA       3     135       117           NA      2
##     habitaciones        tipo     barrio  longitud latitud
## 24             3 Apartamento      acopi -76.53464 3.44987
## 164            2 Apartamento aguablanca -76.50100 3.40000
## 264            3 Apartamento  aguacatal -76.55700 3.45900
## 284            3 Apartamento    alameda -76.51400 3.44100

Realizamos un resumen estadístico de la información de la Base 2

# Muestra un resumen estadístico de las variables numéricas en el dataset.
summary(viviendas_aptos_sur)  
##        id           zona                piso           estrato    
##  Min.   :   3   Length:2787        Min.   : 1.000   Min.   :3.00  
##  1st Qu.:2292   Class :character   1st Qu.: 2.000   1st Qu.:4.00  
##  Median :4004   Mode  :character   Median : 4.000   Median :5.00  
##  Mean   :4131                      Mean   : 4.469   Mean   :4.63  
##  3rd Qu.:5876                      3rd Qu.: 6.000   3rd Qu.:5.00  
##  Max.   :8302                      Max.   :12.000   Max.   :6.00  
##                                    NA's   :622                    
##     preciom         areaconst       parqueaderos        banios     
##  Min.   :  75.0   Min.   : 40.00   Min.   : 1.000   Min.   :0.000  
##  1st Qu.: 175.0   1st Qu.: 65.00   1st Qu.: 1.000   1st Qu.:2.000  
##  Median : 245.0   Median : 85.00   Median : 1.000   Median :2.000  
##  Mean   : 297.3   Mean   : 97.47   Mean   : 1.415   Mean   :2.488  
##  3rd Qu.: 335.0   3rd Qu.:110.00   3rd Qu.: 2.000   3rd Qu.:3.000  
##  Max.   :1750.0   Max.   :932.00   Max.   :10.000   Max.   :8.000  
##                                    NA's   :406                     
##   habitaciones       tipo              barrio             longitud     
##  Min.   :0.000   Length:2787        Length:2787        Min.   :-76.57  
##  1st Qu.:3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median :3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   :2.966                                         Mean   :-76.53  
##  3rd Qu.:3.000                                         3rd Qu.:-76.52  
##  Max.   :6.000                                         Max.   :-76.46  
##                                                                        
##     latitud     
##  Min.   :3.334  
##  1st Qu.:3.370  
##  Median :3.383  
##  Mean   :3.390  
##  3rd Qu.:3.406  
##  Max.   :3.497  
## 
#Porcentaje de distribución de las zonas
Dist_Zonas_Sur = table(viviendas_aptos_sur$zona)/length(viviendas_aptos_sur$estrato)*100
Dist_Zonas_Sur
## 
## Zona Sur 
##      100
#Histograma de distribución de los estratos

ggplot(viviendas_aptos_sur, aes(x = estrato)) +
  geom_histogram(bins = 30)

#Cómo se distribuyen los precios de las viviendas

ggplot(viviendas_aptos_sur, aes(x = preciom)) +
  geom_histogram(bins = 30)

# Cambiamos a valor numérico el campo de latitud y longitud para hacer un mapa
viviendas_aptos_sur$longitud <- as.numeric(viviendas_aptos_sur$longitud)
viviendas_aptos_sur$latitud <- as.numeric(viviendas_aptos_sur$latitud)
mapa_sur <- leaflet() %>%
  addProviderTiles("CartoDB.Positron")
mapa_sur <- mapa_sur %>%
  addCircleMarkers(data = viviendas_aptos_sur,
                  lng = ~longitud,
                  lat = ~latitud,
                  popup = ~paste("ID:", id))
mapa_sur
# Graficamos las coordenadas de los apartamentos en el sur

# Creamos un mapa que nos segmente con colores las zonas.
leaflet(data = viviendas_aptos_sur) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, radius = 3,
                   color = ~rgb(1, 0, 0))
Comparamos el gráfico arrojado con un mapa de la ciudad de Cali distribuido por zonas y observamos que la mayoria está en la zona Sur, pero algunos apartamentos se ubican hacia el centro de la ciudad y en la zona occidente (unos pocos) y también en la zona oriente.

2. Realizamos un Análisis Exploratorio de Datos (EDA)

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, 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.
2.1 Correlación precio - área construida
ggplot(viviendas_aptos_sur, aes_string(x = "areaconst", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Area construida", x = "Area construida (m2)", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## `geom_smooth()` using formula = 'y ~ x'

Observamos que existe una correlación positiva (0.76) entre el área construida y el precio de la vivienda. A medida que aumenta el área construida, también aumenta el precio de la vivienda.
2.2 Correlación precio - estrato
viviendas_aptos_sur %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = estrato)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ estrato, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

Se observa una diferencia en el precio de la vivienda según el estrato.En general, el precio de la vivienda aumenta con el estrato.Aunque existen datos atipicos en todos los estratos, los más alejados de su media están en el estrato uno, que el promedio de los apartamentos está entre 100 y 150 millones, sin embargo, observamos viviendas con precios superiores a los 400 millones.
2.3 Correlación precio - número de baños
viviendas_aptos_sur %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = banios)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ banios, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

ggplot(viviendas_aptos_sur, aes_string(x = "banios", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Banios", x = "Numero de banios", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## `geom_smooth()` using formula = 'y ~ x'

Observamos una correlación de la cantidad de baños y el precio de la vivienda directa (0.72), vemos que a medida que crece el numero de baños también crece el precio de la vivienda, aunque hay algo particular, posiblemente en la captura de los datos, ya que existe un gran número de apartamentos donde supuestamente no se tiene baños.
2.4 Correlación precio - número de habitaciones
ggplot(viviendas_aptos_sur, aes_string(x = "habitaciones", y = "preciom")) +
  geom_point() +
  labs(title = "Precio vs Hab", x = "Num Habitaciones", y = "Precio (COP)") +
  geom_smooth(method = "lm") +
  stat_cor(method = "pearson")
## `geom_smooth()` using formula = 'y ~ x'

viviendas_aptos_sur %>%
  ggplot(aes(x = as.factor(1), y = preciom, fill = habitaciones)) +
  geom_boxplot() +
  scale_x_discrete(labels = "Precios") +
  facet_wrap(~ habitaciones, scales = "free") +
  theme(axis.text.x = element_blank(),
        axis.ticks.x = element_blank())

Aunque observamos algunos apartamentos con muchas habitaciones y altos precios, el coeficiente de correlación es relativamente bajo (0.33), en los apartamentos con mayor número de habitaciones se obseva un precio mayor, pero hay algunas con pocas habitaciones y altos precios que según el boxplot muestra algunos datos atípicos en esos casos (ejemplo apartamentos con 4 habitaciones y precios superiores a 1.000 millones). También observamos que hay algunos apartamentos con cero habitaciones, podríamos suponer que se trata de “Aparta-estudios”.
2.5 Correlación precio - zona
ggplot(viviendas_aptos_sur, aes_string(x = "zona", y = "preciom")) +
  geom_boxplot() +
  labs(title = "Precio vs Zona", x = "Zona", y = "Precio (COP)")

Observamos que la gran mayoría de apartamentos que hay en la zona sur están entre los 100 y los 300 millones, pero existen también un número importante de viviendas que superan estos precios, viendo datos atípicos de apartamentos de 700 y hasta de casi 2.000 millones.
# Creacion de mapas de calor para visualizar correlaciones entre las variables


# Calcula la matriz de correlación.
cor_matrix <- cor(viviendas_aptos_sur[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])

# Crea el mapa de calor.
corrplot(cor_matrix, method = "color")

3. Estimación de un modelo de regresión lineal múltiple

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ár 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).
# Creamos el modelo
modelo_aptos <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = viviendas_aptos_sur)
summary(modelo_aptos)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = viviendas_aptos_sur)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1092.02   -42.28    -1.33    40.58   926.56 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -261.62501   15.63220 -16.736  < 2e-16 ***
## areaconst       1.28505    0.05403  23.785  < 2e-16 ***
## estrato        60.89709    3.08408  19.746  < 2e-16 ***
## habitaciones  -24.83693    3.89229  -6.381 2.11e-10 ***
## parqueaderos   72.91468    3.95797  18.422  < 2e-16 ***
## banios         50.69675    3.39637  14.927  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 98.02 on 2375 degrees of freedom
##   (406 observations deleted due to missingness)
## Multiple R-squared:  0.7485, Adjusted R-squared:  0.748 
## F-statistic:  1414 on 5 and 2375 DF,  p-value: < 2.2e-16
Revisando los estadísticos que arroja el modelo, vemos que el precio del apartamento crece 1.28 millones por cada metro de la vivienda, 60 millones por el estrato.
A continuación una interpretación de los coeficientes:
- Intercepto: El valor del precio cuando todas las demás variables son iguales a 0.Es curioso que sea negativo (-261.6), ya que no existen aparamentos sin ninguna característica asociada (área, estrato, habitaciones, etc) y no es interpretable en la práctica.
- Coeficiente de areaconst: El cambio en el precio por cada metro cuadrado adicional de área construida.El precio aumenta 1.28 millones por cada metro adicional construido.
- Coeficiente de estrato: El cambio en el precio por cada unidad de aumento en el estrato.El precio aumenta en 60 millones por cada estrato adicional
- Coeficiente de habitaciones: El cambio en el precio por cada habitación adicional. El precio disminuye en 24 millones por cada habitación adicional. Es curioso que el precio disminuya entre más habitaciones tenga el apartamento.
- Coeficiente de parqueaderos: El cambio en el precio por cada parqueadero adicional. El precio aumenta en 72.9 millones por cada parqueadero adicional.
- Coeficiente de banios: El cambio en el precio por cada baño adicional. El precio aumenta en 50.6 millones por cada baño adicional.
Interpretación de R²: El R² indica la proporción de la variabilidad del precio explicada por las variables del modelo. Un valor de R² cercano a 1 indica que las variables del modelo explican una gran parte de la variabilidad del precio. En nuestro modelo, en R cuadrado nos da un valor de 0.7485, esto quiere decir que la variación del precio se explica en un 75% por los atributos que tenemos.
Para mejorar el modelo, podríamos agregar otras variables que ayuden a mejorar el ajuste, también podríamos revisar qué variables están altamente correlacionadas para evitar problemas de multicolinealidad, también podríamos transformar las variables que sea necesario (escalar) para mejorar la linealidad de la relación, también podemos utilizar técnicas de selección de variables para identificar las variables más importantes.

4. Validación de supuestos del modelo

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).
# Transformamos el estrato en una variable dummy

estrato_dummy_aptos <- model.matrix(~estrato, data = viviendas_aptos_sur)
# Agregamos la variable barrio y la transformamos una variable dummy

barrio_dummy_aptos <- model.matrix(~barrio, data = viviendas_aptos_sur)
# Ajustar un modelo de regresión lineal con las variables dummy
modelo_ajustado_aptos <- lm(preciom ~ areaconst + estrato_dummy_aptos + habitaciones + parqueaderos + banios + barrio_dummy_aptos, data = viviendas_aptos_sur)

# Ver el resumen del modelo
summary(modelo_ajustado_aptos)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato_dummy_aptos + habitaciones + 
##     parqueaderos + banios + barrio_dummy_aptos, data = viviendas_aptos_sur)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1119.74   -34.74     0.00    28.59   872.35 
## 
## Coefficients: (16 not defined because of singularities)
##                                                         Estimate Std. Error
## (Intercept)                                            -28.65535   88.90122
## areaconst                                                1.34454    0.04993
## estrato_dummy_aptos(Intercept)                                NA         NA
## estrato_dummy_aptosestrato                              21.15867    3.95547
## habitaciones                                            -9.50457    3.67330
## parqueaderos                                            57.51966    3.69587
## banios                                                  37.96936    3.23736
## barrio_dummy_aptos(Intercept)                                 NA         NA
## barrio_dummy_aptosbarrioaguablanca                     -87.08222  123.28453
## barrio_dummy_aptosbarrioaguacatal                      239.48985  123.64920
## barrio_dummy_aptosbarrioalameda                               NA         NA
## barrio_dummy_aptosbarrioalférez real                  -79.36998  100.63824
## barrio_dummy_aptosbarrioalferez real                          NA         NA
## barrio_dummy_aptosbarrioalto jordán                     -3.97603  123.30458
## barrio_dummy_aptosbarrioaltos de guadalupe             -39.46829  123.28819
## barrio_dummy_aptosbarrioarboleda                       328.59370  123.51442
## barrio_dummy_aptosbarriobelisario caicedo             -100.60596  106.75318
## barrio_dummy_aptosbarriobella suiza                   -157.40278   95.57833
## barrio_dummy_aptosbarriobloques del limonar                   NA         NA
## barrio_dummy_aptosbarriobochalema                      -50.79955   89.07575
## barrio_dummy_aptosbarriobosques del limonar           -101.99736   93.15316
## barrio_dummy_aptosbarriobrisas del limonar             -21.06078  123.27880
## barrio_dummy_aptosbarriobuenos aires                  -101.29511  100.67082
## barrio_dummy_aptosbarriocaldas                         -86.76463  123.18468
## barrio_dummy_aptosbarrioCali                          -106.98818  106.70620
## barrio_dummy_aptosbarriocalicanto                      -93.68630  123.22988
## barrio_dummy_aptosbarriocambulos                      -132.12582  106.74165
## barrio_dummy_aptosbarriocamino real                    -61.11945   90.67409
## barrio_dummy_aptosbarrioCamino Real                    -56.97467  123.19058
## barrio_dummy_aptosbarriocampestre                      -32.95161  123.26934
## barrio_dummy_aptosbarriocaney                          -56.78856   88.17583
## barrio_dummy_aptosbarriocaney especial                        NA         NA
## barrio_dummy_aptosbarriocañasgordas                     73.67160   95.73281
## barrio_dummy_aptosbarriocañaveralejo                   -90.69503   91.83001
## barrio_dummy_aptosbarriocañaverales                    -61.45683   91.06930
## barrio_dummy_aptosbarriocañaverales los samanes       -101.59651  123.19333
## barrio_dummy_aptosbarriocapri                         -114.29684   88.22192
## barrio_dummy_aptosbarriocataya real                    -52.26455  123.71179
## barrio_dummy_aptosbarriocerro cristales                 46.90858  123.24468
## barrio_dummy_aptosbarriochampagnat                    -156.71421  123.28537
## barrio_dummy_aptosbarriociudad 2000                    -74.03933   90.40437
## barrio_dummy_aptosbarriociudad bochalema               -65.79706   88.26779
## barrio_dummy_aptosbarriociudad capri                   -41.91595   91.91211
## barrio_dummy_aptosbarriociudad jardin                   29.78865   92.22975
## barrio_dummy_aptosbarriociudad jardín                   58.15919   87.64021
## barrio_dummy_aptosbarriociudad jardin pance            247.88228  123.49191
## barrio_dummy_aptosbarriociudad meléndez                 4.20175  123.18349
## barrio_dummy_aptosbarriociudad melendez               -102.75518  123.26048
## barrio_dummy_aptosbarriociudad pacifica                -75.65268  123.23092
## barrio_dummy_aptosbarrioCiudad Pacifica                       NA         NA
## barrio_dummy_aptosbarriociudad universitaria                  NA         NA
## barrio_dummy_aptosbarriociudadela comfandi             -53.08293  106.70611
## barrio_dummy_aptosbarriociudadela melendez             -43.62715  123.21958
## barrio_dummy_aptosbarriociudadela pasoancho            -17.07079  100.79308
## barrio_dummy_aptosbarriocolinas del sur               -121.78237  123.25253
## barrio_dummy_aptosbarriocolseguros                     -90.35196   89.36758
## barrio_dummy_aptosbarriocolseguros andes                -7.73100  123.18604
## barrio_dummy_aptosbarriocristales                      -63.94087  123.47113
## barrio_dummy_aptosbarriocristobal colón               -108.31921  123.18994
## barrio_dummy_aptosbarriocuarto de legua               -128.80250   88.66817
## barrio_dummy_aptosbarriodepartamental                  -77.33011   97.42324
## barrio_dummy_aptosbarrioel caney                       -83.89325   87.61270
## barrio_dummy_aptosbarrioEl Caney                       -41.17642  123.18220
## barrio_dummy_aptosbarrioel dorado                      -43.09598   97.43832
## barrio_dummy_aptosbarrioel gran limonar               -120.48470  100.60653
## barrio_dummy_aptosbarrioel guabal                     -129.32740  106.79724
## barrio_dummy_aptosbarrioel ingenio                     -83.56304   87.56411
## barrio_dummy_aptosbarrioel ingenio 3                    30.35399  123.24793
## barrio_dummy_aptosbarrioel ingenio i                   -80.53400   90.55004
## barrio_dummy_aptosbarrioel ingenio ii                 -100.67392   91.90704
## barrio_dummy_aptosbarrioel ingenio iii                -114.28641   91.42387
## barrio_dummy_aptosbarrioel jordán                             NA         NA
## barrio_dummy_aptosbarrioel lido                        -93.29555   88.50700
## barrio_dummy_aptosbarrioel limonar                    -111.46410   88.04703
## barrio_dummy_aptosbarrioel refugio                     -90.42792   87.71149
## barrio_dummy_aptosbarriofuentes de la                  -87.82378  123.23970
## barrio_dummy_aptosbarriogran limonar                  -124.03919   92.47384
## barrio_dummy_aptosbarrioguadalupe                     -136.49815   92.45589
## barrio_dummy_aptosbarrioingenio                       -146.56241  123.55444
## barrio_dummy_aptosbarrioingenio ii                     -31.55621  123.29751
## barrio_dummy_aptosbarriola alborada                    -70.96847  106.77886
## barrio_dummy_aptosbarriola cascada                     -98.46959  106.75078
## barrio_dummy_aptosbarriola flora                       -48.63940  123.28928
## barrio_dummy_aptosbarriola hacienda                    -23.57487   87.57779
## barrio_dummy_aptosbarrioLa Hacienda                     22.28674  123.24574
## barrio_dummy_aptosbarriola luisa                              NA         NA
## barrio_dummy_aptosbarriola selva                       -85.85495   94.12870
## barrio_dummy_aptosbarriolas acacias                    -88.22779  123.24748
## barrio_dummy_aptosbarriolas camelias                   -53.86550  123.18167
## barrio_dummy_aptosbarriolas granjas                    -83.34970  100.61651
## barrio_dummy_aptosbarriolas vegas de                  -107.75518  123.26048
## barrio_dummy_aptosbarriolos cambulos                   -87.37437   89.51589
## barrio_dummy_aptosbarriolos cámbulos                   -94.97852  100.62315
## barrio_dummy_aptosbarriolos farallones                        NA         NA
## barrio_dummy_aptosbarriomayapan las vegas              -84.61802   88.64539
## barrio_dummy_aptosbarriomeléndez                      -77.54374   91.05548
## barrio_dummy_aptosbarriomelendez                      -105.10530   89.03634
## barrio_dummy_aptosbarriomiraflores                     -37.92614  123.24381
## barrio_dummy_aptosbarriomulticentro                    -40.86410   89.01081
## barrio_dummy_aptosbarrionapoles                       -123.43783  123.25314
## barrio_dummy_aptosbarrionápoles                        -97.15100   95.50186
## barrio_dummy_aptosbarrionormandía                       75.72289  123.45435
## barrio_dummy_aptosbarrionueva tequendama               -92.26231   88.43990
## barrio_dummy_aptosbarriooasis de pasoancho             -73.62715  123.21958
## barrio_dummy_aptosbarriopampa linda                   -135.43847   90.99793
## barrio_dummy_aptosbarriopampalinda                    -129.39145  100.64662
## barrio_dummy_aptosbarriopanamericano                   -99.76165  123.21772
## barrio_dummy_aptosbarriopance                           93.51382   87.76669
## barrio_dummy_aptosbarrioparcelaciones pance             74.80771   89.95068
## barrio_dummy_aptosbarriopasoancho                      -69.09628  106.75727
## barrio_dummy_aptosbarrioponce                          -11.21324  123.92847
## barrio_dummy_aptosbarrioprados del limonar              -1.43659  100.58842
## barrio_dummy_aptosbarrioPrados Del Limonar             -64.94447  123.25997
## barrio_dummy_aptosbarrioprimero de mayo                -84.08644   89.50260
## barrio_dummy_aptosbarrioquintas de don                 -47.53481   87.96349
## barrio_dummy_aptosbarriorefugio                       -160.17259  123.29812
## barrio_dummy_aptosbarriosamanes                        -69.46847  123.26827
## barrio_dummy_aptosbarriosamanes de guadalupe                  NA         NA
## barrio_dummy_aptosbarriosan bosco                             NA         NA
## barrio_dummy_aptosbarriosan fernando                   -38.27798   89.67578
## barrio_dummy_aptosbarrioSan Fernando                  -293.42364  123.46226
## barrio_dummy_aptosbarriosan fernando nuevo              14.90567   97.42367
## barrio_dummy_aptosbarriosan fernando viejo             -97.44906   97.49474
## barrio_dummy_aptosbarriosan joaquin                   -340.05737  123.67489
## barrio_dummy_aptosbarriosanta anita                   -102.51234   88.38521
## barrio_dummy_aptosbarrioSanta Anita                    -66.10891  106.71035
## barrio_dummy_aptosbarriosanta elena                           NA         NA
## barrio_dummy_aptosbarriosanta isabel                    12.66327   94.10987
## barrio_dummy_aptosbarriosanta teresita                 131.78240   94.48013
## barrio_dummy_aptosbarriosanto domingo                  -79.19417  123.24878
## barrio_dummy_aptosbarriosector aguacatal               -99.96658  123.25055
## barrio_dummy_aptosbarriosector cañaveralejo guadalupe  -65.39979  106.78833
## barrio_dummy_aptosbarrioseminario                     -112.33837   89.16961
## barrio_dummy_aptosbarriotemplete                      -131.64818  106.73711
## barrio_dummy_aptosbarriotequendama                     -79.45732   90.19561
## barrio_dummy_aptosbarriounicentro cali                 590.55193  123.45806
## barrio_dummy_aptosbarriourbanización colseguros        -70.93690  106.68211
## barrio_dummy_aptosbarriourbanizacion gratamira        -106.97467  123.19058
## barrio_dummy_aptosbarriourbanización nueva granada    -104.45371  123.18387
## barrio_dummy_aptosbarriourbanización río lili          -44.22230  100.68763
## barrio_dummy_aptosbarriourbanización tequendama        -71.19057  106.68870
## barrio_dummy_aptosbarriovalle de lili                         NA         NA
## barrio_dummy_aptosbarriovalle del lili                 -54.42244   87.19929
## barrio_dummy_aptosbarrioValle Del Lili                 -37.82378  123.23970
## barrio_dummy_aptosbarrioversalles                     -120.91118  123.33351
## barrio_dummy_aptosbarriovilla del sur                         NA         NA
## barrio_dummy_aptosbarriovipasa                        -128.84295  123.23439
## barrio_dummy_aptosbarriozona sur                       -58.48177   88.80874
##                                                       t value Pr(>|t|)    
## (Intercept)                                            -0.322  0.74723    
## areaconst                                              26.927  < 2e-16 ***
## estrato_dummy_aptos(Intercept)                             NA       NA    
## estrato_dummy_aptosestrato                              5.349 9.73e-08 ***
## habitaciones                                           -2.587  0.00973 ** 
## parqueaderos                                           15.563  < 2e-16 ***
## banios                                                 11.728  < 2e-16 ***
## barrio_dummy_aptos(Intercept)                              NA       NA    
## barrio_dummy_aptosbarrioaguablanca                     -0.706  0.48004    
## barrio_dummy_aptosbarrioaguacatal                       1.937  0.05289 .  
## barrio_dummy_aptosbarrioalameda                            NA       NA    
## barrio_dummy_aptosbarrioalférez real                  -0.789  0.43039    
## barrio_dummy_aptosbarrioalferez real                       NA       NA    
## barrio_dummy_aptosbarrioalto jordán                    -0.032  0.97428    
## barrio_dummy_aptosbarrioaltos de guadalupe             -0.320  0.74890    
## barrio_dummy_aptosbarrioarboleda                        2.660  0.00786 ** 
## barrio_dummy_aptosbarriobelisario caicedo              -0.942  0.34608    
## barrio_dummy_aptosbarriobella suiza                    -1.647  0.09973 .  
## barrio_dummy_aptosbarriobloques del limonar                NA       NA    
## barrio_dummy_aptosbarriobochalema                      -0.570  0.56853    
## barrio_dummy_aptosbarriobosques del limonar            -1.095  0.27366    
## barrio_dummy_aptosbarriobrisas del limonar             -0.171  0.86437    
## barrio_dummy_aptosbarriobuenos aires                   -1.006  0.31443    
## barrio_dummy_aptosbarriocaldas                         -0.704  0.48129    
## barrio_dummy_aptosbarrioCali                           -1.003  0.31614    
## barrio_dummy_aptosbarriocalicanto                      -0.760  0.44718    
## barrio_dummy_aptosbarriocambulos                       -1.238  0.21592    
## barrio_dummy_aptosbarriocamino real                    -0.674  0.50034    
## barrio_dummy_aptosbarrioCamino Real                    -0.462  0.64377    
## barrio_dummy_aptosbarriocampestre                      -0.267  0.78925    
## barrio_dummy_aptosbarriocaney                          -0.644  0.51962    
## barrio_dummy_aptosbarriocaney especial                     NA       NA    
## barrio_dummy_aptosbarriocañasgordas                     0.770  0.44165    
## barrio_dummy_aptosbarriocañaveralejo                   -0.988  0.32344    
## barrio_dummy_aptosbarriocañaverales                    -0.675  0.49985    
## barrio_dummy_aptosbarriocañaverales los samanes        -0.825  0.40963    
## barrio_dummy_aptosbarriocapri                          -1.296  0.19526    
## barrio_dummy_aptosbarriocataya real                    -0.422  0.67272    
## barrio_dummy_aptosbarriocerro cristales                 0.381  0.70353    
## barrio_dummy_aptosbarriochampagnat                     -1.271  0.20381    
## barrio_dummy_aptosbarriociudad 2000                    -0.819  0.41288    
## barrio_dummy_aptosbarriociudad bochalema               -0.745  0.45609    
## barrio_dummy_aptosbarriociudad capri                   -0.456  0.64840    
## barrio_dummy_aptosbarriociudad jardin                   0.323  0.74674    
## barrio_dummy_aptosbarriociudad jardín                   0.664  0.50701    
## barrio_dummy_aptosbarriociudad jardin pance             2.007  0.04484 *  
## barrio_dummy_aptosbarriociudad meléndez                0.034  0.97279    
## barrio_dummy_aptosbarriociudad melendez                -0.834  0.40457    
## barrio_dummy_aptosbarriociudad pacifica                -0.614  0.53934    
## barrio_dummy_aptosbarrioCiudad Pacifica                    NA       NA    
## barrio_dummy_aptosbarriociudad universitaria               NA       NA    
## barrio_dummy_aptosbarriociudadela comfandi             -0.497  0.61891    
## barrio_dummy_aptosbarriociudadela melendez             -0.354  0.72333    
## barrio_dummy_aptosbarriociudadela pasoancho            -0.169  0.86553    
## barrio_dummy_aptosbarriocolinas del sur                -0.988  0.32322    
## barrio_dummy_aptosbarriocolseguros                     -1.011  0.31212    
## barrio_dummy_aptosbarriocolseguros andes               -0.063  0.94996    
## barrio_dummy_aptosbarriocristales                      -0.518  0.60461    
## barrio_dummy_aptosbarriocristobal colón                -0.879  0.37934    
## barrio_dummy_aptosbarriocuarto de legua                -1.453  0.14646    
## barrio_dummy_aptosbarriodepartamental                  -0.794  0.42742    
## barrio_dummy_aptosbarrioel caney                       -0.958  0.33839    
## barrio_dummy_aptosbarrioEl Caney                       -0.334  0.73821    
## barrio_dummy_aptosbarrioel dorado                      -0.442  0.65832    
## barrio_dummy_aptosbarrioel gran limonar                -1.198  0.23121    
## barrio_dummy_aptosbarrioel guabal                      -1.211  0.22604    
## barrio_dummy_aptosbarrioel ingenio                     -0.954  0.34003    
## barrio_dummy_aptosbarrioel ingenio 3                    0.246  0.80548    
## barrio_dummy_aptosbarrioel ingenio i                   -0.889  0.37389    
## barrio_dummy_aptosbarrioel ingenio ii                  -1.095  0.27346    
## barrio_dummy_aptosbarrioel ingenio iii                 -1.250  0.21140    
## barrio_dummy_aptosbarrioel jordán                          NA       NA    
## barrio_dummy_aptosbarrioel lido                        -1.054  0.29195    
## barrio_dummy_aptosbarrioel limonar                     -1.266  0.20566    
## barrio_dummy_aptosbarrioel refugio                     -1.031  0.30267    
## barrio_dummy_aptosbarriofuentes de la                  -0.713  0.47615    
## barrio_dummy_aptosbarriogran limonar                   -1.341  0.17994    
## barrio_dummy_aptosbarrioguadalupe                      -1.476  0.13999    
## barrio_dummy_aptosbarrioingenio                        -1.186  0.23566    
## barrio_dummy_aptosbarrioingenio ii                     -0.256  0.79802    
## barrio_dummy_aptosbarriola alborada                    -0.665  0.50636    
## barrio_dummy_aptosbarriola cascada                     -0.922  0.35641    
## barrio_dummy_aptosbarriola flora                       -0.395  0.69324    
## barrio_dummy_aptosbarriola hacienda                    -0.269  0.78781    
## barrio_dummy_aptosbarrioLa Hacienda                     0.181  0.85652    
## barrio_dummy_aptosbarriola luisa                           NA       NA    
## barrio_dummy_aptosbarriola selva                       -0.912  0.36181    
## barrio_dummy_aptosbarriolas acacias                    -0.716  0.47415    
## barrio_dummy_aptosbarriolas camelias                   -0.437  0.66195    
## barrio_dummy_aptosbarriolas granjas                    -0.828  0.40754    
## barrio_dummy_aptosbarriolas vegas de                   -0.874  0.38210    
## barrio_dummy_aptosbarriolos cambulos                   -0.976  0.32913    
## barrio_dummy_aptosbarriolos cámbulos                   -0.944  0.34532    
## barrio_dummy_aptosbarriolos farallones                     NA       NA    
## barrio_dummy_aptosbarriomayapan las vegas              -0.955  0.33990    
## barrio_dummy_aptosbarriomeléndez                      -0.852  0.39452    
## barrio_dummy_aptosbarriomelendez                       -1.180  0.23794    
## barrio_dummy_aptosbarriomiraflores                     -0.308  0.75831    
## barrio_dummy_aptosbarriomulticentro                    -0.459  0.64621    
## barrio_dummy_aptosbarrionapoles                        -1.001  0.31669    
## barrio_dummy_aptosbarrionápoles                        -1.017  0.30914    
## barrio_dummy_aptosbarrionormandía                       0.613  0.53970    
## barrio_dummy_aptosbarrionueva tequendama               -1.043  0.29696    
## barrio_dummy_aptosbarriooasis de pasoancho             -0.598  0.55022    
## barrio_dummy_aptosbarriopampa linda                    -1.488  0.13679    
## barrio_dummy_aptosbarriopampalinda                     -1.286  0.19871    
## barrio_dummy_aptosbarriopanamericano                   -0.810  0.41823    
## barrio_dummy_aptosbarriopance                           1.065  0.28677    
## barrio_dummy_aptosbarrioparcelaciones pance             0.832  0.40569    
## barrio_dummy_aptosbarriopasoancho                      -0.647  0.51755    
## barrio_dummy_aptosbarrioponce                          -0.090  0.92791    
## barrio_dummy_aptosbarrioprados del limonar             -0.014  0.98861    
## barrio_dummy_aptosbarrioPrados Del Limonar             -0.527  0.59832    
## barrio_dummy_aptosbarrioprimero de mayo                -0.939  0.34758    
## barrio_dummy_aptosbarrioquintas de don                 -0.540  0.58898    
## barrio_dummy_aptosbarriorefugio                        -1.299  0.19405    
## barrio_dummy_aptosbarriosamanes                        -0.564  0.57311    
## barrio_dummy_aptosbarriosamanes de guadalupe               NA       NA    
## barrio_dummy_aptosbarriosan bosco                          NA       NA    
## barrio_dummy_aptosbarriosan fernando                   -0.427  0.66953    
## barrio_dummy_aptosbarrioSan Fernando                   -2.377  0.01756 *  
## barrio_dummy_aptosbarriosan fernando nuevo              0.153  0.87841    
## barrio_dummy_aptosbarriosan fernando viejo             -1.000  0.31764    
## barrio_dummy_aptosbarriosan joaquin                    -2.750  0.00601 ** 
## barrio_dummy_aptosbarriosanta anita                    -1.160  0.24624    
## barrio_dummy_aptosbarrioSanta Anita                    -0.620  0.53564    
## barrio_dummy_aptosbarriosanta elena                        NA       NA    
## barrio_dummy_aptosbarriosanta isabel                    0.135  0.89297    
## barrio_dummy_aptosbarriosanta teresita                  1.395  0.16321    
## barrio_dummy_aptosbarriosanto domingo                  -0.643  0.52058    
## barrio_dummy_aptosbarriosector aguacatal               -0.811  0.41740    
## barrio_dummy_aptosbarriosector cañaveralejo guadalupe  -0.612  0.54032    
## barrio_dummy_aptosbarrioseminario                      -1.260  0.20786    
## barrio_dummy_aptosbarriotemplete                       -1.233  0.21756    
## barrio_dummy_aptosbarriotequendama                     -0.881  0.37844    
## barrio_dummy_aptosbarriounicentro cali                  4.783 1.84e-06 ***
## barrio_dummy_aptosbarriourbanización colseguros        -0.665  0.50616    
## barrio_dummy_aptosbarriourbanizacion gratamira         -0.868  0.38529    
## barrio_dummy_aptosbarriourbanización nueva granada     -0.848  0.39656    
## barrio_dummy_aptosbarriourbanización río lili          -0.439  0.66056    
## barrio_dummy_aptosbarriourbanización tequendama        -0.667  0.50467    
## barrio_dummy_aptosbarriovalle de lili                      NA       NA    
## barrio_dummy_aptosbarriovalle del lili                 -0.624  0.53261    
## barrio_dummy_aptosbarrioValle Del Lili                 -0.307  0.75894    
## barrio_dummy_aptosbarrioversalles                      -0.980  0.32701    
## barrio_dummy_aptosbarriovilla del sur                      NA       NA    
## barrio_dummy_aptosbarriovipasa                         -1.046  0.29590    
## barrio_dummy_aptosbarriozona sur                       -0.659  0.51028    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 87.1 on 2249 degrees of freedom
##   (406 observations deleted due to missingness)
## Multiple R-squared:  0.812,  Adjusted R-squared:  0.801 
## F-statistic: 74.13 on 131 and 2249 DF,  p-value: < 2.2e-16
Observando los resultados obtenidos con los ajustes de las variables dummy, siguen siendo significativas las variables estrato, baños, habitaciones y parqueaderos. En cuanto a los barrios, vemos que la gran mayoria no son significativos, aunque se resaltan algunos que si son importantes estadísticamente, como por ejemplo: El barrio Unicentro Cali y en una menor medida los barrios Arboleda y San Joaquin. La variable Barrio puede ser importante pero se recomienda primero hacer una estandarización de los datos, que estén homologados, con la misma ortografía, etc.
En cuanto al R² y al R² ajustado, vemos que suben significativamente a 0.812 y a 0.801 respectivamente, mientras que con el modelo anterior se situaban en 0.7485 y 0.748.

5. Predecimos el precio de la vivienda del Caso 2 - Apartamentos Zona Sur

Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Las condiciones de la primera solicitud son las siguientes:
tabla_sur <- kable(data.frame(
  Caracteristicas = c("Tipo", "Area construida", "Parqueaderos", "Banios", "Habitaciones", "Estrato", "Zona", "Credito preaprobado"),
  "Vivienda 2" = c("Apartamento", 300, 3, 3, 5, "5 o 6", "Sur", "850 millones")
), format = "html", caption = "Características de la Vivienda 2")

print(tabla_sur)
## <table>
## <caption>Características de la Vivienda 2</caption>
##  <thead>
##   <tr>
##    <th style="text-align:left;"> Caracteristicas </th>
##    <th style="text-align:left;"> Vivienda.2 </th>
##   </tr>
##  </thead>
## <tbody>
##   <tr>
##    <td style="text-align:left;"> Tipo </td>
##    <td style="text-align:left;"> Apartamento </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Area construida </td>
##    <td style="text-align:left;"> 300 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Parqueaderos </td>
##    <td style="text-align:left;"> 3 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Banios </td>
##    <td style="text-align:left;"> 3 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Habitaciones </td>
##    <td style="text-align:left;"> 5 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Estrato </td>
##    <td style="text-align:left;"> 5 o 6 </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Zona </td>
##    <td style="text-align:left;"> Sur </td>
##   </tr>
##   <tr>
##    <td style="text-align:left;"> Credito preaprobado </td>
##    <td style="text-align:left;"> 850 millones </td>
##   </tr>
## </tbody>
## </table>
#Predecimos el valor de la casa de acuerdo a las condiciones
nuevo_apto_5 <- data.frame(
  areaconst = 300, # Área construida
  estrato = 5, # Estrato
  habitaciones = 5, # Número de habitaciones
  parqueaderos = 3, # Número de parqueaderos
  banios = 3 # Número de baños
)
prediccion_apto_5 <- predict(modelo_aptos, nuevo_apto_5)
print(paste("El precio predicho de la vivienda en estrato 5 es:", prediccion_apto_5))
## [1] "El precio predicho de la vivienda en estrato 5 es: 675.024735609108"
#Predecimos el valor de la casa de acuerdo a las condiciones
nuevo_apto_6 <- data.frame(
  areaconst = 300, # Área construida
  estrato = 6, # Estrato
  habitaciones = 5, # Número de habitaciones
  parqueaderos = 3, # Número de parqueaderos
  banios = 3 # Número de baños
)
prediccion_apto_6 <- predict(modelo_aptos, nuevo_apto_6)
print(paste("El precio predicho de la vivienda en estrato 6 es:", prediccion_apto_6))
## [1] "El precio predicho de la vivienda en estrato 6 es: 735.921824175238"
Teniendo en cuenta el resultado de ambas predicciones, vemos que la más opcionada es el segundo resultado, un apartamento en estrato 6 con un precio estimado de $735 MM COP, ya que este se ajusta al valor del crédito preaprobado por $850 MM COP. Aunque revisando la información disponible, no hay ningun apartamento que cumpla las condiciones solicitadas con un precio entre 730 y 850, así que tomaremos el rango estimado a partir de los métros (300 mts de area construida).

6. Sugerencias para la vivienda del Caso 2 de acuerdo a los resultados.

Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 2. Tenga en cuenta que la empresa tiene crédito pre-aprobado de máximo 850 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
De acuerdo a los resultados de la predicción, nos enfocaremos en apartamentos de estrato 5 o 6 donde el precio oscile entre $ 50 MM COP y $ 850 MM COP y que cumplen con las características solicitadas por la empresa que busca la casa.
viviendas_opcionadas_sur <- viviendas_aptos_sur %>%
  filter(preciom >= 50 & preciom <= 850,
         estrato >= 5,
         parqueaderos >= 3,
         banios >= 3,
         habitaciones >= 5,
         areaconst >= 300)

print(viviendas_opcionadas_sur)
##     id     zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 1 7182 Zona Sur   NA       5     730       573            3      8            5
## 2 7512 Zona Sur   NA       5     670       300            3      5            6
##          tipo    barrio longitud latitud
## 1 Apartamento guadalupe  -76.548   3.408
## 2 Apartamento seminario  -76.550   3.409
Observamos que solo dos viviendas cumplen con las condiciones solicitadas por el cliente y ninguna de ellas está en el estrato 6.
Generamos un mapa con las Viviendas Opcionadas
# Creamos un mapa que nos segmente con colores las viviendas.
leaflet(data = viviendas_opcionadas_sur) %>%
  addTiles() %>%
  addCircleMarkers(lng = ~longitud, lat = ~latitud, radius = 10,
                   color = ~rgb(1, 0, 0))
Mostramos un resumen final de la cantidad de casas que cumplen las condiciones por Barrios de la Zona Norte.
viviendas_por_barrio_sur <- viviendas_opcionadas_sur %>%
  group_by(barrio) %>%
  summarise(Cantidad = n())
print(viviendas_por_barrio_sur)
## # A tibble: 2 × 2
##   barrio    Cantidad
##   <chr>        <int>
## 1 guadalupe        1
## 2 seminario        1
Con este análisis tan detallado esperamos que la empresa C&A pueda ayudar a sus clientes a encontrar la mejor vivienda de acuerdo a sus necesidades particulares.