Informe

Vivienda 1: Norte

Punto 1.

Después de aplicar un filtro en la base de datos para encontrar casas en la zona Norte, se presentaron los primeros 722 registros que cumplían con esas características. Sin embargo, al observar el mapa, los puntos correspondientes a esas propiedades no se encuentran en la zona Norte, lo que sugiere que puede haber un error en la base de datos.

Este desajuste podría deberse a varias razones. Una posibilidad es que los registros en la base de datos tengan errores en la asignación de la zona geográfica de las propiedades, ya sea por una mala categorización o por información incorrecta en los datos de localización. También es posible que la base de datos esté desactualizada o que los puntos de ubicación no se hayan georreferenciado adecuadamente, lo que resulta en una discordancia entre la zona indicada y la ubicación real de las casas. En cualquier caso, es fundamental revisar y corregir los datos para garantizar que la información presentada sea precisa y útil para la asesoría. Luego del filtro por lat y long en total quedan 527 casas de la zona Norte.

       id           zona               piso              estrato     
 Min.   :   1   Length:8322        Length:8322        Min.   :3.000  
 1st Qu.:2080   Class :character   Class :character   1st Qu.:4.000  
 Median :4160   Mode  :character   Mode  :character   Median :5.000  
 Mean   :4160                                         Mean   :4.634  
 3rd Qu.:6240                                         3rd Qu.:5.000  
 Max.   :8319                                         Max.   :6.000  
 NA's   :3                                            NA's   :3      
    preciom         areaconst       parqueaderos        banios      
 Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
 1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000  
 Median : 330.0   Median : 123.0   Median : 2.000   Median : 3.000  
 Mean   : 433.9   Mean   : 174.9   Mean   : 1.835   Mean   : 3.111  
 3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
 Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
 NA's   :2        NA's   :3        NA's   :1605     NA's   :3       
  habitaciones        tipo              barrio             longitud     
 Min.   : 0.000   Length:8322        Length:8322        Min.   :-76.59  
 1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.54  
 Median : 3.000   Mode  :character   Mode  :character   Median :-76.53  
 Mean   : 3.605                                         Mean   :-76.53  
 3rd Qu.: 4.000                                         3rd Qu.:-76.52  
 Max.   :10.000                                         Max.   :-76.46  
 NA's   :3                                              NA's   :3       
    latitud     
 Min.   :3.333  
 1st Qu.:3.381  
 Median :3.416  
 Mean   :3.418  
 3rd Qu.:3.452  
 Max.   :3.498  
 NA's   :3      
# A tibble: 3 × 13
     id zona       tipo  barrio preciom areaconst longitud latitud estrato
  <dbl> <chr>      <chr> <chr>    <dbl>     <dbl>    <dbl>   <dbl>   <dbl>
1  1209 Zona Norte Casa  acopi      320       150    -76.5    3.48       5
2  1592 Zona Norte Casa  acopi      780       380    -76.5    3.49       5
3  4057 Zona Norte Casa  acopi      750       445    -76.5    3.39       6
# ℹ 4 more variables: habitaciones <dbl>, banios <dbl>, piso <chr>,
#   parqueaderos <dbl>

Zona Norte 
       722 
table(base_norte$zona)

Zona Norte 
       722 

Al observar el mapa se observa que existen muchos outliers según las coordenadas indicadas sobre el mapa. Se realizara una limpieza teniendo en cuenta las coordenadas limitrofes que corresponden a la zona norte para tener un sector homogeneo geograficamente representado con las coordenadas latitud >= 3.456 y longitud >= -76.540. Como se muestra en el siguiente mapa.

table(base_norte_coor$zona)

Zona Norte 
       527 

Punto 2.

En la matriz de correlación, se observa que las variables área construida, estrato y número de baños tienen una correlación significativa con el precio de la casa (preciom), con valores superiores a 0.53. Esto indica que estas variables tienen una relación directa y positiva con el precio: a medida que el área construida, el estrato y el número de baños aumentan, también lo hace el precio de la vivienda. La variable número de habitaciones, aunque presenta una correlación más baja (0.39), también muestra una relación positiva, lo que significa que, en general, a mayor número de habitaciones, mayor será el precio de la casa.

En los gráficos de dispersión, específicamente en el gráfico precio vs área construida vs estrato, se puede observar una clara tendencia de que, a medida que aumenta el área construida, también lo hace el precio de la casa. Este patrón es consistente donde a estratos más altos, también se observan precios más altos. Asimismo, en los gráficos precio vs baños vs. habitaciones, también se evidencia que, con un mayor número de baños o habitaciones, el precio tiende a aumentar, lo que refleja que estas características influyen positivamente en el valor de la propiedad.

El análisis muestra que el precio de las casas está fuertemente influenciado por el área construida, el estrato y el número de baños. Aunque el número de habitaciones tiene una correlación algo más débil, sigue siendo una variable que impacta el precio. Las visualizaciones interactivas con Plotly ayudan a confirmar estos patrones y proporcionan una base sólida para tomar decisiones informadas en la compra y venta de viviendas.

Punto 3

En este análisis de regresión lineal múltiple, el modelo tiene la forma:

Precio=β0+β1(Areaconstruida)+β2(Estrato)+β3(Habitaciones)+β4(Parqueaderos)+β5(Banios)

  1. Intercepto (β0=−163.1256): Este valor representa el precio estimado cuando todas las variables independientes son cero, es decir, cuando no hay área construida, estrato, habitaciones, parqueaderos ni baños. Aunque en la práctica este valor no tiene mucho sentido, ya que no existen viviendas sin estas características, es útil para el cálculo del modelo.
  2. Área construida (β1=0.7769): Este coeficiente sugiere que por cada metro cuadrado adicional de área construida, el precio de la casa aumenta en 0.7769 millones de pesos. Dado que el valor es altamente significativo (p<2e−16), podemos confiar en que el área construida tiene un impacto considerable en el precio de la vivienda.
  3. Estrato (β2=68.7993): Cada incremento en el estrato (un estrato más alto) aumenta el precio de la vivienda en aproximadamente 68.7993 millones de pesos. Este resultado es significativo (p<2e−14), lo que implica que las viviendas ubicadas en zonas de estratos más altos tienden a tener precios significativamente más altos. Esto es lógico, ya que los estratos más altos suelen corresponder a áreas con mayor poder adquisitivo.
  4. Habitaciones (β3=5.5770): Este coeficiente indica que, por cada habitación adicional, el precio de la vivienda aumentaría en aproximadamente 5.5770 millones de pesos. Sin embargo, este coeficiente no es estadísticamente significativo (p=0.27098), lo que sugiere que el número de habitaciones no tiene un impacto considerable en el precio de la vivienda. Esto podría ser debido a que las viviendas en ciertos rangos de tamaño ya tienen un número estándar de habitaciones, o bien, que otras variables como área construida tienen mayor peso.
  5. Parqueaderos (β4=13.6685): El coeficiente negativo de los parqueaderos indica que, por cada parqueadero adicional, el precio aumenta en 13.6685 millones de pesos. Sin embargo, este coeficiente es significativo (p=0.0043), lo que sugiere que el número de parqueaderos tiene un impacto importante en el precio de la vivienda en este caso. Este resultado podría deberse a que, en algunas zonas, el número de parqueaderos es una variable determinante en la valoración de la vivienda.
  6. Baños (β5=15.5487): Este coeficiente indica que, por cada baño adicional, el precio de la vivienda aumenta en aproximadamente 15.5487 millones de pesos. Este coeficiente es altamente significativo (p=0.016), lo que sugiere que el número de baños tiene un impacto en el precio de la vivienda, lo cual es lógico, ya que más baños generalmente indican una vivienda más grande o con más comodidades.

Interpretación del R² y Ajuste del Modelo:

• R² = 0.6396: El R² indica que aproximadamente el 63.96% de la variabilidad en el precio de las casas es explicada por el modelo, lo que sugiere un ajuste moderado. Este valor es relativamente alto, pero indica que aún hay un 36.04% de variabilidad en el precio que no está siendo explicado por las variables en el modelo. Sin embargo, es importante tener en cuenta que en análisis de precios de propiedades, una parte significativa de la variabilidad puede ser explicada por factores no medidos en este conjunto de datos, como la ubicación exacta, la antigüedad de la vivienda o características específicas que no se han considerado. • R² ajustado = 0.6361: El R² ajustado toma en cuenta el número de variables en el modelo y es útil para comparar modelos con diferentes cantidades de predictores. En este caso, el R² ajustado también es relativamente alto, lo que indica que el modelo no sobreajusta los datos.

Los índices de inflación de la varianza (VIF) que se presentan son medidas que indican si existe multicolinealidad entre las variables independientes en el modelo de regresión lineal. El VIF mide cuánto se incrementa la varianza de los coeficientes estimados debido a la colinealidad entre las variables. Un VIF alto sugiere que una variable independiente está correlacionada con otras variables del modelo, lo que puede llevar a estimaciones ineficientes y a una interpretación errónea de los coeficientes.

Los valores de VIF resultantes son:

Área construida (areaconst): 1.725530 Estrato: 1.681736 Habitaciones: 1.881869 Parqueaderos: 1.396791 Baños (banios): 2.147124 Interpretación de los VIF:

Los VIF calculados son todos bastante bajos (por debajo de 2), lo que sugiere que no existe multicolinealidad significativa entre las variables. Un VIF cercano a 1 indica que no hay colinealidad, lo cual es ideal, pues mplica que las variables del modelo no están altamente correlacionadas entre sí. Esto significa que las estimaciones de los coeficientes del modelo no están influidas de manera importante por la multicolinealidad, lo que proporciona una mayor confiabilidad en los resultados. La variable Baños tiene una ligera correlación con otras variables en el modelo, pero esta correlación no es suficientemente alta como para causar problemas graves de multicolinealidad.

modelo_norte <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_norte_coor)
summary(modelo_norte)

Call:
lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
    banios, data = base_norte_coor)

Residuals:
    Min      1Q  Median      3Q     Max 
-909.30  -65.02  -15.71   33.97 1115.59 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -163.12564   35.28297  -4.623 4.77e-06 ***
areaconst       0.76694    0.05265  14.566  < 2e-16 ***
estrato        68.79939    8.75161   7.861 2.20e-14 ***
habitaciones    5.57706    5.06098   1.102  0.27098    
parqueaderos   13.66852    4.76941   2.866  0.00433 ** 
banios         15.54871    6.43653   2.416  0.01605 *  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 146.7 on 521 degrees of freedom
Multiple R-squared:  0.6396,    Adjusted R-squared:  0.6361 
F-statistic: 184.9 on 5 and 521 DF,  p-value: < 2.2e-16
car::vif(modelo_norte)
   areaconst      estrato habitaciones parqueaderos       banios 
    1.725530     1.681736     1.881869     1.396791     2.147124 

Punto 4

Es importante validar ciertos supuestos para garantizar que las estimaciones sean confiables y las inferencias sean correctas. A continuación, se revisan los resultados de la validación de supuestos para el modelo.

Normalidad de los residuos (Shapiro-Wilk Normality Test) Resultado:

W = 0.77179 p-valor: p < 2.2e-16

El Shapiro-Wilk test evalúa la normalidad de los residuos. Un p-valor menor a 0.05 indica que los residuos no siguen una distribución normal. En este caso, el p-valor es muy pequeño (< 2.2e-16), lo que sugiere que los residuos no siguen una distribución normal. La normalidad de los residuos es un supuesto importante para realizar pruebas de hipótesis válidas en regresión lineal. Si los residuos no son normales, las inferencias podrían ser sesgadas.

Una posible solucion podría ser la transformación de la variable dependiente preciom. Si bien esto puede haber mejorado la normalidad, es posible que aún sea necesario probar otras transformaciones como logaritmos de otras variables o realizar transformaciones Box-Cox. Y también verificar si existen valores atípicos que estén afectando la normalidad de los residuos. En algunos casos, estos valores pueden distorsionar la distribución.

Heterocedasticidad (Prueba de Breusch-Pagan)

Estadística de la prueba: BP = 105.87 Grados de libertad: df = 5 p-valor: p < 2.2e-16

Se evalúa si existe heterocedasticidad, es decir, si la varianza de los residuos es constante a lo largo de los valores ajustados. Un p-valor menor a 0.05 sugiere que hay heterocedasticidad, lo que indica que la varianza de los residuos no es constante y podría estar aumentando o disminuyendo con los valores predichos.

Una posible solución aparte de transformar las variables sería ajustar el modelo usando errores estándar robustos que corrigen la heterocedasticidad para obtener inferencias más confiables.

qqnorm(residuals(modelo_norte), 
       main = "Gráfico Q-Q para Normalidad de Residuos")
qqline(residuals(modelo_norte), col = "red")

# Realizar prueba de normalidad
shapiro.test(residuals(modelo_norte))

    Shapiro-Wilk normality test

data:  residuals(modelo_norte)
W = 0.77179, p-value < 2.2e-16
# Generar gráfico de residuos vs. valores ajustados
plot(fitted(modelo_norte), residuals(modelo_norte),
     xlab = "Valores Ajustados", ylab = "Residuos",
     main = "Residuos vs. Valores Ajustados")
abline(h = 0, col = "red")

bptest(modelo_norte)

    studentized Breusch-Pagan test

data:  modelo_norte
BP = 105.87, df = 5, p-value < 2.2e-16
modelo_log <- lm(log(preciom) ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_norte)
modelo_log

Call:
lm(formula = log(preciom) ~ areaconst + estrato + habitaciones + 
    parqueaderos + banios, data = base_norte)

Coefficients:
 (Intercept)     areaconst       estrato  habitaciones  parqueaderos  
    4.246946      0.001474      0.237892      0.006611      0.013251  
      banios  
    0.072176  

Punto 5

Al momento de predecir el valor de una casa en la zona norte con las caracteristicas solicitadas se obtiene que para un estrato 4, el precio de la vivienda se encuentra entre 313.30 millones y 351.276 millones. Para un estrato 5, el precio de la vivienda se encuentra entre 394.18 millones y 443.96 millones.

Lo que restringe la posible busqueda en estrato 5.

nueva_vivienda <- data.frame(
  areaconst = 200,      # Área construida: 200 m²
  parqueaderos = 1,     # Número de parqueaderos: 1
  banios = 2,           # Número de baños: 2
  habitaciones = 4,      # Número de habitaciones: 4
  estrato = c(4, 5)      # Estrato: 4 y 5 (dos predicciones)
)

# Realizar la predicción
predicciones <- predict(modelo_norte, newdata = nueva_vivienda)

# Mostrar las predicciones
#predicciones

predicciones_intervalo <- predict(modelo_norte, newdata = nueva_vivienda, interval = "confidence")
predicciones_intervalo
       fit      lwr      upr
1 332.5334 313.3030 351.7638
2 401.3328 372.7633 429.9024

Punto 6

Con base en la solicitud, que tiene un crédito pre-aprobado de hasta 350 millones de pesos, vamos a evaluar las opciones disponibles en función de las características que cumplen con los requisitos planteados inicialmente, como el área construida, el número de habitaciones, el estrato y el precio. A continuación, se analizará cada opción y se hará evaluación comparativa para recomendar las mejores alternativas.

Requisitos de la solicitud: Área construida: 200 m². Número de habitaciones: 4. Estrato: 4 o 5. Precio máximo: 350 millones de pesos.

Opciones disponibles:

Opción 1: ID 4313

Precio: 335 millones Área construida: 220 m² Habitaciones: 3 Estrato: 5 Aunque cumple con el precio y el estrato, el número de habitaciones es menor que el solicitado (3 en lugar de 4). Sin embargo, tiene un área superior a la solicitada (220 m² frente a 200 m²), lo que podría compensar parcialmente la falta de una habitación extra.

Opción 2: ID 1887

Precio: 340 millones Área construida: 203 m² Habitaciones: 4 Estrato: 5 Esta opción cumple completamente con los requisitos de área, número de habitaciones y estrato. Además, el precio está dentro del límite aprobado. Es una opción fuerte, ya que cumple con todas las condiciones.

Opción 3: ID 1352

Precio: 350 millones Área construida: 190 m² Habitaciones: 3 Estrato: 5 Esta opción cumple con el precio máximo y el estrato solicitado, pero no cumple con el número de habitaciones, ya que tiene 3 en lugar de 4. Además, el área es algo menor que la solicitada. Aunque está en el límite del presupuesto, podría no ser ideal debido a la menor cantidad de habitaciones.

Opción 4: ID 1163

Precio: 350 millones Área construida: 216 m² Habitaciones: 4 Estrato: 5 Análisis: Esta opción cumple perfectamente con todos los requisitos: tiene un área adecuada (216 m²), el número de habitaciones correcto (4), y el estrato también es adecuado (estrato 5). Está justo en el límite del crédito pre-aprobado.

Opción 5: ID 612

Precio: 270 millones Área construida: 196 m² Habitaciones: 4 Estrato: 3 Análisis: Esta opción tiene un precio que está muy por debajo del límite, lo que podría permitir mayor flexibilidad en otros gastos. Sin embargo, el estrato no cumple con la solicitud (estrato 3 en lugar de 4 o 5), lo que puede ser una limitación dependiendo de la preferencia de la empresa en cuanto a la ubicación de la vivienda. Recomendaciones: Las opciones que cumplen de manera más completa con los requisitos de la empresa son:

Opción 2 (ID 1887): Cumple completamente con el área, número de habitaciones, y estrato, además de estar dentro del presupuesto. Opción 4 (ID 1163): Cumple con todos los requisitos, aunque está justo en el límite del presupuesto. La Opción 5 (ID 612) es atractiva debido a su precio bajo, pero el estrato no es adecuado, lo que podría ser un factor importante para la empresa.

base_norte_coor$precio_predicho <- predict(modelo_norte, newdata = base_norte_coor)
ofertas <- base_norte_coor %>%
  filter(
    preciom <= 350,
    areaconst >= 180 & areaconst <= 220,
    habitaciones >= 3 & habitaciones <= 4,
    banios >= 2 & banios <= 3,
    parqueaderos >= 1 & parqueaderos <= 2
#    estrato %in% c(4, 5)
  ) %>%
  select(id, zona, barrio, areaconst, habitaciones, banios, parqueaderos, estrato, precio_predicho, preciom, latitud, longitud)

# Seleccionar las 5 mejores ofertas
ofertas_top5 <- ofertas %>% slice_min(preciom, n = 5)
# Crear mapa interactivo
mapa_ofertas <- leaflet(ofertas_top5) %>%
  addTiles() %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    popup = ~paste(
      "ID:", id, "<br>",
      "Precio:", preciom, "M<br>",
      "Área:", areaconst, "m²<br>",
      "Habitaciones:", habitaciones, "<br>",
      "Estrato:", estrato
    ),
    color = "green",
    radius = 8,
    stroke = FALSE,
    fillOpacity = 0.8
  ) %>%
  addLegend(
    position = "bottomright",
    colors = "green",
    labels = "Ofertas ≤ 350M",
    title = "Ubicación de Ofertas"
  )

mapa_ofertas

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

Vivienda 2: Sur

Punto 1.

Después de aplicar un filtro en la base de datos para encontrar casas en la zona Norte, se presentaron los primeros 2787 registros que cumplían con esas características. Sin embargo, al observar el mapa, los puntos correspondientes a esas propiedades no se encuentran en la zona Norte, lo que sugiere que puede haber un error en la base de datos.

Trabajaremos con la con la completitud de los datos, asumiendo en que la etiqueta ‘Zona Sur’ es confiable a pesar que en el mapa no sean congruentes las ubicaciones y poder comparar la variacion de los resultados.

# A tibble: 3 × 13
     id zona     tipo        barrio   preciom areaconst longitud latitud estrato
  <dbl> <chr>    <chr>       <chr>      <dbl>     <dbl>    <dbl>   <dbl>   <dbl>
1  5098 Zona Sur Apartamento acopi        290        96    -76.5    3.45       4
2   698 Zona Sur Apartamento aguabla…      78        40    -76.5    3.4        3
3  8199 Zona Sur Apartamento aguacat…     875       194    -76.6    3.46       6
# ℹ 4 more variables: habitaciones <dbl>, banios <dbl>, piso <chr>,
#   parqueaderos <dbl>

Zona Sur 
    2787 

Punto 2

En la matriz de correlación, se observa que las variables área construida, estrato y número de baños tienen una correlación significativa con el precio de la casa (preciom), con valores superiores a 0.72. Esto indica que estas variables tienen una relación directa y positiva con el precio: a medida que el área construida, el estrato y el número de baños aumentan, también lo hace el precio de la vivienda. La variable número de habitaciones, aunque presenta una correlación más baja (0.33), también muestra una relación positiva, lo que significa que, en general, a mayor número de habitaciones, mayor será el precio de la casa pero sin tanta relevancia.

Al igual que en la zona norte, se observa que a mayor area mayor será el precio, aunque en esta grafica se muestra aun más la incidencia del estrato 6 como un factor de aumento de los valores de propiedades. Se compara también el numero de habitaciones y numero de baños con el precio y se muestra un incremento gradual del precio con el incremento de estos.

scatter_area <- ggplot(base_sur, aes(x = areaconst, y = preciom, color = factor(estrato))) +
  geom_point(alpha = 0.7) +
  labs(title = "Precio vs. Área Construida", x = "Área (m²)", y = "Precio (millones)") +
  theme_minimal()

ggplotly(scatter_area) %>% 
  layout(hoverlabel = list(bgcolor = "white"))
scatter_banios <- ggplot(base_sur, aes(x = habitaciones, y = preciom, color = banios)) +
  geom_jitter(width = 0.2) +
  labs(title = "Precio vs. Número de habitaciones", x = "Habitaciones", y = "Precio (millones)") +
  theme_minimal()

ggplotly(scatter_banios)

Punto 3

Interpretación de los Coeficientes: 1. Intercepto (-221.04614): Este valor es el precio estimado de la vivienda cuando todas las variables independientes (área construida, estrato, habitaciones, parqueaderos, y baños) son igual a cero. En la práctica, este valor no tiene una interpretación directa, ya que una vivienda con área cero y sin habitaciones, parqueaderos, ni baños no es realista. Sin embargo, es necesario para calcular las predicciones del modelo. 2. Área construida (1.46061): Por cada metro cuadrado adicional de área construida, el precio de la vivienda aumenta en promedio 1.46 millones de pesos, manteniendo constantes las demás variables del modelo. Este coeficiente es estadísticamente significativo (p-valor < 2e-16), lo que indica que hay una fuerte relación entre el área construida y el precio de la vivienda. Este resultado es lógico, ya que en general, las viviendas con más área suelen ser más costosas. 3. Estrato (57.00608): Un incremento de 1 en el estrato (por ejemplo, pasar de estrato 4 a estrato 5) se asocia con un aumento de 57 millones de pesos en el precio de la vivienda, manteniendo constantes las demás variables. Este coeficiente también es estadísticamente significativo (p-valor < 2e-16). La relación positiva entre el estrato y el precio es lógica, ya que generalmente en zonas de mayor estrato (que suelen ser más exclusivas o mejor ubicadas), los precios son más altos. 4. Número de habitaciones (-22.71789): Este coeficiente indica que, en promedio, cada habitación adicional disminuye el precio de la vivienda en 22.72 millones de pesos. Este resultado parece contraintuitivo, ya que en general, se esperaría que un mayor número de habitaciones aumente el precio de la vivienda. Es posible que la variable habitaciones esté correlacionada con otras variables del modelo (por ejemplo, área construida o parqueaderos) y que este efecto negativo sea reflejo de una colinealidad. Se podría explorar más a fondo la relación entre estas variables para entender mejor este comportamiento. 5. Número de parqueaderos (48.36353): Cada parqueadero adicional aumenta el precio de la vivienda en 48.36 millones de pesos, manteniendo las demás variables constantes. Este coeficiente es estadísticamente significativo (p-valor < 2e-16), lo cual es coherente con la intuición, ya que en zonas de mayor estrato y con viviendas más grandes, los parqueaderos adicionales son un valor añadido y aumentan el valor de la propiedad. 6. Número de baños (48.60871): Similar a los parqueaderos, cada baño adicional se asocia con un aumento de 48.61 millones de pesos en el precio de la vivienda, manteniendo las otras variables constantes. Este efecto positivo es lógico, ya que más baños generalmente aumentan la comodidad y la funcionalidad de una vivienda. R² y Ajuste del Modelo: Aunque no se proporciona el valor exacto de R² en los resultados que compartiste, podemos hablar sobre el ajuste del modelo en general. • R² (coeficiente de determinación): El R² mide la proporción de la variabilidad total del precio de la vivienda que es explicada por el modelo. Un valor cercano a 1 indica un buen ajuste del modelo, mientras que un valor cercano a 0 indica que el modelo no explica bien la variabilidad del precio. • R² Ajustado: Este valor tiene en cuenta el número de variables del modelo y ajusta el R² para penalizar por la inclusión de variables que no mejoran significativamente el ajuste.

modelo_sur <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_sur)
summary(modelo_sur)

Call:
lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
    banios, data = base_sur)

Residuals:
     Min       1Q   Median       3Q      Max 
-1252.31   -42.15    -2.06    36.32   934.06 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -221.04614   13.47771 -16.401  < 2e-16 ***
areaconst       1.46061    0.04876  29.956  < 2e-16 ***
estrato        57.00608    2.79648  20.385  < 2e-16 ***
habitaciones  -22.71789    3.39549  -6.691 2.68e-11 ***
parqueaderos   48.36353    3.02343  15.996  < 2e-16 ***
banios         48.60871    3.04050  15.987  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 95.17 on 2781 degrees of freedom
Multiple R-squared:  0.7536,    Adjusted R-squared:  0.7531 
F-statistic:  1701 on 5 and 2781 DF,  p-value: < 2.2e-16
qqnorm(residuals(modelo_sur), 
       main = "Gráfico Q-Q para Normalidad de Residuos")
qqline(residuals(modelo_sur), col = "red")

# Realizar prueba de normalidad
shapiro.test(residuals(modelo_sur))

    Shapiro-Wilk normality test

data:  residuals(modelo_sur)
W = 0.78157, p-value < 2.2e-16
# Generar gráfico de residuos vs. valores ajustados
plot(fitted(modelo_sur), residuals(modelo_sur),
     xlab = "Valores Ajustados", ylab = "Residuos",
     main = "Residuos vs. Valores Ajustados")
abline(h = 0, col = "red")

bptest(modelo_sur)

    studentized Breusch-Pagan test

data:  modelo_sur
BP = 956.83, df = 5, p-value < 2.2e-16
modelo_log <- lm(log(preciom) ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base_sur)
modelo_log

Call:
lm(formula = log(preciom) ~ areaconst + estrato + habitaciones + 
    parqueaderos + banios, data = base_sur)

Coefficients:
 (Intercept)     areaconst       estrato  habitaciones  parqueaderos  
    3.718090      0.002699      0.239785      0.001204      0.137820  
      banios  
    0.115540  

Punto 5

Basado en el modelo de regresión lineal múltiple, la predicción del precio sería:

Precio estimado (fit): 736.5012 millones de pesos Intervalo de confianza inferior (lwr): 716.2264 millones de pesos Intervalo de confianza superior (upr): 756.7760 millones de pesos

El precio estimado para la vivienda con las características solicitadas en la zona sur es de 736.5 millones de pesos. El intervalo de confianza indica que, con un alto grado de certeza, el precio real de esta vivienda estará entre 716.2 millones y 756.8 millones de pesos.

Dado que la empresa tiene un crédito preaprobado de 850 millones de pesos, el precio estimado está dentro del presupuesto. Las viviendas con este precio estarían considerablemente dentro del límite disponible de 850 millones de pesos.

nueva_vivienda <- data.frame(
  areaconst = 300,      # Área construida: 300 m²
  parqueaderos = 3,     # Número de parqueaderos: 3
  banios = 3,           # Número de baños: 3
  habitaciones = 5,      # Número de habitaciones: 5
  estrato = c(5, 6)      # Estrato: 5 y 6 (dos predicciones)
)

# Realizar la predicción
predicciones_sur <- predict(modelo_sur, newdata = nueva_vivienda)

# Mostrar las predicciones
#predicciones

predicciones_intervalo_sur <- predict(modelo_sur, newdata = nueva_vivienda, interval = "confidence")
predicciones_intervalo_sur
       fit      lwr      upr
1 679.4951 659.3575 699.6328
2 736.5012 716.2264 756.7760

Punto 6

Basado en el modelo de regresión lineal múltiple, sabemos que para un apartamento con estas características, el precio estimado está en el rango de los 850 millones de pesos o ligeramente por debajo.

Ofertas potenciales: Opción 1: ID: 7171

Precio: 260 millones de pesos

Área: 300 m²

Habitaciones: 5

Estrato: 3

Parqueaderos: 3

Baños: 3

Ubicación: Zona sur

Análisis: Esta propiedad está significativamente por debajo del límite de presupuesto de 850 millones de pesos, pero el estrato (estrato 3) no cumple con la solicitud de ser estrato 5 o 6. Sin embargo, su precio muy bajo puede ser atractiva si se priorizan otras características, aunque no cumple con la expectativa del estrato.

Opción 2: ID: 7658

Precio: 520 millones de pesos

Área: 320 m²

Habitaciones: 4

Estrato: 5

Parqueaderos: 3

Baños: 3

Ubicación: Zona sur

Análisis: Esta oferta se ajusta mejor al presupuesto de 850 millones de pesos. Sin embargo, tiene una habitación menos (4 en lugar de 5), pero cumple con el estrato 5 y el número de parqueaderos y baños. Este es un candidato viable dentro del rango de precios, aunque es ligeramente más grande de lo que se solicitaba (320 m² frente a los 300 m² solicitados).

Opción 3: ID: 8113

Precio: 410 millones de pesos

Área: 295 m²

Habitaciones: 4

Estrato: 5

Parqueaderos: 3

Baños: 3

Ubicación: Zona sur

Análisis: Esta opción también se encuentra muy por debajo del presupuesto de 850 millones de pesos. Tiene el estrato adecuado (5) y el número de parqueaderos y baños solicitados. Sin embargo, solo tiene 4 habitaciones en lugar de las 5 solicitadas. Además, su área es de 295 m², lo cual está un poco por debajo de los 300 m² solicitados. Es una opción con un precio atractivo, pero con una ligera diferencia en el número de habitaciones y el área.

Resumen y recomendaciones: Opción 1: Es una opción con un precio muy atractivo, pero el estrato 3 no cumple con los requisitos de la solicitud. Si el estrato no es un factor crucial, esta propiedad puede ser considerada debido a su bajo precio.

Opción 2: Es una opción interesante y ajustada al presupuesto, con estrato 5, aunque tiene una habitación menos y es más grande en área de lo solicitado. Aun así, podría ser una excelente opción si el número de habitaciones es flexible.

Opción 3: Esta opción también es atractiva por su bajo precio, tiene estrato 5, pero no cumple con el número de habitaciones (4 en lugar de 5). La diferencia en el área también es pequeña, por lo que podría ser una opción si el número de habitaciones no es un requisito inflexible.

base_sur$precio_predicho <- predict(modelo_sur, newdata = base_sur)
ofertas <- base_sur %>%
  filter(
    preciom <= 850,
    areaconst >= 280 & areaconst <= 320,
    habitaciones >= 2 & habitaciones <= 5,
    banios >= 2 & banios <= 4,
    parqueaderos >= 1 & parqueaderos <= 4
#    estrato %in% c(4, 5)
  ) %>%
  select(id, zona, barrio, areaconst, habitaciones, banios, parqueaderos, estrato, precio_predicho, preciom, latitud, longitud)

# Seleccionar las 5 mejores ofertas
ofertas_top5_sur <- ofertas %>% slice_min(preciom, n = 5)
# Crear mapa interactivo
mapa_ofertas <- leaflet(ofertas_top5_sur) %>%
  addTiles() %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    popup = ~paste(
      "ID:", id, "<br>",
      "Precio:", preciom, "M<br>",
      "Área:", areaconst, "m²<br>",
      "Habitaciones:", habitaciones, "<br>",
      "Estrato:", estrato
    ),
    color = "green",
    radius = 8,
    stroke = FALSE,
    fillOpacity = 0.8
  ) %>%
  addLegend(
    position = "bottomright",
    colors = "green",
    labels = "Ofertas ≤ 850M",
    title = "Ubicación de Ofertas"
  )

mapa_ofertas

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.