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.