Informe ejecutivo:

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:

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

Sugerencia para compra de Vivienda 1:

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:

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

Sugerencia para compra de Vivienda 2:

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.