Este informe tiene como objetivo analizar dos casos mediante técnicas de modelación, en este informe se adjuntan los anexos y se comparten los resultados:
Pasos requeridos para la obtención de los resultados:
Punto 1: 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?).
Filtrar la base de datos para incluir solo las ofertas de casas en la zona norte
base1 <- subset(vivienda, tipo == "Casa" & zona == "Zona Norte")
Convertir la base de datos filtrada en un dataframe
#Mostrar los primeros tres registros
head(base1, 3)
## id zona piso estrato preciom areaconst parqueaderos banios
## 1 1209 Zona Norte 02 5 320 150 2 4
## 2 1592 Zona Norte 02 5 780 380 2 3
## 3 4057 Zona Norte 02 6 750 445 NA 7
## habitaciones tipo barrio longitud latitud
## 1 6 Casa acopi -76.51341 3.47968
## 2 3 Casa acopi -76.51674 3.48721
## 3 6 Casa acopi -76.52950 3.38527
Crear un mapa con todos los puntos de las bases
mapa <- leaflet(data = base1) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud)
# Mostrar el mapa
mapa
Se puede evidenciar que existen puntos que se encuentran fuera de la zona en dónde se concentran la mayoria de las viviendas que estan categorizadas como ubicadas en la zona Norte, es decir, aquellos que están cerca al barrio Patio Bonito y en el Barrio Manuela Beltran de la ciudad de Cali, sin embargo, no se cuenta con la definición exacta de lo que abarca la Zona Norte en dicha ciudad, por lo cual se puede considerar que son puntos atípicos, esto puede ser consecuencia de diversos factores como lo son:
-Errores en los datos: Puede existir error en la codificación en la zona en la base de datos, es decir, algunas viviendas pudieron haber estado etiquetadas en esta zona pero realmente no están allí.
-Imprecisión en la definición de la zona norte: La definición de la zona norte puede variar dependiendo de quién la establezca. Podría haber áreas que, aunque generalmente se consideren como parte de la zona norte, no cumplen estrictamente con los límites definidos.
-Inconsistencias en los datos geográficos: Las coordenadas geográficas pueden no ser precisas o pueden estar mal registradas en la base de datos. Esto podría llevar a que algunas propiedades se ubiquen incorrectamente fuera de la zona norte.
-Cambios en la geografía: Los límites de las zonas pueden cambiar con el tiempo debido al desarrollo urbano, cambios en las infraestructuras, entre otros factores. Es posible que algunas propiedades que originalmente estaban en la zona norte ahora estén fuera de ella debido a estos cambios.
Punto 2: 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.
Se realiza un análisis previo de la base que se encuentra filtrada por el tipo de vivienda “Casa” ubicadas en la Zona Norte
summary(base1)
## id zona piso estrato
## Min. : 58.0 Length:722 Length:722 Min. :3.000
## 1st Qu.: 766.2 Class :character Class :character 1st Qu.:3.000
## Median :2257.0 Mode :character Mode :character Median :4.000
## Mean :2574.6 Mean :4.202
## 3rd Qu.:4225.0 3rd Qu.:5.000
## Max. :8319.0 Max. :6.000
##
## 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
##
Con este resumen se puede evidenciar que existen 4 atributos de tipo categórico (variables cualitativas) los cuales son la Zona, el Tipo de vivienda, el piso y el barrio, por otro lado, se observa que existen 9 atributos de tipo númerico (variables cuantitativas) que corresponden al ID de la vivienda, el estrato, el precio, el area construida, el número de parqueaderos, baños y habitaciones, así como la longitud y la latitud.
Ahora se realizará el analisis de correlación entre las variables cuantitativas en función de la variable respuesta:
# Calcular la matriz de correlación
cor_pre_area <- cor.test(base1$preciom, base1$areaconst)
# Mostrar la matriz de correlación
print(cor_pre_area)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$areaconst
## t = 28.774, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6954970 0.7635667
## sample estimates:
## cor
## 0.731348
plot_ly(data = base1, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(title = "Correlación entre Precio y Área Construida",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio de la Casa"))
Se puede evidenciar que entre las variables Precio y Área Construida, la magnitud del coeficiente (0.731348) sugiere que la relación entre las variables es moderadamente fuerte. El valor de correlación está cerca de 1, lo que sugiere que hay una relación positiva entre las variables. Esto significa que, en general, a medida que el área construida aumenta, el precio de la casa tiende a aumentar también.
# Calcular la matriz de correlación
cor_pre_estrato <- cor.test(base1$preciom, base1$estrato)
# Mostrar la matriz de correlación
print(cor_pre_estrato)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$estrato
## t = 20.783, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.5646126 0.6560046
## sample estimates:
## cor
## 0.6123503
plot_ly(data = base1, x = ~estrato, y = ~preciom, type = "scatter", mode = "markers", color = I("green")) %>%
layout(title = "Correlación entre Precio y Estrato",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio de la Casa"))
Se puede evidenciar que entre las variables Precio y Estrato, la magnitud del coeficiente (0.6123503) indica una correlación positiva moderada, es decir hay una relación positiva entre las variables. En este contexto, esto significa que a medida que el estrato aumenta, el precio tiende a aumentar también, y viceversa.
# Calcular la matriz de correlación
cor_pre_banios <- cor.test(base1$preciom, base1$banios)
# Mostrar la matriz de correlación
print(cor_pre_banios)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$banios
## t = 16.479, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.4682514 0.5743680
## sample estimates:
## cor
## 0.5233357
plot_ly(data = base1, x = ~banios, y = ~preciom, type = "scatter", mode = "markers", color = I("red")) %>%
layout(title = "Correlación entre Precio y Número de baños",
xaxis = list(title = "Número de baños"),
yaxis = list(title = "Precio de la Casa"))
Un coeficiente de correlación de 0.5233357 indica una correlación positiva moderada pero no fuerte, este valor sugiere que hay una relación positiva entre las variables de precio y número de baños.
# Calcular la matriz de correlación
cor_pre_hab <- cor.test(base1$preciom, base1$habitaciones)
# Mostrar la matriz de correlación
print(cor_pre_hab)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$habitaciones
## t = 9.1487, df = 720, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2557676 0.3865717
## sample estimates:
## cor
## 0.3227096
plot_ly(data = base1, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers", color = I("purple")) %>%
layout(title = "Correlación entre Precio y Número de habitaciones",
xaxis = list(title = "Número de habitaciones"),
yaxis = list(title = "Precio de la Casa"))
El resultado de correlación de 0.3227096 indica una correlación positiva débil entre el precio y el número de habitaciones, sin embargo, existe una relación positiva entre las variables. La correlación no implica causalidad. No se puede concluir que un aumento en una variable cause necesariamente un aumento en la otra, sino que simplemente existe una asociación entre ellas.
# Calcular la matriz de correlación
cor_pre_par <- cor.test(base1$preciom, base1$parqueaderos)
# Mostrar la matriz de correlación
print(cor_pre_par)
##
## Pearson's product-moment correlation
##
## data: base1$preciom and base1$parqueaderos
## t = 9.3995, df = 433, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.3304309 0.4868393
## sample estimates:
## cor
## 0.411662
plot_ly(data = base1, x = ~parqueaderos, y = ~preciom, type = "scatter", mode = "markers", color = I("orange")) %>%
layout(title = "Correlación entre Precio y Parqueaderos",
xaxis = list(title = "Número de parqueaderos"),
yaxis = list(title = "Precio de la Casa"))
## Warning: Ignoring 287 observations
Un coeficiente de correlación de 0.411662 indica una correlación positiva moderada pero no fuerte, este valor sugiere que hay una relación positiva entre las variables de precio y parqueaderos
# Seleccionar únicamente las variables cuantitativas
variables_cuantitativas <- base1[, sapply(base1, is.numeric)]
# Especifica el orden deseado de las columnas
orden_columnas <- c("id", "preciom", "estrato","areaconst","parqueaderos","banios","habitaciones","longitud","latitud")
variables_cuantitativas <- variables_cuantitativas[, orden_columnas]
ggpairs(variables_cuantitativas[,2:7], title=" ")
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 287 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 287 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 287 rows containing missing values
## Warning: Removed 287 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 287 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 287 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 287 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 287 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 287 rows containing missing values
## Warning: Removed 287 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 287 rows containing missing values or values outside the scale range
## (`geom_point()`).
En este gráfico se presenta una matriz de gráficos que muestra las relaciones entre las múltiples variables cuantitativas de las Casas que se encuentran en la zona Norte.
Punto 3: 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).
Para este punto, se procede a realizar el ajuste del modelo:
modelo1=lm(preciom~ areaconst + estrato + habitaciones + parqueaderos + banios, base1)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base1)
##
## 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
Se puede interpretar que el intercepto es de -238.17090, esto representa el precio esperado de la vivienda cuando todas las variables predictoras son cero. Sin embargo, en este escenario, esto no sería posible, ya que cualquier vivienda debe tener como mínimo un área construida.
Con respecto a las variables predictorias se puede evidenciar lo siguiente:
Área Construida (areaconst): Por cada unidad de aumento en el área construida, el precio de la vivienda aumenta en promedio en 0.67673 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor < 2e-16), lo que indica que el tamaño de la vivienda tiene un efecto significativo en su precio.
Estrato: Para este caso, si el estrato aumenta, el precio de la vivienda también crece en promedio en aprox. 80 millones de pesos. Este coeficiente también es estadísticamente significativo (p-valor < 2.70e-15), lo que sugiere que el estrato, como indicador de la calidad y ubicación de la vivienda, afecta significativamente su precio.
Número de Habitaciones (habitaciones): El coeficiente para el número de habitaciones no es estadísticamente significativo (p-valor = 0.177), lo que sugiere que el número de habitaciones no tiene un efecto significativo en el precio de la vivienda en este modelo.
Número de Parqueaderos (parqueaderos): Por cada parqueadero adicional, el precio de la vivienda aumenta en promedio 24 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor = 5.14e-05), lo que sugiere que la disponibilidad de parqueaderos afecta significativamente el precio de la vivienda.
Número de Baños (banios): Por cada baño adicional, el precio de la vivienda aumenta en promedio en 18 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor = 0.012), lo que sugiere que el número de baños también tiene un efecto significativo en el precio de la vivienda.
Estos resultados demuestran la realidad actual de la finca raiz en Colombia, puesto que a mayor area construida y estrato, el precio aumenta, de igual forma, el número de parqueaderos y de baños tambien son representativos en el valor de las viviendas.
Se puede concluir que el modelo presenta un buen ajuste, ya que el coeficiente de determinación es relativamente alto y los coeficientes de las variables predictoras son en su mayoría estadísticamente significativos. No obstante, para mejorar el modelo se deberá considerar incluir otras variables que se consideren relevantes, así como explorar la posibilidad de transformaciones de variables para capturar relaciones no lineales y verificar si el modelo cumple con los supuestos de la regresión lineal.
Punto 4: 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).
Para realizar este punto, se realiza una Validación de los supuestos en los errores, se inicia con el calculo del Supuesto de normalidad por medio de la prueba de Shapiro-Wilk:
shapiro.test(resid(modelo1))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo1)
## W = 0.85246, p-value < 2.2e-16
El valor de W sugiere como se encuentran distribuidos los datos, entre más cercano sea W a 1, más normalmente distribuidos son los datos. En este caso, el valor es de 0.85246 lo que demuestra que los residuos no siguen una distribución normal perfecta. Esto puede afectar la validez de las pruebas de hipótesis y los intervalos de confianza basados en la suposición de normalidad de los residuos.
Para chequear el supuesto de varianza constante, resulta útil un gráfico de residuales versus valores ajustados de la respuesta, el cual se presenta a conitnuación:
# Gráfico de residuos estandarizados vs. valores ajustados
plot(fitted(modelo1), rstandard(modelo1), ylab = "Residuos Estandarizados", xlab = "Valores Ajustados")
abline(h = 0, col = "red") # Línea horizontal en y = 0 para identificar patrones
# Prueba de Goldfeld-Quandt
library(car)
ncvTest(modelo1)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 352.7061, Df = 1, p = < 2.22e-16
En este cálculo y gráfico se puede evidenciar que la varianza de los residuos varía a lo largo del rango de valores ajustados por el modelo, además la varianza de los residuos no es constante en todos los niveles de los valores ajustados por el modelo de regresión. En conclusión, se puede considerar que el modelo presenta heterocedasticidad, para corregir esto se pueden considerar algunas estrategias como lo son la transformación de variables, Modelos de Regresión Alternativos, corrección de residuos, utilizar Variables de Control, Transformación de Variables Dependientes, entre otras.
Finalmente, para la independencia de los errores se realiza la prueba de Durbin-Watson
library(lmtest)
# Prueba de Durbin-Watson
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 1.7615, p-value = 0.005472
## alternative hypothesis: true autocorrelation is greater than 0
Se puede evidenciar que el valor calculado del estadístico de Durbin-Watson es de 1.7615, esto indica que hay alguna autocorrelación presente en los residuos, ya que cuanto más cerca esté el valor de 2, menor será la evidencia de autocorrelación. Este resultado sugiere que hay autocorrelación positiva presente en los residuos del modelo de regresión. En este orden de ideas, se deben considerar técnicas para corregirla, como la inclusión de términos autorregresivos en el modelo o la transformación de variables.
Punto 5: Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
sol1 = data.frame(
areaconst = 200,
parqueaderos = 1,
estrato = c(4,5),
banios = 2,
habitaciones = 4
)
sol1
## areaconst parqueaderos estrato banios habitaciones
## 1 200 1 4 2 4
## 2 200 1 5 2 4
predict(modelo1,sol1)
## 1 2
## 312.1010 392.7359
Basado en el modelo de regresión lineal utilizado inicialmente, en el cual no se aplicaron ajustes, se puede determinar que los precios de las viviendas con un área construida de 200m cuadrados, 1 parqueadero, 4 habitaciones y 2 baños en estrato 4 es de 312 millones de pesos aproximdamente, mientras que en estrato 5 con las mismas caracteristicas es de 392 millones de pesos, lo que demuestra que el estrato tiene un peso significativo sobre el precio de la vivienda.
Punto 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.
Teniendo en cuenta el valor del crédito preaprobado de $350 millones, se deduce que la vivienda debería estar en estrato 4.
# Filtrar base1 para seleccionar ofertas potenciales
ofertas1 <- filter(base1, areaconst >= 200, parqueaderos >= 1, banios >= 2, habitaciones >= 4, estrato == 4)
# Seleccionar las ofertas potenciales dentro del presupuesto máximo de 350 millones de pesos
ofertas1 <- ofertas1[ofertas1$preciom <= 350, ]
ofertas1
## id zona piso estrato preciom areaconst parqueaderos banios
## 5 4458 Zona Norte 02 4 315 270.0 2 4
## 6 3352 Zona Norte <NA> 4 335 300.0 3 4
## 23 937 Zona Norte 02 4 350 280.0 2 3
## 24 952 Zona Norte 02 4 330 275.0 2 3
## 25 1020 Zona Norte 02 4 230 250.0 2 3
## 26 1108 Zona Norte 02 4 330 260.0 1 3
## 29 1144 Zona Norte <NA> 4 320 200.0 2 4
## 30 7432 Zona Norte 01 4 260 280.0 2 4
## 36 5031 Zona Norte 03 4 350 350.0 1 4
## 52 2544 Zona Norte 01 4 340 264.5 2 4
## 55 7470 Zona Norte 02 4 340 264.0 2 5
## 62 1822 Zona Norte <NA> 4 340 295.0 2 2
## habitaciones tipo barrio longitud latitud
## 5 4 Casa el bosque -76.53176 3.48780
## 6 4 Casa el bosque -76.52600 3.43400
## 23 4 Casa la merced -76.50603 3.46643
## 24 5 Casa la merced -76.50647 3.47516
## 25 5 Casa la merced -76.50799 3.47424
## 26 4 Casa la merced -76.51060 3.48108
## 29 4 Casa la merced -76.51156 3.48029
## 30 6 Casa los andes -76.54973 3.42484
## 36 5 Casa salomia -76.53464 3.44987
## 52 4 Casa vipasa -76.52096 3.47665
## 55 7 Casa vipasa -76.54980 3.37556
## 62 4 Casa vipasa -76.51777 3.48060
mapa_ofrt1 <- leaflet(ofertas1) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud, color = "red", radius = 4) %>%
addLabelOnlyMarkers(lng = ~longitud, lat = ~latitud, label = ~paste("ID:", id), labelOptions = labelOptions(noHide = TRUE))
mapa_ofrt1
Teniendo en cuenta los resultados arrojados, se describen las 5 ofertas de las casas que se encuentran en la zona norte que cumplen con la mayor cantidad de los requerimientos de la solicitud:
Casa 1: La primera casa identificada con ID 2544, tiene un precio de 340 millones y es estrato 4, su area construida es de 295 metros cuadrados, cuenta con un 2 parqueaderos, 4 baños, 4 habitaciones y se encuentra ubicada en el barrio Vipasa.
Casa 2: La casa identificada con ID 1822, tiene un precio de 340 millones y es estrato 5, su area construida es de 200 metros cuadrados, cuenta con un 2 parqueadero, 2 baños, 4 habitaciones y se encuentra ubicada en el barrio Vipasa.
Casa 3: La casa identificada con ID 1144, tiene un precio de 320 millones y es estrato 4, su area construida es de 200 metros cuadrados, cuenta con un 2 parqueaderos, 4 baños, 4 habitaciones y se encuentra ubicada en el barrio La Merced.
Casa 4: La casa identificada con ID 1020, tiene un precio de 230 millones y es estrato 4, su area construida es de 250 metros cuadrados, cuenta con un 2 parqueaderos, 3 baños, 5 habitaciones y se encuentra ubicada en el barrio La Merced.
Casa 5: La casa identificada con ID 1108, tiene un precio de 330 millones y es estrato 4, su area construida es de 260 metros cuadrados, cuenta con un 1 parqueaderos, 3 baños, 4 habitaciones y se encuentra ubicada en el barrio La Merced.
La casas identificadas con ID 7432,3352,7470 y 5031 se retiran de la oferta ya que en el mapa se evidencia que no se encuentran ubicadas en la Zona Norte de la ciudad.
```
Punto 7: Realice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.
Filtrar la base de datos para incluir solo las ofertas de casas en la zona norte
base2 <- subset(vivienda, tipo == "Apartamento" & zona == "Zona Sur")
Convertir la base de datos filtrada en un dataframe
#Mostrar los primeros tres registros
head(base2, 3)
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 1 5098 Zona Sur 05 4 290 96 1 2 3
## 2 698 Zona Sur 02 3 78 40 1 1 2
## 3 8199 Zona Sur <NA> 6 875 194 2 5 3
## tipo barrio longitud latitud
## 1 Apartamento acopi -76.53464 3.44987
## 2 Apartamento aguablanca -76.50100 3.40000
## 3 Apartamento aguacatal -76.55700 3.45900
Crear un mapa con todos los puntos de las bases
mapa <- leaflet(data = base2) %>%
addTiles() %>%
addMarkers(lng = ~longitud, lat = ~latitud)
# Mostrar el mapa
mapa
Se puede evidenciar que existen puntos que se encuentran fuera de la zona en dónde se concentran la mayoria de las viviendas que estan categorizadas como ubicadas en la zona Sur, es decir, aquellos que están cerca a la ciudadela Floralia y en el barrio San Luis de la ciudad de Cali, sin embargo, no se cuenta con la definición exacta de lo que abarca la Zona Sur en dicha ciudad, por lo cual se puede considerar que son puntos atípicos, esto puede ser consecuencia de diversos factores como lo son:
-Errores en los datos: Puede existir error en la codificación en la zona en la base de datos, es decir, algunas viviendas pudieron haber estado etiquetadas en esta zona pero realmente no están allí.
-Imprecisión en la definición de la zona Sur: La definición de la zona norte puede variar dependiendo de quién la establezca. Podría haber áreas que, aunque generalmente se consideren como parte de la zona norte, no cumplen estrictamente con los límites definidos.
-Inconsistencias en los datos geográficos: Las coordenadas geográficas pueden no ser precisas o pueden estar mal registradas en la base de datos. Esto podría llevar a que algunas propiedades se ubiquen incorrectamente fuera de la zona norte.
-Cambios en la geografía: Los límites de las zonas pueden cambiar con el tiempo debido al desarrollo urbano, cambios en las infraestructuras, entre otros factores. Es posible que algunas propiedades que originalmente estaban en la zona norte ahora estén fuera de ella debido a estos cambios.
Punto 2: 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.
Se realiza un análisis previo de la base que se encuentra filtrada por el tipo de vivienda “Apartamento” ubicados en la Zona Sur
summary(base2)
## id zona piso estrato
## Min. : 3 Length:2787 Length:2787 Min. :3.00
## 1st Qu.:2292 Class :character Class :character 1st Qu.:4.00
## Median :4004 Mode :character Mode :character Median :5.00
## Mean :4131 Mean :4.63
## 3rd Qu.:5876 3rd Qu.:5.00
## Max. :8302 Max. :6.00
##
## 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
##
Se realizará el analisis de correlación entre las variables cuantitativas en función de la variable respuesta:
# Calcular la matriz de correlación
cor_pre_area <- cor.test(base2$preciom, base2$areaconst)
# Mostrar la matriz de correlación
print(cor_pre_area)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$areaconst
## t = 61.328, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7417418 0.7733594
## sample estimates:
## cor
## 0.7579955
plot_ly(data = base2, x = ~areaconst, y = ~preciom, type = "scatter", mode = "markers") %>%
layout(title = "Correlación entre Precio y Área Construida",
xaxis = list(title = "Área Construida"),
yaxis = list(title = "Precio de la Casa"))
Se puede evidenciar que entre las variables Precio y Área Construida, la magnitud del coeficiente de Pearson (0.7579955) sugiere que la relación entre las variables es moderadamente fuerte. El valor de correlación está cerca de 1, lo que sugiere que hay una relación positiva entre las variables. Al igual que en la vivienda 1, a medida que el área construida aumenta, el precio de la casa tiende a aumentar también.
# Calcular la matriz de correlación
cor_pre_estrato <- cor.test(base2$preciom, base2$estrato)
# Mostrar la matriz de correlación
print(cor_pre_estrato)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$estrato
## t = 47.98, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6518591 0.6925382
## sample estimates:
## cor
## 0.6727067
plot_ly(data = base2, x = ~estrato, y = ~preciom, type = "scatter", mode = "markers", color = I("green")) %>%
layout(title = "Correlación entre Precio y Estrato",
xaxis = list(title = "Estrato"),
yaxis = list(title = "Precio de la Casa"))
Se puede evidenciar que entre las variables Precio y Estrato, la magnitud del coeficiente de correlación de Pearson (0.6727067)es mayor que en la vivienda 1, lo que indica una correlación positiva moderada, es decir hay una relación positiva entre las variables. En este contexto, esto significa que a medida que el estrato aumenta, el precio tiende a aumentar también, y viceversa.
# Calcular la matriz de correlación
cor_pre_banios <- cor.test(base2$preciom, base2$banios)
# Mostrar la matriz de correlación
print(cor_pre_banios)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$banios
## t = 54.7, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.7012801 0.7371036
## sample estimates:
## cor
## 0.7196705
plot_ly(data = base2, x = ~banios, y = ~preciom, type = "scatter", mode = "markers", color = I("red")) %>%
layout(title = "Correlación entre Precio y Número de baños",
xaxis = list(title = "Número de baños"),
yaxis = list(title = "Precio de la Casa"))
Para la vivienda 2,a diferencia de la Vivienda 1, se evidencia que existe una correlación fuerte entre las varaibles de precio y número de baños, ya que arroja un coeficiente de correlación de 0.7196705.
# Calcular la matriz de correlación
cor_pre_hab <- cor.test(base2$preciom, base2$habitaciones)
# Mostrar la matriz de correlación
print(cor_pre_hab)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$habitaciones
## t = 18.559, df = 2785, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.2982991 0.3643944
## sample estimates:
## cor
## 0.3317538
plot_ly(data = base2, x = ~habitaciones, y = ~preciom, type = "scatter", mode = "markers", color = I("purple")) %>%
layout(title = "Correlación entre Precio y Número de habitaciones",
xaxis = list(title = "Número de habitaciones"),
yaxis = list(title = "Precio de la Casa"))
El resultado de correlación de 0.3317538, al igual que en la Vivienda 1, indica una correlación positiva débil entre el precio y el número de habitaciones, sin embargo, existe una relación positiva entre las variables. La correlación no implica causalidad. No se puede concluir que un aumento en una variable cause necesariamente un aumento en la otra, sino que simplemente existe una asociación entre ellas.
# Calcular la matriz de correlación
cor_pre_par <- cor.test(base2$preciom, base2$parqueaderos)
# Mostrar la matriz de correlación
print(cor_pre_par)
##
## Pearson's product-moment correlation
##
## data: base2$preciom and base2$parqueaderos
## t = 46.942, df = 2379, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6719868 0.7137277
## sample estimates:
## cor
## 0.6934386
plot_ly(data = base2, x = ~parqueaderos, y = ~preciom, type = "scatter", mode = "markers", color = I("orange")) %>%
layout(title = "Correlación entre Precio y Parqueaderos",
xaxis = list(title = "Número de parqueaderos"),
yaxis = list(title = "Precio de la Casa"))
## Warning: Ignoring 406 observations
Un coeficiente de correlación de 0.6934386 indica una correlación positiva moderada, este valor sugiere que hay una relación positiva entre las variables de precio y número de parqueaderos.
# Seleccionar únicamente las variables cuantitativas
variables_cuantitativas <- base2[, sapply(base2, is.numeric)]
# Especifica el orden deseado de las columnas
orden_columnas <- c("id", "preciom", "estrato","areaconst","parqueaderos","banios","habitaciones","longitud","latitud")
variables_cuantitativas <- variables_cuantitativas[, orden_columnas]
library(GGally)
ggpairs(variables_cuantitativas[,2:7], title=" ")
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 406 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 406 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 406 rows containing missing values
## Warning: Removed 406 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 406 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 406 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 406 rows containing non-finite outside the scale range
## (`stat_density()`).
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 406 rows containing missing values
## Warning in ggally_statistic(data = data, mapping = mapping, na.rm = na.rm, :
## Removed 406 rows containing missing values
## Warning: Removed 406 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Removed 406 rows containing missing values or values outside the scale range
## (`geom_point()`).
En este gráfico se presenta una matriz de gráficos que muestra las relaciones entre las múltiples variables cuantitativas de las Casas que se encuentran en la zona Norte.
Punto 3: 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).
Para este punto, se procede a realizar el ajuste del modelo:
modelo2=lm(preciom~ areaconst + estrato + habitaciones + parqueaderos + banios, base2)
summary(modelo2)
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = base2)
##
## 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
Se puede interpretar que el intercepto es de -261.62501, esto representa el precio esperado de la vivienda cuando todas las variables predictoras son cero. Sin embargo, en este escenario, esto no sería posible, ya que cualquier vivienda debe tener como mínimo un área construida.
Con respecto a las variables predictorias se puede evidenciar lo siguiente:
Área Construida (areaconst): Por cada unidad de aumento en el área construida, el precio de la vivienda aumenta en promedio en 1.28505 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor < 2e-16), lo que indica que el tamaño de la vivienda tiene un efecto significativo en su precio.
Estrato: Para este caso, si el estrato aumenta, el precio de la vivienda también crece en promedio en aprox. 61 millones de pesos. Este coeficiente también es estadísticamente significativo (p-valor < 2e-16), lo que sugiere que el estrato, como indicador de la calidad y ubicación de la vivienda, afecta significativamente su precio.
Número de Habitaciones (habitaciones): El coeficiente para el número de habitaciones no es estadísticamente significativo (p-valor = 2.11e-10), lo que sugiere que el número de habitaciones no tiene un efecto significativo en el precio de la vivienda en este modelo.
Número de Parqueaderos (parqueaderos): Por cada parqueadero adicional, el precio de la vivienda aumenta en promedio 73 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor = 2e-16), lo que sugiere que lo que sugiere que el número de parqueaderos, como indicador de la calidad de la vivienda, afecta significativamente su precio.
Número de Baños (banios): Por cada baño adicional, el precio de la vivienda aumenta en promedio en 50.69 millones de pesos. Este coeficiente es estadísticamente significativo (p-valor = 2e-16), lo que sugiere que el número de baños también tiene un efecto significativo en el precio de la vivienda.
Estos resultados demuestran la realidad actual de la finca raiz en Colombia, puesto que a mayor area construida y estrato, el precio aumenta, de igual forma, el número de parqueaderos y de baños tambien son representativos en el valor de las viviendas.
Se puede concluir que el modelo presenta un buen ajuste, ya que el coeficiente de determinación es relativamente alto y los coeficientes de las variables predictoras son en su mayoría estadísticamente significativos. No obstante, para mejorar el modelo se deberá considerar incluir otras variables que se consideren relevantes, así como explorar la posibilidad de transformaciones de variables para capturar relaciones no lineales y verificar si el modelo cumple con los supuestos de la regresión lineal.
Punto 4: 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).
Para realizar este punto, se realiza una Validación de los supuestos en los errores, se inicia con el calculo del Supuesto de normalidad por medio de la prueba de Shapiro-Wilk:
shapiro.test(resid(modelo2))
##
## Shapiro-Wilk normality test
##
## data: resid(modelo2)
## W = 0.79118, p-value < 2.2e-16
El valor de W sugiere como se encuentran distribuidos los datos, entre más cercano sea W a 1, más normalmente distribuidos son los datos. En este caso, el valor es de 0.79118 lo que demuestra que los residuos no siguen una distribución normal perfecta. Esto puede afectar la validez de las pruebas de hipótesis y los intervalos de confianza basados en la suposición de normalidad de los residuos.
Para chequear el supuesto de varianza constante, resulta útil un gráfico de residuales versus valores ajustados de la respuesta, el cual se presenta a conitnuación:
# Gráfico de residuos estandarizados vs. valores ajustados
plot(fitted(modelo2), rstandard(modelo2), ylab = "Residuos Estandarizados", xlab = "Valores Ajustados")
abline(h = 0, col = "red") # Línea horizontal en y = 0 para identificar patrones
# Prueba de Goldfeld-Quandt
ncvTest(modelo2)
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 4517.411, Df = 1, p = < 2.22e-16
En este cálculo y gráfico se puede evidenciar que existe una dispersión de los residuos a medida que aumentan los valores ajustados.El Chisquare de 4517.411 es el valor del estadístico de prueba obtenido al realizar la prueba de no homocedasticidad. Por lo tanto, se concluye que hay heterocedasticidad en los errores del modelo, es decir, la varianza de los errores no es constante a lo largo de los valores ajustados del modelo, para corregir esto se pueden considerar algunas estrategias como lo son la transformación de variables, Modelos de Regresión Alternativos, corrección de residuos, utilizar Variables de Control, Transformación de Variables Dependientes, entre otras.
Finalmente, para la independencia de los errores se realiza la prueba de Durbin-Watson
# Prueba de Durbin-Watson
dwtest(modelo2)
##
## Durbin-Watson test
##
## data: modelo2
## DW = 1.5333, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
Se puede evidenciar que el valor calculado del estadístico de Durbin-Watson es de 1.5333, esto indica que hay alguna autocorrelación presente en los residuos, ya que cuanto más cerca esté el valor de 2, menor será la evidencia de autocorrelación. En resumen, el resultado sugiere que los residuos del modelo2 muestran cierta autocorrelación positiva, lo que significa que los errores en el modelo tienden a ser similares entre observaciones adyacentes. Esto puede tener implicaciones en la validez del modelo y puede requerir correcciones adicionales. En este orden de ideas, se deben considerar técnicas para corregirla, como la inclusión de términos autorregresivos en el modelo o la transformación de variables.
Punto 5: Con el modelo identificado debe predecir el precio de la vivienda con las características de la segunda solicitud.
sol2 = data.frame(
areaconst = 300,
parqueaderos = 3,
estrato = c(5,6),
banios = 3,
habitaciones = 5
)
sol2
## areaconst parqueaderos estrato banios habitaciones
## 1 300 3 5 3 5
## 2 300 3 6 3 5
predict(modelo2,sol2)
## 1 2
## 675.0247 735.9218
Basado en el modelo de regresión lineal utilizado, en el cual no se aplicaron ajustes, se puede determinar que los precios de los apartamentos ubicados en la zona sur con un área construida de 300m cuadrados, 3 parqueaderos, 5 habitaciones y 3 baños, en estrato 5 es de 675 millones de pesos aproximqdamente, mientras que en estrato 6 con las mismas caracteristicas es de 736 millones de pesos aproximadamente, lo que demuestra que el estrato tiene un peso significativo sobre el precio de la vivienda.
Punto 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 850 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
Teniendo en cuenta el valor del crédito preaprobado de $350 millones, se deduce que la vivienda debería estar en estrato 4.
# Filtrar la base2 para seleccionar ofertas potenciales
ofertas2 <- filter(base2, areaconst >= 300, parqueaderos >= 3, banios >= 3, habitaciones >= 5, estrato %in% c(5,6))
# Seleccionar las ofertas potenciales dentro del presupuesto máximo de 350 millones de pesos
ofertas2 <- ofertas2[ofertas2$preciom <= 850, ]
ofertas2
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 4 7182 Zona Sur <NA> 5 730 573 3 8 5
## 5 7512 Zona Sur <NA> 5 670 300 3 5 6
## tipo barrio longitud latitud
## 4 Apartamento guadalupe -76.548 3.408
## 5 Apartamento seminario -76.550 3.409
mapa_ofrt2 <- leaflet(ofertas2) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitud, lat = ~latitud, color = "blue", radius = 4) %>%
addLabelOnlyMarkers(lng = ~longitud, lat = ~latitud, label = ~paste("ID:", id), labelOptions = labelOptions(noHide = TRUE))
mapa_ofrt2
Teniendo en cuenta los resultados arrojados, se describen las únicas dos ofertas de los apartamentos que se encuentran en la zona Sur que cumplen con la mayor cantidad de los requerimientos de la solicitud:
Apartamento 1: El primer apartamento identificado con ID 7512, tiene un precio de 670 millones y es estrato 5, su area construida es de 300 metros cuadrados, cuenta con un 3 parqueaderos, 5 baños, 6 habitaciones y se encuentra ubicada en el barrio Seminario.
Apartamento 2: El segundo apartamento identificado con ID 7182, tiene un precio de 730 millones y es estrato 5, su area construida es de 573 metros cuadrados, cuenta con un 3 parqueaderos, 8 baños, 5 habitaciones y se encuentra ubicada en el barrio Guadalupe.
Ambas opciones son una gran oferta para el cliente, ya que se evidencia que a mayor area construida, mayor precio, ya dependerá netamente del cliente tomar la decisión con respecto al apartamento que más se ajuste a sus necesidades y si desea o no vivir en un lugar más grande.