# Establecer el espejo de CRAN
options(repos = "https://cloud.r-project.org")
Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.
Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.
Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:
Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .
Los datos de los tres últimos meses se adjuntan en la base que puede obtener con el siguiente código en R
# Librerias
library(tidyverse)
library(ggplot2)
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.3.3
library(mice)
## Warning: package 'mice' was built under R version 4.3.2
library(dplyr)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.2
library(magrittr)
library(dummy)
library(caret)
## Warning: package 'caret' was built under R version 4.3.2
library(factoextra)
library(NbClust)
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.3.2
library(ca)
library(dummy)
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
library(MASS)
library(paqueteMODELOS)
## Warning: package 'gridExtra' was built under R version 4.3.2
data("vivienda")
head (vivienda)
## # A tibble: 6 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona O… <NA> 3 250 70 1 3 6
## 2 1169 Zona O… <NA> 3 320 120 1 2 3
## 3 1350 Zona O… <NA> 3 350 220 2 2 4
## 4 5992 Zona S… 02 4 400 280 3 5 3
## 5 1212 Zona N… 01 5 260 90 1 2 3
## 6 1724 Zona N… 01 5 240 87 1 3 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Vista global de las variables
glimpse(vivienda)
## Rows: 8,322
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
# Filtrar las casas ubicadas en la zona norte
vivienda_norte <- vivienda %>%
filter(zona == "Zona Norte" & tipo == "Casa")
# Mostrar los primeros 5 registros de las bases
head(vivienda_norte, 5)
## # A tibble: 5 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1209 Zona N… 02 5 320 150 2 4 6
## 2 1592 Zona N… 02 5 780 380 2 3 3
## 3 4057 Zona N… 02 6 750 445 NA 7 6
## 4 4460 Zona N… 02 4 625 355 3 5 5
## 5 6081 Zona N… 02 5 750 237 2 6 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Tabla de frecuencia de los tipos de propiedad en la zona norte
table(vivienda_norte$tipo)
##
## Casa
## 722
# Tabla de frecuencia de los estratos en la zona norte
table(vivienda_norte$estrato)
##
## 3 4 5 6
## 235 161 271 55
Podemos notar la distribución de propiedades en la zona norte de Cali según su estrato socioeconómico, donde se presentan 235 unidades en el estrato 3, 161 en el estrato 4, 271, en el estrato 5 y 55 en el estrato 6. Se evidencia que los estratos con mayor disponibilidad de viviendas son el 3 y el 5.
# Crear matriz de correlación
library(corrplot)
## corrplot 0.92 loaded
correlation_matrix <- cor(vivienda_norte[, c("preciom", "areaconst", "estrato","banios", "habitaciones")])
corrplot(correlation_matrix, method = "color", addCoef.col = "orange")
correlation_table <- as.table(correlation_matrix)
print(correlation_table)
## preciom areaconst estrato banios habitaciones
## preciom 1.0000000 0.7313480 0.6123503 0.5233357 0.3227096
## areaconst 0.7313480 1.0000000 0.4573818 0.4628152 0.3753323
## estrato 0.6123503 0.4573818 1.0000000 0.4083039 0.1073141
## banios 0.5233357 0.4628152 0.4083039 1.0000000 0.5755314
## habitaciones 0.3227096 0.3753323 0.1073141 0.5755314 1.0000000
Se puede observar que la correlación más fuerte se da entre precios y área construida, esto se podría ser posible ya que propiedades con un mayor número de área sean más atractivas para los compradores, lo que podría aumentar la demanda y, por lo tanto, los precios.Asimismo pueden ofrecer un nivel superior de comodidad y conveniencia.
# Tabla de frecuencia de los barrios en la zona norte
table(vivienda_norte$barrio)
##
## acopi alameda del río alamos
## 70 1 3
## atanasio girardot barranquilla barrio tranquilo y
## 1 3 1
## base aérea berlin brisas de los
## 2 1 22
## brisas del guabito Cali calibella
## 1 13 1
## calima calimio norte cambulos
## 6 3 1
## centenario chapinero chipichape
## 3 1 5
## ciudad los álamos colinas del bosque cristales
## 11 1 1
## el bosque el cedro el gran limonar
## 37 1 1
## el guabito el sena el trébol
## 1 1 1
## evaristo garcía flora industrial floralia
## 1 4 3
## gaitan granada jorge eliecer gaitán
## 1 10 1
## juanamb√∫ la base la campiña
## 11 1 4
## la esmeralda la flora La Flora
## 1 99 1
## la floresta la merced la rivera
## 2 24 9
## la rivera i la rivera ii la riviera
## 1 2 1
## la villa del las acacias las américas
## 1 1 1
## las ceibas las delicias las granjas
## 2 3 1
## los andes los guaduales los guayacanes
## 13 10 2
## manzanares menga metropolitano del norte
## 1 2 1
## nueva tequendama oasis de comfandi occidente
## 1 1 1
## pacara parque residencial el paseo de los
## 2 1 2
## paso del comercio poblado campestre popular
## 2 1 5
## portada de comfandi portales de comfandi porvenir
## 1 1 2
## prados del norte quintas de salomia rozo la torre
## 31 1 1
## salomia san luis san luís
## 20 2 1
## san vicente santa bárbara santa monica
## 31 1 16
## Santa Monica santa mónica santa monica norte
## 1 1 1
## santa monica residencial santa mónica residencial santander
## 5 15 1
## tejares de san torres de comfandi unión de vivienda
## 1 2 1
## urbanización barranquilla urbanización la flora urbanización la merced
## 2 23 4
## urbanización la nueva valle del lili versalles
## 1 1 16
## villa colombia villa de veracruz villa del prado
## 1 4 40
## Villa Del Prado villa del sol villas de veracruz
## 1 12 7
## Villas De Veracruz vipasa zona norte
## 1 30 19
## zona oriente
## 1
En esta tabla se puede identificar la ubicación de las casas disponibles en la zona norte de Cali, lo que podría ser relevante para los compradores interesados en adquirir una propiedad en un barrio específico que les motive.
# Crear el mapa
mapa_vivienda <- leaflet(vivienda_norte) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_vivienda
# Filtrar las casas que no están en la zona norte
zonaGlobal_Casas <- vivienda %>%
filter(zona != "Zona Norte" & tipo == "Casa")
# Crear el mapa con todos los puntos
mapa_global <- leaflet() %>%
addTiles()
# Agregar marcadores para casas en la zona norte (en color azul)
mapa_global<- mapa_global %>%
addCircleMarkers(data = vivienda_norte, lng = ~longitud, lat = ~latitud,
color = "blue", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
# Agregar marcadores para casas en otras zonas (en color rojo)
mapa_global <- mapa_global %>%
addCircleMarkers(data = zonaGlobal_Casas, lng = ~longitud, lat = ~latitud,
color = "red", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_global
En el mapa se nota que dos puntos están cercanos entre sí, mientras que unos punto está significativamente separado del par agrupado. Esto sugiere la posibilidad de un error en las coordenadas o en la asignación de la zona. Se aconseja revisar la precisión de las variables de zona y coordenadas geográficas en la base de datos para asegurar la exactitud del mapeo y la integridad del análisis.Se crean los dos mapas con el fin de retificar la información y ver el compartamiento de los otros grupos.
grafico_1 <- plot_ly(vivienda_norte, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_1
Se puede notar que el costo de las viviendas aumenta significativamente conforme aumenta el tamaño de la construcción, lo que sugiere una relación directamente proporcional entre estas dos variables. Además, se observa una alta concentración de casas con áreas inferiores a 500 m², mientras que las ofertas para áreas de más de 1000 m² son limitadas, con solo dos opciones disponibles.
grafico_2 <- plot_ly(vivienda_norte, x = ~estrato, y = ~preciom, type = "box")
grafico_2 <- grafico_2 %>%
layout(title = "Relación entre Precio y Área Construida",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio"))
grafico_2
El diagrama de caja proporciona una representación visual detallada de la distribución de precios de vivienda para cada estrato socioeconómico. En el estrato 3, los precios oscilan desde un mínimo de 89 hasta un máximo de 1100. La caja abarca desde el primer cuartil (Q1) hasta el tercer cuartil (Q3), donde Q1 está en 160.5 y Q3 en 300, con una mediana en 215. Esto indica que la mayoría de las viviendas en este estrato tienen precios concentrados en el rango intercuartil. En el estrato 4, los precios varían desde 160 hasta 1800, con una mediana de 380, un Q1 de 320 y un Q3 de 530. Aquí, la dispersión de precios es más amplia en comparación con el estrato 3, pero la mayoría de las viviendas todavía se concentran en el rango intercuartil. Para el estrato 5, los precios van desde 125 hasta 1940, con una mediana de 480, un Q1 de 390 y un Q3 de 642.5. Esta distribución muestra una mayor dispersión de precios en comparación con los estratos anteriores. Finalmente, en el estrato 6, los precios oscilan entre 430 y 1600, con una mediana de 800, un Q1 de 592.5 y un Q3 de 945. Aquí, la variación de precios es significativamente mayor, con una concentración más dispersa de valores. En resumen, el diagrama de caja revela la variabilidad y la distribución de precios de vivienda en cada estrato, proporcionando una comprensión clara de la tendencia central y la dispersión de los datos.
grafico_3 <- plot_ly(vivienda_norte, x = ~banios, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_3
En términos del número de baños, las viviendas de mayor valor son aquellas que tienen entre 4 y 8 baños, alcanzando precios de hasta 1.940 millones de pesos, dependiendo de la cantidad de baños. Por otro lado, las viviendas con menos baños, ya sea 1, 2 o 3, generalmente tienen un valor inferior.
grafico_4 <- plot_ly(vivienda_norte, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_4
Se puede observar que las casas con una menor cantidad de baños, ya sea 0, 1, 2 o 3, tienden a tener un valor inferior en comparación con aquellas que cuentan con un mayor número de baños.En cuanto al número de baños, se observa que las viviendas de mayor precio son aquellas que disponen de entre 4 y 8 baños. Estas propiedades pueden alcanzar precios de hasta 1.940 millones de pesos, dependiendo de la cantidad de baños que tengan.
grafico_5 <- plot_ly(vivienda_norte, x = ~zona, y = ~preciom, type = "box")
grafico_5 <- grafico_5 %>%
layout(title = "Relación entre Precio y Zona",
xaxis = list(title = "Zona"),
yaxis = list(title = "Precio"))
grafico_5
La mitad de las viviendas en la zona Norte tienen precios de 390 millones de pesos o menos, pero algunas pueden alcanzar valores entre 950 y 1940 millones de pesos. La variación de precios en esta área abarca desde un mínimo de 89 hasta un máximo de 1940. El rango intercuartil, representado por la caja en el diagrama de caja, se extiende desde el primer cuartil (Q1) hasta el tercer cuartil (Q3), donde Q1 se sitúa en 260 y Q3 en 550, con una mediana en 390.
modelo <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_norte)
summary(modelo)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = vivienda_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
Precio Casa=α+β1(Áreaconstruida)+β2(Estrato)+β2(Númerodecuartos)+β2(Númerodeparqueaderos)+β2(Númerodebaños)+ϵ
El análisis del modelo de regresión múltiple revela que el coeficiente de determinación múltiple es de aproximadamente 60.41%, lo que indica que alrededor del 60.41% de la variabilidad en el precio de las viviendas puede ser explicada por las variables independientes consideradas en el modelo, tales como el área construida, el estrato, el número de habitaciones, el número de parqueaderos y el número de baños. Esto sugiere que estas variables tienen una influencia significativa en el precio de las viviendas.
La interpretación de los coeficientes estimados muestra que, manteniendo constantes las demás variables, por cada unidad adicional en el área construida de la casa, se espera un aumento estimado de 0.6767 millones de pesos en el precio. Asimismo, por cada unidad adicional en el estrato de la casa, se espera un aumento estimado de 80 millones de pesos en el precio. Por otro lado, por cada unidad adicional en el número de habitaciones de la casa, se espera una disminución estimada de 7 millones de pesos en el precio. Por cada unidad adicional en el número de parqueaderos de la casa, se espera un aumento estimado de 24 millones de pesos en el precio. Y finalmente, por cada unidad adicional en el número de baños de la casa, se espera un aumento estimado de 18 millones de pesos en el precio. Estas interpretaciones proporcionan una comprensión detallada de cómo cada variable influye en el precio de las viviendas, lo que es crucial para la toma de decisiones en el mercado inmobiliario.
Basándonos en la información proporcionada, hay varias consideraciones que se podrían tomar en cuenta para realizar ajustes al modelo de regresión múltiple; transformaciones de variables, inclusión de variables adicionales, interacciones entre variables, consideración de variables categóricas, evaluación de la multicolinealidad y validación del modelo.
par(mfrow = c(3, 2))
# Linealidad
plot(modelo$fitted.values, modelo$residuals, xlab = "Valores Ajustados", ylab = "Residuales")
abline(h = 0, col = "red", lwd = 2)
#Homocedasticidad
plot(modelo$fitted.values, sqrt(abs(modelo$residuals)), xlab = "Valores Ajustados", ylab = "Raíz de los Residuales Absolutos")
abline(h = 0, col = "red", lwd = 2)
#Independencia de los errores
plot(modelo$residuals, type = "l")
abline(h = 0, col = "red", lwd = 2)
#Normalidad de los errores
qqnorm(modelo$residuals)
qqline(modelo$residuals, col = 2)
# Colinealidad
cor_mat <- cor(vivienda_norte[, c("preciom" , "banios", "habitaciones", "areaconst", "estrato")])
plot(cor_mat)
## No autorrelación
lmtest::dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 1.7615, p-value = 0.005472
## alternative hypothesis: true autocorrelation is greater than 0
Podemos observar que la variable dependiente parece tener una relación lineal con la variable independiente. Esto es evidente en la curva de ajuste en rojo, por lo tanto, este supuesto se cumple, a pesar de que no es completamente lineal, tanto en el modelo original y en la aplicación de la transformación notamos que se detecta la multicolinealidad.El resultado del Test de Durbin-Watson es un valor de DW = 1.7615, lo cual indica que efectivamente hay evidencia de autocorrelación en el modelo.
req <- data.frame(areaconst=c(200,200),estrato=c(4,5),habitaciones=c(4,4),parqueaderos=c(1,1),banios=c(2,2))
req
## areaconst estrato habitaciones parqueaderos banios
## 1 200 4 4 1 2
## 2 200 5 4 1 2
predict(modelo,req)
## 1 2
## 312.1010 392.7359
Se puede notar que para una vivienda tipo casa con características específicas, con un área construida de 200 m², un parqueadero, dos baños, cuatro habitaciones y un estrato 4, en la Zona Norte, el precio es de 312.1010 COP. Sin embargo, para una vivienda con las mismas características, pero con un estrato 5, el precio es de 92.7359 COP.
casas_filtrados <- filter(vivienda_norte, areaconst >= 200, parqueaderos >= 1, banios >= 2, habitaciones >= 4, estrato >=4, preciom <= 350)
total_observaciones1 <- nrow(casas_filtrados)
print(total_observaciones1)
## [1] 34
primeras_5_ofertas <- head(casas_filtrados, 5)
primeras_5_ofertas
## # A tibble: 5 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4210 Zona N… 01 5 350 200 3 3 4
## 2 4267 Zona N… 01 5 335 202 1 4 5
## 3 4800 Zona N… 01 5 340 250 2 4 4
## 4 4209 Zona N… 02 5 350 300 3 5 6
## 5 4422 Zona N… 02 5 350 240 2 3 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
mapa_vivienda1 <- leaflet(primeras_5_ofertas) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_vivienda1
Para un préstamo preaprobado de hasta 350 millones de pesos, con las especificaciones de una casa con un área construida de 200 m² o mayor, un parqueadero, dos baños, cuatro habitaciones, y un estrato 4 o 5 en la Zona Norte, hay disponibles 34 ofertas entre las cuales la persona puede elegir. Sin embargo, decidió seleccionar aleatoriamente solo 5 de estas ofertas, como se muestra en la tabla. Adicionalmente en el mapa se puede observar en donde se encuentran ubicadas.
# Filtrar los apartamentos ubicadas en la zona sur
vivienda_sur <- vivienda %>%
filter(zona == "Zona Sur" & tipo == "Apartamento")
# Mostrar los primeros 5 registros de las bases
head(vivienda_sur, 5)
## # A tibble: 5 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5098 Zona S… 05 4 290 96 1 2 3
## 2 698 Zona S… 02 3 78 40 1 1 2
## 3 8199 Zona S… <NA> 6 875 194 2 5 3
## 4 1241 Zona S… <NA> 3 135 117 NA 2 3
## 5 5370 Zona S… <NA> 3 135 78 NA 1 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Tabla de frecuencia de los tipos de propiedad en la zona sur
table(vivienda_sur$tipo)
##
## Apartamento
## 2787
# Tabla de frecuencia de los estratos en la zona sur
table(vivienda_sur$estrato)
##
## 3 4 5 6
## 201 1091 1033 462
Podemos notar la distribución de propiedades en la zona sur de Cali según su estrato socioeconómico, donde se presentan 201 unidades en el estrato 3, 1091 en el estrato 4, 1033 en el estrato 5 y 462 en el estrato 6.Se evidencia que los estratos con mayor disponibilidad de viviendas son el 4 y el 5.
# Crear matriz de correlación
library(corrplot)
correlation_matrix <- cor(vivienda_sur[, c("preciom", "areaconst", "estrato","banios", "habitaciones")])
corrplot(correlation_matrix, method = "color", addCoef.col = "orange")
correlation_table <- as.table(correlation_matrix)
print(correlation_table)
## preciom areaconst estrato banios habitaciones
## preciom 1.0000000 0.7579955 0.6727067 0.7196705 0.3317538
## areaconst 0.7579955 1.0000000 0.4815593 0.6618179 0.4339608
## estrato 0.6727067 0.4815593 1.0000000 0.5686171 0.2125953
## banios 0.7196705 0.6618179 0.5686171 1.0000000 0.5149227
## habitaciones 0.3317538 0.4339608 0.2125953 0.5149227 1.0000000
Se puede notar que la correlación más destacada se encuentra entre los precios y el tamaño del área construida. Esto podría explicarse por el hecho de que las propiedades con una mayor área resultan más atractivas para los compradores, lo que puede incrementar la demanda y, por consiguiente, elevar los precios. Además, es posible que estas propiedades ofrezcan un mayor nivel de comodidad y conveniencia, lo que también puede influir en sus precios.
# Tabla de frecuencia de los barrios en la zona norte
table(vivienda_sur$barrio)
##
## acopi aguablanca
## 1 1
## aguacatal alameda
## 1 2
## alférez real alferez real
## 4 1
## alto jordán altos de guadalupe
## 1 1
## arboleda belisario caicedo
## 1 2
## bella suiza bloques del limonar
## 5 1
## bochalema bosques del limonar
## 33 12
## brisas del limonar buenos aires
## 1 4
## caldas Cali
## 1 3
## calicanto cambulos
## 2 2
## camino real Camino Real
## 14 1
## campestre caney
## 1 58
## caney especial cañasgordas
## 1 5
## cañaveralejo cañaverales
## 9 19
## cañaverales los samanes capri
## 1 43
## cataya real cerro cristales
## 1 1
## champagnat ciudad 2000
## 1 19
## ciudad bochalema ciudad capri
## 48 9
## ciudad jardin ciudad jardín
## 9 218
## ciudad jardin pance ciudad meléndez
## 1 1
## ciudad melendez ciudad pacifica
## 1 2
## Ciudad Pacifica ciudad universitaria
## 1 1
## ciudadela comfandi ciudadela melendez
## 2 1
## ciudadela pasoancho colinas del sur
## 3 3
## colseguros colseguros andes
## 22 1
## cristales cristobal colón
## 1 2
## cuarto de legua departamental
## 30 16
## el caney El Caney
## 124 1
## el dorado el gran limonar
## 6 3
## el guabal el ingenio
## 4 128
## el ingenio 3 el ingenio i
## 1 13
## el ingenio ii el ingenio iii
## 9 10
## el jordán el lido
## 1 33
## el limonar el refugio
## 59 77
## fuentes de la gran limonar
## 1 8
## guadalupe ingenio
## 10 1
## ingenio ii la alborada
## 1 4
## la cascada la flora
## 2 1
## la hacienda La Hacienda
## 108 1
## la luisa la selva
## 1 7
## las acacias las camelias
## 1 1
## las granjas las vegas de
## 7 1
## los cambulos los cámbulos
## 19 3
## los farallones mayapan las vegas
## 2 31
## meléndez melendez
## 19 40
## miraflores multicentro
## 1 27
## napoles nápoles
## 1 12
## normandía nueva tequendama
## 1 36
## oasis de pasoancho pampa linda
## 1 13
## pampalinda panamericano
## 3 2
## pance parcelaciones pance
## 205 18
## pasoancho ponce
## 5 1
## prados del limonar Prados Del Limonar
## 3 1
## primero de mayo quintas de don
## 24 58
## refugio samanes
## 1 1
## samanes de guadalupe san bosco
## 1 2
## san fernando San Fernando
## 18 1
## san fernando nuevo san fernando viejo
## 4 5
## san joaquin santa anita
## 1 36
## Santa Anita santa elena
## 2 1
## santa isabel santa teresita
## 7 6
## santo domingo sector aguacatal
## 1 1
## sector cañaveralejo guadalupe seminario
## 2 22
## templete tequendama
## 2 14
## unicentro cali urbanización colseguros
## 1 2
## urbanizacion gratamira urbanización nueva granada
## 1 1
## urbanización río lili urbanización tequendama
## 3 2
## valle de lili valle del lili
## 1 837
## Valle Del Lili versalles
## 1 1
## villa del sur vipasa
## 1 1
## zona sur
## 32
Esta tabla permite identificar la ubicación de las viviendas disponibles en la zona norte de Cali, lo cual puede resultar relevante para los compradores que estén interesados en adquirir una propiedad en un barrio específico que les llame la atención.
# Crear el mapa
mapa_vivienda <- leaflet(vivienda_sur) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_vivienda
# Filtrar las casas que no están en la zona norte
zonaGlobal_Apto <- vivienda %>%
filter(zona != "Zona Sur" & tipo == "Apartamento")
# Crear el mapa con todos los puntos
mapa_global1 <- leaflet() %>%
addTiles()
# Agregar marcadores para casas en la zona norte (en color azul)
mapa_global1<- mapa_global1 %>%
addCircleMarkers(data = vivienda_sur, lng = ~longitud, lat = ~latitud,
color = "blue", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
# Agregar marcadores para casas en otras zonas (en color rojo)
mapa_global1 <- mapa_global1 %>%
addCircleMarkers(data = zonaGlobal_Apto, lng = ~longitud, lat = ~latitud,
color = "red", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_global1
El mapa refleja una observación similar a la que se realizó en la primera base de datos. Esto plantea la posibilidad de que haya un error en las coordenadas o en la asignación de las zonas. Se recomienda verificar la precisión de las variables de zona y coordenadas geográficas en la base de datos para garantizar la exactitud del mapeo y la integridad del análisis. La creación de ambos mapas tiene como objetivo corregir la información y comprender el comportamiento de los otros grupos.
grafico_1 <- plot_ly(vivienda_sur, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_1
Se evidencia que el precio de las viviendas incrementa considerablemente a medida que aumenta el tamaño de la construcción, lo que indica una relación directa entre estas dos variables. También se nota una concentración notable de viviendas con áreas inferiores a 350 m², mientras que hay una oferta limitada para propiedades con más de 932 m², con solo dos opciones disponibles.
grafico_2 <- plot_ly(vivienda_sur, x = ~estrato, y = ~preciom, type = "box")
grafico_2 <- grafico_2 %>%
layout(title = "Relación entre Precio y Estrato",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio"))
grafico_2
El diagrama de caja proporciona una representación visual detallada de la distribución de precios de vivienda para cada estrato socioeconómico. Para el estrato 3, los precios oscilan desde un mínimo de 75 hasta un máximo de 580. La caja abarca desde el primer cuartil (Q1) hasta el tercer cuartil (Q3), donde Q1 se sitúa en 110 y Q3 en 148.25, con una mediana en 128. Esto sugiere que la mayoría de las viviendas en este estrato tienen precios concentrados en el rango intercuartil. En el estrato 4, los precios varían desde 78 hasta 645, con una mediana de 188, un Q1 de 154 y un Q3 de 240. Aquí, la dispersión de precios es más amplia en comparación con el estrato 3, pero la mayoría de las viviendas aún se concentran en el rango intercuartil. Para el estrato 5, los precios van desde 93 hasta 1250, con una mediana de 280, un Q1 de 230 y un Q3 de 330. Esta distribución muestra una mayor dispersión de precios en comparación con los estratos anteriores. Finalmente, en el estrato 6, los precios oscilan entre 128 y 1750, con una mediana de 580, un Q1 de 410 y un Q3 de 700. Aquí, la variación de precios es significativamente mayor, con una concentración más dispersa de valores. En resumen, el diagrama de caja revela la variabilidad y la distribución de precios de vivienda en cada estrato, proporcionando una comprensión clara de la tendencia central y la dispersión de los datos.
grafico_3 <- plot_ly(vivienda_sur, x = ~banios, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_3
Los apartamentos que disponen de entre 3 y 6 baños son los de mayor valor, con precios que pueden alcanzar los 1.200 millones para los que tienen 3 baños, 1.750 millones para aquellos con 4 y 5 baños, y 1600 millones de pesos para los que cuentan con 6 baños. Por otro lado, se observa que el 80.73% de los apartamentos tienen 2 o 3 baños, lo que indica una concentración significativa en esta categoría.
grafico_4 <- plot_ly(vivienda_sur, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers",
marker = list(size = 10, opacity = 0.6))
grafico_4
Los apartamentos que tienen 3 y 4 habitaciones son los más caros, con precios registrados de 1.750 millones de pesos en ambos casos. En contraste, los apartamentos con 1 y 2 habitaciones pueden tener precios de hasta 320 y 840 millones de pesos, respectivamente.
grafico_5 <- plot_ly(vivienda_sur, x = ~zona, y = ~preciom, type = "box")
grafico_5 <- grafico_5 %>%
layout(title = "Relación entre Precio y Zona",
xaxis = list(title = "Zona"),
yaxis = list(title = "Precio"))
grafico_5
El 75% de los apartamentos en la zona sur tienen precios de 335 millones de pesos o menos, pero algunos pueden tener valores entre 575 y 1.750 millones de pesos. Los apartamentos con el precio más bajo en esta área se sitúan en 75 millones de pesos.
library(MASS)
modelo1 <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_sur)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = vivienda_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
Precio Apartamento=α+β1(Áreaconstruida)+β2(Estrato)+β2(Númerodecuartos)+β2(Númerodeparqueaderos)+β2(Númerodebaños)+ϵ
El análisis del modelo de regresión múltiple revela que el coeficiente de determinación múltiple (Multiple R-squared) es de aproximadamente el 78.72%, lo que indica que alrededor del 78.72% de la variabilidad en el precio de las viviendas puede ser explicada por las variables independientes consideradas en el modelo, tales como el área construida, el estrato, el número de habitaciones, el número de parqueaderos y el número de baños. Esto sugiere que estas variables tienen una influencia significativa en el precio de las viviendas.
La interpretación de los coeficientes estimados muestra que, manteniendo constantes las demás variables, por cada unidad adicional en el área construida de la casa, se espera un aumento estimado de 1.28 millones de pesos en el precio. Asimismo, por cada unidad adicional en el estrato de la casa, se espera un aumento estimado de 60 millones de pesos en el precio. Por otro lado, por cada unidad adicional en el número de habitaciones de la casa, se espera una disminución estimada de 24 millones de pesos en el precio. Por cada unidad adicional en el número de parqueaderos de la casa, se espera un aumento estimado de 72 millones de pesos en el precio. Y finalmente, por cada unidad adicional en el número de baños de la casa, se espera un aumento estimado de 50 millones de pesos en el precio. Estas interpretaciones proporcionan una comprensión detallada de cómo cada variable influye en el precio de las viviendas, lo que es crucial para la toma de decisiones en el mercado inmobiliario.
Basándonos en la información proporcionada, hay varias consideraciones que se podrían tomar en cuenta para realizar ajustes al modelo de regresión múltiple; transformaciones de variables, inclusión de variables adicionales, interacciones entre variables, consideración de variables categóricas, evaluación de la multicolinealidad y validación del modelo.
par(mfrow = c(3, 2))
# Linealidad
plot(modelo1$fitted.values, modelo1$residuals, xlab = "Valores Ajustados", ylab = "Residuales")
abline(h = 0, col = "red", lwd = 2)
#Homocedasticidad
plot(modelo1$fitted.values, sqrt(abs(modelo1$residuals)), xlab = "Valores Ajustados", ylab = "Raíz de los Residuales Absolutos")
abline(h = 0, col = "red", lwd = 2)
#Independencia de los errores
plot(modelo1$residuals, type = "l")
abline(h = 0, col = "red", lwd = 2)
#Normalidad de los errores
qqnorm(modelo1$residuals)
qqline(modelo1$residuals, col = 2)
# multicolinealidad
cor_mat <- cor(vivienda_sur[, c("preciom" , "banios", "habitaciones", "areaconst", "estrato")])
plot(cor_mat)
## No autorrelación
lmtest::dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.5333, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Se puede notar que existe una aparente relación lineal entre la variable dependiente y la variable independiente. En este escenario, lo que sugiere que no hay problemas de colinealidad entre ellas. Sin embargo, el resultado del Test de Durbin-Watson arroja un valor de DW = 1.5333, lo que indica la presencia de autocorrelación en el modelo.
req1 <- data.frame(areaconst=c(300,300),estrato=c(5,6),habitaciones=c(5,5),parqueaderos=c(3,3),banios=c(3,3))
req1
## areaconst estrato habitaciones parqueaderos banios
## 1 300 5 5 3 3
## 2 300 6 5 3 3
predict(modelo1,req1)
## 1 2
## 675.0247 735.9218
Se puede notar que para una vivienda tipo apartamento con características específicas, como una casa con un área construida de 300 m², tres parqueadero, tres baños, cinco habitaciones y un estrato 5, en la Zona Norte, el precio es de 675.0247 COP. Sin embargo, para una vivienda con las mismas características, pero con un estrato 6, el precio es de 735.9218 COP.
apartamentos_filtrados <- filter(vivienda_sur, areaconst >= 300, parqueaderos >= 3, banios >= 3, habitaciones >= 5,estrato >=5, preciom <= 850)
total_observaciones <- nrow(apartamentos_filtrados)
print(total_observaciones)
## [1] 2
primeras_ofertas <- head(apartamentos_filtrados, 5)
primeras_ofertas
## # A tibble: 2 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7182 Zona S… <NA> 5 730 573 3 8 5
## 2 7512 Zona S… <NA> 5 670 300 3 5 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
mapa_vivienda <- leaflet(primeras_ofertas) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_vivienda
Para un préstamo preaprobado de hasta 850 millones de pesos, con las especificaciones de un apartamento con un área construida de 300 m² o mayor, tres parqueadero, tres baños, cinco habitaciones, y un estrato 5 o 6 en la zona sur, hay disponibles 2 ofertas entre las cuales la persona puede elegir. Adicionalmente en el mapa se puede observar en donde se encuentran ubicadas.