1 Introducción

El sector inmobiliario ha sido históricamente un pilar fundamental de la economía global, representando una parte significativa de la riqueza mundial. Según informes del banco HSBC y del Foro Europeo del Mercado Inmobiliario, este sector no solo refleja la acumulación de riqueza sino también el desarrollo de las economías en diferentes regiones del mundo. Con la irrupción de la cuarta revolución industrial, se está experimentando una transformación profunda impulsada por tecnologías emergentes como PropTech, que combina “propiedad” y “tecnología” para ofrecer soluciones innovadoras que están remodelando el mercado inmobiliario (González Fernández 2019).

La convergencia entre las comunicaciones y la tecnología está desdibujando las fronteras entre lo físico y lo digital, creando un entorno donde las transacciones inmobiliarias y la gestión de propiedades están cada vez más digitalizadas. Este fenómeno se observa en la aplicación exitosa de herramientas como la inteligencia artificial y el Big Data en operaciones financieras complejas, así como en la segmentación de derechos inmobiliarios, lo que permite una toma de decisiones más informada y eficiente (González Fernández 2019).

1.1 Tendencias globales y regionales en el mercado inmobiliario

A nivel mundial, las tendencias del mercado inmobiliario están marcadas por la creciente demanda de sostenibilidad, la urbanización rápida y el cambio en las preferencias de los consumidores hacia viviendas más inteligentes y conectadas. En mercados maduros como Europa y América del Norte, se está observando un movimiento hacia la revitalización de centros urbanos y la rehabilitación de edificios antiguos, impulsados por políticas que favorecen la sostenibilidad y la eficiencia energética. Mientras tanto, en regiones en desarrollo, como Asia y América Latina, el crecimiento urbano descontrolado presenta desafíos y oportunidades únicos. En estas áreas, las tecnologías emergentes están comenzando a desempeñar un papel crucial en la planificación urbana y en la accesibilidad del mercado inmobiliario para una población creciente.

En Colombia, el mercado inmobiliario está experimentando una transformación significativa gracias a la entrada de startups tecnológicas y a la adopción de tecnologías avanzadas como Marketplaces, Big Data y crowdfunding (Rodrı́guez et al. 2018). Estas innovaciones están revolucionando la forma en que se realizan las transacciones inmobiliarias, abriendo nuevas oportunidades de inversión y añadiendo valor al mercado en general (Rodrı́guez et al. 2018). El uso de plataformas de crowdfunding, por ejemplo, ha democratizado el acceso a inversiones inmobiliarias, permitiendo que pequeños inversionistas participen en proyectos que antes eran accesibles solo para grandes capitalistas (Rodrı́guez et al. 2018).

1.2 Relevancia del análisis de ofertas en el mercado inmobiliario

El análisis de las ofertas del mercado inmobiliario es esencial para comprender las dinámicas de precios tanto de terrenos como de construcciones. Este tipo de análisis permite una valoración más precisa de los inmuebles, lo cual es fundamental para una adecuada toma de decisiones en la compra y venta de propiedades. Según Martı́nez-Toro (n.d.), estas evaluaciones no solo ayudan a obtener una valoración integral de los inmuebles, sino que también son cruciales para responder de manera aproximada a las solicitudes de revisión del valor predial, minimizando los riesgos de una liquidación incorrecta. En mercados donde la volatilidad de precios es alta, como en algunas regiones de América Latina, estos análisis se vuelven aún más críticos para evitar sobrevaloraciones o subvaloraciones que podrían impactar negativamente tanto a compradores como a vendedores (OSORIO, n.d.).

En conclusión, el sector inmobiliario, a medida que avanza la cuarta revolución industrial, está en medio de una transformación impulsada por tecnologías disruptivas que prometen cambiar para siempre la forma en que interactuamos con el mercado inmobiliario. Las tendencias globales hacia la sostenibilidad, la urbanización y la digitalización están estableciendo el escenario para un futuro donde las propiedades no solo serán activos físicos, sino también entidades digitales que interactúan en un ecosistema global interconectado (Cañigueral 2014).

2 Objetivos

2.1 Objetivo General

Realizar un análisis holístico de los datos del mercado inmobiliario de Cali para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.

2.2 Objetivos específicos

  • Analizar la complejidad del mercado inmobiliario de Cali a través de un análisis que permita reducir la dimensionalidad de las variables que puedan explicar el precio de las viviendas.

  • Analizar el mercado inmobiliario según las características de las viviendas y entender si hay ofertas específicas en relación al espacio, los estratos socioecinómicos y las zonas.

  • Analizar si la relación entre los tipos de vivienda, zona y barrio pueden condicionar las ofertas inmobiliarias en el mercado de Cali.

3 Análisis contextual de las variables

Las variables que caracterizan el mercado inmobiliario de Cali en este conjunto de datos se pueden separar en dos grupos, las variables categóricas que describen las características de las viviendas analizadas como son: el número de baños, el número de pisos, el número de parqueaderos, el número de habitaciones, las variables categóricas tiene que ver más con la segmentación socio económica como son: tipo de vivienda, el estrato, la zona de la ciudad y el barrio; y las variables numéricas que describen el precio y el área construida de la vivienda.

La variación de los precios de todos los tipos de vivienda van desde los 58 millones de pesos, hasta los 1991 millones de pesos. Para las casas, el precio mínimo registrado fue de 77 millones y el precio máximo fue de 1999, para los apartamentos el precio mínimo fue de 58 millones y el máximo fue de 1950 millones (Figura 1).

El área construida de las viviendas de este conjunto de datos tiene como medidas mínimas 30 \(m{^2}\) y con áreas construidas de 1745 \(m{^2}\). Estos datos de distribución de las viviendas coinciden con los datos de las casas ya que los apartamentos tienen un mínimo de 35 \(m{^2}\) y un máximo de 932 \(m{^2}\) construidos.

library(gridExtra)
library(ggplot2)
datos_imputados<-read.csv2("datosImputadosTotales.csv")
variables<-datos_imputados
variables$Tipo.Vivienda<-as.factor(variables$Tipo.Vivienda)
precio<-ggplot()+
  geom_boxplot(data=variables, aes(x=Precio), color='black', fill='#367BB5')+
  labs(x="Precio - Millones")+
  theme_bw()
precio_tipo<-ggplot(data=variables, aes(x=Precio, y=Tipo.Vivienda ))+
  geom_boxplot( color='black', fill='#367BB5')+
  labs(y="Tipo de Vivienda", x="Precio - Millones") +
  theme_bw()
Area<-ggplot()+
  geom_boxplot(data=variables, aes(x=Area_Construida), color='black', fill='#367BB5')+
  labs(x="Área Construida - m2")+
  theme_bw()
Area_tipo<-ggplot(data=variables, aes(x=Area_Construida, y=Tipo.Vivienda ))+
  geom_boxplot( color='black', fill='#367BB5')+
  labs(y="Tipo de Vivienda", x="Área Construida - m2") +
  theme_bw()

gridExtra::grid.arrange(precio,
                        precio_tipo,
                        Area,
                        Area_tipo,
                         ncol=1, nrow=4)
Figura 1. Estadisticas desciptivas de los precios y el área construida por tipo de vivienda en el mercado inmmobiliario en Cali.

Figura 1. Estadisticas desciptivas de los precios y el área construida por tipo de vivienda en el mercado inmmobiliario en Cali.

Las características estructurales más frecuentes de las viviendas de Cali fueron que las viviendas tuvieran dos pisos, un parqueadero, dos baños y tres habitaciones (Figura 2).

library(gridExtra)
library(ggplot2)
datos_imputados<-read.csv2("datosImputadosTotales.csv")
variables<-datos_imputados[,c(4:10)]
variables$No.Pisos<-as.factor(variables$No.Pisos)

variables$No.Parqueaderos<-as.factor(variables$No.Parqueaderos)
variables$No.Baños<-as.factor(variables$No.Baños)
variables$No.Habitaciones<-as.factor(variables$No.Habitaciones)

Pisos<-ggplot()+
  geom_bar(data=variables, aes(x=No.Pisos), color='black', fill='#367BB5')+
  theme_bw()

Parqueaderos<-ggplot()+
  geom_bar(data=variables, aes(x=No.Parqueaderos), color='black', fill='#367BB5')+
  theme_bw()
Banos<-ggplot()+
  geom_bar(data=variables, aes(x=`No.Baños`), color='black', fill='#367BB5')+
  theme_bw()
Habitaciones<-ggplot()+
  geom_bar(data=variables, aes(x=No.Habitaciones), color='black', fill='#367BB5')+
  theme_bw()



gridExtra::grid.arrange(
                        Pisos,
                      
                        Parqueaderos,
                        Banos,
                        Habitaciones, ncol=1, nrow=4)
Figura 2. Estadisticas descriptivas de las características de las viviendas en el mercado inmobiliario de Cali.

Figura 2. Estadisticas descriptivas de las características de las viviendas en el mercado inmobiliario de Cali.

Las condiciones socieconómicas más frecuentemente encontradas en las viviendas de Cali, son de tipo apartamentos, viviendas en estrato 5 y viviendas ubicadas en la zona sur (Figura 3).

library(gridExtra)
library(ggplot2)
datos_imputados<-read.csv2("datosImputadosTotales.csv")
variables<-datos_imputados
variables$Zona<-as.factor(variables$Zona)
variables$Estrato<-as.factor(variables$Estrato)
variables$Tipo.Vivienda<-as.factor(variables$Tipo.Vivienda)


Zonas<-ggplot()+
  geom_bar(data=variables, aes(x=Zona), color='black', fill='#367BB5')+
  theme_bw()

Estratos<-ggplot()+
  geom_bar(data=variables, aes(x=Estrato), color='black', fill='#367BB5')+
  theme_bw()
tipos<-ggplot()+
  geom_bar(data=variables, aes(x=Tipo.Vivienda), color='black', fill='#367BB5')+
  theme_bw()

gridExtra::grid.arrange(
                        Zonas,
                        Estratos,
                        tipos,
                           ncol=1, nrow=3)
Figura 3. Estadisticas descriptivas de las condiciones socioeconómicas  de las viviendas en el mercado inmobiliario de Cali.

Figura 3. Estadisticas descriptivas de las condiciones socioeconómicas de las viviendas en el mercado inmobiliario de Cali.

4 Análisis multivariado del mercado inmobiliario de Cali.

4.1 Identificación y análisis de patrones de las caracteristicas del mercado inmobiliario de Cali.

Para tratar de develar algunos patrones en las características inmobiliarias se decidió seleccionar solo las variables que tienen que ver con la infraestructura y los precios de las viviendas. Con estas variables se inició con un análisis exploratorio de componentes principales para entender algunas estructuras no explicitas dentro de los datos y que características podría resaltarnos.

El análisis de componentes principales fue construido con 6 variables: número de baños, número de pisos, número de parqueaderos, número de habitaciones, precio y área construida (Figura 4). De estas seis variables se obtuvieron seis dimensiones (Tabla 1) donde la dimensión o el componente principal uno (Dim.1) resume el 54.2% de la variabilidad total del sistema, la dimensión dos (Dim.2) recoge el 18% y la dimensión tres (Dim.3) el 12.9% (Figura 4), en su conjunto estas tres dimensiones recogen el 85.1% de la variabilidad total del sistema.

Tabla 1. Coordenadas de cada registro en cada dimensión del análisis de componentes principales.

knitr::include_graphics("PCA_CCCP01.png")
Figura 4.  Screeplot y gráficos dimensionales del análisis de componentes principales

Figura 4. Screeplot y gráficos dimensionales del análisis de componentes principales

El gráfico dimensional de los componentes principales nos muestra que las variables de número de baños y área construida son las que mayor aporte hacen a explicar la dimensión uno de los componentes principales, ambas con un aporte explicativo del 23%, seguida de la variable precio con un aporte del 21.47% (Tabla 2). La dimensión dos de los componentes en su mayoría estuvo compuesta por la variable de número de pisos con un 55.81% seguida de el número de habitaciones con un 21%. y para la dimensión tres las variables más aportantes fueron el número de pisos y el número de habitaciones con cerca del 40% de aporte total.

Tabla 2. Contribución de cada variable a cada dimensión en el análisis.

El análisis de las correlaciones de las dimensiones obtenidas del análisis de componentes principales (PCA) proporciona información sobre cómo las variables originales están relacionadas con las nuevas dimensiones (componentes principales). Cada componente es una combinación lineal de las variables originales y captura una porción de la varianza total del conjunto de datos. Específicamente, la Dim.1 mostró altas correlaciones negativas con variables como el precio (-0.836), el área construida (-0.866), el número de baños (-0.866) y el número de parqueaderos (-0.754), lo que sugiere que esta dimensión representa un factor que disminuye a medida que aumentan estas características. Esto indica que Dim.1 podría estar reflejando una combinación de tamaño y lujo en las viviendas, donde las propiedades más grandes y caras tienden a agruparse en este componente.

La segunda dimensión (Dim.2) parece capturar la variabilidad relacionada con la estructura física de las viviendas, particularmente el número de pisos y habitaciones. Se observó una alta correlación negativa entre Dim.2 y el número de pisos (-0.777), así como una correlación positiva con el número de habitaciones (0.477). Este patrón sugiere que Dim.2 podría estar representando un contraste entre viviendas que tienden a ser verticales (más pisos) y aquellas que se caracterizan por tener más habitaciones distribuidas en menos pisos. Asimismo, la tercera dimensión (Dim.3) refuerza esta interpretación, mostrando correlaciones positivas con ambas variables (No.Pisos y No.Habitaciones), lo que indica que Dim.3 también está relacionado con la disposición espacial interna de las viviendas.

Las dimensiones posteriores, específicamente Dim.4 a Dim.6, parecen estar capturando aspectos más específicos del conjunto de datos, tales como la relación entre el área construida y el número de parqueaderos (Dim.4), y la variabilidad en el número de baños (Dim.5). Aunque estas dimensiones no explican tanta variabilidad como las primeras, aportan información valiosa sobre características particulares de las viviendas que podrían ser relevantes en contextos específicos. Por ejemplo, Dim.4 mostró una correlación positiva con el número de parqueaderos (0.413) y una correlación negativa con el área construida (-0.376), lo que podría indicar un posible intercambio entre espacio habitable y espacio para estacionamiento en ciertas propiedades.

knitr::include_graphics("PCA_COR.png")
Figura 5. Screeplot y gráficos dimensionales del análisis de componentes principales

Figura 5. Screeplot y gráficos dimensionales del análisis de componentes principales

4.2 Análisis de Zonas, Estratos y Tipos de vivienda.

4.2.1 Zonas

Al realizar el análisis de agrupamiento por etiquetado para las zonas en el análisis de componentes principales, este muestra que la zonificación propuesta no refleja una separación dada por las características de las casas que se analizaron. Esto quiere decir que todas las zonas muestran características muy heterogéneas en las variables analizadas.

knitr::include_graphics("PCA_Zonas.png")
Figura 6. Análsis de componentes principales examinando el agrupamiento de als zonas

Figura 6. Análsis de componentes principales examinando el agrupamiento de als zonas

4.2.2 Estratos

Con el análisis de agrupamiento por etiquetado por estrato tampoco se observó una agrupación muy clara, solo una tendencia espuria a formar grupos que se superponen entre los estratos (Figura 6).

knitr::include_graphics("PCA_Estrato.png")
Figura 6. Análsis de componentes principales examinando el agrupamiento de als zonas

Figura 6. Análsis de componentes principales examinando el agrupamiento de als zonas

4.2.3 Tipo de vivienda

Con el análisis de agrupamiento por etiquetado por tipo de vivienda, se ve un agrupamiento claro que se tiende a alinear en la dirección de la dimensión 2 cuya variable que mas aporta son el número de pisos. Esto puede deberse a que esta variable está mal registrada, ya que para las casas y para los apartamentos el número de pisos significan dos cosas diferentes. EN las casas en el número de plantas físicas que tiene en cambio en los apartamentos es el piso en el que se ubican, por lo tanto esta puede ser una variable diferenciadora entre estos dos grupos.

knitr::include_graphics("PCA_Tipo.png")
Figura 6. Análsis de componentes principales examinando el agrupamiento de las zonas

Figura 6. Análsis de componentes principales examinando el agrupamiento de las zonas

5 Análisis de conglomerados

Para analizar los patrones de agregación de precios y características de las viviendas de Cali se utilizó el análisis de conglomerados para utilizando el algortimo de K-means. Este algoritmo de clasificación no supervisada se puede utilizar para dividir un conjunto de datos en un número específico de grupos o clusters basados en las características de los datos. Este algoritmo busca minimizar la variabilidad dentro de los cluster y maximizar la diferencia entre ellos.

El primer análisis que se realizará será el análisis del mejor número de cluster para los datos de vivienda, esto con el fin de construir un mapa donde se pueda ver como se agregan las viviendas, dadas sus caracteristicas. El primer análisis será el del método del “codo” (Elbow Method) (Figura 7). En la gráfica 7 se puede observar que el mejor número de cluster para recoger la variabilidad total del conjunto de datos y maximizar sus diferencias es de aproximadamente 4.

library(leaflet)
library(sf)
library(dplyr)
library(factoextra )
library(cluster)

variables_Zonas<-datos_imputados[,c(4,6:10)]

datos_imputados$Zona <- as.factor(datos_imputados$Zona)
datos_imputados$Tipo.Vivienda <- as.factor(datos_imputados$Tipo.Vivienda)

variables_scaled <- scale(variables_Zonas)
factoextra::fviz_nbclust(variables_scaled, kmeans, method = "wss")
Figura 7. Análisis de la suma total de cuadrados dentro de los cluster

Figura 7. Análisis de la suma total de cuadrados dentro de los cluster

Para evaluar si efectivamente la selección de 4 cluster para analizar el agrupamiento de las viviendas de Cali es el adecuado, se utilizó el análisis de siluetas. Este análisis arrojó que la selección de 4 clusters es la más adecuada (Tabla 3).

Tabla 3. Puntajes para el análisis de silueta.

library(leaflet)
library(sf)
library(dplyr)
library(htmltools)
library(cluster)
library(reactable)



variables_Zonas<-datos_imputados[,c(4,6:10)]


datos_imputados$Zona <- as.factor(datos_imputados$Zona)
datos_imputados$Tipo.Vivienda <- as.factor(datos_imputados$Tipo.Vivienda)


variables_scaled <- scale(variables_Zonas)


# Definir el número de clusters que se quiere probar.
set.seed(123)  # Para reproducibilidad
kmeans_result <- kmeans(variables_scaled, centers = 4, nstart = 25, iter.max = 10)

silhouette_score <- silhouette(kmeans_result$cluster, dist(variables_scaled))
    
    # Crear una tabla con el número de cluster y el valor promedio de silhouette
    silhouette_summary <- aggregate(silhouette_score[, 3], 
                                    by = list(Cluster = silhouette_score[, 1]), 
                                    FUN = mean)
    colnames(silhouette_summary) <- c("Cluster", "Silhouette Score Promedio")
    reactable(silhouette_summary)

Con el resultado del número optimo de cluster se corrió el algoritmo y se construyó una gráfica de agrupamiento para ver las formas en que el algoritmo agrupa las viviendas basadas en las variables analizadas (Figura 8). Lo que se puede observar es que los grupos no se separan completamente uno de otro, las viviendas en esta agrupación tienden a superponerse sin embargo se alcanzan a formar grupos parcialmente homogéneos. Estos grupos no parecen reflejar directamente ninguna de las categorías evaluadas como las zonas, estratos o tipos de viviendas (Tabla 4).

library(leaflet)
library(sf)
library(dplyr)
library(htmltools)
library(cluster)


variables_Zonas<-datos_imputados[,c(4,6:10)]


datos_imputados$Zona <- as.factor(datos_imputados$Zona)
datos_imputados$Tipo.Vivienda <- as.factor(datos_imputados$Tipo.Vivienda)


variables_scaled <- scale(variables_Zonas)


# Definir el número de clusters que se quiere probar.
set.seed(123)  # Para reproducibilidad
kmeans_result <- kmeans(variables_scaled, centers = 4, nstart = 25, iter.max = 10)

fviz_cluster(kmeans_result, data = variables_scaled)
Figura 8. Agrupamiento basado en las caracteristicas de precio e infraestructura de las viviendas de las ciudad de Cali usando el algoritmo K-means

Figura 8. Agrupamiento basado en las caracteristicas de precio e infraestructura de las viviendas de las ciudad de Cali usando el algoritmo K-means

Tabla 4. Etiquetas de los clusters asociados con las categorías de las viviendas de la ciudad de Cali.

library(leaflet)
library(sf)
library(dplyr)
library(reactable)
library(cluster)


variables_Zonas<-datos_imputados[,c(4,6:10)]


datos_imputados$Zona <- as.factor(datos_imputados$Zona)
datos_imputados$Tipo.Vivienda <- as.factor(datos_imputados$Tipo.Vivienda)


variables_scaled <- scale(variables_Zonas)


# Definir el número de clusters que se quiere probar.
set.seed(123)  # Para reproducibilidad
kmeans_result <- kmeans(variables_scaled, centers = 4, nstart = 25, iter.max = 10)

# Agregar los resultados al DataFrame original
datos_imputados$Cluster <- as.factor(kmeans_result$cluster)

datos<-cbind(datos_imputados$Cluster, datos_imputados$Zona, datos_imputados$Estrato, datos_imputados$Tipo.Vivienda)
colnames(datos)<-c("Cluster", "Zona", "Estrato", "Tipo de Vivienda")
reactable(datos)

Para ver si las características de las viviendas reflejan una distribución espacial basada en los cluster obtenidos por el algoritmo k-means, se elaboró un mapa de las viviendas mostrando las etiquetas de los clusters. Este mapa lo que nos muestra es que no hay una agrupación espacial clara de lso clusters y esto puede deberse a que los datos de las coordenadas geográficas no están correctamente asignados (ver anexos).

library(leaflet)
library(sf)
library(dplyr)
library(htmltools)
library(cluster)



variables_Zonas<-datos_imputados[,c(4,6:10)]


datos_imputados$Zona <- as.factor(datos_imputados$Zona)
datos_imputados$Tipo.Vivienda <- as.factor(datos_imputados$Tipo.Vivienda)


variables_scaled <- scale(variables_Zonas)


# Definir el número de clusters que se quiere probar.
set.seed(123)  # Para reproducibilidad
kmeans_result <- kmeans(variables_scaled, centers = 4, nstart = 25, iter.max = 10)

# Agregar los resultados al DataFrame original
datos_imputados$Cluster <- as.factor(kmeans_result$cluster)


colores <- colorFactor(palette = "Set1", domain = datos_imputados$Cluster)
leaflet::leaflet(datos_imputados,height=700, width = 800) %>%
  addProviderTiles(providers$CartoDB.DarkMatterNoLabels) %>%
   setView(lng = -76.5225, lat = 3.42, zoom = 11.5)%>%
  addCircleMarkers(~Longitud, ~Latitud,
                   color = ~colores(Cluster),
                   radius = 3,
                   stroke = FALSE, fillOpacity = 0.8) %>%
  addLegend("bottomright", pal = colores, values = ~Cluster,
            title = "Cluster",
            opacity = 1) %>%
  setView(lng = mean(datos_imputados$Longitud),
          lat = mean(datos_imputados$Latitud),
          zoom = 12) 

En conclusión, los conglomerados construidos por el análisis fallan en agrupar las categorías planteadas desde el inicio en el análisis del mercado inmobiliario de Cali. Estos no fueron capaces de agrupar las zonas, ni los estratos de manera clara.

6 Análisis de correspondencia

Los análisis de correspondencia (AC) son técnicas estadísticas utilizadas para explorar y visualizar las relaciones entre variables categóricas en una tabla de contingencia (una matriz que muestra la frecuencia de ocurrencia de combinaciones de categorías de las variables). Son especialmente útiles para analizar datos categóricos y proporcionan una representación gráfica en un espacio de menor dimensión, generalmente en dos dimensiones. En este sentido, el análisis de los datos categóricos de las viviendas de la ciudad de Cali, como lo es: el estrato, La zona, el barrio y el tipo de vivienda.

En la relación entre el barrio y las zonas se puede ver de manera parcial que la mayoría de barrios se agrupan con la zona que les corresponde, sin embargo el barrio Los Libertadores, Sector Cañaveralejo y la Cascada no se agrupan directamente con la zona sur sino que está ubicado, según este análisis y la realidad entre una zon del oeste y el sur. LA zona norte y oriente se agrupan muy cerca.

library(FactoMineR)
library(factoextra)
library(reactable)
datos_imputados<-read.csv2("datosImputadosTotales.csv")

tabla_contingencia_01 <- table(datos_imputados$Barrio_Clean, datos_imputados$Zona)

ca_resultado_01<-CA(tabla_contingencia_01, graph = FALSE)

plot(ca_resultado_01, title = "Mapa de factores AC - Trudeau",
       xlim = c(-8.5, 7.5), 
     ylim = c(-5.5, 3.5))
Figura 9. Análisis de correspondencia entre los barrios y las zonas de Cali

Figura 9. Análisis de correspondencia entre los barrios y las zonas de Cali

Con el análisis de correspondencia basado en los estratos y los barrios se puede observar que los estratos 4 y 5 se distribuyen principalmente en al zona sur, mientras que la zona oeste se caracteriza por el estrato 6. Para las zonas centro y oriente estas viviendas tienden a ser de estrato 3.

library(FactoMineR)
library(factoextra)
library(reactable)
datos_imputados<-read.csv2("datosImputadosTotales.csv")

tabla_contingencia_01 <- table(datos_imputados$Estrato, datos_imputados$Zona)

ca_resultado_01<-CA(tabla_contingencia_01, graph = FALSE)

plot(ca_resultado_01, title = "Mapa de factores AC - Trudeau",
       xlim = c(-4.5, 5.5), 
     ylim = c(-2.5, 3.5))
Figura 10. Análisis de correspondencia entre los estratos y las zonas de Cali

Figura 10. Análisis de correspondencia entre los estratos y las zonas de Cali

Para la relación entre barrios y estratos se mantiene una relación coherente de correspondencia.

library(FactoMineR)
library(factoextra)
library(reactable)
datos_imputados<-read.csv2("datosImputadosTotales.csv")

tabla_contingencia_01 <- table(datos_imputados$Barrio_Clean, datos_imputados$Estrato)

ca_resultado_01<-CA(tabla_contingencia_01, graph = FALSE)

plot(ca_resultado_01, title = "Mapa de factores AC - Trudeau",
       xlim = c(-4.5, 5.5), 
     ylim = c(-2.5, 3.5))
Figura 11. Análisis de correspondencia entre los barrios y los estratos de Cali

Figura 11. Análisis de correspondencia entre los barrios y los estratos de Cali

7 Referencias

Cañigueral, Albert. 2014. Vivir Mejor Con Menos: Descubre Las Ventajas de La Nueva Economı́a Colaborativa. Conecta.
González Fernández, Nathalia. 2019. “Diseño de Un Sistema de Información Para La Creación de Un Modelo Dinámico Del Mercado Inmobiliario Colombiano.”
Martı́nez-Toro, Pedro Martı́n. n.d. “Mercado Inmobiliario y La Producción Del Archipiélago Metropolitano.”
OSORIO, DIANA GARCÍA. n.d. “EL NEGOCIO DEL SECTOR INMOBILIARIO EN SANTIAGO DE CALI.? RIESGO o UNA OPORTUNIDAD.”
Rodrı́guez, Wilman Antonio, Oscar Armando Jaramillo, Marlen Isabel Redondo Ramı́rez, Leidy Johanna Hernández, and Cristian Camilo Duque Gómez. 2018. “Economı́a Colaborativa y Solidaria: Una Tendencia Económica.”

8 Anexo

Para realizar el análisis para la identificación de patrones, relaciones y segmentaciones de las viviendas urbanas de la ciudad de Cali, primero se debe analizar la fuente de datos inicial y describir cada una de las variables.

Los datos de las viviendas se componen de 13 atributos, los cuales representan la información para el mercado inmobiliario de la ciudad de Cali de la siguiente manera:

  • id (numeric): Número de identificación de las viviendas.
  • Zona (character): Zona de la ciudad.
  • No.Pisos (numeric): Número de pisos por vivienda.
  • Estrato (numeric): Estrato socioeconómico.
  • Precio (numeric): Precio de la vivienda en millones de pesos.
  • Área Construida (numeric): Área de la vivienda en metros cuadrados.
  • Parqueaderos (numeric): Número de parqueaderos por vivienda.
  • No.Baños (numeric): Número de baños por vivienda.
  • No.Habitaciones (numeric): Número de habitaciones por vivienda.
  • Tipo de vivienda (character): Tipo de vivienda, casa o apartamento.
  • Barrio (character): Barrio de ubicación de la vivienda.
  • Longitud (numeric): longitud geográfica de la vivienda.
  • Latitud (numeric): latitud geográfica de la vivienda.

Al revisar el etiquetado de las viviendas al barrio y la zona a la que pertenecen con su posición geográfica, se puede notar que no hay una correspondencia adecuada (Figura 1.). Sin embargo, cuando se revisan si los barrios pertenecen a la zona etiquetada estos si coinciden adecuadamente, por lo tanto los datos de posición geográficas (latitud y longitud) no son variables muy confiables.

require(paqueteMODELOS)
require(leaflet)
require(leaflet.extras)
require(sf)


datos_Vivienda<-vivienda
colnames(datos_Vivienda)<-c("id", 
                            "Zona",
                            "No.Pisos", 
                            "Estrato", 
                            "Precio",   
                            "Area_Construida", 
                            "No.Parqueaderos",   
                            "No.Baños",    
                            "No.Habitaciones",   
                            "Tipo.Vivienda",      
                            "Barrio",    
                            "Longitud",  
                            "Latitud" )
Barrios<-sf::read_sf("Cali_WGS84.gpkg", layer='Barrios')
zonas<-sf::read_sf("zonas.gpkg",   layer='Zonas_Precio_Total')

datos_Vivienda_sin.na<- subset(datos_Vivienda, !is.na(Longitud) & !is.na(Latitud))
Viviendas_Espacial <- sf::st_as_sf(datos_Vivienda_sin.na, coords = c("Longitud", "Latitud"))
crs <- sf::st_crs("+proj=longlat +datum=WGS84 +no_defs")
Viviendas_Espacial <- sf::st_set_crs(Viviendas_Espacial, crs)

joined_sf <- sf::st_join(Viviendas_Espacial,Barrios , join = st_within)

ZonalabelsMediana <- sprintf(
  "<strong></strong><strong>%s</strong>",
  zonas$Zonas_IDE 
) %>% lapply(htmltools::HTML)

pal <- colorNumeric(
  palette = "YlOrRd",
  domain = na.omit(datos_Vivienda$Precio))


preciosLabels <- sprintf(
  "<strong></strong><strong>%s</strong><br/><strong> %s</strong><br/>%g millones",
  joined_sf$Barrio, joined_sf$Zona, joined_sf$Precio
) %>% lapply(htmltools::HTML)

map <-leaflet::leaflet(height=700, width = 800)%>%
  addProviderTiles(providers$CartoDB.DarkMatterNoLabels)%>%
  setView(lng = -76.5225, lat = 3.42, zoom = 11.5)%>%
  
  addPolygons(data = zonas, 
                            opacity = 1,
              color = "white",
             label = ZonalabelsMediana,
              group = "Zona",
              stroke = 0.2)%>%
 # addPolygons(data = Barrios, group = "Barrios", color = "grey",stroke = 0.2, opacity = 1)%>%
  addFullscreenControl(position = "topleft", pseudoFullscreen = TRUE)%>%
  addLayersControl(overlayGroups = c("Viviendas",  "Zona"),    options = layersControlOptions(collapsed = FALSE))%>%
  addScaleBar(position = c("topright", "bottomright", "bottomleft", "topleft"),options = scaleBarOptions(metric = TRUE,
                                                                                                         imperial = FALSE, updateWhenIdle = TRUE))%>%
  addMapPane("ames_lines", zIndex = 430) %>%
addCircles(data = joined_sf, 
           color = ~pal(Precio),  
           radius = ~Precio/10,
           group ="Viviendas",
             label = preciosLabels,
              labelOptions = labelOptions(
                style = list("font-weight" = "normal",
                             padding = "3px 8px"),
                textsize = "15px",
                direction = "auto"))%>%
  addLegend( position = "bottomleft", pal = pal, values = na.omit(datos_Vivienda$Precio),
            title = 'Precios',
            opacity = 1)%>%
   addMiniMap(tiles = "CartoDB.Voyager")

map

Figura 1. Mapa de la distribución de las viviendas en la ciudad de Cali mostrando los precios individuales.

9 Corrección de las etiquetas de Barrio

Las etiquetas de barrios tienen muchas inconsistencias, por lo cuál se debió corregir este atributo con el siguiente código:

datos_Vivienda<-vivienda
colnames(datos_Vivienda)<-c("id", 
                            "Zona",
                            "No.Pisos", 
                            "Estrato", 
                            "Precio",   
                            "Area_Construida", 
                            "No.Parqueaderos",   
                            "No.Baños",    
                            "No.Habitaciones",   
                            "Tipo.Vivienda",      
                            "Barrio",    
                            "Longitud",  
                            "Latitud" )

datos_Vivienda$Barrio<-toupper(stringi::stri_trans_general(datos_Vivienda$Barrio,"Latin-ASCII"))




datos_Vivienda$Barrio_Clean<-dplyr::recode_factor(datos_Vivienda$Barrio,
                                                  "ACOPI" = "BRISAS DE LOS ALAMOS",
                                                  "AGUA BLANCA" = "AGUABLANCA", 
                                                  "ALAMOS" = "CIUDAD DE LOS ALAMOS",
                                                  "ALBORADA" = "LA ALBORADA",
                                                  "ALCAZARES" = "LOS ALCAZARES",
                                                  "ALF√(C)REZ REAL" = "ALFEREZ REAL",
                                                  "ALFONSO LOPEZ" = "ALFONSO LOPEZ P. 1A ETAPA",
                                                  "ALFONSO LOPEZ I" = "ALFONSO LOPEZ P. 1A ETAPA",
                                                  "ALTO JORDAN" = "SECTOR ALTO JORDAN",
                                                  "ALTOS DE GUADALUPE" = "SECTOR CANAVERALEJO GUADALUPE",
                                                  "ALTOS DE SANTA" = "SECTOR ALTOS DE SANTA ISABEL",
                                                  "ALAMEDA DEL RIO" = "CIUDAD DE LOS ALAMOS",
                                                  "ARBOLEDA" = "ARBOLEDAS",
                                                  "ARBOLEDA CAMPESTRE CANDELARIA" = "FUERA DE CALI",
                                                  "AUTOPISTA SUR" = "FUERA DE CALI",
                                                  "BAJO AGUACATAL" = "AGUACATAL",
                                                  "BARRANQUILLA" = "LOS PARQUES BARRANQUILLA",
                                                  "BARRIO 7DE AGOSTO" = "SIETE DE AGOSTO",
                                                  "BARRIO EL RECUERDO" = "EL RECUERDO",
                                                  "BARRIO EUCARISTICO" = "EUCARISTICO",
                                                  "BARRIO TRANQUILO Y" = "FUERA DE CALI",
                                                  "BASE A√(C)REA" = "BASE AEREA",
                                                  "BELLA SUIZA" = "CANAVERAL",
                                                  "BELLA SUIZA ALTA" = "CANAVERAL",
                                                  "BERLIN" = "SULTANA - BERLIN - SAN FRANCISCO",
                                                  "BLOQUES DEL LIMONAR" = "EL LIMONAR",
                                                  "BOCHALEMA" = "BOCHALEMA",
                                                  "CIUDAD BOCHALEMA" = "BOCHALEMA",
                                                  "BOSQUES DE ALBOLEDA" = "SANTA TERESITA",
                                                  "BOYACA" = "URBANIZACION BOYACA",
                                                  "BRISAS DE GUADALUPE" = "SECTOR CANAVERALEJO GUADALUPE",
                                                  "BRISAS DE LOS" = "BRISAS DE LOS ALAMOS",
                                                  "BRISAS DEL GUABITO" = "VILLA DEL PRADO - EL GUABITO",
                                                  "BUENO MADRID" = "UNIDAD RESIDENCIAL BUENO MADRID",
                                                  "CALI" = "FUERA DE CALI",
                                                  "CALI BELLA" = "FEPICOL",
                                                  "CALI CANTO" = "LILI",
                                                  "CALIBELLA" = "FEPICOL",
                                                  "CALICANTO" = "LILI",
                                                  "CALICANTO VIII" = "LILI",
                                                  "CALIMIO NORTE" = "URBANIZACION CALIMIO",
                                                  "CAMBULOS" = "LOS CAMBULOS",
                                                  "CAMINO REAL" = "CAMINO REAL - LOS FUNDADORES",
                                                  "CAMPESTRE" = "CLUB CAMPESTRE",
                                                  "CANEY ESPECIAL" = "CANEY",
                                                  "CANASGORDAS" = "URBANIZACION RIO LILI",
                                                  "CANAVERALEJO" = "CANAVERALEJO - SEGUROS COLPATRIA",
                                                  "CANAVERALES" = "CANAVERALES - LOS SAMANES",
                                                  "CANAVERALES LOS SAMANES" = "CANAVERALES - LOS SAMANES",
                                                  "CAPRI" = "CIUDAD CAPRI",
                                                  "CASCAJAL" = "FUERA DE CALI",
                                                  "CATAYA REAL" = "PARCELACIONES PANCE",
                                                  "CEIBAS" = "LAS CEIBAS",
                                                  "CENTELSA" = "MENGA",
                                                  "CENTRO" = "FUERA DE CALI",
                                                  "CERRO CRISTALES" = "SECTOR ALTOS DE SANTA ISABEL",
                                                  "CERROS DE GUADALUPE" = "SECTOR CANAVERALEJO GUADALUPE",
                                                  "CHIMINANGOS" = "CHIMINANGOS I",
                                                  "CHIMINANGOS 1 ETAPA" = "CHIMINANGOS I",
                                                  "CHIMINANGOS 2 ETAPA" = "CHIMINANGOS II",
                                                  "CIUDAD ANTEJARDIN" = "URBANIZACION CIUDAD JARDIN",
                                                  "CIUDAD CORDOBA RESERVADO" = "CIUDAD CORDOBA",
                                                  "CIUDAD COUNTRY" = "FUERA DE CALI",
                                                  "CIUDAD DEL CAMPO" = "FUERA DE CALI",
                                                  "CIUDAD JARDIN" = "URBANIZACION CIUDAD JARDIN",
                                                  "CIUDAD JARDIN PANCE" = "PARCELACIONES PANCE",
                                                  "CIUDAD LOS ALAMOS" = "CIUDAD DE LOS ALAMOS",
                                                  "CIUDAD MEL√(C)NDEZ" = "MELENDEZ",
                                                  "CIUDAD MELENDEZ" = "MELENDEZ",
                                                  "CIUDAD MODELO" = "LOS SAUCES",
                                                  "CIUDAD PACIFICA" = "FUERA DE CALI",
                                                  "CIUDAD REAL" = "FUERA DE CALI",
                                                  "CIUDADELA DEL RIO" = "CIUDADELA DEL RIO - CVC",
                                                  "CIUDADELA MELENDEZ" = "SECTOR MELENDEZ",
                                                  "CIUDADELA PASO ANCHO" = "CIUDADELA PASOANCHO",
                                                  "COLINAS DE MENGA" = "ALTOS DE MENGA",
                                                  "COLINAS DEL BOSQUE" = "EL BOSQUE",
                                                  "COLON" = "CRISTOBAL COLON",
                                                  "COLSEGUROS" = "COLSEGUROS ANDES",
                                                  "COMFENALCO" = "PASO DEL COMERCIO",
                                                  "CONJUNTO GIBRALTAR" = "EL TRONCAL",
                                                  "CRISTALES" = "TEJARES - CRISTALES",
                                                  "CUARTO DE LEGUA" = "CUARTO DE LEGUA - GUADALUPE",
                                                  "ED BENJAMIN HERRERA" = "SAN PEDRO",
                                                  "EL CANEY" = "CANEY",
                                                  "EL CASTILLO" = "PANAMERICANO",
                                                  "EL GUABITO" = "VILLA DEL PRADO - EL GUABITO",
                                                  "EL INGENIO 3" = "EL INGENIO",
                                                  "EL INGENIO I" = "EL INGENIO",
                                                  "EL INGENIO II" = "EL INGENIO",
                                                  "EL INGENIO III" = "EL INGENIO",
                                                  "EL TR√(C)BOL" = "EL TREBOL",
                                                  "FARRALLONES DE PANCE" = "PARCELACIONES PANCE",
                                                  "FLORA" = "LA FLORA",
                                                  "FLORALIA" = "CIUDADELA FLORALIA",
                                                  "FUENTES DE LA" = "FUERA DE CALI",
                                                  "GAITAN" = "JORGE ELIECER GAITAN",
                                                  "GRAN LIMONAR" = "EL GRAN LIMONAR",
                                                  "GUADALUPE" = "CUARTO DE LEGUA - GUADALUPE",
                                                  "GUADALUPE ALTO" = "SECTOR CANAVERALEJO GUADALUPE",
                                                  "GUADUALES" = "LOS GUADUALES",
                                                  "HACIENDA ALFEREZ REAL" = "ALFEREZ REAL",
                                                  "INGENIO" = "EL INGENIO",
                                                  "INGENIO I" = "EL INGENIO",
                                                  "INGENIO II" = "EL INGENIO",
                                                  "JAMUNDI" = "FUERA DE CALI",
                                                  "JAMUNDI ALFAGUARA" = "FUERA DE CALI",
                                                  "JOSE MANUEL MARROQUIN" = "JOSE MANUEL MARROQUIN I",
                                                  "JUANAMB√∫" = "JUANAMBU",
                                                  "LA ARBOLEDA" = "ARBOLEDAS",
                                                  "LA BUITRERA" = "FUERA DE CALI",
                                                  "LA CEIBAS" = "LAS CEIBAS",
                                                  "LA LUISA" = "SECTOR ALTO LOS CHORROS",
                                                  "LA MORADA" = "FUERA DE CALI",
                                                  "LA NUEVA BASE" = "URBANIZACION LA NUEVA BASE",
                                                  "LA PORTADA AL" = "SANTA TERESITA",
                                                  "LA PRIMAVERA" = "PRIMAVERA",
                                                  "LA REFORMA" = "FUERA DE CALI",
                                                  "LA RIVERA" = "LA RIVERA I",
                                                  "LA RIVERA II" = "LA RIVERA I",
                                                  "LA RIVERITA" = "PARCELACIONES PANCE",
                                                  "LA RIVIERA" = "LOS ANDES B - LA RIVIERA",
                                                  "LA VILLA DEL" = "FUERA DE CALI",
                                                  "LAFLORA" = "LA FLORA",
                                                  "LARES DE COMFENALCO" = "SECTOR PUENTE DEL COMERCIO",
                                                  "LAS AM√(C)RICAS" = "LAS AMERICAS",
                                                  "LAS CAMELIAS" = "CANAVERALES - LOS SAMANES",
                                                  "LAS QUINTAS DE" = "LAS QUINTAS DE DON SIMON",
                                                  "LAS VEGAS" = "MAYAPAN - LAS VEGAS",
                                                  "LAS VEGAS DE" = "EL CANEY",
                                                  "LIBERTADORES" = "LOS LIBERTADORES",
                                                  "LOS ALAMOS" = "CIUDAD LOS ALAMOS",
                                                  "LOS CRISTALES" = "TEJARES - CRISTALES",
                                                  "LOS CRISTALES CLUB" = "ALTOS DE SANTA ISABEL",
                                                  "LOS JOCKEYS" = "URBANIZACION CIUDAD JARDIN",
                                                  "MAMELLAN" = "BELLAVISTA",
                                                  "MAYAPAN LAS VEGAS" = "MAYAPAN - LAS VEGAS",
                                                  "MEL√(C)NDEZ" = "MELENDEZ",
                                                  "MIRADOL DEL AGUACATAL" = "AGUACATAL",
                                                  "MORICHAL DE COMFANDI" = "SECTOR ALTO JORDAN",
                                                  "MULTICENTRO" = "UNICENTRO CALI",
                                                  "NORMANDIA WEST POINT" = "NORMANDIA",
                                                  "NORTE" = "PRADOS DEL NORTE",
                                                  "NORTE LA FLORA" = "LA FLORA",
                                                  "NUEVA BASE" = "URBANIZACION NUEVA BASE",
                                                  "OASIS DE COMFANDI" = "LOS GUADUALES",
                                                  "OASIS DE PASOANCHO" = "COLSEGUROS ANDES",
                                                  "OCCIDENTE" = "FUERA DE CALI",
                                                  "PACARA" = "LA MERCED",
                                                  "PALMAS DEL INGENIO" = "EL INGENIO",
                                                  "PAMPALINDA" = "PAMPA LINDA",
                                                  "PANCE" = "PARCELACIONES PANCE",
                                                  "PARQUE RESIDENCIAL EL" = "EL BOSQUE",
                                                  "POBLADO CAMPESTRE" = "FUERA DE CALI",
                                                  "PONCE" = "PARCELACIONES PANCE",
                                                  "PORTADA DE COMFANDI" = "LOS ALCAZARES",
                                                  "PORTALES DE COMFANDI" = "FUERA DE CALI",
                                                  "PUENTE DEL COMERCIO" = "SECTOR PUENTE DEL COMERCIO",
                                                  "PUENTE PALMA" = "CUARTO DE LEGUA - GUADALUPE",
                                                  "PASEO DE LOS" = "LOS PARQUES BARRANQUILLA",
                                                  "QUINTAS DE DON" = "LAS QUINTAS DE DON SIMON",
                                                  "QUINTAS DE SALOMIA" = "JORGE ELIECER GAITAN",
                                                  "REFUGIO" = "EL REFUGIO",
                                                  "REP√∫BLICA DE ISRAEL" = "REPUBLICA DE ISRAEL",
                                                  "RINCON DE LA" = "UNIDAD RESIDENCIAL BUENO MADRID",
                                                  "RINCON DE SALOMIA" = "SALOMIA",
                                                  "RIVERAS DEL VALLE" = "EL CANEY",
                                                  "ROZO LA TORRE" = "FUERA DE CALI",
                                                  "SAMANES" = "CANAVERALES - LOS SAMANES",
                                                  "SAMANES DE GUADALUPE" = "CANAVERALES - LOS SAMANES",
                                                  "SAMECO" = "URBANIZACION LA FLORA",
                                                  "SAN BOSCO" = "SAN JUAN BOSCO",
                                                  "SAN FERNANDO" = "SAN FERNANDO NUEVO",
                                                  "SAN JOAQUIN" = "URBANIZACION SAN JOAQUIN",
                                                  "SAN JUDAS" = "SAN JUDAS TADEO I",
                                                  "SAN JUDAS TADEO" = "SAN JUDAS TADEO II",
                                                  "SANTA" = "SANTA TERESITA",
                                                  "SANTA ANITA" = "SANTA ANITA - LA SELVA",
                                                  "SANTA ANITA SUR" = "SANTA ANITA - LA SELVA",
                                                  "SANTA HELENA DE" = "SANTA ELENA",
                                                  "SANTA MONICA ALTA" = "SANTA MONICA",
                                                  "SANTA MONICA NORTE" = "SANTA MONICA",
                                                  "SANTA MONICA RESIDENCIAL" = "SANTA MONICA",
                                                  "SANTAFE" = "SANTA FE",
                                                  "SECTOR AGUACATAL" = "AGUACATAL",
                                                  "SEMINARIO" = "PAMPA LINDA",
                                                  "SIERRAS DE NORMANDIA" = "NORMANDIA",
                                                  "TEJARES CRISTALES" = "TEJARES - CRISTALES",
                                                  "TEJARES DE SAN" = "MIRAFLORES",
                                                  "TEMPLETE" = "EUCARISTICO",
                                                  "TEQUENDAMA" = "URBANIZACION TEQUENDAMA",
                                                  "TEQUENDEMA" = "NUEVA TEQUENDAMA",
                                                  "UNION DE VIVIENDA" = "UNION DE VIVIENDA POPULAR",
                                                  "URBANIZACION BARRANQUILLA" = "LOS PARQUES BARRANQUILLA",
                                                  "URBANIZACION EL SAMAN" = "CANAVERALES - LOS SAMANES",
                                                  "URBANIZACION GRATAMIRA" = "LA SELVA",
                                                  "URBANIZACION LA NUEVA" = "NUEVA FLORESTA",
                                                  "URBANIZACION LAS CASCADAS" = "CUARTO DE LEGUA - GUADALUPE",
                                                  "URBANIZACION LILI" = "URBANIZACION RIO LILI",
                                                  "URBANIZACION PACARA" = "CIUDAD LOS ALAMOS",
                                                  "VALLE DE LILI" = "LILI",
                                                  "VALLE DEL LILI" = "LILI",
                                                  "VILLA DE VERACRUZ" = "SALOMIA",
                                                  "VILLA DEL PARQUE" = "LOS PARQUES BARRANQUILLA",
                                                  "VILLA DEL PRADO" = "VILLA DEL PRADO - EL GUABITO",
                                                  "VILLAS DE VERACRUZ" = "SALOMIA",
                                                  "ZONA CENTRO" = "FUERA DE CALI",
                                                  "ZONA NORTE" = "FUERA DE CALI",
                                                  "ZONA NORTE LOS" = "FUERA DE CALI",
                                                  "ZONA OESTE" = "FUERA DE CALI",
                                                  "ZONA ORIENTE" = "FUERA DE CALI",
                                                  "ZONA RESIDENCIAL" = "FUERA DE CALI",
                                                  "ZONA SUR" = "FUERA DE CALI"
)

10 Análisis de datos faltantes.

Para el análisis de datos faltantes y sus respectivas imputaciones se debe primero separar dos conjuntos de datos de caracteristicas similares como lo son los tipos de vivienda: Casa y Apartamento ya que sus condiciones estructurales son muy diferentes. Por ejemplo el atributo “No. de Pisos” hace referencia al número de plantas físicas que posee una casa, mientras que para los apartamentos hace referencia al piso en el que este se encuentra.

10.1 Casas

Los registros totales para el conjunto de datos de casas es de 3219, con dos atributos que presentan datos faltantes, el número de parqueaderos con 733 datos y el número de pisos con 1254.

Figura 2. Patrón de datos faltantes para las casas.

library(reactable)
datos_Casa<-datos_Vivienda%>%subset(Tipo.Vivienda == "Casa")


reactable(datos_Casa)

10.1.1 Número de pisos

Para realizar la imputación de los se decidió dividir el conjunto por estratos y ver cuál es la mayor frecuencia del número de pisos por estrato y de esta manera llenar los datos vacíos con este valor más frecuente.

Casa_Estrato03<-datos_Casa%>%subset(Estrato == "3")
Casa_Estrato04<-datos_Casa%>%subset(Estrato == "4")
Casa_Estrato05<-datos_Casa%>%subset(Estrato == "5")
Casa_Estrato06<-datos_Casa%>%subset(Estrato == "6")

Casa_Estrato03$No.Pisos<-as.factor(Casa_Estrato03$No.Pisos)
Casa_Estrato04$No.Pisos<-as.factor(Casa_Estrato04$No.Pisos)
Casa_Estrato05$No.Pisos<-as.factor(Casa_Estrato05$No.Pisos)
Casa_Estrato06$No.Pisos<-as.factor(Casa_Estrato06$No.Pisos)

par(mfrow=c(2,2))
barplot(summary(Casa_Estrato03$No.Pisos), main = "No.Pisos casas de estrato 3", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato04$No.Pisos), main = "No.Pisos casas de estrato 4", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato05$No.Pisos), main = "No.Pisos casas de estrato 5", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato06$No.Pisos), main = "No.Pisos casas de estrato 6", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")

Figura 3. Frecuencias del número de pisos que tienen las casas en relación a su estrato.

10.1.2 Número de Parqueaderos

Para realizar la imputación de los se decidió dividir el conjunto por estratos y ver cuál es la mayor frecuencia del número de parqueaderos por estrato y de esta manera llenar los datos vacíos con este valor más frecuente.

Casa_Estrato03$No.Parqueaderos<-as.factor(Casa_Estrato03$No.Parqueaderos)
Casa_Estrato04$No.Parqueaderos<-as.factor(Casa_Estrato04$No.Parqueaderos)
Casa_Estrato05$No.Parqueaderos<-as.factor(Casa_Estrato05$No.Parqueaderos)
Casa_Estrato06$No.Parqueaderos<-as.factor(Casa_Estrato06$No.Parqueaderos)

par(mfrow=c(2,2))
barplot(summary(Casa_Estrato03$No.Parqueaderos), main = "No.Parqueaderos casas de estrato 3", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato04$No.Parqueaderos), main = "No.Parqueaderos casas de estrato 4", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato05$No.Parqueaderos), main = "No.Parqueaderos casas de estrato 5", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Casa_Estrato06$No.Parqueaderos), main = "No.Parqueaderos casas de estrato 6", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")

Figura 4. Frecuencias del número de parqueaderos que tienen las casas en relación a su estrato.

10.1.3 Imputación final

Para realizar la imputación sobre los datos tanto de parqueaderos y pisos se utilizó el siguiente código:

library(reactable)
Casa_Estrato03_Imp<-Casa_Estrato03
Casa_Estrato04_Imp<-Casa_Estrato04
Casa_Estrato05_Imp<-Casa_Estrato05
Casa_Estrato06_Imp<-Casa_Estrato06



Casa_Estrato03_Imp$No.Parqueaderos[is.na(Casa_Estrato03_Imp$No.Parqueaderos)]<-1
Casa_Estrato04_Imp$No.Parqueaderos[is.na(Casa_Estrato04_Imp$No.Parqueaderos)]<-1
Casa_Estrato05_Imp$No.Parqueaderos[is.na(Casa_Estrato05_Imp$No.Parqueaderos)]<-2
Casa_Estrato06_Imp$No.Parqueaderos[is.na(Casa_Estrato06_Imp$No.Parqueaderos)]<-2

Casa_Estrato03_Imp$No.Pisos<-as.numeric(Casa_Estrato03_Imp$No.Pisos)
Casa_Estrato04_Imp$No.Pisos<-as.numeric(Casa_Estrato04_Imp$No.Pisos)
Casa_Estrato05_Imp$No.Pisos<-as.numeric(Casa_Estrato05_Imp$No.Pisos)
Casa_Estrato06_Imp$No.Pisos<-as.numeric(Casa_Estrato06_Imp$No.Pisos)

Casa_Estrato03_Imp$No.Pisos[is.na(Casa_Estrato03_Imp$No.Pisos)]<-2
Casa_Estrato04_Imp$No.Pisos[is.na(Casa_Estrato04_Imp$No.Pisos)]<-2
Casa_Estrato05_Imp$No.Pisos[is.na(Casa_Estrato05_Imp$No.Pisos)]<-2
Casa_Estrato06_Imp$No.Pisos[is.na(Casa_Estrato06_Imp$No.Pisos)]<-2

Casas_Imputadas<-rbind(Casa_Estrato03_Imp, Casa_Estrato04_Imp, Casa_Estrato05_Imp, Casa_Estrato06_Imp)

reactable(Casas_Imputadas)

Figura 5. Patrón de datos faltantes imputados para las casas.

10.2 Apartamentos

Los registros totales para el conjunto de datos de los apartamentos es de 5100, con dos atributos que presentan datos faltantes, el número de parqueaderos con 869 datos y el número de pisos con 1381

Figura 6. Patrón de datos faltantes para los apartamentos

library(reactable)
datos_Apartamento<-datos_Vivienda%>%subset(Tipo.Vivienda == "Apartamento")


reactable(datos_Apartamento)

10.2.1 Número de pisos

Para realizar la imputación de los se decidió dividir el conjunto por estratos y ver cuál es la mayor frecuencia del número de pisos por estrato y de esta manera llenar los datos vacíos con este valor más frecuente.

Apartamento_Estrato03<-datos_Apartamento%>%subset(Estrato == "3")
Apartamento_Estrato04<-datos_Apartamento%>%subset(Estrato == "4")
Apartamento_Estrato05<-datos_Apartamento%>%subset(Estrato == "5")
Apartamento_Estrato06<-datos_Apartamento%>%subset(Estrato == "6")

Apartamento_Estrato03$No.Pisos<-as.factor(Apartamento_Estrato03$No.Pisos)
Apartamento_Estrato04$No.Pisos<-as.factor(Apartamento_Estrato04$No.Pisos)
Apartamento_Estrato05$No.Pisos<-as.factor(Apartamento_Estrato05$No.Pisos)
Apartamento_Estrato06$No.Pisos<-as.factor(Apartamento_Estrato06$No.Pisos)

par(mfrow=c(2,2))
barplot(summary(Apartamento_Estrato03$No.Pisos), main = "No.Pisos Apartamentos de estrato 3", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato04$No.Pisos), main = "No.Pisos Apartamentos de estrato 4", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato05$No.Pisos), main = "No.Pisos Apartamentos de estrato 5", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato06$No.Pisos), main = "No.Pisos Apartamentos de estrato 6", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")

Figura 6. Frecuencias del número de pisos que tienen las apartamentos en relación a su estrato.

10.2.2 Número de Parqueaderos

Para realizar la imputación de los se decidió dividir el conjunto por estratos y ver cuál es la mayor frecuencia del número de parqueaderos por estrato y de esta manera llenar los datos vacíos con este valor más frecuente.

Apartamento_Estrato03$No.Parqueaderos<-as.factor(Apartamento_Estrato03$No.Parqueaderos)
Apartamento_Estrato04$No.Parqueaderos<-as.factor(Apartamento_Estrato04$No.Parqueaderos)
Apartamento_Estrato05$No.Parqueaderos<-as.factor(Apartamento_Estrato05$No.Parqueaderos)
Apartamento_Estrato06$No.Parqueaderos<-as.factor(Apartamento_Estrato06$No.Parqueaderos)

par(mfrow=c(2,2))
barplot(summary(Apartamento_Estrato03$No.Parqueaderos), main = "No.Parqueaderos Apartamentos de estrato 3", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato04$No.Parqueaderos), main = "No.Parqueaderos Apartamentos de estrato 4", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato05$No.Parqueaderos), main = "No.Parqueaderos Apartamentos de estrato 5", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")
barplot(summary(Apartamento_Estrato06$No.Parqueaderos), main = "No.Parqueaderos Apartamentos de estrato 6", xlab = "Pisos", ylab="Frecuencia", col="#367BB5", border = 'white', bg="#FFFFFF")

Figura 7. Frecuencias del número de parqueaderos que tienen los apartamentos en relación a su estrato.

10.2.3 Imputación final

Para realizar la imputación sobre los datos tanto de parqueaderos y pisos se utilizó el siguiente código:

library(reactable)

Apartamento_Estrato03_Imp<-Apartamento_Estrato03
Apartamento_Estrato04_Imp<-Apartamento_Estrato04
Apartamento_Estrato05_Imp<-Apartamento_Estrato05
Apartamento_Estrato06_Imp<-Apartamento_Estrato06

Apartamento_Estrato03_Imp$No.Parqueaderos[is.na(Apartamento_Estrato03_Imp$No.Parqueaderos)]<-1
Apartamento_Estrato04_Imp$No.Parqueaderos[is.na(Apartamento_Estrato04_Imp$No.Parqueaderos)]<-1
Apartamento_Estrato05_Imp$No.Parqueaderos[is.na(Apartamento_Estrato05_Imp$No.Parqueaderos)]<-2
Apartamento_Estrato06_Imp$No.Parqueaderos[is.na(Apartamento_Estrato06_Imp$No.Parqueaderos)]<-2

Apartamento_Estrato03_Imp$No.Pisos <- as.numeric(as.character(Apartamento_Estrato03_Imp$No.Pisos))
Apartamento_Estrato03_Imp$No.Pisos[is.na(Apartamento_Estrato03_Imp$No.Pisos)]<-5

Apartamento_Estrato04_Imp$No.Pisos <- as.numeric(as.character(Apartamento_Estrato04_Imp$No.Pisos))
Apartamento_Estrato04_Imp$No.Pisos[is.na(Apartamento_Estrato04_Imp$No.Pisos)]<-5

Apartamento_Estrato05_Imp$No.Pisos <- as.numeric(as.character(Apartamento_Estrato05_Imp$No.Pisos))
Apartamento_Estrato05_Imp$No.Pisos[is.na(Apartamento_Estrato05_Imp$No.Pisos)]<-3

Apartamento_Estrato06_Imp$No.Pisos <- as.numeric(as.character(Apartamento_Estrato06_Imp$No.Pisos))
Apartamento_Estrato06_Imp$No.Pisos[is.na(Apartamento_Estrato06_Imp$No.Pisos)]<-3

Apartamento_Imputadas<-rbind(Apartamento_Estrato03_Imp, Apartamento_Estrato04_Imp, Apartamento_Estrato05_Imp, Apartamento_Estrato06_Imp)


reactable(Apartamento_Imputadas)

Figura 8. Patrón de datos faltantes imputados para los apartamentos.

10.3 Datos Imputados finales

library(reactable)


datosImputadosTotales<-rbind(Apartamento_Imputadas, Casas_Imputadas)

reactable(datosImputadosTotales)