vivienda <- readRDS("C:/Users/sebas/OneDrive/Maestria/Semestre 2/Mod. Estadísticos para toma de decisiones/Módulo 1_Modelos Estadísticos/Unidad 1_Modelos Multivariados/Vivienda.RDS")
# 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
zonaNorte_Casas <- vivienda %>%
filter(zona == "Zona Norte" & tipo == "Casa")
# Mostrar los primeros 3 registros de las bases
head(zonaNorte_Casas, 3)
## # A tibble: 3 × 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 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Tablas que comprueban la consulta
# Tabla de frecuencia de los tipos de propiedad en la zona norte
table(zonaNorte_Casas$tipo)
##
## Casa
## 722
# Tabla de frecuencia de los estratos en la zona norte
table(zonaNorte_Casas$estrato)
##
## 3 4 5 6
## 235 161 271 55
# Tabla de frecuencia de los barrios en la zona norte
table(zonaNorte_Casas$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
# Crear el mapa
mapa_vivienda <- leaflet(zonaNorte_Casas) %>%
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 = zonaNorte_Casas, 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
Según los mapas, podemos observar lo siguiente:
# Crear matriz de correlación
correlacion <- cor(zonaNorte_Casas[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
correlacion
## 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
# Extraer la correlación de la variable precio de la casa
correlacion_ <- correlacion[1, -1]
# Crear un gráfico de barras para visualizar la correlación de la variable de interés con las otras variables
correlacion_gráfico <- plot_ly(x = names(correlacion_), y = correlacion_, type = "bar") %>%
layout(title = "Correlación con respecto al Precio de la casa",
xaxis = list(title = "Variables"),
yaxis = list(title = "Correlación"))
# Mostrar el gráfico
correlacion_gráfico
# Estimar el modelo de regresión lineal múltiple
modelo_regresion <- lm(preciom ~ areaconst + estrato + banios + habitaciones + parqueaderos, data = zonaNorte_Casas)
# Mostrar resumen del modelo
summary(modelo_regresion)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + banios + habitaciones +
## parqueaderos, data = zonaNorte_Casas)
##
## 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 ***
## banios 18.89938 7.48800 2.524 0.012 *
## habitaciones 7.64511 5.65873 1.351 0.177
## parqueaderos 24.00598 5.86889 4.090 5.14e-05 ***
## ---
## 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
El modelo de regresión lineal múltiple estimado para predecir el precio de las casas en la zona norte se presenta a continuación:
Intercepto: El coeficiente del intercepto es -238.17, con un error estándar de 44.41. Esto sugiere que si todas las variables independientes son cero, el precio esperado de la casa sería de -238.17 unidades monetarias.
Área Construida (areaconst): Por cada unidad adicional de área construida, se espera un aumento de aproximadamente 0.68 unidades monetarias en el precio de la casa. Este coeficiente es altamente significativo (p < 0.001).
Estrato: Manteniendo constantes las demás variables, el precio de la casa aumenta en 80.63 unidades monetarias por cada incremento unitario en el estrato. Este coeficiente es altamente significativo (p < 0.001).
Número de Baños (banios): El número de baños tiene un efecto positivo en el precio de la casa, con un coeficiente de 18.90 y un valor de p de 0.012.
Número de Habitaciones (habitaciones): Aunque positivo, el coeficiente para el número de habitaciones no es significativo (p = 0.177), lo que indica que este factor puede no influir significativamente en el precio de la casa.
Parqueaderos: Por cada parqueadero adicional, se espera un aumento de aproximadamente 24.01 unidades monetarias en el precio de la casa. Este coeficiente es altamente significativo (p < 0.001).
El coeficiente de determinación R2 del modelo es 0.6041, lo que significa que aproximadamente el 60.41% de la variabilidad en el precio de las casas se explica por las variables incluidas en el modelo. Esto sugiere que el modelo tiene un buen ajuste para explicar el precio de las casas en la zona norte.
Para mejorar el ajuste del modelo y explorar otras posibles influencias en el precio de las casas, podríamos considerar incluir variables adicionales relevantes, como la ubicación específica dentro de la zona norte, características adicionales de la propiedad, y analizar la presencia de multicolinealidad entre nuestras variables predictivas que podrían afectar nuestro modelo.
# Gráfico de residuos vs valores ajustados
plot(modelo_regresion, which = 1)
Si bien la mayoría de los residuos se distribuyen alrededor de la línea horizontal en cero, se observan algunos puntos que se alejan significativamente de este valor. Esta variación en la dispersión de los residuos en torno a cero puede sugerir que el supuesto de homocedasticidad no se cumple por completo, lo que requeriría una evaluación más detallada de la variabilidad de los errores del modelo.
# Prueba de Shapiro-Wilk
shapiro.test(resid(modelo_regresion))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_regresion)
## W = 0.85246, p-value < 2.2e-16
# Gráfico Q-Q
qqnorm(resid(modelo_regresion))
qqline(resid(modelo_regresion))
El valor de estadístico W es 0.85246 y el p-valor asociado es menor que 2.2e-16. Es decir, indica que hay evidencia significativa para rechazar la hipótesis nula de normalidad de los residuos. Por lo tanto, los residuos no siguen una distribución normal, lo que sugiere que el modelo puede no ser completamente adecuado para los datos.
# Gráfico de residuos vs valores ajustados
plot(modelo_regresion, which = 3)
# Prueba de Breusch-Pagan
bptest(modelo_regresion)
##
## studentized Breusch-Pagan test
##
## data: modelo_regresion
## BP = 80.281, df = 5, p-value = 7.33e-16
El valor del estadístico de prueba es BP = 80.281 con 5 grados de libertad, y el p-valor asociado es menor que 7.33e-16. Esto indica que hay evidencia significativa para rechazar la hipótesis nula de homocedasticidad de los residuos. Por lo tanto, podemos concluir que los residuos del modelo no tienen una varianza constante, lo que sugiere la presencia de heterocedasticidad. Adicionalmente, indica que la varianza de los errores no es constante en todos los niveles de las variables predictoras, lo que puede sesgar las estimaciones de los coeficientes y afectar la precisión de las inferencias.
# Gráfico de autocorrelación de los residuos
acf(resid(modelo_regresion))
Al observar 7 rezagos fuera de las líneas horizontales en el gráfico de autocorrelación parcial de los residuos, se evidencia que existe autocorrelación en los residuos del modelo de regresión. Esto implica que los residuos no son independientes y pueden estar correlacionados entre sí a través del tiempo o de alguna otra variable no considerada en el modelo. Esta falta de independencia podría indicar que el modelo no captura completamente la estructura de los datos.
# Características vivienda 1
vivienda_1 <- data.frame(areaconst=c(200,200),estrato=c(4,5),habitaciones=c(4,4),parqueaderos=c(1,1),banios=c(2,2))
# Predicción del precio vivienda 1
Precio_vivienda1 <- predict(modelo_regresion, newdata = vivienda_1)
Precio_vivienda1
## 1 2
## 312.1010 392.7359
Tenemos como valores predichos dos resultados que representan lo siguiente para vivienda 1:
# características de la vivienda 1
Filter_vivienda1 <- zonaNorte_Casas %>%
filter(areaconst >= 200,
banios >= 2,
habitaciones >= 4,
estrato == c(4,5),
parqueaderos >= 1,
preciom <= 350)
# Ofertas potenciales en orden descendente
Ofertas_vivienda1 <- Filter_vivienda1 %>%
arrange(preciom)
Ofertas_vivienda1 <- head(Ofertas_vivienda1,5)
Ofertas_vivienda1
## # A tibble: 5 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1020 Zona N… 02 4 230 250 2 3 5
## 2 7432 Zona N… 01 4 260 280 2 4 6
## 3 1914 Zona N… 02 5 300 205 2 5 6
## 4 4458 Zona N… 02 4 315 270 2 4 4
## 5 1343 Zona N… 02 5 320 200 2 4 4
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# mapa con las ofertas potenciales seleccionadas
mapa_vivienda1 <- leaflet() %>%
addTiles()
# marcadores para las ofertas potenciales
mapa_vivienda1 <- mapa_vivienda1 %>%
addCircleMarkers(data = Ofertas_vivienda1, lng = ~longitud, lat = ~latitud,
color = "red", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio, "<br>Precio:", preciom, "millones de pesos COP"))
mapa_vivienda1
Se ordenaron las ofertas de menor a mayor con respecto al precio en millones COP (variable objetivo), para aquellas 5 que cumplian con las características de las variables explicativas, se tienen los siguientes resultados:
# Filtrar apartamentos ubicados en la zona sur
zonaSur_Apartamentos <- vivienda %>%
filter(zona == "Zona Sur" & tipo == "Apartamento")
# Mostrar los primeros 3 registros de las bases
head(zonaSur_Apartamentos, 3)
## # A tibble: 3 × 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 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Tablas que comprueban la consulta
# Tabla de frecuencia de los tipos de propiedad en la zona sur
table(zonaSur_Apartamentos$tipo)
##
## Apartamento
## 2787
# Tabla de frecuencia de los estratos en la zona sur
table(zonaSur_Apartamentos$estrato)
##
## 3 4 5 6
## 201 1091 1033 462
# Tabla de frecuencia de los barrios en la zona sur
table(zonaSur_Apartamentos$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
# Crear el mapa
mapa_vivienda <- leaflet(zonaSur_Apartamentos) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_vivienda
# Filtrar los apto que no están en la zona sur
zonaGlobal_Apto <- vivienda %>%
filter(zona != "Zona Sur" & tipo == "Apartamento")
# Crear el mapa con todos los puntos
mapa_global <- leaflet() %>%
addTiles()
# Agregar marcadores para apto en la zona sur (en color azul)
mapa_global<- mapa_global %>%
addCircleMarkers(data = zonaSur_Apartamentos, lng = ~longitud, lat = ~latitud,
color = "blue", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
# Agregar marcadores para Apto en otras zonas (en color rojo)
mapa_global <- mapa_global %>%
addCircleMarkers(data = zonaGlobal_Apto, lng = ~longitud, lat = ~latitud,
color = "red", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio))
mapa_global
Según los mapas, podemos observar lo siguiente:
# Crear matriz de correlación
correlacion2 <- cor(zonaSur_Apartamentos[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
correlacion2
## 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
# Extraer la correlación de la variable precio de la casa
correlacion_2 <- correlacion2[1, -1]
# Crear un gráfico de barras para visualizar la correlación de la variable de interés con las otras variables
correlacion_gráfico2 <- plot_ly(x = names(correlacion_2), y = correlacion_2, type = "bar") %>%
layout(title = "Correlación con respecto al Precio de la casa",
xaxis = list(title = "Variables"),
yaxis = list(title = "Correlación"))
# Mostrar el gráfico
correlacion_gráfico2
Las correlaciones entre las variables son las siguientes:
# Estimar el modelo de regresión lineal múltiple
modelo_regresion2 <- lm(preciom ~ areaconst + estrato + banios + habitaciones + parqueaderos, data = zonaSur_Apartamentos)
# Mostrar resumen del modelo
summary(modelo_regresion2)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + banios + habitaciones +
## parqueaderos, data = zonaSur_Apartamentos)
##
## 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 ***
## banios 50.69675 3.39637 14.927 < 2e-16 ***
## habitaciones -24.83693 3.89229 -6.381 2.11e-10 ***
## parqueaderos 72.91468 3.95797 18.422 < 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
El modelo de regresión lineal múltiple estimado para predecir el precio de los apartamentos en la zona sur se presenta a continuación:
Intercepto: El coeficiente del intercepto es -265.05. Esto sugiere que, si todas las variables independientes son cero, el precio esperado del apartamento sería de -265.05 unidades monetarias. Sin embargo, este valor tiene poco significado práctico, para realizar su conclusión se deben convertir las variables predictores restando la media para concluir cuanto sería el precio esperado de la casa si todas sus variables independientes son 0.
Área Construida (areaconst): El coeficiente para el área construida es 1.66, con un error estándar de 0.05. Esto implica que por cada unidad adicional de área construida, se espera un aumento de aproximadamente 1.66 unidades monetarias en el precio del apartamento. Este coeficiente es altamente significativo (p < 0.001), indicando una relación positiva entre el área construida y el precio del apartamento.
Estrato: El coeficiente para el estrato es 70.37, con un error estándar de 2.79. Manteniendo constantes las demás variables, el precio del apartamento aumenta en 70.37 unidades monetarias por cada incremento unitario en el estrato. Este coeficiente es altamente significativo (p < 0.001), lo que sugiere que el estrato tiene un impacto significativo en el precio del apartamento.
Número de Baños (banios): El coeficiente para el número de baños es 57.71, con un error estándar de 3.12. Esto indica que, manteniendo constantes las demás variables, el precio del apartamento aumenta en 57.71 unidades monetarias por cada baño adicional. Este coeficiente también es altamente significativo (p < 0.001), lo que sugiere que el número de baños influye en el precio del apartamento.
Número de Habitaciones (habitaciones): El coeficiente para el número de habitaciones es -23.29, con un error estándar de 3.55. Aunque negativo, este coeficiente es significativo (p < 0.001), lo que indica que el número de habitaciones tiene un efecto significativo en el precio del apartamento en esta muestra.
# Gráfico de residuos vs valores ajustados
plot(modelo_regresion2, which = 1)
Si bien la mayoría de los residuos se distribuyen alrededor de la línea horizontal en cero, se observan algunos puntos que se alejan a una distancia considerable de este valor. Esta variación en la dispersión de los residuos en torno a cero puede sugerir que el supuesto de homocedasticidad no se cumple por completo, lo que requeriría una evaluación más detallada de la variabilidad de los errores del modelo.
# Prueba de Shapiro-Wilk
shapiro.test(resid(modelo_regresion2))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo_regresion2)
## W = 0.79118, p-value < 2.2e-16
# Gráfico Q-Q
qqnorm(resid(modelo_regresion2))
qqline(resid(modelo_regresion2))
El resultado del test de normalidad de Shapiro-Wilk muestra un valor de estadístico W de 0.79118 y un p-valor menor que 2.2e-16. Por lo tanto, se rechaza la hipótesis nula de normalidad de los residuos. Esto indica que los residuos no siguen una distribución normal, lo que plantea dudas sobre la adecuación del modelo para los datos.
# Gráfico de residuos vs valores ajustados
plot(modelo_regresion2, which = 3)
# Prueba de Breusch-Pagan
bptest(modelo_regresion2)
##
## studentized Breusch-Pagan test
##
## data: modelo_regresion2
## BP = 754.81, df = 5, p-value < 2.2e-16
El resultado del test de Breusch-Pagan para residuos studentizados muestra un estadístico BP de 754.81, con 5 grados de libertad y un p-valor menor que 2.2e-16. Por lo tanto, se rechaza la hipótesis nula de homocedasticidad, lo que sugiere que hay evidencia significativa de heterocedasticidad en el modelo.
# Gráfico de autocorrelación de los residuos
acf(resid(modelo_regresion2))
Al observar la mayroría de rezagos fuera de las líneas horizontales en el gráfico de autocorrelación parcial de los residuos, se evidencia que existe autocorrelación en los residuos del modelo de regresión. Esto implica que los residuos no son independientes y pueden estar correlacionados entre sí a través del tiempo o de alguna otra variable no considerada en el modelo. Esta falta de independencia podría indicar que el modelo no captura completamente la estructura de los datos.
# Características vivienda 2
vivienda_2 <- data.frame(areaconst=c(300,300),estrato=c(5,6),habitaciones=c(5,5),parqueaderos=c(3,3),banios=c(3,3))
# Predicción del precio vivienda 1
Precio_vivienda2 <- predict(modelo_regresion2, newdata = vivienda_2)
Precio_vivienda2
## 1 2
## 675.0247 735.9218
Tenemos como valores predichos dos resultados que representan lo siguiente para vivienda 1:
# características de la vivienda 2
Filter_vivienda2 <- zonaSur_Apartamentos %>%
filter(areaconst >= 300,
banios >= 3,
habitaciones >= 5,
estrato %in% c(5,6),
parqueaderos >= 3,
preciom <= 850)
# Ofertas potenciales en orden descendente
Ofertas_vivienda2 <- Filter_vivienda2 %>%
arrange(preciom)
Ofertas_vivienda2 <- head(Ofertas_vivienda2,5)
Ofertas_vivienda2
## # A tibble: 2 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7512 Zona S… <NA> 5 670 300 3 5 6
## 2 7182 Zona S… <NA> 5 730 573 3 8 5
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# mapa con las ofertas potenciales seleccionadas
mapa_vivienda2 <- leaflet() %>%
addTiles()
# marcadores para las ofertas potenciales
mapa_vivienda2 <- mapa_vivienda2 %>%
addCircleMarkers(data = Ofertas_vivienda2, lng = ~longitud, lat = ~latitud,
color = "red", radius = 5, popup = ~paste("ID:", id, "<br>Barrio:", barrio, "<br>Precio:", preciom, "millones de pesos COP"))
mapa_vivienda2
Se ordenaron las ofertas de menor a mayor con respecto al precio en millones COP (variable objetivo), para aquellas 5 que cumplian con las características de las variables explicativas, se tienen los siguientes resultados: