Introducción.

La nueva empresa de María, C&A, con amplia experiencia, ha recibido dos solicitudes de una multinacional para ubicar a dos de sus trabajadores en la ciudad de Cali, Colombia. La empresa solicitante ha especificado los tipos de viviendas y los requisitos para la compra del inmueble, que son los siguientes:

Características Vivienda 1 Vivienda 2
Tipo Casa Apartamento
Área construida 200 300
Parqueaderos 1 3
Baños 2 3
Habitaciones 4 5
Estrato 4 o 5 5 o 6
Zona Norte Sur
Crédito preaprobado 350 millones 850 millones

Colaboremos con la empresa C&A para identificar las mejores opciones que se ajusten a los requisitos del cliente.




Limpieza, tratamiento descripción de los datos.

La limpieza y descripción de los datos se encuentra publicada en el siguiente enlace https://rpubs.com/Ablancosegura/Prueba2 en el cual realizamos el analisis EDA, corregimos valores atipicos, corregimos valores duplicados, imputamos variables categoricas que significaban lo mismo, y por ultimo borramos los valores NA´S que al final fueron un 4.8% de los datos todo lo realizamos en la primera actividad del semestre anterior. (metodos y simulación estadistica)

Resultados de la anterior limpieza de datos.



Comenzamos por el primer tipo de vivienda: Casas en la zona norte.



TipoViviendaCasa <-ExpViviendaAnalisis[ExpViviendaAnalisis$tipo=="casa" & ExpViviendaAnalisis$zona=="zona norte",]

kable(head(TipoViviendaCasa,3), format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
231 zona norte 2 3 180 138 1 2 5 casa la riviera -76.49000 3.47400
4443 zona norte 2 5 850 496 2 4 6 casa santa mónica -76.53162 3.46797
6028 zona norte 1 4 337 80 4 4 3 casa acopi -76.54001 3.37234
##Validando si los datos de estos columnas contienen los filtros anteriores.
unique(TipoViviendaCasa$tipo)
## [1] "casa"
unique(TipoViviendaCasa$zona)
## [1] "zona norte"



Vamos a proceder con la validación para determinar si todas las casas realmente se encuentran ubicadas en la zona norte de la ciudad.


En general, la ubicación de la mayoría de las viviendas es adecuada y se ajusta a las expectativas de los compradores. Sin embargo, hemos observado que algunas de las propiedades se encuentran un tanto alejadas de la zona norte de la ciudad. Este hecho podría atribuirse a posibles errores en el proceso de marcado de las ubicaciones mediante el sistema GPS durante el momento de realizar la oferta. Es importante tener en cuenta estos casos particulares, ya que la ubicación es un factor clave que influye significativamente en la decisión de compra de los clientes. Por lo tanto, es fundamental abordar estos errores y asegurarnos de que todas las propiedades se encuentren correctamente ubicadas y descritas para garantizar la transparencia y la satisfacción de los clientes, por ende procederemos a la eliminación de viviendas que no se encuentren en la zona norte de la ciudad, las cuales se han identificados por tener una latitud mayor a >= 3.44846 y una longitud mayor a -76.535507, esto conforme al mapa de la alcaldia de cali que se encuentra en: https://idesc.cali.gov.co/download/mapas/zonas_geograficas.pdf

### Procederemos a la eliminación:

TipoViviendaCasas2 <- TipoViviendaCasa[TipoViviendaCasa$longitud >= -76.535507,]
TipoViviendaCasas2 <- TipoViviendaCasas2[TipoViviendaCasas2$latitud >= 3.44846,]

library(leaflet)

ofertas <- data.frame(
  lat = TipoViviendaCasas2$latitud,
  long = TipoViviendaCasas2$longitud
)

# Crea un mapa
map <- leaflet(ofertas) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = c(~as.character(lat),~as.character(long) ), 
    color = "blue", radius = 2
  )

map # Muestra el mapa

Con esta nueva selección de viviendas, podemos estar completamente seguros de que todas nuestras propiedades están ubicadas en la zona norte de la ciudad.

Analisis exploratorio de graficos.


Precio x Area


Precio x Estrato


Precio x Numero de Baños


Precio x Numero de Habitaciones


Precio x ubicación de vivienda - Zona Norte.



Aprovechando las capacidades tridimensionales de Plotly, vamos a visualizar la relación entre el precio, el área y el estrato de las viviendas en un gráfico tridimensional.


Resumen del Análisis Exploratorio y Correlación de Datos.

  • Precio x Area (Cor 0.73): Existe una fuerte correlación positiva entre el precio y el área de una propiedad. Esto significa que a medida que el área de la propiedad aumenta, también lo hace el precio de venta, y viceversa.

  • Precio x Estrato (Cor 0.64):Indica una relación moderadamente fuerte entre estas dos variables. En este contexto, un valor positivo de correlación sugiere que a medida que el estrato de la propiedad aumenta, también lo hace el precio de venta. Por lo tanto, las propiedades ubicadas en estratos más altos tienden a tener precios de venta más altos, mientras que las propiedades en estratos más bajos tienden a tener precios más bajos.

  • Precio x Numero de Baños (Cor: 0.57):Esta correlación sugiere una relación moderada entre el precio de venta y el número de baños de una propiedad. Un valor positivo de correlación indica que a medida que aumenta el número de baños, también tiende a aumentar el precio de venta de la propiedad. Esto sugiere que las propiedades con más baños tienden a tener precios de venta más altos en comparación con aquellas con menos baños.

  • Precio x Numero de Habitaciones (Cor: 0.37):Esta correlación indica una relación débil entre el precio de venta y el número de habitaciones de una propiedad. Un valor positivo de correlación sugiere que, en general, a medida que aumenta el número de habitaciones, también tiende a aumentar el precio de venta de la propiedad, aunque la asociación es menos fuerte en comparación con otras variables.



Modelo de Regresión Lineal Multiple.

modeloRLM = lm(preciom ~ areaconst + estrato + habitaciones +parqueaderos + banios, data = TipoViviendaCasas2 )
summary(modeloRLM)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = TipoViviendaCasas2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -721.70  -65.03  -13.65   36.26  938.44 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -219.38445   32.46468  -6.758 3.82e-11 ***
## areaconst       0.64575    0.04653  13.880  < 2e-16 ***
## estrato        80.86168    7.88416  10.256  < 2e-16 ***
## habitaciones    4.30285    5.01209   0.858  0.39102    
## parqueaderos   23.54787    5.08028   4.635 4.53e-06 ***
## banios         18.01026    6.56116   2.745  0.00626 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 130.3 on 513 degrees of freedom
## Multiple R-squared:  0.6734, Adjusted R-squared:  0.6702 
## F-statistic: 211.5 on 5 and 513 DF,  p-value: < 2.2e-16

Analisis de resultados Modelo Regresión Lineal Multiple.


  1. Intercepto (Intercepto): El valor del intercepto es -219.38445 millones de pesos COP. Esto significa que cuando todas las variables independientes (área construida, estrato, parqueaderos, habitaciones y baños) son cero, el precio estimado de la vivienda es de -204.25337 millones de pesos COP.

  2. Coeficientes:

    • Para areaconst, el coeficiente es 0.64. Esto indica que un aumento de una unidad en el área construida se asocia, en promedio, con un aumento de 0.64 millones de pesos COP en el precio de la vivienda, manteniendo todas las demás variables constantes.

    • Para estrato, el coeficiente es 80.86. Esto significa que un aumento de una unidad en el estrato se asocia, en promedio, con un aumento de 80.86 millones de pesos COP en el precio de la vivienda, manteniendo todas las demás variables constantes.

    • Para parqueaderos, el coeficiente es 23.54. Esto sugiere que un parqueadero adicional se asocia, en promedio, con un aumento de 23.54 millones de pesos COP en el precio de la vivienda, manteniendo todas las demás variables constantes.

    • Para habitaciones, Por cada unidad adicional en el número de habitaciones, se espera que el precio de la vivienda aumente en promedio alrededor de 4.30 unidades monetarias, manteniendo constantes todas las demás variables en el modelo.

    • Para baños, el coeficiente es 18.01. Indica que un baño adicional se asocia, en promedio, con un aumento de 18.01 millones de pesos COP en el precio de la vivienda, manteniendo todas las demás variables constantes.

  3. Valores p (Valores p): Todos los valores p para los coeficientes son muy pequeños, lo que sugiere que todas las variables independientes son significativas en el modelo.

  4. R-cuadrado: El coeficiente de determinación R-cuadrado es 0.6734, lo que significa que alrededor del 67.34% de la variabilidad en el precio de la vivienda se explica por las variables incluidas en el modelo.

Para mejorar el modelo se podrian tener encuenta las siguientes opciones:

  • Convertir la variable estrato en una variable binaria: Dado que los estratos para la zona norte se encuentran típicamente en el rango de 3 a 6, podría ser beneficioso convertir la variable estrato en una variable binaria que indique si la vivienda está en un estrato alto o no. Esto podría ayudar a capturar mejor el efecto del estrato en el precio de la vivienda.

  • Validar la ubicación de las casas eliminadas: Sería prudente verificar si las casas eliminadas previamente de los datos realmente pertenecían a la zona norte de la ciudad. Si hay evidencia de que estas casas fueron mal referenciadas en el GPS y pertenecen al norte, podríamos reconsiderar incluirlas en el análisis para evitar la pérdida de información importante.

  • Incluir la variable barrio en el modelo: Podríamos incorporar la variable barrio al modelo, codificándola numéricamente. Esto podría permitir capturar las diferencias de precio entre diferentes barrios, lo que puede ser relevante para el mercado de viviendas.

Validación de los supuestos del modelo.

1. Supuesto de Normalidad.

options(scipen = 999)

normalidad <- modeloRLM$residuals
shapiro.test(normalidad)
## 
##  Shapiro-Wilk normality test
## 
## data:  normalidad
## W = 0.8481, p-value < 0.00000000000000022

W es 0.84825.

El valor de la estadística de prueba de la distribución de Shapiro-Wilk está cerca de 1, lo que sugiere que los datos tienden a seguir una distribución normal, pero no lo suficiente como para afirmar con certeza que provienen de una distribución normal.

p-value

El valor p es < 0.00000000000000022, lo que significa que es muy pequeño, hay evidencia suficiente para rechazar la hipótesis nula de que los datos provienen de una distribución normal. En otras palabras, hay evidencia de que los datos no son normalmente distribuidos.



2. Supuesto de Varianza Constante.

options(scipen = 999)
gqtest(modeloRLM)
## 
##  Goldfeld-Quandt test
## 
## data:  modeloRLM
## GQ = 1.1503, df1 = 254, df2 = 253, p-value = 0.1329
## alternative hypothesis: variance increases from segment 1 to 2

Dado que el valor p (0.1329) es mayor que el nivel de significancia típico de 0.05, no hay suficiente evidencia para rechazar la hipótesis nula. En otras palabras, no hay suficiente evidencia para concluir que la varianza difiere significativamente entre los dos segmentos. Esto sugiere que no hay evidencia de heterocedasticidad en los datos.



3. Independencia de los errores

options(scipen = 999)
dwtest(modeloRLM)
## 
##  Durbin-Watson test
## 
## data:  modeloRLM
## DW = 1.8989, p-value = 0.1229
## alternative hypothesis: true autocorrelation is greater than 0

El estadístico de Durbin-Watson (DW) es igual a 1.8989, y el valor p asociado es 0.0001469. Este test evalúa la presencia de autocorrelación en los residuos de un modelo. En este caso, el valor p es significativamente pequeño (menor que 0.05), lo que sugiere que hay evidencia estadísticamente significativa de autocorrelación positiva en los residuos del modelo. La hipótesis alternativa indica que la autocorrelación positiva es mayor que cero.



3. Multicolinealidad

  par(mfrow = c(2, 2))
  plot(modeloRLM)


Análisis de VIF (Varianza Inflación Factor):

vif(modeloRLM)
##    areaconst      estrato habitaciones parqueaderos       banios 
##     1.689786     1.611565     1.829670     1.286544     2.283445

Los valores VIF anteriores revelan una leve multicolinealidad entre las variables, siendo el número de baños el que presenta el valor más alto, con 2.28. Aunque este valor sugiere cierta correlación entre el número de baños y otras variables predictoras, no podemos eliminar esta característica del modelo, ya que los requisitos del cliente estipulan que el número de baños debe ser al menos 3. Por lo tanto, en lugar de eliminar esta variable, debemos mantenerla en el modelo para garantizar que se ajuste a las preferencias del cliente y, al mismo tiempo, explorar formas de mitigar la multicolinealidad mediante técnicas como la regularización o la selección de características.

En términos generales, el modelo de regresión nos da una buena idea de cómo las diferentes características afectan el precio de las viviendas. Pero debemos ser conscientes de algunas limitaciones que encontramos al verificar nuestros supuestos. Por ejemplo, los residuos del modelo no se ajustan perfectamente a una distribución normal y parece que la varianza de los errores podría no ser constante.



Sugerencias para cliente con tipo de vivienda casa y zona norte.

predict(modeloRLM,
         newdata = data.frame(areaconst = 200, 
                               estrato = c(4, 5), 
                               parqueaderos = 1, 
                               habitaciones = 4,
                               banios=2)
        ,interval = "confidence" )
##        fit      lwr      upr
## 1 309.9924 291.1207 328.8641
## 2 390.8541 363.1416 418.5666

Los resultados del modelo son contundentes y ofrecen dos opciones estimados de compras para el cliente.

  • Opción A: Para el primer caso (con estrato 4), el modelo predice un precio de vivienda de aproximadamente 310, con un intervalo de confianza del 95% entre aproximadamente 291 y 329.

  • Opción B: Para el segundo caso (con estrato 5), el modelo predice un precio de vivienda de aproximadamente 391, con un intervalo de confianza del 95% entre aproximadamente 363 y 419.


OfertasCasas <- subset(TipoViviendaCasas2,estrato == 4 & areaconst >= 200  & preciom <=350 & parqueaderos >=1 & banios>=2 & habitaciones >= 4)

OfertasCasas <- as.data.frame(OfertasCasas)

knitr::kable(OfertasCasas, format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
5031 zona norte 3 4 350 350.0 1 4 5 casa salomia -76.53464 3.44987
2544 zona norte 1 4 340 264.5 2 4 4 casa vipasa -76.52096 3.47665
952 zona norte 2 4 330 275.0 2 3 5 casa la merced -76.50647 3.47516
1144 zona norte 1 4 320 200.0 2 4 4 casa la merced -76.51156 3.48029
1822 zona norte 1 4 340 295.0 2 2 4 casa vipasa -76.51777 3.48060
1020 zona norte 2 4 230 250.0 2 3 5 casa la merced -76.50799 3.47424
4458 zona norte 2 4 315 270.0 2 4 4 casa el bosque -76.53176 3.48780
4488 zona norte 1 4 350 265.0 2 4 5 casa Prados Del Norte -76.53198 3.45165
1108 zona norte 2 4 330 260.0 1 3 4 casa la merced -76.51060 3.48108
937 zona norte 2 4 350 280.0 2 3 4 casa la merced -76.50603 3.46643


Ubicación de las potenciales ofertas.

oferta <- data.frame(
  preciom = OfertasCasas$preciom,
  lat = OfertasCasas$latitud,
  long = OfertasCasas$longitud
)

pal <- colorNumeric(palette = "RdYlBu", domain = OfertasCasas$preciom)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircleMarkers(
    lng = ~long,
    lat = ~lat,
    popup = ~as.character(preciom), 
    #color = "blue", 
    radius = (~preciom / 40),
    color = ~pal(preciom),         # Escala de colores basada en los valores
    #palette = "YlOrRd",     # Paleta de colores a utilizar
    stroke = TRUE,         # Sin borde en los círculos
    fillOpacity = 0.8,
    popupOptions = popupOptions(autoOpen = TRUE)
  )

map # Muestra el mapa



Ofertas:

1.Casa 1020: Destaca como la opción más asequible entre todas las ofertas, con un precio de 230 millones de pesos (COP). Con una generosa área construida de 250 metros cuadrados, cuenta con dos parqueaderos, tres baños y cinco habitaciones. Estratégicamente ubicada en la zona norte de la ciudad, en el barrio La Merced.

2.Casa 4458: sobresale como una opción atractiva entre las propiedades disponibles, con un valor de 315 millones de pesos (COP). Ofrece una amplia área construida de 270 metros cuadrados, junto con dos parqueaderos. Además, cuenta con cuatro baños y cuatro habitaciones, proporcionando un espacio cómodo para la familia. Estratégicamente ubicada en la Zona Norte de la ciudad, específicamente en el barrio El Bosque.

3.Casa 1144: destaca como una opción atractiva en el mercado, con un precio de 320 millones de pesos (COP). Ofrece una cómoda área construida de 200 metros cuadrados, así como dos espacios de estacionamiento. Con cuatro baños y cuatro habitaciones, ubicada estratégicamente en la Zona Norte de la ciudad, en el barrio La Merced.

4. Casa 4488: Se presenta como una excelente opción en el mercado, con un precio de 350 millones de pesos (COP). Ofrece una generosa área construida de 265 metros cuadrados, junto con dos espacios de estacionamiento. Con cuatro baños y cinco habitaciones,ubicada en la Zona Norte de la ciudad, en el barrio Prados Del Norte.

5. Casa 5031 Con un precio de 350 millones de pesos (COP). Ofrece una amplia área construida de 350 metros cuadrados y cuenta con un espacio de estacionamiento. Con cuatro baños y cinco habitaciones, esta casa brinda un amplio y confortable espacio para la familia, Estratégicamente ubicada en la Zona Norte de la ciudad, en el barrio Salomia.

La Casa 1020 emerge como la elección más idónea para el cliente, al cumplir con todos los requisitos necesarios y ajustarse a un presupuesto considerablemente por debajo del crédito aprobado, el cual alcanza los 350 millones de pesos colombianos (COP). Con un diferencial de aproximadamente 120 millones de COP, esta opción brinda un margen financiero cómodo para otros gastos o inversiones adicionales.




Segunda opcion por tipo de vivienda: Apartamentos en la zona sur.



TipoViviendaCasa <-ExpViviendaAnalisis[ExpViviendaAnalisis$tipo=="apartamento" & ExpViviendaAnalisis$zona=="zona sur",]

kable(head(TipoViviendaCasa,3), format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
2797 zona sur 3 4 210 65.00 1 2 3 apartamento ciudad bochalema -76.52200 3.37137
1941 zona sur 4 4 155 58.00 1 3 3 apartamento el caney -76.51846 3.38300
4184 zona sur 2 5 250 66.37 1 2 3 apartamento ciudad bochalema -76.53000 3.36306
##Validando si los datos de estos columnas contienen los filtros anteriores.
unique(TipoViviendaCasa$tipo)
## [1] "apartamento"
unique(TipoViviendaCasa$zona)
## [1] "zona sur"



Vamos a proceder con la validación para determinar si todas las casas realmente se encuentran ubicadas en la zona norte de la ciudad.


En general, la ubicación de la mayoría de las viviendas es adecuada y se ajusta a las expectativas de los compradores. Sin embargo, hemos observado que algunas de las propiedades se encuentran un tanto alejadas de la zona sur de la ciudad. Este hecho podría atribuirse a posibles errores en el proceso de marcado de las ubicaciones mediante el sistema GPS durante el momento de realizar la oferta. Es importante tener en cuenta estos casos particulares, ya que la ubicación es un factor clave que influye significativamente en la decisión de compra de los clientes. Por lo tanto, es fundamental abordar estos errores y asegurarnos de que todas las propiedades se encuentren correctamente ubicadas y descritas para garantizar la transparencia y la satisfacción de los clientes, por ende procederemos a la eliminación de viviendas que no se encuentren en la zona sur de la ciudad, las cuales se han identificados por tener una latitud mayor a >= 3.41396 y una longitud mayor a -76.509 y -76.551, esto conforme al mapa de la alcaldia de cali que se encuentra en: https://idesc.cali.gov.co/download/mapas/zonas_geograficas.pdf

### Procederemos a la eliminación:

TipoViviendaCasas2 <- TipoViviendaCasa[TipoViviendaCasa$longitud <= -76.509,]
TipoViviendaCasas2 <- TipoViviendaCasas2[TipoViviendaCasas2$longitud >= -76.551,]
TipoViviendaCasas2 <- TipoViviendaCasas2[TipoViviendaCasas2$latitud <= 3.41396,]




oferta <- data.frame(
  lat = TipoViviendaCasas2$latitud,
  long = TipoViviendaCasas2$longitud
)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircles(
    lng = ~long,
    lat = ~lat,
    popup = ~as.character(lat), 
    color = "blue", radius = 10
  )

map # Muestra el mapa

Con esta nueva selección de viviendas, podemos estar completamente seguros de que todas nuestras propiedades están ubicadas en la zona sur de la ciudad.

Analisis exploratorio de graficos.



Precio x Area


Precio x Estrato


Precio x Numero de Baños


Precio x Numero de Habitaciones


Precio x ubicación de vivienda - Zona Norte.



Aprovechando las capacidades tridimensionales de Plotly, vamos a visualizar la relación entre el precio, el área y el estrato de las viviendas en un gráfico tridimensional.


Resumen del Análisis Exploratorio y Correlación de Datos.

  • Precio x Area (Cor 0.77): Existe una fuerte correlación positiva entre el precio y el área de una propiedad. Esto significa que a medida que el área de la propiedad aumenta, también lo hace el precio de venta, y viceversa.

  • Precio x Estrato (Cor 0.67):Indica una relación moderadamente fuerte entre estas dos variables. En este contexto, un valor positivo de correlación sugiere que a medida que el estrato de la propiedad aumenta, también lo hace el precio de venta. Por lo tanto, las propiedades ubicadas en estratos más altos tienden a tener precios de venta más altos, mientras que las propiedades en estratos más bajos tienden a tener precios más bajos.

  • Precio x Numero de Baños (Cor: 0.75):Esta correlación sugiere una relación fuerte entre el precio de venta y el número de baños de una propiedad. Un valor positivo de correlación indica que a medida que aumenta el número de baños, también tiende a aumentar el precio de venta de la propiedad. Esto sugiere que las propiedades con más baños tienden a tener precios de venta más altos en comparación con aquellas con menos baños.

  • Precio x Numero de Habitaciones (Cor: 0.35):Esta correlación indica una relación débil entre el precio de venta y el número de habitaciones de una propiedad. Un valor positivo de correlación sugiere que, en general, a medida que aumenta el número de habitaciones, también tiende a aumentar el precio de venta de la propiedad, aunque la asociación es menos fuerte en comparación con otras variables.



Modelo de Regresión Lineal Multiple.

modeloRLM = lm(preciom ~ areaconst + estrato + habitaciones +parqueaderos + banios, data = TipoViviendaCasas2 )
summary(modeloRLM)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = TipoViviendaCasas2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1067.66   -38.50    -1.79    38.80   908.70 
## 
## Coefficients:
##                Estimate Std. Error t value             Pr(>|t|)    
## (Intercept)  -268.45650   15.34333 -17.497 < 0.0000000000000002 ***
## areaconst       1.26664    0.05689  22.265 < 0.0000000000000002 ***
## estrato        51.65778    3.16462  16.324 < 0.0000000000000002 ***
## habitaciones  -15.38556    3.98408  -3.862             0.000116 ***
## parqueaderos   93.21141    4.75090  19.620 < 0.0000000000000002 ***
## banios         49.75222    3.56293  13.964 < 0.0000000000000002 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 93.56 on 2124 degrees of freedom
## Multiple R-squared:  0.778,  Adjusted R-squared:  0.7775 
## F-statistic:  1489 on 5 and 2124 DF,  p-value: < 0.00000000000000022

Analisis de resultados Modelo Regresión Lineal Multiple.


  1. Intercepto (Intercepto): El valor del intercepto es -268.5 millones de pesos COP. Esto significa que cuando todas las variables independientes (área construida, estrato, parqueaderos, habitaciones y baños) son cero, el precio estimado de la vivienda es de -268.5 millones de pesos COP.

  2. Coeficientes:

  • Por cada unidad adicional de área construida, el precio de la casa aumenta en promedio aproximadamente 1.27 unidades monetarias.

  • Por cada unidad adicional en el estrato, el precio de la casa aumenta en promedio alrededor de 51.66 unidades monetarias.

  • Por cada unidad adicional en el número de parqueaderos, el precio de la casa aumenta en promedio aproximadamente 94.21 unidades monetarias.

  • Por cada unidad adicional en el número de baños, el precio de la casa aumenta en promedio aproximadamente 45.75 unidades monetarias.

  1. Valores p (Valores p): Todos los valores p para los coeficientes son muy pequeños, lo que sugiere que todas las variables independientes son significativas en el modelo.

  2. R-cuadrado: El coeficiente de determinación R-cuadrado es 0.7775, lo que significa que alrededor del 77.75% de la variabilidad en el precio de la vivienda se explica por las variables incluidas en el modelo.

Para mejorar el modelo se podrian tener encuenta las siguientes opciones:

  • Convertir la variable estrato en una variable binaria: Dado que los estratos para la zona norte se encuentran típicamente en el rango de 3 a 6, podría ser beneficioso convertir la variable estrato en una variable binaria que indique si la vivienda está en un estrato alto o no. Esto podría ayudar a capturar mejor el efecto del estrato en el precio de la vivienda.

  • Validar la ubicación de las casas eliminadas: Sería prudente verificar si las casas eliminadas previamente de los datos realmente pertenecían a la zona norte de la ciudad. Si hay evidencia de que estas casas fueron mal referenciadas en el GPS y pertenecen al norte, podríamos reconsiderar incluirlas en el análisis para evitar la pérdida de información importante.

  • Incluir la variable barrio en el modelo: Podríamos incorporar la variable barrio al modelo, codificándola numéricamente. Esto podría permitir capturar las diferencias de precio entre diferentes barrios, lo que puede ser relevante para el mercado de viviendas.

Validación de los supuestos del modelo.

1. Supuesto de Normalidad.

options(scipen = 999)

normalidad <- modeloRLM$residuals
shapiro.test(normalidad)
## 
##  Shapiro-Wilk normality test
## 
## data:  normalidad
## W = 0.76934, p-value < 0.00000000000000022

W es 0.76963.

El valor de la estadística de prueba de la distribución de Shapiro-Wilk está cerca de 1, lo que sugiere que los datos tienden a seguir una distribución normal, pero no lo suficiente como para afirmar con certeza que provienen de una distribución normal.

p-value

El valor p es < 0.00000000000000022, lo que significa que es muy pequeño, hay evidencia suficiente para rechazar la hipótesis nula de que los datos provienen de una distribución normal. En otras palabras, hay evidencia de que los datos no son normalmente distribuidos.

2. Supuesto de Varianza Constante.

options(scipen = 999)
gqtest(modeloRLM)
## 
##  Goldfeld-Quandt test
## 
## data:  modeloRLM
## GQ = 0.98462, df1 = 1059, df2 = 1059, p-value = 0.5995
## alternative hypothesis: variance increases from segment 1 to 2

Dado que el valor p (0.5995) es mayor que el nivel de significancia típico de 0.05, no hay suficiente evidencia para rechazar la hipótesis nula. En otras palabras, no hay suficiente evidencia para concluir que la varianza difiere significativamente entre los dos segmentos. Esto sugiere que no hay evidencia de heterocedasticidad en los datos.



3. Independencia de los errores

options(scipen = 999)
dwtest(modeloRLM)
## 
##  Durbin-Watson test
## 
## data:  modeloRLM
## DW = 1.8503, p-value = 0.0002657
## alternative hypothesis: true autocorrelation is greater than 0

El estadístico de Durbin-Watson (DW) es igual a 1.8435, y el valor p asociado es 0.0001469. Este test evalúa la presencia de autocorrelación en los residuos de un modelo. En este caso, el valor p es significativamente pequeño (menor que 0.05), lo que sugiere que hay evidencia estadísticamente significativa de autocorrelación positiva en los residuos del modelo. La hipótesis alternativa indica que la autocorrelación positiva es mayor que cero.


3. Multicolinealidad

  par(mfrow = c(2, 2))
  plot(modeloRLM)


Análisis de VIF (Varianza Inflación Factor):

vif(modeloRLM)
##    areaconst      estrato habitaciones parqueaderos       banios 
##     2.173760     1.676921     1.376160     2.074059     2.647172

Los valores VIF anteriores revelan una leve multicolinealidad entre las variables, siendo el número de baños el que presenta el valor más alto, con 2.64. Aunque este valor sugiere cierta correlación entre el número de baños y otras variables predictoras, no podemos eliminar esta característica del modelo, ya que los requisitos del cliente estipulan que el número de baños debe ser al menos 3. Por lo tanto, en lugar de eliminar esta variable, debemos mantenerla en el modelo para garantizar que se ajuste a las preferencias del cliente y, al mismo tiempo, explorar formas de mitigar la multicolinealidad mediante técnicas como la regularización o la selección de características.

En líneas generales, el modelo de regresión proporciona una valiosa perspectiva sobre cómo diversas características influyen en el precio de las viviendas. Sin embargo, debemos tener en cuenta ciertas limitaciones que surgen al verificar nuestros supuestos. Por ejemplo, los residuos del modelo no se adhieren perfectamente a una distribución normal y existe la posibilidad de que la varianza de los errores no sea constante. Además, el test de Durbin-Watson revela una autocorrelación positiva en los residuos, lo que indica una dependencia entre las observaciones a lo largo del tiempo. Estas limitaciones sugieren que el modelo puede beneficiarse de ajustes adicionales para mejorar su capacidad predictiva y la validez de sus conclusiones.



Sugerencias para cliente con tipo de vivienda apartamentos y zona sur.

predict(modeloRLM,
         newdata = data.frame(areaconst = 300, 
                               estrato = c(5, 6), 
                               parqueaderos = 3, 
                               habitaciones = 5,
                               banios=3)
        ,interval = "confidence" )
##        fit      lwr      upr
## 1 721.7887 697.6303 745.9471
## 2 773.4465 749.4189 797.4741

Los resultados del modelo son contundentes y ofrecen dos opciones estimados de compras para el cliente.

  • Opción A: Con un precio promedio estimado de 721.79 millones de pesos colombianos, con un intervalo de confianza del 95% entre aproximadamente 697.63 y 745.95 y en estrato 5

  • Opción B: el modelo predice un precio de vivienda de aproximadamente 773.44, con un intervalo de confianza del 95% entre aproximadamente 749.41 y 797.47.


OfertasCasas <- subset(TipoViviendaCasas2,estrato >=5 & areaconst >= 300  & preciom <=850 & parqueaderos >=3 & banios>=3 & habitaciones >= 5)

OfertasCasas <- as.data.frame(OfertasCasas)

knitr::kable(OfertasCasas, format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud


No existe una oferta exacta para la vivienda tipo 2 apartamentos ubicados en la zona sur con las caracteristicas que requiere el cliente.

Ahora tenemos diferentes opciones que puede tomar el cliente:

OfertasCasas <- subset(TipoViviendaCasas2,estrato >=5 & areaconst >= 300  & preciom <=850 & parqueaderos >=2 & banios>=2 & habitaciones >= 4)

OfertasCasas <- as.data.frame(OfertasCasas)

knitr::kable(OfertasCasas, format = "markdown")
id zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo barrio longitud latitud
4952 zona sur 4 5 650 600 2 4 5 apartamento el ingenio -76.53400 3.38100
4394 zona sur 3 5 690 486 2 4 4 apartamento el ingenio -76.53111 3.38292
7658 zona sur 6 5 520 320 2 4 4 apartamento cuarto de legua -76.55100 3.40900


Ubicación de las potenciales ofertas.

oferta <- data.frame(
  preciom = OfertasCasas$preciom,
  lat = OfertasCasas$latitud,
  long = OfertasCasas$longitud
)

pal <- colorNumeric(palette = "RdYlBu", domain = OfertasCasas$preciom)

# Crea un mapa
map <- leaflet(oferta) %>%
  addTiles() %>%
  addCircleMarkers(
    lng = ~long,
    lat = ~lat,
    popup = ~as.character(preciom), 
    #color = "blue", 
    radius = (~preciom / 40),
    color = ~pal(preciom),         # Escala de colores basada en los valores
    #palette = "YlOrRd",     # Paleta de colores a utilizar
    stroke = TRUE,         # Sin borde en los círculos
    fillOpacity = 0.8,
    popupOptions = popupOptions(autoOpen = TRUE)
  )

map # Muestra el mapa



Ofertas:

1. Apartamento 4952: Se destaca como una opción destacada en términos de espacio y comodidad. Con un precio de 650 millones de pesos (COP), ofrece una generosa área construida de 600 metros cuadrados, con dos espacios de estacionamiento, cuatro baños y cinco habitaciones. Estratégicamente ubicado en la zona sur de la ciudad, en el barrio El Ingenio.

2. Apartamento 4394: Con un precio de 690 millones de pesos (COP), este apartamento ofrece una buena relación entre su tamaño y su valor. Con una área construida de 486 metros cuadrados, cuenta con dos espacios de estacionamiento, cuatro baños y cuatro habitaciones. Ubicado en la zona sur de la ciudad, en el barrio El Ingenio.

3. Apartamento 7658: Destacando por su atractivo precio de 520 millones de pesos (COP), este apartamento ofrece una superficie construida de 320 metros cuadrados. Cuenta con dos espacios de estacionamiento, cuatro baños y cuatro habitaciones. Ubicado en la zona sur de la ciudad, en el barrio Cuarto de Legua.

Debido a que no cumplimos con las características principales del cliente, estamos a la espera de que tome en cuenta las opciones anteriores para que podamos llegar a un acuerdo satisfactorio.