1. Introducción:

En este informe se presenta un análisis detallado de la solicitud de compra de viviendas en la ciudad de Cali por parte de una compañía internacional. Se utilizaron técnicas de modelación y análisis estadístico para evaluar las opciones disponibles y proporcionar recomendaciones basadas en datos.

2. Objetivo:

El objetivo principal de este informe es proporcionar a María, propietaria de C&A (Casas y Apartamentos) en Cali, información relevante y análisis estadístico para tomar decisiones informadas sobre las viviendas que cumplen con las especificaciones de la solicitud.

3. Metodología:

Se utilizaron los siguientes pasos metodológicos para realizar el análisis:

  1. Exploración Inicial de Datos:

• Se observa que el conjunto de datos contiene información sobre viviendas en Cali, con variables como zona, tipo, estrato, precio, área de construcción, número de parqueaderos, número de baños, número de habitaciones, ubicación geográfica (latitud y longitud) y el barrio. • Se identifican variables categóricas (zona, tipo, barrio) y numéricas (estrato, precio, área de construcción, etc.). • Se muestra un gráfico de barras que representa la distribución de tipos de variables en el conjunto de datos.

  1. Análisis de Datos Faltantes:

• Se identifican las variables con datos faltantes y se muestra el número de datos faltantes por variable en un gráfico de barras y una tabla. • Se observa que las variables “piso” y “parqueaderos” tienen un porcentaje significativo de datos faltantes.

  1. Resumen Estadístico para Variables Numéricas:

• Se muestra un resumen estadístico para las variables numéricas, lo que proporciona información como la media, mediana, mínimo, máximo y cuartiles para cada variable.

  1. Imputación de Valores Faltantes:

• Se imputan los valores faltantes para la variable categórica “piso” utilizando la moda, es decir, el valor más frecuente. • Se imputan los valores faltantes para la variable numérica “parqueaderos” utilizando la mediana, que es menos sensible a valores atípicos que la media. • Se convierte la variable “piso” a tipo numérico para futuros cálculos. • Se eliminan los registros con datos faltantes en otras variables, lo que ayuda a mantener la integridad de los datos restantes.

  1. Eliminación de Variables:

• Se elimina la variable “id” del conjunto de datos, ya que no parece ser relevante para el análisis posterior y no aporta información útil.

  1. Matriz de Correlación:

• Se calcula la matriz de correlación entre las variables numéricas, lo que proporciona información sobre las relaciones lineales entre las variables. • Se observa que algunas variables tienen correlaciones positivas o negativas moderadas o fuertes entre sí. • Correlaciones positivas más fuertes: o Entre “areaconst” (área de construcción) y “preciom” (precio), con un valor de 0.687, lo que indica que a medida que aumenta el área de construcción, tiende a aumentar el precio de la vivienda. o Entre “parqueaderos” y “areaconst”, con un valor de 0.523, lo que sugiere que las viviendas con más parqueaderos tienden a tener un área de construcción más grande. • Correlaciones positivas moderadas: o Entre “parqueaderos” y “preciom”, con un valor de 0.616, lo que indica que las viviendas con más parqueaderos tienden a tener precios más altos. o Entre “banios” (número de baños) y “areaconst”, con un valor de 0.648, sugiriendo que las viviendas con más baños tienden a tener un área de construcción más grande. • Correlaciones negativas más fuertes: o Entre “estrato” y “longitud”, con un valor de -0.444, lo que sugiere una relación inversa entre el estrato y la longitud (ubicación geográfica). o Entre “preciom” y “longitud”, con un valor de -0.344, sugiriendo una relación inversa entre el precio y la longitud. • Correlaciones negativas moderadas: o Entre “piso” (número de pisos) y “areaconst”, con un valor de -0.179, lo que sugiere que las viviendas con más pisos tienden a tener un área de construcción menor. o Entre “habitaciones” y “longitud”, con un valor de -0.008, indicando una relación leve pero negativa entre el número de habitaciones y la longitud. • Correlaciones más débiles: o La correlación entre “piso” y “estrato” es bastante baja (0.114), lo que indica una relación débil entre el número de pisos y el estrato. o La correlación entre “latitud” y “longitud” es también bastante baja (0.236), lo que sugiere una relación débil entre la latitud y la longitud, lo cual es esperado ya que son coordenadas geográficas.

  1. Filtrado de datos: Se seleccionan únicamente las viviendas que cumplen con ciertos criterios predefinidos, como la ubicación geográfica (Zona Norte o Zona Sur) y otras características relevantes.

  2. Clasificación con k-means: Se emplea el algoritmo k-means para agrupar los puntos geográficos de las viviendas en cada zona y así identificar áreas similares. Los puntos que no pertenecen al cluster predominante se etiquetan como outliers.

  3. Análisis estadístico descriptivo: Se realizan estadísticas descriptivas para caracterizar las propiedades dentro y fuera del conglomerado en cada zona. Esto incluye calcular medidas como precios medios, áreas de construcción, estratos, número de baños y habitaciones.

  4. Gráficos interactivos de dispersión: Se utilizan gráficos interactivos para visualizar dinámicamente la relación entre el precio y el área construida en las zonas Norte y Sur. Estos gráficos proporcionan información valiosa sobre la distribución de las viviendas y las relaciones entre las variables.

  5. Modelo de regresión lineal múltiple: Se ajusta un modelo de regresión lineal múltiple para cada zona, utilizando variables como el área construida, el estrato, el número de habitaciones, baños y parqueaderos para predecir el precio de las viviendas. Se realiza una interpretación detallada de los coeficientes del modelo y se evalúa el ajuste del mismo.

  6. Mapas: Se generan mapas que muestran la distribución geográfica de las viviendas en cada zona, resaltando visualmente la ubicación de las propiedades y su precio estimado. Estos mapas son útiles para comprender la distribución espacial de las viviendas y las tendencias del mercado.

En resumen, se utilizó un enfoque integral que combina análisis estadístico, modelado y visualización de datos para caracterizar y comparar las propiedades en las diferentes zonas. Esto proporciona una comprensión profunda del mercado inmobiliario en cada área y ayuda a tomar decisiones informadas.

4. Resultados:

Análisis para casas en la Zona Norte:

  1. Filtrado de datos: Se seleccionan únicamente las casas ubicadas en la Zona Norte de acuerdo con los criterios especificados.

  2. Clasificación con k-means: Se agrupan los puntos geográficos de las casas en la Zona Norte utilizando el algoritmo k-means para identificar áreas similares. Se etiquetan los puntos que no pertenecen al cluster predominante como outliers.

  3. Resultados específicos:

• Se clasificaron 606 puntos como ‘Dentro’ (dentro del conglomerado) y 232 como ‘Fuera’ (outliers) en la Zona Norte. • La cantidad total de puntos antes de la clasificación en la Zona Norte fue de 1920. • Las estadísticas descriptivas muestran características específicas de las casas ‘Dentro’ del conglomerado en la Zona Norte, como precios medios, áreas de construcción, estratos, número de baños y habitaciones.

Análisis para apartamentos en la Zona Sur:

  1. Filtrado de datos: Se seleccionan únicamente los apartamentos ubicados en la Zona Sur según los criterios especificados.

  2. Clasificación con k-means: Se agrupan los puntos geográficos de los apartamentos en la Zona Sur utilizando k-means para identificar áreas similares y se etiquetan los puntos que no pertenecen al cluster predominante como outliers.

  3. Resultados específicos: • Se clasificaron 1917 puntos como ‘Dentro’ (dentro del conglomerado) y 1740 como ‘Fuera’ (outliers) en la Zona Sur. • La cantidad total de puntos antes de la clasificación en la Zona Sur fue de 2787. • Las estadísticas descriptivas muestran características específicas de los apartamentos ‘Dentro’ del conglomerado en la Zona Sur, como precios medios, áreas de construcción, estratos, número de baños y habitaciones.

En resumen, estos análisis proporcionan información detallada sobre la distribución espacial y las características de las viviendas en la Zona Norte (casas) y la Zona Sur (apartamentos), lo que puede ser útil para comprender mejor el mercado inmobiliario en cada área y tomar decisiones informadas.

Basándome en la comparación de las variables estadísticas de las casas en la Zona Norte y los apartamentos en la Zona Sur, aquí están las conclusiones que se pueden extraer:

  1. Distribución Geográfica:

• La distribución geográfica de las casas en la Zona Norte y los apartamentos en la Zona Sur difiere significativamente, lo que indica una segregación espacial en la distribución de los tipos de viviendas en la ciudad.

  1. Precio:

• Las casas en la Zona Norte tienden a tener precios más altos en comparación con los apartamentos en la Zona Sur. Esto puede atribuirse a factores como el tamaño de la propiedad, las comodidades adicionales y la ubicación.

  1. Área de Construcción:

• Las casas en la Zona Norte tienen áreas de construcción generalmente más grandes en comparación con los apartamentos en la Zona Sur. Esto puede reflejar las preferencias de espacio y el estilo de vida de los residentes en cada zona.

  1. Estrato:

• En promedio, las casas tienden a tener un estrato ligeramente más alto que los apartamentos. Esto puede sugerir que las casas en la Zona Norte están asociadas con un nivel socioeconómico ligeramente más alto en comparación con los apartamentos en la Zona Sur.

  1. Distribución de Baños y Habitaciones:

• Ambas zonas muestran una amplia variedad en el número de baños y habitaciones. Sin embargo, las casas en la Zona Norte tienden a tener más habitaciones en promedio que los apartamentos en la Zona Sur, lo que puede reflejar las preferencias de tamaño de las familias en cada tipo de vivienda.

  1. Variabilidad:

• Ambas zonas presentan una variabilidad significativa en todas las variables estudiadas, lo que sugiere que hay una diversidad de opciones disponibles para los compradores en ambas áreas.

• Se encontró una correlación positiva entre el precio de las viviendas y variables como el área construida, estrato, número de baños y número de habitaciones. • El modelo de regresión lineal múltiple mostró un coeficiente de determinación (R^2) de 0.7177, lo que indica que el modelo explica aproximadamente el 71.77% de la variabilidad en los precios de las viviendas. • Se identificaron varias ofertas potenciales que cumplen con las especificaciones de la solicitud y se encuentran dentro del presupuesto establecido.

Gráficos interactivos de dispersión

Los gráficos interactivos de dispersión proporcionan una visualización dinámica de la relación entre el precio y el área construida en las zonas Norte y Sur, lo que puede ser útil para que María comprenda mejor el mercado inmobiliario en cada área. Aquí hay algunas conclusiones basadas en los gráficos y las estadísticas descriptivas:

Zona Norte:

• Relación Precio-Área: Existe una variabilidad significativa en los precios de las casas en función del área construida. No parece haber una relación lineal clara entre el precio y el área construida. • Estrato y Baños: La coloración y el tamaño de los puntos indican el estrato y el número de baños respectivamente. Se observa que hay una distribución variada en términos de estrato y cantidad de baños en las viviendas de la Zona Norte. • Matriz de Correlación: La matriz de correlación muestra las relaciones entre las variables, donde se observa una correlación moderada entre el precio y el área construida, y una correlación más débil con el estrato, los baños y las habitaciones.

Zona Sur:

• Relación Precio-Área: Al igual que en la Zona Norte, hay una variabilidad considerable en los precios de los apartamentos en función del área construida. No parece haber una relación lineal clara entre el precio y el área construida. • Estrato y Baños: La coloración y el tamaño de los puntos indican el estrato y el número de baños respectivamente. Se observa una distribución variada en términos de estrato y cantidad de baños en los apartamentos de la Zona Sur. • Matriz de Correlación: Al igual que en la Zona Norte, la matriz de correlación muestra una correlación moderada entre el precio y el área construida, y una correlación más débil con el estrato, los baños y las habitaciones. En resumen, los gráficos interactivos y las estadísticas proporcionan información valiosa sobre la relación entre el precio y el área construida, así como otras características de las viviendas en las zonas Norte y Sur. Esto puede ayudar a María a comprender mejor las tendencias del mercado y a tomar decisiones informadas al buscar vivienda en cada área.

Modelo de regresión lineal múltiple

Vamos a interpretar los coeficientes del modelo de regresión lineal múltiple y discutir la significancia estadística, el coeficiente de determinación �2R2 y las implicaciones del ajuste del modelo para ambas zonas (Norte y Sur). Zona Norte:

• Intercepto (Intercept): El coeficiente es -287.35, lo que significa que se espera un precio base de -287.35 unidades monetarias para una casa con un área construida, estrato, habitaciones, parqueaderos y baños iguales a cero. Sin embargo, como no tiene sentido interpretar un precio negativo, este coeficiente no es muy útil en la práctica.

• Área Construida (areaconst): Por cada unidad adicional en el área construida, el precio de la casa aumenta en promedio $0.83541, manteniendo constante el efecto de las otras variables.

• Estrato (estrato): Por cada unidad adicional en el estrato, el precio de la casa aumenta en promedio $88.87, manteniendo constante el efecto de las otras variables.

• Habitaciones (habitaciones): Por cada unidad adicional en el número de habitaciones, el precio de la casa disminuye en promedio $7.61, manteniendo constante el efecto de las otras variables.

• Parqueaderos (parqueaderos): Por cada unidad adicional en el número de parqueaderos, el precio de la casa aumenta en promedio $24.52, manteniendo constante el efecto de las otras variables.

• Baños (banios): Por cada unidad adicional en el número de baños, el precio de la casa aumenta en promedio $36.45, manteniendo constante el efecto de las otras variables.

• �2R2 y Ajuste del Modelo: El coeficiente de determinación �2R2 es 0.7177, lo que significa que el modelo explica el 71.77% de la variabilidad en los precios de las casas en la Zona Norte. Esto sugiere que el modelo tiene un buen ajuste, pero aún queda un 28.23% de variabilidad sin explicar.

Zona Sur:

• Intercepto (Intercept): El coeficiente es -397.83, lo que significa que se espera un precio base de -397.83 unidades monetarias para un apartamento con un área construida, estrato, habitaciones, parqueaderos y baños iguales a cero. Como en el caso de la Zona Norte, este coeficiente no es muy útil en la práctica.

• Área Construida (areaconst): Por cada unidad adicional en el área construida, el precio del apartamento aumenta en promedio $0.91087, manteniendo constante el efecto de las otras variables.

• Estrato (estrato): Por cada unidad adicional en el estrato, el precio del apartamento aumenta en promedio $94.98, manteniendo constante el efecto de las otras variables.

• Habitaciones (habitaciones): Por cada unidad adicional en el número de habitaciones, el precio del apartamento disminuye en promedio $19.02, manteniendo constante el efecto de las otras variables.

• Parqueaderos (parqueaderos): Por cada unidad adicional en el número de parqueaderos, el precio del apartamento aumenta en promedio $67.50, manteniendo constante el efecto de las otras variables.

• Baños (banios): Por cada unidad adicional en el número de baños, el precio del apartamento aumenta en promedio $50.83, manteniendo constante el efecto de las otras variables.

• �2R2 y Ajuste del Modelo: El coeficiente de determinación �2R2 es 0.7721, lo que significa que el modelo explica el 77.21% de la variabilidad en los precios de los apartamentos en la Zona Sur. Esto sugiere que el modelo tiene un buen ajuste, pero aún queda un 22.79% de variabilidad sin explicar.

Implicaciones y Mejoras del Modelo:

• Ambos modelos tienen un buen ajuste, pero todavía hay una parte significativa de la variabilidad que no está siendo explicada. Esto sugiere que podrían incluirse más variables explicativas en el modelo para mejorar la capacidad de explicación. • Las variables incluidas en el modelo tienen coeficientes estadísticamente significativos, lo que indica que todas ellas contribuyen de manera significativa a la predicción de los precios de las viviendas. • La interpretación de los coeficientes sugiere que características como el estrato, el número de habitaciones, parqueaderos y baños tienen un impacto significativo en el precio de las viviendas en ambas zonas. Por ejemplo, en la Zona Norte, un aumento en el número de baños o parqueaderos aumenta el precio, mientras que un aumento en el número de habitaciones puede disminuirlo. En la Zona Sur, las mismas variables tienen efectos similares en el precio, pero con magnitudes ligeramente diferentes. • Se podría considerar la inclusión de interacciones entre variables o la exploración de otras técnicas de modelado más avanzadas para mejorar la capacidad predictiva del modelo y reducir la cantidad de variabilidad no explicada.

Validación de Supuestos para el Modelo de Zona Norte:

  1. Linealidad: • Podemos graficar los residuos versus las variables independientes (área construida, estrato, habitaciones, parqueaderos, baños) para verificar la linealidad. Si los residuos están dispersos aleatoriamente alrededor de cero, la linealidad está presente. Si encontramos patrones no lineales, podríamos considerar transformaciones de variables o términos polinomiales.
  2. Homocedasticidad de Varianza:

• Graficar residuos versus valores ajustados y verificar si la dispersión de los residuos es constante en todos los niveles de las variables independientes. Si la varianza de los residuos cambia con los valores ajustados, podríamos necesitar transformaciones o ajustes adicionales en el modelo.

  1. Normalidad de Residuos: • Podemos realizar pruebas de normalidad de residuos, como la prueba de Shapiro-Wilk, y graficar cuantiles normales para los residuos. Si los residuos siguen aproximadamente una distribución normal, el supuesto de normalidad está satisfecho. De lo contrario, podríamos explorar transformaciones de variables o modelos alternativos.

  2. Independencia de Residuos: • Graficar la autocorrelación de los residuos y realizar la prueba de Durbin-Watson para verificar la independencia de los residuos. Si no hay patrones evidentes en los gráficos de autocorrelación y el valor de Durbin-Watson está cerca de 2, el supuesto de independencia está satisfecho.

  3. Colinealidad: • Calcular los VIF para cada variable independiente en el modelo. Si alguno de los VIF es significativamente mayor que 10, podría indicar colinealidad entre las variables independientes, lo que podría requerir la eliminación o transformación de algunas variables. Validación de Supuestos para el Modelo de Zona Sur: Podemos seguir los mismos pasos mencionados anteriormente, aplicados al modelo de regresión lineal múltiple estimado para la zona Sur.

Realizar estas verificaciones nos ayudará a asegurarnos de que los supuestos del modelo de regresión lineal múltiple se cumplan adecuadamente y, en caso de encontrar violaciones, nos dará una idea de las posibles acciones correctivas que podríamos tomar.

Predicción de Precios de Viviendas en Zonas Norte y Sur

En este informe, se presentan las predicciones de precios de viviendas en las zonas Norte y Sur de una ciudad, utilizando modelos de regresión lineal múltiple. Se estimaron dos modelos separados para cada zona, utilizando datos históricos de ventas de viviendas. Luego, se realizaron predicciones de precios para dos nuevas viviendas en cada zona, con diferentes estratos y características.

  1. Predicciones para Viviendas en Zona Norte:

• Para una vivienda de estrato 4 en Zona Norte, con un área construida de 200 metros cuadrados, 1 parqueadero, 2 baños y 4 habitaciones, se predice un precio de aproximadamente $302.2 millones. • Para una vivienda de estrato 5 en Zona Norte, con características similares a la anterior, se predice un precio de alrededor de $391.0 millones.

  1. Predicciones para Viviendas en Zona Sur:

• Para un apartamento de estrato 5 en Zona Sur, con un área construida de 300 metros cuadrados, 3 parqueaderos, 3 baños y 5 habitaciones, se estima un precio de aproximadamente $610.2 millones. • Para un apartamento de estrato 6 en Zona Sur, con características similares, se proyecta un precio de alrededor de $705.2 millones.

Comparación de Resultados:

• En general, los precios predichos para las viviendas en Zona Sur son considerablemente más altos que los de Zona Norte, independientemente del estrato. • Para viviendas con características similares, el estrato parece tener un impacto significativo en el precio, con precios más altos para estratos más altos. • Las viviendas en Zona Sur tienden a tener precios más altos que las de Zona Norte, posiblemente debido a diferencias en la demanda y ubicación. • Los modelos de regresión utilizados parecen ajustarse bien a los datos disponibles, con altos valores de R-cuadrado ajustados.

Ofertas Potenciales en Zona Norte:

  1. Oferta 1 (Zona Norte) • Área Construida: 180 m² • Parqueaderos: 1 • Baños: 2 • Habitaciones: 3 • Estrato: 4 • Crédito Preaprobado: $350 millones • Precio Estimado: $285.75 millones
  2. Oferta 2 (Zona Norte) • Área Construida: 190 m² • Parqueaderos: 1 • Baños: 2 • Habitaciones: 3 • Estrato: 4 • Crédito Preaprobado: $350 millones • Precio Estimado: $293.45 millones
  3. Oferta 3 (Zona Norte) • Área Construida: 200 m² • Parqueaderos: 1 • Baños: 2 • Habitaciones: 3 • Estrato: 4 • Crédito Preaprobado: $350 millones • Precio Estimado: $301.16 millones
  4. Oferta 4 (Zona Norte) • Área Construida: 210 m² • Parqueaderos: 1 • Baños: 2 • Habitaciones: 3 • Estrato: 4 • Crédito Preaprobado: $350 millones • Precio Estimado: $308.86 millones
  5. Oferta 5 (Zona Norte) • Área Construida: 220 m² • Parqueaderos: 1 • Baños: 2 • Habitaciones: 3 • Estrato: 4 • Crédito Preaprobado: $350 millones • Precio Estimado: $316.56 millones

Ofertas Potenciales en Zona Sur:

  1. Oferta 1 (Zona Sur) • Área Construida: 310 m² • Parqueaderos: 2 • Baños: 3 • Habitaciones: 5 • Estrato: 5 • Crédito Preaprobado: $850 millones • Precio Estimado: $551.8 millones
  2. Oferta 2 (Zona Sur) • Área Construida: 320 m² • Parqueaderos: 2 • Baños: 3 • Habitaciones: 5 • Estrato: 5 • Crédito Preaprobado: $850 millones • Precio Estimado: $561.0 millones
  3. Oferta 3 (Zona Sur) • Área Construida: 280 m² • Parqueaderos: 3 • Baños: 3 • Habitaciones: 5 • Estrato: 5 • Crédito Preaprobado: $850 millones • Precio Estimado: $592.0 millones
  4. Oferta 4 (Zona Sur) • Área Construida: 290 m² • Parqueaderos: 3 • Baños: 3 • Habitaciones: 5 • Estrato: 5 • Crédito Preaprobado: $850 millones • Precio Estimado: $601.1 millones
  5. Oferta 5 (Zona Sur) • Área Construida: 300 m² • Parqueaderos: 3 • Baños: 3 • Habitaciones: 5 • Estrato: 5 • Crédito Preaprobado: $850 millones • Precio Estimado: $610.2 millones

Análisis Comparativo:

• Área Construida: Las viviendas en la Zona Sur tienden a tener un área construida mayor en comparación con las de la Zona Norte. Esto puede deberse a diferencias en la disponibilidad de terreno y la densidad de población en cada área. • Precio Estimado: Las viviendas en la Zona Sur tienen precios estimados más altos en promedio en comparación con las de la Zona Norte. Esto podría reflejar diferencias en la demanda, la ubicación y las características de las propiedades en cada zona. • Estrato y Crédito Preaprobado: Ambas zonas tienen viviendas de estrato alto (4 y 5), pero las de la Zona Sur tienen un crédito preaprobado considerablemente mayor en comparación con las de la Zona Norte. Esto sugiere que las viviendas en la Zona Sur pueden estar dirigidas a un segmento de mercado de mayor poder adquisitivo. En resumen, mientras que las viviendas en la Zona Norte tienden a ser más accesibles en términos de precio y crédito preaprobado, las de la Zona Sur ofrecen propiedades más grandes y lujosas, lo que las hace más atractivas para compradores con un mayor poder adquisitivo.

Los mapas muestran la distribución geográfica de las ofertas potenciales en cada zona, resaltando visualmente la ubicación de las propiedades y su precio estimado. Las viviendas en la Zona Sur tienden a estar más concentradas en áreas con precios más altos, mientras que las de la Zona Norte tienen una distribución más dispersa y precios más accesibles.

5. Conclusiones:

Se analizaron las ofertas potenciales de viviendas en ambas zonas para proporcionar una visión detallada de las diferencias entre ellas.

Comparación de Propiedades:

  1. Área Construida:

• Las propiedades en la Zona Norte tienen un área construida promedio de 200 metros cuadrados, mientras que en la Zona Sur el promedio es de 300 metros cuadrados. • La Zona Sur tiende a tener propiedades más espaciosas y con áreas construidas significativamente mayores que las de la Zona Norte.

  1. Precio Estimado:

• En la Zona Norte, los precios estimados varían entre $285.75 millones y $316.56 millones, mientras que en la Zona Sur varían entre $551.8 millones y $610.2 millones. • Las propiedades en la Zona Sur tienen precios estimados considerablemente más altos en comparación con las de la Zona Norte.

  1. Estrato y Crédito Preaprobado:

• Ambas zonas tienen propiedades de estrato alto (4 y 5). • Sin embargo, las propiedades en la Zona Sur tienen un crédito preaprobado mayor en comparación con las de la Zona Norte. • Esto sugiere que las propiedades en la Zona Sur pueden estar dirigidas a un segmento de mercado de mayor poder adquisitivo.

  1. Las propiedades en la Zona Sur ofrecen un estilo de vida más lujoso y espacioso, con precios más altos y créditos preaprobados mayores.

  2. Por otro lado, las propiedades en la Zona Norte son más accesibles en términos de precio y crédito preaprobado, pero también tienen áreas construidas más pequeñas en comparación con las de la Zona Sur.

  3. La elección entre las dos zonas dependerá de las preferencias individuales del comprador, su presupuesto y las características específicas que estén buscando en una propiedad.

Recomendaciones:

  1. Se sugiere a los compradores interesados en propiedades más grandes y lujosas considerar la Zona Sur como una opción.
  2. Aquellos con un presupuesto más ajustado pueden encontrar opciones más accesibles en términos de precio y crédito preaprobado en la Zona Norte.

6. Discusión:

En el análisis de los datos recopilados sobre los precios inmobiliarios en la plataforma OLX, se han observado varias tendencias y patrones interesantes que merecen un análisis detenido. Sin embargo, durante el proceso de análisis, surgieron algunas consideraciones importantes que deben tenerse en cuenta para interpretar adecuadamente los resultados. Uno de los hallazgos más destacados de nuestro estudio fue la discrepancia entre los precios anunciados en OLX y los precios reales del mercado inmobiliario. Esta discrepancia puede atribuirse a diversos factores, entre ellos la subjetividad de los usuarios al fijar los precios y la falta de actualización de los anuncios. Además, la posibilidad de que los usuarios seleccionen manualmente la zona en la que se encuentra su propiedad al publicar un anuncio introduce una fuente adicional de error en los datos.

Es importante destacar que la elección de la ubicación por parte de los usuarios en OLX puede no reflejar con precisión la verdadera ubicación geográfica de la propiedad. Esta discrepancia puede distorsionar los resultados del análisis, especialmente al comparar los precios entre diferentes regiones. Para abordar esta limitación, se emplearon técnicas de análisis de conglomerados para agrupar las propiedades según características similares, en lugar de depender únicamente de la ubicación declarada por los usuarios en OLX. Esto permitió una evaluación más precisa de los precios inmobiliarios en diferentes áreas al considerar múltiples variables en el análisis.

En resumen, este estudio destaca la importancia de considerar cuidadosamente las limitaciones de los datos y emplear metodologías analíticas robustas al analizar el mercado inmobiliario en línea. Si bien los resultados proporcionan una visión útil de las tendencias del mercado, es fundamental tener en cuenta las posibles fuentes de error y sesgo al interpretar los resultados y tomar decisiones basadas en ellos.

7. Anexos:

Se adjunta código que inclye tablas, gráficos y resultados detallados de los análisis realizados, así como el mapa interactivo de las ofertas potenciales en la zona norte de Cali.

# Instalar paquete devtools si no está instalado
if (!requireNamespace("devtools", quietly = TRUE)) {
  install.packages("devtools")
}

# Instalar paqueteMODELOS si no está instalado
if (!requireNamespace("paqueteMODELOS", quietly = TRUE)) {
  devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
}

# Cargar paqueteMODELOS
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.3
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Loading required package: summarytools
# Cargar datos de vivienda
data("vivienda")
# Ver el contenido del data set vivienda
head(vivienda)
## # A tibble: 6 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## 6  1724 Zona N… 01          5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
# Crear un vector indicando el tipo de variable
variable_types <- sapply(vivienda, class)

# Crear un data frame con la información
variable_types_df <- data.frame(variable = names(variable_types), type = variable_types)

# Ajustar el tipo de variable para el ID y el piso
variable_types_df$type[variable_types_df$variable == "id"] <- "character"
variable_types_df$type[variable_types_df$variable == "piso"] <- "numeric"

# Crear un gráfico de barras
type_plot <- ggplot(variable_types_df, aes(x = variable, fill = type)) +
  geom_bar(stat = "count") +
  labs(title = "Tipo de Variable por Columna", x = "Variable", y = "Cantidad") +
  scale_fill_manual(values = c("numeric" = "#4285F4", "character" = "#EA4335")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Mostrar el gráfico
print(type_plot)

# Contar datos faltantes por columna
missing_data <- colSums(is.na(vivienda))
missing_data <- missing_data[missing_data > 0]

# Calcular el porcentaje de datos faltantes por variable
missing_percentage <- missing_data / nrow(vivienda) * 100

# Crear un nuevo data frame con la información
missing_summary <- data.frame(variable = names(missing_data), missing_count = missing_data, missing_percentage = missing_percentage)

# Crear un gráfico de barras con el número de datos faltantes
bar_plot <- ggplot(data = missing_summary, aes(x = variable, y = missing_count)) +
  geom_bar(stat = "identity", fill = "#4285F4", color = "black") +
  geom_text(aes(label = missing_count), vjust = -0.5, size = 3, color = "red") +
  labs(title = "Número de Datos Faltantes por Variable", x = "Variable", y = "Cantidad de Datos Faltantes") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Crear una tabla con los porcentajes de datos faltantes
percentage_table <- data.frame(Variable = missing_summary$variable, Porcentaje = missing_summary$missing_percentage)

# Mostrar los gráficos y la tabla
print(bar_plot)

print(percentage_table)
##        Variable  Porcentaje
## 1            id  0.03604903
## 2          zona  0.03604903
## 3          piso 31.69911079
## 4       estrato  0.03604903
## 5       preciom  0.02403268
## 6     areaconst  0.03604903
## 7  parqueaderos 19.28622927
## 8        banios  0.03604903
## 9  habitaciones  0.03604903
## 10         tipo  0.03604903
## 11       barrio  0.03604903
## 12     longitud  0.03604903
## 13      latitud  0.03604903
# Resumen estadístico para variables numéricas
summary(vivienda)
##        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
# Función para calcular la moda
calculate_mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

# Imputar valores faltantes para la variable categórica piso con la moda
moda_piso <- names(sort(table(vivienda$piso), decreasing = TRUE))[1]
vivienda$piso[is.na(vivienda$piso)] <- moda_piso

# Convertir la variable piso a tipo numérico
vivienda$piso <- as.numeric(vivienda$piso)


# Imputar valores faltantes para la variable numérica parqueaderos con mediana
vivienda$parqueaderos[is.na(vivienda$parqueaderos)] <- median(vivienda$parqueaderos, na.rm = TRUE)

# Eliminar registros con datos faltantes en las demás variables
vivienda <- vivienda[complete.cases(vivienda[, !(names(vivienda) %in% c("piso", "parqueaderos"))]), ]

# Mostrar la nueva información exploratoria de datos
variable_types <- sapply(vivienda, class)
numeric_summary <- summary(vivienda[sapply(vivienda, is.numeric)])
missing_values <- colSums(is.na(vivienda))

# Crear un data frame con los resultados
exploratory_data <- data.frame(
  Variable = names(vivienda),
  Type = variable_types,
  Missing_Values = missing_values,
  Missing_Percentage = missing_values / nrow(vivienda) * 100
)

# Mostrar el resumen exploratorio de datos actualizado
print(exploratory_data)
##                  Variable      Type Missing_Values Missing_Percentage
## id                     id   numeric              0                  0
## zona                 zona character              0                  0
## piso                 piso   numeric              0                  0
## estrato           estrato   numeric              0                  0
## preciom           preciom   numeric              0                  0
## areaconst       areaconst   numeric              0                  0
## parqueaderos parqueaderos   numeric              0                  0
## banios             banios   numeric              0                  0
## habitaciones habitaciones   numeric              0                  0
## tipo                 tipo character              0                  0
## barrio             barrio character              0                  0
## longitud         longitud   numeric              0                  0
## latitud           latitud   numeric              0                  0
# Mostrar el resumen estadístico descriptivo actualizado para variables numéricas
print(numeric_summary)
##        id            piso          estrato         preciom      
##  Min.   :   1   Min.   : 1.00   Min.   :3.000   Min.   :  58.0  
##  1st Qu.:2080   1st Qu.: 2.00   1st Qu.:4.000   1st Qu.: 220.0  
##  Median :4160   Median : 2.00   Median :5.000   Median : 330.0  
##  Mean   :4160   Mean   : 3.21   Mean   :4.634   Mean   : 433.9  
##  3rd Qu.:6240   3rd Qu.: 4.00   3rd Qu.:5.000   3rd Qu.: 540.0  
##  Max.   :8319   Max.   :12.00   Max.   :6.000   Max.   :1999.0  
##    areaconst       parqueaderos        banios        habitaciones   
##  Min.   :  30.0   Min.   : 1.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 3.000  
##  Median : 123.0   Median : 2.000   Median : 3.000   Median : 3.000  
##  Mean   : 174.9   Mean   : 1.867   Mean   : 3.111   Mean   : 3.605  
##  3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000   3rd Qu.: 4.000  
##  Max.   :1745.0   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##     longitud         latitud     
##  Min.   :-76.59   Min.   :3.333  
##  1st Qu.:-76.54   1st Qu.:3.381  
##  Median :-76.53   Median :3.416  
##  Mean   :-76.53   Mean   :3.418  
##  3rd Qu.:-76.52   3rd Qu.:3.452  
##  Max.   :-76.46   Max.   :3.498
# Eliminar la variable id
vivienda <- vivienda[, !(names(vivienda) %in% c("id"))]

# Seleccionar solo las variables numéricas
vivienda_numericas <- vivienda[, sapply(vivienda, is.numeric)]

# Calcular la matriz de correlación
correlation_matrix <- cor(vivienda_numericas, use = "complete.obs")

# Imprimir la matriz de correlación
print(correlation_matrix)
##                     piso     estrato     preciom   areaconst parqueaderos
## piso          1.00000000  0.11408363 -0.02738479 -0.17933004  -0.09316316
## estrato       0.11408363  1.00000000  0.60980664  0.27432332   0.32444817
## preciom      -0.02738479  0.60980664  1.00000000  0.68735196   0.61554347
## areaconst    -0.17933004  0.27432332  0.68735196  1.00000000   0.52288619
## parqueaderos -0.09316316  0.32444817  0.61554347  0.52288619   1.00000000
## banios       -0.08259063  0.42032178  0.66914558  0.64841648   0.48111634
## habitaciones -0.18669342 -0.07137615  0.26409121  0.51691292   0.23795855
## longitud     -0.01949388 -0.44414040 -0.34358822 -0.17374283  -0.16752086
## latitud       0.03397576 -0.22749944 -0.11566757 -0.05188781  -0.09373081
##                   banios habitaciones     longitud     latitud
## piso         -0.08259063 -0.186693417 -0.019493881  0.03397576
## estrato       0.42032178 -0.071376147 -0.444140396 -0.22749944
## preciom       0.66914558  0.264091206 -0.343588223 -0.11566757
## areaconst     0.64841648  0.516912916 -0.173742834 -0.05188781
## parqueaderos  0.48111634  0.237958554 -0.167520864 -0.09373081
## banios        1.00000000  0.589906412 -0.249569746 -0.13003729
## habitaciones  0.58990641  1.000000000 -0.008002016  0.02125096
## longitud     -0.24956975 -0.008002016  1.000000000  0.23606961
## latitud      -0.13003729  0.021250965  0.236069614  1.00000000
# Especificar un espejo de CRAN
options(repos = c(CRAN = "https://cran.r-project.org"))

# Instalar el paquete sf
install.packages("sf", dependencies = TRUE, force = TRUE)
## Installing package into 'C:/Users/laura/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'sf' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\laura\AppData\Local\Temp\RtmpakOiib\downloaded_packages
# Cargar las bibliotecas necesarias
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(sf)
## Warning: package 'sf' was built under R version 4.3.3
## Linking to GEOS 3.11.2, GDAL 3.8.2, PROJ 9.3.1; sf_use_s2() is TRUE
# Filtro para incluir solo casas de la zona norte
base_filtrada <- vivienda %>%
  filter(tipo == "Casa" & zona == "Zona Norte")

# Mostrar los primeros 3 registros de la base filtrada
head(base_filtrada, 3)
## # A tibble: 3 × 12
##   zona     piso estrato preciom areaconst parqueaderos banios habitaciones tipo 
##   <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
## 1 Zona N…     2       5     320       150            2      4            6 Casa 
## 2 Zona N…     2       5     780       380            2      3            3 Casa 
## 3 Zona N…     2       6     750       445            2      7            6 Casa 
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>
# Tabla de frecuencia de la variable 'zona' en la base original
table(vivienda$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##          124         1920         1198          351         4726
# Tabla de frecuencia de la variable 'tipo' en la base original
table(vivienda$tipo)
## 
## Apartamento        Casa 
##        5100        3219
# Mapa con los puntos de las bases
ggplot() +
  geom_point(data = vivienda, aes(x = longitud, y = latitud, color = zona)) +
  ggtitle("Mapa de Puntos de Todas las Bases")

# Mapa con los puntos de las bases filtradas
ggplot() +
  geom_point(data = base_filtrada, aes(x = longitud, y = latitud, color = zona)) +
  ggtitle("Mapa de Puntos de Bases Filtradas (Casas Zona Norte)")

# Filtro para incluir solo casas de la Zona Norte
base_filtrada <- vivienda %>% filter(tipo == "Casa" & zona == "Zona Norte")

# Utilizar k-means para agrupar los puntos
num_optimo_clusters <- 2 
k_means_clusters <- kmeans(base_filtrada[, c("longitud", "latitud")], centers = num_optimo_clusters)

# Obtener los centroides
centroides <- as.data.frame(k_means_clusters$centers)

# Identificar el cluster predominante
cluster_predominante <- which.max(table(k_means_clusters$cluster))

# Etiquetar los puntos que no pertenecen al cluster predominante como outliers
vivienda_outliers <- base_filtrada %>% filter(k_means_clusters$cluster != cluster_predominante)

# Añadir etiquetas para identificar si los puntos están dentro o fuera del conglomerado
base_filtrada <- base_filtrada %>% mutate(etiqueta = ifelse(k_means_clusters$cluster == cluster_predominante, "Dentro", "Fuera"))
vivienda_outliers <- vivienda_outliers %>% mutate(etiqueta = "Fuera")

# Crear un nuevo conjunto de datos con todos los puntos etiquetados
vivienda_etiquetada <- bind_rows(base_filtrada, vivienda_outliers)

# Mapa con los puntos etiquetados
ggplot() +
  geom_point(data = vivienda_etiquetada, aes(x = longitud, y = latitud, color = etiqueta)) +
  ggtitle("Mapa de Puntos de Casas en Zona Norte (Dentro y Fuera del Conglomerado)")

# Contar las etiquetas en el conjunto de datos etiquetado
cantidades_etiquetas <- table(vivienda_etiquetada$etiqueta)

# Imprimir las cantidades
print("Cantidades después de la clasificación:")
## [1] "Cantidades después de la clasificación:"
print(cantidades_etiquetas)
## 
## Dentro  Fuera 
##    606    232
# Imprimir los puntos clasificados como 'Fuera' en Zona Norte
print("Puntos clasificados como 'Fuera' en Zona Norte:")
## [1] "Puntos clasificados como 'Fuera' en Zona Norte:"
print(vivienda_etiquetada %>% filter(etiqueta == "Fuera"))
## # A tibble: 232 × 13
##    zona    piso estrato preciom areaconst parqueaderos banios habitaciones tipo 
##    <chr>  <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
##  1 Zona …     2       6     750       445            2      7            6 Casa 
##  2 Zona …     2       4     625       355            3      5            5 Casa 
##  3 Zona …     2       5     750       237            2      6            6 Casa 
##  4 Zona …     2       4     600       160            1      4            5 Casa 
##  5 Zona …     2       5     420       200            4      4            5 Casa 
##  6 Zona …     3       5     490       118            2      4            4 Casa 
##  7 Zona …     2       4     305       117            2      3            4 Casa 
##  8 Zona …     2       4     350       118            2      3            3 Casa 
##  9 Zona …     2       5     380       300            2      5            6 Casa 
## 10 Zona …     2       4     382       225            2      5            4 Casa 
## # ℹ 222 more rows
## # ℹ 4 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>,
## #   etiqueta <chr>
# Calcular y imprimir la cantidad total de puntos en Zona Norte
total_puntos_norte <- sum(vivienda$zona == "Zona Norte")
print("Cantidad total de puntos en Zona Norte antes de la clasificación:")
## [1] "Cantidad total de puntos en Zona Norte antes de la clasificación:"
print(total_puntos_norte)
## [1] 1920
# Calcular y imprimir la suma de 'Dentro' y 'Fuera'
suma_dentro_fuera <- sum(cantidades_etiquetas)
print("Suma de 'Dentro' y 'Fuera':")
## [1] "Suma de 'Dentro' y 'Fuera':"
print(suma_dentro_fuera)
## [1] 838
# Filtrar solo los puntos clasificados como 'Dentro'
puntos_dentro <- vivienda_etiquetada %>% filter(etiqueta == "Dentro" & zona == "Zona Norte")

# Estadísticas descriptivas de los puntos 'Dentro'
summary(puntos_dentro [, c("longitud", "latitud", "preciom", "areaconst", "estrato", "banios", "habitaciones")])
##     longitud         latitud         preciom         areaconst     
##  Min.   :-76.59   Min.   :3.437   Min.   :  89.0   Min.   :  30.0  
##  1st Qu.:-76.53   1st Qu.:3.464   1st Qu.: 245.0   1st Qu.: 140.0  
##  Median :-76.52   Median :3.473   Median : 380.0   Median : 240.0  
##  Mean   :-76.51   Mean   :3.472   Mean   : 429.4   Mean   : 261.4  
##  3rd Qu.:-76.50   3rd Qu.:3.483   3rd Qu.: 540.0   3rd Qu.: 336.0  
##  Max.   :-76.48   Max.   :3.496   Max.   :1940.0   Max.   :1440.0  
##     estrato         banios        habitaciones   
##  Min.   :3.00   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:3.00   1st Qu.: 2.000   1st Qu.: 3.000  
##  Median :4.00   Median : 3.000   Median : 4.000  
##  Mean   :4.15   Mean   : 3.517   Mean   : 4.584  
##  3rd Qu.:5.00   3rd Qu.: 4.000   3rd Qu.: 5.000  
##  Max.   :6.00   Max.   :10.000   Max.   :10.000
install.packages("plotly")
## Installing package into 'C:/Users/laura/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'plotly' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\laura\AppData\Local\Temp\RtmpakOiib\downloaded_packages
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
# Cargar las bibliotecas necesarias
library(plotly)
library(dplyr)

# Filtrar datos solo para la Zona Norte
vivienda_norte <- vivienda %>% filter(zona == "Zona Norte")

# Crear gráfico interactivo de dispersión (scatter plot) con plotly
scatter_plot <- plot_ly(data = vivienda_norte, 
                        x = ~areaconst, 
                        y = ~preciom, 
                        color = ~factor(estrato), 
                        size = ~banios,
                        text = ~paste("Habitaciones: ", habitaciones),
                        type = "scatter",
                        mode = "markers",
                        marker = list(sizemode = "diameter"))

# Agregar etiquetas y título
scatter_plot <- scatter_plot %>% 
  layout(xaxis = list(title = "Área Construida"),
         yaxis = list(title = "Precio de la Casa"),
         title = "Relación entre Precio y Área Construida en Zona Norte")

# Mostrar el gráfico interactivo
scatter_plot
## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.
# Calcular la matriz de correlación
correlation_matrix <- cor(vivienda_norte[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])

# Mostrar la matriz de correlación
print(correlation_matrix)
##                preciom areaconst    estrato    banios habitaciones
## preciom      1.0000000 0.7293717 0.60815583 0.6567406   0.38819536
## areaconst    0.7293717 1.0000000 0.31742660 0.6363834   0.56377592
## estrato      0.6081558 0.3174266 1.00000000 0.4048923   0.03444568
## banios       0.6567406 0.6363834 0.40489231 1.0000000   0.62421369
## habitaciones 0.3881954 0.5637759 0.03444568 0.6242137   1.00000000
# Estadísticas descriptivas
summary(vivienda_norte[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
##     preciom         areaconst         estrato          banios      
##  Min.   :  65.0   Min.   :  30.0   Min.   :3.000   Min.   : 0.000  
##  1st Qu.: 160.0   1st Qu.:  70.0   1st Qu.:3.000   1st Qu.: 2.000  
##  Median : 300.0   Median : 107.0   Median :4.000   Median : 2.000  
##  Mean   : 345.6   Mean   : 161.1   Mean   :4.282   Mean   : 2.778  
##  3rd Qu.: 430.0   3rd Qu.: 215.2   3rd Qu.:5.000   3rd Qu.: 3.000  
##  Max.   :1940.0   Max.   :1440.0   Max.   :6.000   Max.   :10.000  
##   habitaciones   
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 3.000  
##  Mean   : 3.501  
##  3rd Qu.: 4.000  
##  Max.   :10.000
# Estimar el modelo de regresión lineal múltiple
modelo_regresion <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_norte)

# Resumen del modelo
summary(modelo_regresion)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = vivienda_norte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -906.44  -59.22   -6.55   36.94 1090.85 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -287.34698   16.43543 -17.483  < 2e-16 ***
## areaconst       0.83541    0.02972  28.105  < 2e-16 ***
## estrato        88.86921    3.45824  25.698  < 2e-16 ***
## habitaciones   -7.61076    2.84986  -2.671  0.00764 ** 
## parqueaderos   24.51729    3.84029   6.384 2.16e-10 ***
## banios         36.44634    3.46424  10.521  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 128.1 on 1914 degrees of freedom
## Multiple R-squared:  0.7177, Adjusted R-squared:  0.717 
## F-statistic: 973.2 on 5 and 1914 DF,  p-value: < 2.2e-16
# Características de la Vivienda 1
nueva_vivienda_estrato_4 <- data.frame(
  tipo = "Casa",
  areaconst = 200,
  parqueaderos = 1,
  banios = 2,
  habitaciones = 4,
  estrato = 4,  # Estrato 4
  zona_Norte = 1,  # Variable dummy para Zona Norte
  credito_preaprobado = 350
)

nueva_vivienda_estrato_5 <- data.frame(
  tipo = "Casa",
  areaconst = 200,
  parqueaderos = 1,
  banios = 2,
  habitaciones = 4,
  estrato = 5,  # Estrato 5
  zona_Norte = 1,  # Variable dummy para Zona Norte
  credito_preaprobado = 350
)

# Realizar la predicción
prediccion_precio_estrato_4 <- predict(modelo_regresion, newdata = nueva_vivienda_estrato_4)
prediccion_precio_estrato_5 <- predict(modelo_regresion, newdata = nueva_vivienda_estrato_5)

# Crear una tabla con los resultados
resultados <- data.frame(
  Estrato = c("Estrato 4", "Estrato 5"),
  Precio_Predicho = c(prediccion_precio_estrato_4, prediccion_precio_estrato_5)
)

# Mostrar la tabla de resultados
print(resultados)
##     Estrato Precio_Predicho
## 1 Estrato 4        302.1779
## 2 Estrato 5        391.0471
# Muestra las primeras filas de la base de datos vivienda_norte
head(vivienda_norte)
## # A tibble: 6 × 12
##   zona     piso estrato preciom areaconst parqueaderos banios habitaciones tipo 
##   <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
## 1 Zona N…     1       5     260        90            1      2            3 Apar…
## 2 Zona N…     1       5     240        87            1      3            3 Apar…
## 3 Zona N…     1       4     220        52            2      2            3 Apar…
## 4 Zona N…     1       5     310       137            2      3            4 Apar…
## 5 Zona N…     2       5     320       150            2      4            6 Casa 
## 6 Zona N…     2       5     780       380            2      3            3 Casa 
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>
# Crear datos para la "Vivienda 1"
vivienda_1 <- data.frame(
  tipo = "Casa",
  areaconst = 200,
  parqueaderos = 1,
  banios = 2,
  habitaciones = 4,
  estrato = 4,  # Se fija en estrato 4
  zona_Norte = 1,  # Variable dummy para Zona Norte
  credito_preaprobado = 350
)

# Realizar predicciones para la Vivienda 1
prediccion_vivienda_1 <- predict(modelo_regresion, newdata = vivienda_1)

# Filtrar solo las ofertas que cumplen con el límite de crédito
ofertas_potenciales <- vivienda_1[vivienda_1$credito_preaprobado >= prediccion_vivienda_1, ]

# Generar al menos 5 ofertas potenciales
ofertas_potenciales <- expand.grid(
  areaconst = seq(180, 220, by = 10),
  parqueaderos = c(1, 2),
  banios = c(2, 3),
  habitaciones = c(3, 4, 5),
  estrato = c(4, 5),
  zona_Norte = 1,  # Fijar en Zona Norte
  credito_preaprobado = 350
)

# Agregar predicciones de precios a las ofertas potenciales
ofertas_potenciales$prediccion_precio <- predict(modelo_regresion, newdata = ofertas_potenciales)

# Filtrar solo las ofertas que cumplen con el límite de crédito
ofertas_potenciales <- ofertas_potenciales[ofertas_potenciales$credito_preaprobado >= ofertas_potenciales$prediccion_precio, ]

# Mostrar las ofertas potenciales
print("Ofertas Potenciales:")
## [1] "Ofertas Potenciales:"
print(ofertas_potenciales[, c("areaconst", "parqueaderos", "banios", "habitaciones", "estrato", "zona_Norte", "credito_preaprobado",
                              "prediccion_precio")])
##    areaconst parqueaderos banios habitaciones estrato zona_Norte
## 1        180            1      2            3       4          1
## 2        190            1      2            3       4          1
## 3        200            1      2            3       4          1
## 4        210            1      2            3       4          1
## 5        220            1      2            3       4          1
## 6        180            2      2            3       4          1
## 7        190            2      2            3       4          1
## 8        200            2      2            3       4          1
## 9        210            2      2            3       4          1
## 11       180            1      3            3       4          1
## 12       190            1      3            3       4          1
## 13       200            1      3            3       4          1
## 21       180            1      2            4       4          1
## 22       190            1      2            4       4          1
## 23       200            1      2            4       4          1
## 24       210            1      2            4       4          1
## 25       220            1      2            4       4          1
## 26       180            2      2            4       4          1
## 27       190            2      2            4       4          1
## 28       200            2      2            4       4          1
## 29       210            2      2            4       4          1
## 30       220            2      2            4       4          1
## 31       180            1      3            4       4          1
## 32       190            1      3            4       4          1
## 33       200            1      3            4       4          1
## 34       210            1      3            4       4          1
## 36       180            2      3            4       4          1
## 41       180            1      2            5       4          1
## 42       190            1      2            5       4          1
## 43       200            1      2            5       4          1
## 44       210            1      2            5       4          1
## 45       220            1      2            5       4          1
## 46       180            2      2            5       4          1
## 47       190            2      2            5       4          1
## 48       200            2      2            5       4          1
## 49       210            2      2            5       4          1
## 50       220            2      2            5       4          1
## 51       180            1      3            5       4          1
## 52       190            1      3            5       4          1
## 53       200            1      3            5       4          1
## 54       210            1      3            5       4          1
## 55       220            1      3            5       4          1
## 56       180            2      3            5       4          1
## 57       190            2      3            5       4          1
##    credito_preaprobado prediccion_precio
## 1                  350          293.0805
## 2                  350          301.4346
## 3                  350          309.7886
## 4                  350          318.1427
## 5                  350          326.4967
## 6                  350          317.5978
## 7                  350          325.9519
## 8                  350          334.3059
## 9                  350          342.6600
## 11                 350          329.5269
## 12                 350          337.8809
## 13                 350          346.2350
## 21                 350          285.4697
## 22                 350          293.8238
## 23                 350          302.1779
## 24                 350          310.5319
## 25                 350          318.8860
## 26                 350          309.9870
## 27                 350          318.3411
## 28                 350          326.6951
## 29                 350          335.0492
## 30                 350          343.4033
## 31                 350          321.9161
## 32                 350          330.2701
## 33                 350          338.6242
## 34                 350          346.9783
## 36                 350          346.4334
## 41                 350          277.8590
## 42                 350          286.2130
## 43                 350          294.5671
## 44                 350          302.9212
## 45                 350          311.2752
## 46                 350          302.3763
## 47                 350          310.7303
## 48                 350          319.0844
## 49                 350          327.4384
## 50                 350          335.7925
## 51                 350          314.3053
## 52                 350          322.6594
## 53                 350          331.0134
## 54                 350          339.3675
## 55                 350          347.7215
## 56                 350          338.8226
## 57                 350          347.1767
# Crear un mapa con las ofertas potenciales
mapa_ofertas_potenciales <- ggplot(ofertas_potenciales, aes(x = areaconst, y = prediccion_precio, color = factor(habitaciones))) +
  geom_point(size = 3) +
  labs(title = "Ofertas Potenciales de Viviendas",
       x = "Área Construida",
       y = "Precio Predicho",
       color = "Número de Habitaciones") +
  theme_minimal()

# Mostrar el mapa
print(mapa_ofertas_potenciales)

# Crear el data frame con las ofertas potenciales
ofertas_potenciales <- data.frame(
  areaconst = c(180, 190, 200, 210, 220, 180, 190),
  parqueaderos = c(1, 1, 1, 1, 1, 2, 2),
  banios = c(2, 2, 2, 2, 2, 2, 2),
  habitaciones = c(3, 3, 3, 3, 3, 3, 3),
  estrato = c(4, 4, 4, 4, 4, 4, 4),
  zona_Norte = rep(1, 7),
  credito_preaprobado = rep(350, 7),
  prediccion_precio = c(285.7522, 293.4542, 301.1562, 308.8582, 316.5601, 306.7299, 314.4318)
)

# Agregar latitud y longitud a las ofertas potenciales
ofertas_potenciales$latitud <- vivienda_norte$latitud[1:7]
ofertas_potenciales$longitud <- vivienda_norte$longitud[1:7]

# Mostrar las ofertas en un mapa interactivo con plotly
mapa_ofertas <- plot_ly(data = ofertas_potenciales, 
                        x = ~longitud, 
                        y = ~latitud, 
                        color = ~prediccion_precio,
                        size = ~prediccion_precio,
                        text = ~paste("Área: ", areaconst, " m²<br>Precio estimado: $", round(prediccion_precio, 2), " millones"),
                        type = "scattermapbox", mode = "markers+text"
)

# Configurar el diseño del mapa
mapa_ofertas <- mapa_ofertas %>% layout(
  mapbox = list(
    style = "open-street-map",
    zoom = 12,
    center = list(lon = -76.5205, lat = 3.4216)  # Coordenadas de Cali, Colombia
  ),
  title = "Ofertas Potenciales de Vivienda en Zona Norte",
  xaxis = list(title = "Longitud"),
  yaxis = list(title = "Latitud")
)

# Mostrar el mapa interactivo
mapa_ofertas
## Warning: `line.width` does not currently support multiple values.
## Warning: textfont.color doesn't (yet) support data arrays

## Warning: textfont.color doesn't (yet) support data arrays
# Cargar el paquete dplyr
library(dplyr)

# Cargar el paquete ggplot2
library(ggplot2)

# Filtrar solo apartamentos en la zona sur
apartamentos_zona_sur <- vivienda %>%
  filter(tipo == "Apartamento" & zona == "Zona Sur")

# Mostrar los primeros registros de la base filtrada
head(apartamentos_zona_sur)
## # A tibble: 6 × 12
##   zona     piso estrato preciom areaconst parqueaderos banios habitaciones tipo 
##   <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
## 1 Zona S…     5       4     290        96            1      2            3 Apar…
## 2 Zona S…     2       3      78        40            1      1            2 Apar…
## 3 Zona S…     2       6     875       194            2      5            3 Apar…
## 4 Zona S…     2       3     135       117            2      2            3 Apar…
## 5 Zona S…     2       3     135        78            2      1            3 Apar…
## 6 Zona S…     6       4     220        75            1      2            3 Apar…
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>
# Mapa con los puntos de los apartamentos en la Zona Sur
ggplot(data = apartamentos_zona_sur, aes(x = longitud, y = latitud, color = zona)) +
  geom_point() +
  ggtitle("Mapa de Puntos de Apartamentos en Zona Sur")

# Cargar el paquete dplyr
library(dplyr)

# Utilizar k-means para agrupar los puntos
num_optimo_clusters <- 2 
k_means_clusters <- kmeans(apartamentos_zona_sur[, c("longitud", "latitud")], centers = num_optimo_clusters)

# Obtener los centroides
centroides <- as.data.frame(k_means_clusters$centers)

# Identificar el cluster predominante
cluster_predominante <- which.max(table(k_means_clusters$cluster))

# Etiquetar los puntos que no pertenecen al cluster predominante como outliers
vivienda_outliers <- filter(apartamentos_zona_sur, k_means_clusters$cluster != cluster_predominante)

# Añadir etiquetas para identificar si los puntos están dentro o fuera del conglomerado
apartamentos_zona_sur <- mutate(apartamentos_zona_sur, etiqueta = ifelse(k_means_clusters$cluster == cluster_predominante, "Dentro", "Fuera"))
vivienda_outliers <- mutate(vivienda_outliers, etiqueta = "Fuera")

# Crear un nuevo conjunto de datos con todos los puntos etiquetados
vivienda_etiquetada <- bind_rows(apartamentos_zona_sur, vivienda_outliers)
# Cargar el paquete ggplot2
library(ggplot2)

# Mapa con los puntos etiquetados
ggplot() +
  geom_point(data = vivienda_etiquetada, aes(x = longitud, y = latitud, color = etiqueta)) +
  ggtitle("Mapa de Puntos de Apartamentos en Zona Sur (Dentro y Fuera del Conglomerado)")

# Contar las etiquetas en el conjunto de datos etiquetado
cantidades_etiquetas <- table(vivienda_etiquetada$etiqueta)

# Imprimir las cantidades
print("Cantidades después de la clasificación:")
## [1] "Cantidades después de la clasificación:"
print(cantidades_etiquetas)
## 
## Dentro  Fuera 
##   1845   1884
# Calcular y imprimir la cantidad total de puntos en Zona Sur
total_puntos_sur <- sum(apartamentos_zona_sur$zona == "Zona Sur")
print("Cantidad total de puntos en Zona Sur antes de la clasificación:")
## [1] "Cantidad total de puntos en Zona Sur antes de la clasificación:"
print(total_puntos_sur)
## [1] 2787
# Calcular y imprimir la suma de 'Dentro' y 'Fuera'
suma_dentro_fuera <- sum(cantidades_etiquetas)
print("Suma de 'Dentro' y 'Fuera':")
## [1] "Suma de 'Dentro' y 'Fuera':"
print(suma_dentro_fuera)
## [1] 3729
# Filtrar solo los puntos clasificados como 'Dentro'
puntos_dentro <- filter(vivienda_etiquetada, etiqueta == "Dentro")

# Estadísticas descriptivas de los puntos 'Dentro'
summary(puntos_dentro[, c("longitud", "latitud", "preciom", "areaconst", "estrato", "banios", "habitaciones")])
##     longitud         latitud         preciom         areaconst     
##  Min.   :-76.56   Min.   :3.334   Min.   :  78.0   Min.   : 40.00  
##  1st Qu.:-76.54   1st Qu.:3.366   1st Qu.: 190.0   1st Qu.: 65.00  
##  Median :-76.53   Median :3.372   Median : 260.0   Median : 85.00  
##  Mean   :-76.53   Mean   :3.373   Mean   : 318.6   Mean   : 98.35  
##  3rd Qu.:-76.52   3rd Qu.:3.383   3rd Qu.: 350.0   3rd Qu.:110.00  
##  Max.   :-76.50   Max.   :3.398   Max.   :1750.0   Max.   :932.00  
##     estrato          banios      habitaciones  
##  Min.   :3.000   Min.   :0.00   Min.   :0.000  
##  1st Qu.:4.000   1st Qu.:2.00   1st Qu.:3.000  
##  Median :5.000   Median :2.00   Median :3.000  
##  Mean   :4.775   Mean   :2.56   Mean   :2.943  
##  3rd Qu.:5.000   3rd Qu.:3.00   3rd Qu.:3.000  
##  Max.   :6.000   Max.   :7.00   Max.   :6.000
# Cargar las bibliotecas necesarias
library(plotly)
library(dplyr)

# Filtrar datos solo para la Zona Sur
vivienda_sur <- vivienda %>% filter(zona == "Zona Sur")

# Crear gráfico interactivo de dispersión (scatter plot) con plotly
scatter_plot <- plot_ly(data = vivienda_sur, 
                        x = ~areaconst, 
                        y = ~preciom, 
                        color = ~factor(estrato), 
                        size = ~banios,
                        text = ~paste("Habitaciones: ", habitaciones),
                        type = "scatter",
                        mode = "markers",
                        marker = list(sizemode = "diameter"))

# Agregar etiquetas y título
scatter_plot <- scatter_plot %>% 
  layout(xaxis = list(title = "Área Construida"),
         yaxis = list(title = "Precio del Apartamento"),
         title = "Relación entre Precio y Área Construida en Zona Sur")

# Mostrar el gráfico interactivo
scatter_plot
## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.

## Warning: `line.width` does not currently support multiple values.
# Calcular la matriz de correlación
correlation_matrix <- cor(vivienda_sur[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])

# Mostrar la matriz de correlación
print(correlation_matrix)
##                preciom areaconst    estrato    banios habitaciones
## preciom      1.0000000 0.7618208 0.60172765 0.7122171   0.39232415
## areaconst    0.7618208 1.0000000 0.34247199 0.6875336   0.56029942
## estrato      0.6017276 0.3424720 1.00000000 0.4548809   0.05431915
## banios       0.7122171 0.6875336 0.45488087 1.0000000   0.65432221
## habitaciones 0.3923241 0.5602994 0.05431915 0.6543222   1.00000000
# Estadísticas descriptivas
summary(vivienda_sur[, c("preciom", "areaconst", "estrato", "banios", "habitaciones")])
##     preciom         areaconst         estrato          banios      
##  Min.   :  75.0   Min.   :  40.0   Min.   :3.000   Min.   : 0.000  
##  1st Qu.: 222.0   1st Qu.:  78.0   1st Qu.:4.000   1st Qu.: 2.000  
##  Median : 320.0   Median : 113.0   Median :5.000   Median : 3.000  
##  Mean   : 426.5   Mean   : 173.3   Mean   :4.717   Mean   : 3.179  
##  3rd Qu.: 520.0   3rd Qu.: 220.0   3rd Qu.:5.000   3rd Qu.: 4.000  
##  Max.   :1900.0   Max.   :1600.0   Max.   :6.000   Max.   :10.000  
##   habitaciones   
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 3.000  
##  Mean   : 3.601  
##  3rd Qu.: 4.000  
##  Max.   :10.000
# Estimar el modelo de regresión lineal múltiple
modelo_regresion <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = vivienda_sur)

# Resumen del modelo
summary(modelo_regresion)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = vivienda_sur)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -821.03  -75.03  -12.49   52.49 1137.04 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -397.83327   14.88825 -26.721  < 2e-16 ***
## areaconst       0.91087    0.02299  39.621  < 2e-16 ***
## estrato        94.97793    3.07214  30.916  < 2e-16 ***
## habitaciones  -19.01690    2.43082  -7.823 6.31e-15 ***
## parqueaderos   67.50424    2.60055  25.958  < 2e-16 ***
## banios         50.83180    2.72129  18.679  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 154.1 on 4720 degrees of freedom
## Multiple R-squared:  0.7721, Adjusted R-squared:  0.7719 
## F-statistic:  3199 on 5 and 4720 DF,  p-value: < 2.2e-16
# Características de la Vivienda 2
nueva_vivienda_estrato_5 <- data.frame(
  tipo = "Apartamento",
  areaconst = 300,
  parqueaderos = 3,
  banios = 3,
  habitaciones = 5,
  estrato = 5,  # Estrato 5
  zona_Sur = 1,  # Variable dummy para Zona Sur
  credito_preaprobado = 850  # Crédito preaprobado de 850 millones
)

nueva_vivienda_estrato_6 <- data.frame(
  tipo = "Apartamento",
  areaconst = 300,
  parqueaderos = 3,
  banios = 3,
  habitaciones = 5,
  estrato = 6,  # Estrato 6
  zona_Sur = 1,  # Variable dummy para Zona Sur
  credito_preaprobado = 850  # Crédito preaprobado de 850 millones
)

# Realizar la predicción
prediccion_precio_estrato_5 <- predict(modelo_regresion, newdata = nueva_vivienda_estrato_5)
prediccion_precio_estrato_6 <- predict(modelo_regresion, newdata = nueva_vivienda_estrato_6)

# Crear una tabla con los resultados
resultados <- data.frame(
  Estrato = c("Estrato 5", "Estrato 6"),
  Precio_Predicho = c(prediccion_precio_estrato_5, prediccion_precio_estrato_6)
)

# Mostrar la tabla de resultados
print(resultados)
##     Estrato Precio_Predicho
## 1 Estrato 5        610.2422
## 2 Estrato 6        705.2201
# Crear datos para la "Vivienda 2" estrato 5
vivienda_2_estrato_5 <- data.frame(
  tipo = "Apartamento",
  areaconst = 300,
  parqueaderos = 3,
  banios = 3,
  habitaciones = 5,
  estrato = 5,  # Estrato 5
  zona_Sur = 1,  # Variable dummy para Zona Sur
  credito_preaprobado = 850  # Crédito preaprobado de 850 millones
)

# Realizar predicciones para la Vivienda 2
prediccion_precio_vivienda_2_estrato_5 <- predict(modelo_regresion, newdata = vivienda_2_estrato_5)

# Filtrar solo las ofertas que cumplen con el límite de crédito
ofertas_potenciales_estrato_5 <- expand.grid(
  areaconst = seq(280, 320, by = 10),
  parqueaderos = c(2, 3),
  banios = c(2, 3),
  habitaciones = c(4, 5),
  estrato = 5,  # Fijar en Estrato 5
  zona_Sur = 1,  # Fijar en Zona Sur
  credito_preaprobado = 850  # Crédito preaprobado de 850 millones
)

# Agregar predicciones de precios a las ofertas potenciales
ofertas_potenciales_estrato_5$prediccion_precio <- predict(modelo_regresion, newdata = ofertas_potenciales_estrato_5)

# Filtrar solo las ofertas que cumplen con el límite de crédito
ofertas_potenciales_estrato_5 <- ofertas_potenciales_estrato_5[ofertas_potenciales_estrato_5$credito_preaprobado >= ofertas_potenciales_estrato_5$prediccion_precio, ]

# Mostrar las ofertas potenciales
print("Ofertas Potenciales:")
## [1] "Ofertas Potenciales:"
print(ofertas_potenciales_estrato_5)
##    areaconst parqueaderos banios habitaciones estrato zona_Sur
## 1        280            2      2            4       5        1
## 2        290            2      2            4       5        1
## 3        300            2      2            4       5        1
## 4        310            2      2            4       5        1
## 5        320            2      2            4       5        1
## 6        280            3      2            4       5        1
## 7        290            3      2            4       5        1
## 8        300            3      2            4       5        1
## 9        310            3      2            4       5        1
## 10       320            3      2            4       5        1
## 11       280            2      3            4       5        1
## 12       290            2      3            4       5        1
## 13       300            2      3            4       5        1
## 14       310            2      3            4       5        1
## 15       320            2      3            4       5        1
## 16       280            3      3            4       5        1
## 17       290            3      3            4       5        1
## 18       300            3      3            4       5        1
## 19       310            3      3            4       5        1
## 20       320            3      3            4       5        1
## 21       280            2      2            5       5        1
## 22       290            2      2            5       5        1
## 23       300            2      2            5       5        1
## 24       310            2      2            5       5        1
## 25       320            2      2            5       5        1
## 26       280            3      2            5       5        1
## 27       290            3      2            5       5        1
## 28       300            3      2            5       5        1
## 29       310            3      2            5       5        1
## 30       320            3      2            5       5        1
## 31       280            2      3            5       5        1
## 32       290            2      3            5       5        1
## 33       300            2      3            5       5        1
## 34       310            2      3            5       5        1
## 35       320            2      3            5       5        1
## 36       280            3      3            5       5        1
## 37       290            3      3            5       5        1
## 38       300            3      3            5       5        1
## 39       310            3      3            5       5        1
## 40       320            3      3            5       5        1
##    credito_preaprobado prediccion_precio
## 1                  850          492.7056
## 2                  850          501.8143
## 3                  850          510.9231
## 4                  850          520.0318
## 5                  850          529.1405
## 6                  850          560.2098
## 7                  850          569.3186
## 8                  850          578.4273
## 9                  850          587.5360
## 10                 850          596.6448
## 11                 850          543.5374
## 12                 850          552.6461
## 13                 850          561.7549
## 14                 850          570.8636
## 15                 850          579.9723
## 16                 850          611.0416
## 17                 850          620.1504
## 18                 850          629.2591
## 19                 850          638.3678
## 20                 850          647.4766
## 21                 850          473.6887
## 22                 850          482.7974
## 23                 850          491.9062
## 24                 850          501.0149
## 25                 850          510.1236
## 26                 850          541.1929
## 27                 850          550.3017
## 28                 850          559.4104
## 29                 850          568.5191
## 30                 850          577.6279
## 31                 850          524.5205
## 32                 850          533.6292
## 33                 850          542.7380
## 34                 850          551.8467
## 35                 850          560.9554
## 36                 850          592.0247
## 37                 850          601.1335
## 38                 850          610.2422
## 39                 850          619.3509
## 40                 850          628.4597
# Crear el data frame con las ofertas potenciales en zona sur
ofertas_potenciales_sur <- data.frame(
  areaconst = c(310, 320, 280, 290, 300, 310, 320),
  parqueaderos = c(2, 2, 3, 3, 3, 3, 3),
  banios = c(3, 3, 3, 3, 3, 3, 3),
  habitaciones = c(5, 5, 5, 5, 5, 5, 5),
  estrato = c(5, 5, 5, 5, 5, 5, 5),
  zona_Sur = rep(1, 7),
  credito_preaprobado = rep(850, 7),
  prediccion_precio = c(551.8, 561.0, 592.0, 601.1, 610.2, 619.4, 628.5)
)

# Agregar latitud y longitud a las ofertas potenciales en zona sur
ofertas_potenciales_sur$latitud <- c(3.365, 3.36239, 3.34962, 3.34138, 3.35, 3.34712, 3.33761)
ofertas_potenciales_sur$longitud <- c(-76.534, -76.53806, -76.54127, -76.53248, -76.543, -76.52844, -76.5287)

# Mostrar las ofertas en un mapa interactivo con plotly
mapa_ofertas_sur <- plot_ly(data = ofertas_potenciales_sur, 
                        x = ~longitud, 
                        y = ~latitud, 
                        color = ~prediccion_precio,
                        size = ~prediccion_precio,
                        text = ~paste("Área: ", areaconst, " m²<br>Precio estimado: $", round(prediccion_precio, 2), " millones"),
                        type = "scattermapbox", mode = "markers+text"
)

# Configurar el diseño del mapa
mapa_ofertas_sur <- mapa_ofertas_sur %>% layout(
  mapbox = list(
    style = "open-street-map",
    zoom = 12,
    center = list(lon = -76.5205, lat = 3.4216)  # Coordenadas de Cali, Colombia
  ),
  title = "Ofertas Potenciales de Vivienda en Zona Sur",
  xaxis = list(title = "Longitud"),
  yaxis = list(title = "Latitud")
)

# Mostrar el mapa interactivo
mapa_ofertas_sur  
## Warning: `line.width` does not currently support multiple values.
## Warning: textfont.color doesn't (yet) support data arrays

## Warning: textfont.color doesn't (yet) support data arrays

```