Se solicita asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad utilizando técnicas modelación de regresión lineal.
Se requiere un informe ejecutivo donde analicen los dos casos y las recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos).
# Carga de base de paquetes y librerías requeridas para el ejercicio
library(dplyr)
library(tidyverse)
library(modelr)
library(readr)
library(plotly)
library(purrr)
library(lubridate)
library(tibble)
library(moments)
library(hexbin)
library(splines)
library(paqueteMODELOS)
#carga de data
#data("vivienda")
#str(vivienda)
#write.csv(vivienda, "datos_vivienda.csv", row.names = TRUE)
vivienda <- read.csv("datos_vivienda.csv")
#Convertir todos los caracteres a minúsculas
vivienda$zona <- tolower(vivienda$zona)
vivienda$tipo <- tolower(vivienda$tipo)
vivienda$barrio <- tolower(vivienda$barrio)
# valido tipos apartamento y casa
resumen_tipo<-vivienda$tipo
resumen_tipo <- table(resumen_tipo)
resumen_tipo
## resumen_tipo
## apartamento casa
## 5100 3219
# valido variable zona
resumen_zona<-vivienda$zona
resumen_zona <- table(resumen_zona)
resumen_zona
## resumen_zona
## zona centro zona norte zona oeste zona oriente zona sur
## 124 1920 1198 351 4726
# valido variable barrio
# quitar tildes en barrio
vivienda$barrio = str_replace_all(vivienda$barrio,"á", "a")
vivienda$barrio = str_replace_all(vivienda$barrio,"é", "e")
vivienda$barrio = str_replace_all(vivienda$barrio,"í", "i")
vivienda$barrio = str_replace_all(vivienda$barrio,"ó", "o")
vivienda$barrio = str_replace_all(vivienda$barrio,"ú", "u")
#corregir caracteres extraños en algunos nombres de barrio
vivienda$barrio = str_replace_all(vivienda$barrio,"alférez real", "alferez real")
vivienda$barrio = str_replace_all(vivienda$barrio,"base aérea", "base aerea")
vivienda$barrio = str_replace_all(vivienda$barrio,"ciudad meléndez", "ciudad melendez")
vivienda$barrio = str_replace_all(vivienda$barrio,"el trébol", "el trebol")
vivienda$barrio = str_replace_all(vivienda$barrio,"juanamb√∫", "juanambu")
vivienda$barrio = str_replace_all(vivienda$barrio,"las américas", "las americas")
vivienda$barrio = str_replace_all(vivienda$barrio,"rep√∫blica de israel", "republica de israel")
vivienda$barrio = str_replace_all(vivienda$barrio,"meléndez", "melendez")
# corrección barrio agua blanca por aguablanca
vivienda <- vivienda %>%
mutate(barrio = ifelse(barrio == "agua blanca", "aguablanca", barrio))
##correr en consola estas lineas para validar cambios en var barrio
#resumen_barrio<-vivienda$barrio
#resumen_barrio <- table(resumen_barrio)
#resumen_barrio
# Detección de datos faltantes
vivienda_na <- colSums(is.na(vivienda)) %>%
as.data.frame()
vivienda_na
Faltantes Fríticos piso 2638 faltantes -> 32% de la data parqueaderos 1605 faltantes -> 19% de la data Los demás faltantes son irrelevantes pues reprensentan un porcentaje ínfimo de la muestra (<=0.04%)
# Imputación de valores faltantes de parqueaderos a 0
vivienda$parqueaderos[is.na(vivienda$parqueaderos)] <- 0
#vivienda_parquea0<-subset(vivienda, vivienda$parquea==0)
# se reemplazaron 1606 datos faltantes por 0
#verifico faltantes de parqueadero
vivienda_na <- colSums(is.na(vivienda)) %>%
as.data.frame()
vivienda_na
# Imputación de valores faltantes de piso por la moda
# Función para calcular la moda
calcular_moda <- function(x) {
uniq_x <- unique(x[!is.na(x)]) # Excluir NAs y valores duplicados
uniq_x[which.max(tabulate(match(x, uniq_x)))]
}
# Calcular la moda de la variable piso
moda <- calcular_moda(vivienda$piso)
# Imputar los valores NA con la media
vivienda$piso[is.na(vivienda$piso)] <- moda
#verifico faltantes de piso
vivienda_na <- colSums(is.na(vivienda)) %>%
as.data.frame()
vivienda_na
# Agrego variable precio/m2
vivienda <- mutate(vivienda, precio_m2=preciom/areaconst)
# Gráfico de Relación TIPO INMUEBLE VS PRECIO PROMEDIO:
boxplot(precio_m2 ~ tipo, data = vivienda, xlab = "Tipo", ylab = "Precio - MM", main = "Precio metro cuadrado VS Tipo inmueble")
Mediante el diagrama de caja que compara el valor por metro cuadrado
encontramos que la media de precio por metro cuadrado resulta ser mayor
en apartamentos que en casas.
Realizar un filtro a la base de datos que incluya solo las ofertas de casas de la zona norte de la ciudad.
Presentar los primeros 3 registros de las bases y algunas tablas que comprueben la consulta.
# FILTRO CASAS DE LA ZONA NORTE
vivienda_casas_norte<-filter(vivienda, vivienda$tipo == "casa", vivienda$zona == "zona norte")
#Valido las dimensiones del subset de casas de la zona norte
dim(vivienda_casas_norte)
## [1] 722 14
#Obtengo los primeros 3 registros del dataframe
head(vivienda_casas_norte, 3)
# verifico algunas estadísticas básicas del dataframe para una visión general de las variables numéricas y categóricas.
summary(vivienda_casas_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.997 Mean :4.202
## 3rd Qu.:4225.0 3rd Qu.:2.000 3rd Qu.:5.000
## Max. :8319.0 Max. :7.000 Max. :6.000
## preciom areaconst parqueaderos banios
## Min. : 89.0 Min. : 30.0 Min. : 0.000 Min. : 0.000
## 1st Qu.: 261.2 1st Qu.: 140.0 1st Qu.: 0.000 1st Qu.: 2.000
## Median : 390.0 Median : 240.0 Median : 1.000 Median : 3.000
## Mean : 445.9 Mean : 264.9 Mean : 1.314 Mean : 3.555
## 3rd Qu.: 550.0 3rd Qu.: 336.8 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1940.0 Max. :1440.0 Max. :10.000 Max. :10.000
## 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 precio_m2
## Min. :3.333 Min. :0.2569
## 1st Qu.:3.452 1st Qu.:1.3746
## Median :3.468 Median :1.6641
## Mean :3.460 Mean :1.8460
## 3rd Qu.:3.482 3rd Qu.:2.1396
## Max. :3.496 Max. :7.0000
# Presento tabla de frecuencia para la variable 'estrato'
table(vivienda_casas_norte$estrato)
##
## 3 4 5 6
## 235 161 271 55
##Histograma interactivo para validar distribución de variable preciom
# Histograma interactivo
fig3 <- plot_ly(x = ~vivienda_casas_norte$preciom, type = 'histogram')
fig3
Presentar 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 y explicar por qué.
library(leaflet)
# Definir las coordenadas centrales de Cali, Colombia
cali_coords <- c(lat = 3.4516, lng = -76.5319)
# Crear un mapa centrado en Cali y agregar los puntos
leaflet(data = vivienda_casas_norte) %>%
addTiles() %>% # Agregar el fondo del mapa
setView(lng = cali_coords["lng"], lat = cali_coords["lat"], zoom = 12) %>% # Centrarse en Cali
addCircleMarkers(~longitud, ~latitud, # Usar las columnas de longitud y latitud
radius = 5, # Tamaño de los puntos
color = "blue", # Color de los puntos
stroke = FALSE, # Sin borde en los puntos
fillOpacity = 0.7, # Opacidad de los puntos
label = ~paste("Tipo: ", tipo), # Etiqueta mostrando el tipo de vivienda
labelOptions = labelOptions(noHide = FALSE, direction = "auto"))
# convertir variable piso a numérico
vivienda_casas_norte$piso <- as.numeric(as.character(vivienda_casas_norte$piso))
#calcular tabla de correlacion de variables numericas
cor_matrix <- cor(vivienda_casas_norte[,3:9])
cor_matrix
## piso estrato preciom areaconst parqueaderos
## piso 1.0000000000 -0.1093198 -0.01601832 0.02490458 -0.0006436714
## estrato -0.1093198135 1.0000000 0.61235030 0.45738180 0.3495772176
## preciom -0.0160183216 0.6123503 1.00000000 0.73134800 0.3171471739
## areaconst 0.0249045780 0.4573818 0.73134800 1.00000000 0.3171473009
## parqueaderos -0.0006436714 0.3495772 0.31714717 0.31714730 1.0000000000
## banios 0.1044026345 0.4083039 0.52333570 0.46281525 0.3267373570
## habitaciones 0.1013881596 0.1073141 0.32270961 0.37533231 0.2689443373
## banios habitaciones
## piso 0.1044026 0.1013882
## estrato 0.4083039 0.1073141
## preciom 0.5233357 0.3227096
## areaconst 0.4628152 0.3753323
## parqueaderos 0.3267374 0.2689443
## banios 1.0000000 0.5755314
## habitaciones 0.5755314 1.0000000
library(corrplot)
corrplot(cor_matrix, type="upper", order="hclust",
tl.col = "black", tl.srt = 45)
En la matriz de correlación vemos que la variable objetivo “precio” tiene alta correlación con las demás variables numéricas, excepto con la variable “piso”, lo que nos lleva a concluir que el número de pisos de la casa no es tan determinante en el precio de venta, como si lo son las demás variables.
También podemos ver en el correlograma que las variables independientes no guardan correlación significativa entre sí, por lo tanto no existe colinealidad y todas son susceptibles de ser incluidas en el modelo de regresión lineal.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
#
reg_casas <- lm(preciom ~ piso + banios + habitaciones + parqueaderos + estrato + areaconst, data = vivienda_casas_norte)
summary(reg_casas, digits=5)
##
## Call:
## lm(formula = preciom ~ piso + banios + habitaciones + parqueaderos +
## estrato + areaconst, data = vivienda_casas_norte)
##
## Residuals:
## Min 1Q Median 3Q Max
## -959.81 -80.43 -17.42 50.54 1068.87
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -223.41398 39.44659 -5.664 2.15e-08 ***
## piso -5.99485 11.54753 -0.519 0.604
## banios 27.29998 5.38203 5.072 5.01e-07 ***
## habitaciones 1.47961 4.16679 0.355 0.723
## parqueaderos -1.67863 4.31725 -0.389 0.698
## estrato 85.82055 7.49251 11.454 < 2e-16 ***
## areaconst 0.82738 0.04372 18.923 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 159.2 on 715 degrees of freedom
## Multiple R-squared: 0.6509, Adjusted R-squared: 0.648
## F-statistic: 222.2 on 6 and 715 DF, p-value: < 2.2e-16
El coeficiente R2 de 0.6509 nos representa un nivel aceptable del modelo, tratándose de variables numéricas.
Los estimados de banios (27.3) y estrato (85.8) nos muestran que son quienes aportan de manera altamente significativa al precio de la casa en la zona norte, así como el área construida, mientras que el número de habitaciones aportan de manera mínima al precio del inmueble.
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).
predict <- vivienda_casas_norte %>%
add_predictions(reg_casas) %>%
add_residuals(reg_casas)
# valido que la media de los residuos tienda a CERO
mean(predict$resid)
## [1] -4.677885e-12
# Se valida distribución normal de los residuos
hist(predict$resid)
predict%>%
ggplot(aes(x=pred, y=resid^2)) +
geom_point() +
geom_smooth(color="red", se=FALSE)
predict%>%
ggplot(aes(x=pred,y=resid))+
geom_point()+
geom_smooth(color="red",se=FALSE)
cov(predict$pred,predict$resid)
## [1] 4.843298e-11
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Casa en Estrato 4 área construida 200 * 0.82738 parqueaderos 1 * (-1.67863) baños 2 * 27.29998 habitaciones 4 * 1.47961 estrato 4 * 85.82055 (Intercept) -223.41398
precio_casa_norte_4 <- -223.41398 + 200 * 0.82738 + 1 * (-1.67863) + 2 * 27.29998 + 4 * 85.82055
precio_casa_norte_4
## [1] 338.2655
El precio predicho para una casa estrato 4 en la zona norte de la ciudad de Cali es de: $338,2655 millones de pesos, por tanto, se encuentra dentro del cupo de crédito preaprobado
Casa en Estrato 5 área construida 200 * 0.82738 parqueaderos 1 * (-1.67863) baños 2 * 27.29998 habitaciones 4 * 1.47961 estrato 4 * 85.82055 (Intercept) -223.41398
precio_casa_norte_5 <- -223.41398 + 200 * 0.82738 + 1 * (-1.67863) + 2 * 27.29998 + 5 * 85.82055
precio_casa_norte_5
## [1] 424.0861
El precio predicho para una casa estrato 5 en la zona norte de la ciudad de Cali es de: $424.0861 millones de pesos, por tanto, se encuentra fuera del cupo de crédito preaprobado
El comprador debería optar por una casa en el estrato 4.
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.
Características Vivienda 1 Tipo Casa área construida 200 parqueaderos
1
baños 2 habitaciones 5 estrato 4 o 5 zona Norte Crédito preaprobado 350
millones
# Filtrar registros que cumplan con las características de búsqueda
filtro_casas_norte <- subset(vivienda_casas_norte,
banios >= 2 &
habitaciones >= 5 &
parqueaderos >= 1 &
estrato >= 4 &
estrato <= 5 &
areaconst >= 200 &
preciom < 350)
# Ver cantidad de inmuebles que cumplen con el filtro
nrow(filtro_casas_norte)
## [1] 13
13 casas cumplen los requisitos del filtro. Se muestra una tabla con 10 propuestas
# Ver los primeros registros que cumplen el filtro
head(filtro_casas_norte,10)
# Crear un mapa centrado en Cali y agregar los puntos
leaflet(data = filtro_casas_norte) %>%
addTiles() %>% # Agregar el fondo del mapa
setView(lng = cali_coords["lng"], lat = cali_coords["lat"], zoom = 12) %>% # Centrarse en Cali
addCircleMarkers(~longitud, ~latitud, # Usar las columnas de longitud y latitud
radius = 5, # Tamaño de los puntos
color = "blue", # Color de los puntos
stroke = FALSE, # Sin borde en los puntos
fillOpacity = 0.7, # Opacidad de los puntos
label = ~paste("Id: ", id), # Etiqueta mostrando el id de vivienda
labelOptions = labelOptions(noHide = FALSE, direction = "auto"))
Mediante el mapa interactivo podemos identificar que los inmuebles con id 7432 y 7470 no se encuentran dentro de la zona norte, por lo tanto no se deben tomar en cuenta en la recomendación.
Realizar un filtro a la base de datos que incluya solo las ofertas de apartamentos de la zona sur de la ciudad.
Presentar los primeros 3 registros de las bases y algunas tablas que comprueben la consulta.
# FILTRO APARTAMENTOS DE LA ZONA SUR
vivienda_apartamentos_sur<-filter(vivienda, vivienda$tipo == "apartamento", vivienda$zona == "zona sur")
#Valido las dimensiones del subset de casas de la zona norte
dim(vivienda_apartamentos_sur)
## [1] 2787 14
#Obtengo los primeros 3 registros del dataframe
head(vivienda_apartamentos_sur, 3)
# verifico algunas estadísticas básicas del dataframe para una visión general de las variables numéricas y categóricas.
summary(vivienda_apartamentos_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 : 3.000 Median :5.00
## Mean :4131 Mean : 3.918 Mean :4.63
## 3rd Qu.:5876 3rd Qu.: 5.000 3rd Qu.:5.00
## Max. :8302 Max. :12.000 Max. :6.00
## preciom areaconst parqueaderos banios
## Min. : 75.0 Min. : 40.00 Min. : 0.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.208 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
## 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 precio_m2
## Min. :3.334 Min. :0.281
## 1st Qu.:3.370 1st Qu.:2.473
## Median :3.383 Median :2.902
## Mean :3.390 Mean :2.988
## 3rd Qu.:3.406 3rd Qu.:3.405
## Max. :3.497 Max. :6.414
# Presento tabla de frecuencia para la variable 'estrato'
table(vivienda_apartamentos_sur$estrato)
##
## 3 4 5 6
## 201 1091 1033 462
##Histograma interactivo para validar distribución de variable preciom
# Histograma interactivo
fig4 <- plot_ly(x = ~vivienda_apartamentos_sur$preciom, type = 'histogram')
fig4
Presentar 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 y explicar por qué.
#library(leaflet)
# Definir las coordenadas centrales de Cali, Colombia
cali_coords <- c(lat = 3.4516, lng = -76.5319)
# Crear un mapa centrado en Cali y agregar los puntos
leaflet(data = vivienda_apartamentos_sur) %>%
addTiles() %>% # Agregar el fondo del mapa
setView(lng = cali_coords["lng"], lat = cali_coords["lat"], zoom = 12) %>% # Centrarse en Cali
addCircleMarkers(~longitud, ~latitud, # Usar las columnas de longitud y latitud
radius = 5, # Tamaño de los puntos
color = "blue", # Color de los puntos
stroke = FALSE, # Sin borde en los puntos
fillOpacity = 0.7, # Opacidad de los puntos
label = ~paste("Tipo: ", tipo), # Etiqueta mostrando el tipo de vivienda
labelOptions = labelOptions(noHide = FALSE, direction = "auto"))
# convertir variable piso a numérico
vivienda_apartamentos_sur$piso <- as.numeric(as.character(vivienda_apartamentos_sur$piso))
#calcular tabla de correlacion de variables numericas
cor_matrix <- cor(vivienda_apartamentos_sur[,3:9])
cor_matrix
## piso estrato preciom areaconst parqueaderos
## piso 1.0000000000 0.03861201 0.03892962 0.0005839222 0.04669085
## estrato 0.0386120135 1.00000000 0.67270665 0.4815592627 0.54913528
## preciom 0.0389296155 0.67270665 1.00000000 0.7579955264 0.67474970
## areaconst 0.0005839222 0.48155926 0.75799553 1.0000000000 0.55867749
## parqueaderos 0.0466908458 0.54913528 0.67474970 0.5586774943 1.00000000
## banios 0.0464176498 0.56861707 0.71967045 0.6618178702 0.56514551
## habitaciones 0.0042302681 0.21259528 0.33175381 0.4339607747 0.28631173
## banios habitaciones
## piso 0.04641765 0.004230268
## estrato 0.56861707 0.212595282
## preciom 0.71967045 0.331753812
## areaconst 0.66181787 0.433960775
## parqueaderos 0.56514551 0.286311726
## banios 1.00000000 0.514922735
## habitaciones 0.51492273 1.000000000
#library(corrplot)
corrplot(cor_matrix, type="upper", order="hclust",
tl.col = "black", tl.srt = 45)
En la matriz de correlación vemos que la variable objetivo “precio” tiene alta correlación con las demás variables numéricas, excepto con la variable “piso”, lo que nos lleva a concluir que el piso del apartamento no es tan determinante en el precio de venta, como si lo son las demás variables.
También podemos ver en el correlograma que las variables independientes no guardan correlación significativa entre sí, por lo tanto no existe colinealidad y todas son susceptibles de ser incluidas en el modelo de regresión lineal.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).
#
reg_apartamentos <- lm(preciom ~ piso + banios + habitaciones + parqueaderos + estrato + areaconst, data = vivienda_apartamentos_sur)
summary(reg_apartamentos, digits=5)
##
## Call:
## lm(formula = preciom ~ piso + banios + habitaciones + parqueaderos +
## estrato + areaconst, data = vivienda_apartamentos_sur)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1256.18 -42.70 -1.77 35.62 934.64
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -223.49058 13.71905 -16.291 < 2e-16 ***
## piso 0.67205 0.70404 0.955 0.34
## banios 48.48305 3.04339 15.931 < 2e-16 ***
## habitaciones -22.67249 3.39587 -6.676 2.94e-11 ***
## parqueaderos 48.26713 3.02516 15.955 < 2e-16 ***
## estrato 56.98218 2.79664 20.375 < 2e-16 ***
## areaconst 1.46283 0.04881 29.967 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 95.18 on 2780 degrees of freedom
## Multiple R-squared: 0.7537, Adjusted R-squared: 0.7531
## F-statistic: 1417 on 6 and 2780 DF, p-value: < 2.2e-16
El coeficiente R2 de 0.7537 nos representa un nivel bueno del modelo, tratándose de variables numéricas.
Los estimados de banios (48.48), parqueaderos (48.27) y estrato (56.98) nos muestran que son quienes aportan de manera altamente significativa al precio del apartamento en la zona sur, así como el área construida, mientras que el piso y el número de habitaciones aportan de manera mínima al precio del inmueble.
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).
predict2 <- vivienda_apartamentos_sur %>%
add_predictions(reg_apartamentos) %>%
add_residuals(reg_apartamentos)
# valido que la media de los residuos tienda a CERO
mean(predict2$resid)
## [1] -2.945711e-12
# Se valida distribución normal de los residuos
hist(predict2$resid)
predict2%>%
ggplot(aes(x=pred, y=resid^2)) +
geom_point() +
geom_smooth(color="red", se=FALSE)
predict2%>%
ggplot(aes(x=pred,y=resid))+
geom_point()+
geom_smooth(color="red",se=FALSE)
cov(predict2$pred,predict2$resid)
## [1] 1.266714e-10
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
Apartamento en estrato 5 área construida 300 * 1.46283 parqueaderos 3 * 48.26713 baños 3 * 48.48305 habitaciones 5 * -22.67249 estrato 5 * 56.98218
(Intercept) -223.49058
precio_apartamento_sur_5 <- -223.49058 + 300 * 1.46283 + 3 * 48.26713 + 3 * 48.48305 + 5 * -22.67249 + 5 * 56.98218
precio_apartamento_sur_5
## [1] 677.1574
El precio predicho para un apartamento en estrato 5 en la zona sur de la ciudad de Cali es de: $677.1574 millones de pesos, por tanto, se encuentra dentro del cupo de crédito preaprobado de 850 millones.
Apartamento en Estrato 6
área construida 300 * 1.46283 parqueaderos 3 * 48.26713 baños 3 * 48.48305 habitaciones 5 * -22.67249 estrato 6 * 56.98218
(Intercept) -223.49058
precio_apartamento_sur_6 <- -223.49058 + 300 * 1.46283 + 3 * 48.26713 + 3 * 48.48305 + 5 * -22.67249 + 6 * 56.98218
precio_apartamento_sur_6
## [1] 734.1396
El precio predicho para un apartamento en estrato 6 en la zona sur de la ciudad de Cali es de: $734.1396 millones de pesos, por tanto, se encuentra dentro del cupo de crédito preaprobado de 850 millones.
El comprador puede considerar la adquisición en estrato 5 o 6
Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito 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.
Características Vivienda 2 Tipo Apartamento área construida 300 parqueaderos 3 baños 3 habitaciones 5 estrato 5 o 6 zona Sur crédito preaprobado 850 millones
# Filtrar registros que cumplan con las características de búsqueda
filtro_aptos_norte <- subset(vivienda_casas_norte,
banios >= 3 &
habitaciones >= 5 &
parqueaderos >= 3 &
estrato >= 5 &
estrato <= 6 &
areaconst >= 300 &
preciom <= 850)
# Ver cantidad de inmuebles que cumplen con el filtro
nrow(filtro_aptos_norte)
## [1] 30
Se identifican 30 inmuebles que satisfacen los requerimientos del filtro
Se presentan los 10 primeros resultados del filtro:
# Ver los primeros registros que cumplen el filtro
head(filtro_aptos_norte,10)
# Crear un mapa centrado en Cali y agregar los puntos
leaflet(data = filtro_aptos_norte) %>%
addTiles() %>% # Agregar el fondo del mapa
setView(lng = cali_coords["lng"], lat = cali_coords["lat"], zoom = 12) %>% # Centrarse en Cali
addCircleMarkers(~longitud, ~latitud, # Usar las columnas de longitud y latitud
radius = 5, # Tamaño de los puntos
color = "blue", # Color de los puntos
stroke = FALSE, # Sin borde en los puntos
fillOpacity = 0.7, # Opacidad de los puntos
label = ~paste("Id: ", id), # Etiqueta mostrando el tipo de vivienda
labelOptions = labelOptions(noHide = FALSE, direction = "auto"))
Mediante el mapa interactivo podemos identificar que los inmuebles con id 677 y 978 no se encuentran dentro de la zona norte, por lo tanto no se deben tomar en cuenta en la recomendación.