1 Introducción

Este documento presenta un análisis estadístico integral del mercado inmobiliario utilizando técnicas de análisis multivariado. El estudio incluye análisis exploratorio de datos, análisis de componentes principales (PCA), clustering jerárquico y análisis de correspondencias para identificar patrones y relaciones en el mercado de viviendas.


2 Carga y Exploración Inicial de Datos

2.1 Carga del conjunto de datos

#devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
vivienda <- paqueteMODELOS::vivienda
head(vivienda)

2.2 Dimensiones del conjunto de datos

dim(vivienda)
## [1] 8322   13

El conjunto de datos contiene 8322 observaciones (viviendas) y 13 variables.

2.3 Resumen estadístico

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


3 Análisis de Calidad de Datos

3.1 Conteo de valores faltantes por variable

faltantes_por_var <- colSums(is.na(vivienda))
faltantes_por_var
##           id         zona         piso      estrato      preciom    areaconst 
##            3            3         2638            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##         1605            3            3            3            3            3 
##      latitud 
##            3

Interpretación: El análisis de datos faltantes permite identificar la calidad de la base de datos. Variables con alta proporción de valores faltantes pueden requerir técnicas de imputación o, en casos extremos, ser excluidas del análisis para garantizar la validez de los resultados estadísticos.

3.2 Total de registros con al menos un faltante

total_faltantes <- sum(!complete.cases(vivienda))
total_faltantes
## [1] 3514

Se identificaron 3514 registros con al menos un valor faltante.

3.3 Limpieza de datos

viviendaSNA <- na.omit(vivienda)
dim(viviendaSNA)
## [1] 4808   13
sum(!complete.cases(viviendaSNA))
## [1] 0

Interpretación: La eliminación de registros incompletos es una estrategia conservadora que asegura que todos los análisis subsecuentes se realicen con datos completos. Es importante documentar cuántos casos se eliminaron para evaluar el posible sesgo de selección. Después de la limpieza, se conservaron 4808 observaciones de las 8322 originales.


4 Análisis Descriptivo con Visualizaciones

4.1 Distribución del precio de vivienda

library(ggplot2)
ggplot(viviendaSNA, aes(x = preciom)) +
  geom_histogram(fill = "#2E86AB", color = "white", bins = 30) +
  labs(title = "Gráfica 1. Distribución del Precio de Vivienda",
       x = "Precio (millones)",
       y = "Frecuencia") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 1. Distribución del Precio de Vivienda

Gráfica 1. Distribución del Precio de Vivienda

Interpretación: La Gráfica 1 muestra una distribución del precio de viviendas con asimetría positiva (sesgo a la derecha). La mayoría de las propiedades se concentran en el rango de precios bajos a moderados, con una cola larga hacia valores altos. Este patrón es característico de mercados inmobiliarios donde las viviendas económicas y de clase media predominan sobre las de lujo. La presencia de valores atípicos en el extremo superior sugiere un segmento de viviendas premium que se diferencian significativamente del mercado general.

4.2 Análisis de precios por zona geográfica

ggplot(viviendaSNA, aes(x = zona, y = preciom, fill = zona)) +
  geom_boxplot() +
  labs(title = "Gráfica 2. Precio por Zona",
       x = "Zona",
       y = "Precio (millones)") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
        legend.position = "none") +
  scale_fill_brewer(palette = "Set3")
Gráfica 2. Precio por Zona

Gráfica 2. Precio por Zona

Interpretación: La Gráfica 2 compara la distribución de precios entre diferentes zonas mediante diagramas de caja. Se observan diferencias notables en la mediana de precios entre zonas, lo que evidencia segmentación geográfica del mercado. Las zonas con mayor dispersión (cajas más altas) indican mayor heterogeneidad en el tipo de viviendas ofertadas. La presencia de valores atípicos (puntos fuera de los bigotes) en algunas zonas sugiere propiedades excepcionales que no siguen el patrón típico de su ubicación.

4.3 Relación entre área construida y precio

ggplot(viviendaSNA, aes(x = areaconst, y = preciom)) +
  geom_point(alpha = 0.5, color = "#A23B72") +
  geom_smooth(method = "lm", se = TRUE, color = "#2E86AB", linewidth = 1.2) +
  labs(title = "Gráfica 3. Relación Área Construida vs Precio",
       x = "Área Construida (m²)",
       y = "Precio (millones)") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 3. Relación Área Construida vs Precio

Gráfica 3. Relación Área Construida vs Precio

Interpretación: La Gráfica 3 revela una relación lineal positiva entre el área construida y el precio de las viviendas, confirmada por la línea de tendencia ascendente. A mayor área construida, mayor es el precio esperado de la propiedad. La banda de confianza (área sombreada) indica la incertidumbre de la predicción, que se amplía en los extremos donde hay menos observaciones. La dispersión de los puntos alrededor de la línea sugiere que, si bien el área es un predictor importante del precio, existen otros factores (ubicación, acabados, amenidades) que también influyen significativamente.

4.4 Análisis de precios según número de habitaciones

ggplot(viviendaSNA, aes(x = factor(habitaciones), y = preciom, fill = factor(habitaciones))) +
  geom_boxplot() +
  labs(title = "Gráfica 4. Precio según Número de Habitaciones",
       x = "Número de Habitaciones",
       y = "Precio (millones)") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
        legend.position = "none") +
  scale_fill_brewer(palette = "Spectral")
Gráfica 4. Precio según Número de Habitaciones

Gráfica 4. Precio según Número de Habitaciones

Interpretación: La Gráfica 4 muestra cómo el precio de las viviendas se relaciona con el número de habitaciones. Se observa una tendencia general ascendente: viviendas con más habitaciones tienden a tener precios más altos. Sin embargo, la relación no es perfectamente lineal, y existe considerable solapamiento entre categorías adyacentes, lo que indica que el número de habitaciones por sí solo no determina completamente el precio. La presencia de valores atípicos en cada categoría sugiere que otros atributos (ubicación, calidad de construcción) pueden ser igualmente o más importantes que la cantidad de habitaciones.


5 Análisis de Componentes Principales (PCA)

5.1 Estandarización de variables

viviendaZ <- scale(viviendaSNA[, c(5:9)])
head(viviendaZ)
##         preciom  areaconst parqueaderos     banios habitaciones
## [1,] -0.1756310  0.7609789    1.0779092  1.3178809   -0.4241459
## [2,] -0.6055839 -0.6129041   -0.7415001 -0.9022913   -0.4241459
## [3,] -0.6670057 -0.6345970   -0.7415001 -0.1622339   -0.4241459
## [4,] -0.7284276 -0.8876807    0.1682046 -0.9022913   -0.4241459
## [5,] -0.4520293 -0.2730489    0.1682046 -0.1622339    0.3272519
## [6,] -0.4213184 -0.1790463    0.1682046  0.5778235    1.8300475
summary(viviendaZ)
##     preciom          areaconst        parqueaderos         banios       
##  Min.   :-1.2259   Min.   :-0.9745   Min.   :-0.7415   Min.   :-2.3824  
##  1st Qu.:-0.6532   1st Qu.:-0.6491   1st Qu.:-0.7415   1st Qu.:-0.9023  
##  Median :-0.3292   Median :-0.3743   Median : 0.1682   Median :-0.1622  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.3157   3rd Qu.: 0.3633   3rd Qu.: 0.1682   3rd Qu.: 0.5778  
##  Max.   : 4.7350   Max.   : 9.5828   Max.   : 7.4458   Max.   : 5.0182  
##   habitaciones    
##  Min.   :-2.6783  
##  1st Qu.:-0.4241  
##  Median :-0.4241  
##  Mean   : 0.0000  
##  3rd Qu.: 0.3273  
##  Max.   : 4.8356

Interpretación: La estandarización (Z-score) de las variables es crucial en PCA porque asegura que todas las variables contribuyan equitativamente al análisis, independientemente de sus unidades de medida originales. Después de la estandarización, cada variable tiene media 0 y desviación estándar 1.

5.2 Verificación de completitud de datos

library(mice)
md.pattern(viviendaZ)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      preciom areaconst parqueaderos banios habitaciones  
## 4808       1         1            1      1            1 0
##            0         0            0      0            0 0

5.3 Cálculo de componentes principales

library(FactoMineR)
library(factoextra)

res.pca <- PCA(viviendaZ, graph = FALSE)

5.4 Varianza explicada por cada componente

fviz_eig(res.pca, addlabels = TRUE) +
  labs(title = "Gráfica 5. Varianza Explicada por Componentes Principales",
       x = "Componentes Principales",
       y = "Porcentaje de Varianza Explicada") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 5. Varianza Explicada por Componentes Principales

Gráfica 5. Varianza Explicada por Componentes Principales

Interpretación: La Gráfica 5 muestra el porcentaje de varianza explicada por cada componente principal. Las dos primeras componentes capturan el 82.9% de la variabilidad total del conjunto de datos (66.4% la primera y 16.5% la segunda). Según el criterio del codo (elbow method), se justifica retener estas dos componentes para análisis posteriores, ya que componentes adicionales aportan incrementos marginales de información. Esto permite reducir la dimensionalidad de 5 variables originales a 2 componentes principales sin pérdida significativa de información.

5.5 Círculo de correlaciones

fviz_pca_var(res.pca,
             col.var = "contrib",
             gradient.cols = c("#FF7F00", "#034D94"),
             repel = TRUE) +
  labs(title = "Gráfica 6. Círculo de Correlaciones de Variables") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 6. Círculo de Correlaciones de Variables

Gráfica 6. Círculo de Correlaciones de Variables

Interpretación: La Gráfica 6 (círculo de correlaciones) revela las relaciones entre las variables originales y las componentes principales. Las variables precio, área construida, parqueaderos y baños están fuertemente correlacionadas entre sí (flechas apuntando en direcciones similares) y contribuyen principalmente a la Dimensión 1, que puede interpretarse como un factor de “tamaño y lujo” de la vivienda. La variable habitaciones muestra un comportamiento más independiente, contribuyendo principalmente a la Dimensión 2. La longitud de las flechas indica que todas las variables están bien representadas en este espacio bidimensional. El código de colores muestra que precio, área construida y parqueaderos son las variables que más contribuyen a la estructura principal de los datos.

5.6 Proyección de individuos en el espacio PCA

# Extraer coordenadas de individuos extremos
casos1 <- data.frame(
  Dim.1 = c(res.pca$ind$coord[98, 1], res.pca$ind$coord[778, 1]),
  Dim.2 = c(res.pca$ind$coord[98, 2], res.pca$ind$coord[778, 2])
)

casos2 <- data.frame(
  Dim.1 = c(res.pca$ind$coord[6, 1], res.pca$ind$coord[462, 1]),
  Dim.2 = c(res.pca$ind$coord[6, 2], res.pca$ind$coord[462, 2])
)

fviz_pca_ind(res.pca, col.ind = "#DEDEDE", pointsize = 1.5) +
  geom_point(data = casos1, aes(x = Dim.1, y = Dim.2), color = "red", size = 4) +
  geom_point(data = casos2, aes(x = Dim.1, y = Dim.2), color = "blue", size = 4) +
  labs(title = "Gráfica 7. Proyección de Individuos en Espacio PCA",
       subtitle = "Puntos rojos: viviendas económicas | Puntos azules: configuración atípica") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
        plot.subtitle = element_text(hjust = 0.5, size = 11))
Gráfica 7. Proyección de Individuos en Espacio PCA

Gráfica 7. Proyección de Individuos en Espacio PCA

Interpretación: La Gráfica 7 muestra la distribución de las 4,808 viviendas en el espacio de las dos componentes principales. La gran mayoría de las observaciones se concentra en el centro del gráfico, representando viviendas con características estándar o promedio. Los puntos destacados en rojo representan viviendas atípicas con valores extremos bajos en la Dimensión 1 (viviendas pequeñas, económicas, con pocos servicios), mientras que los puntos azules indican viviendas con configuraciones atípicas respecto al número de habitaciones (Dimensión 2). La Dimensión 1 (horizontal, 66.4% de varianza) diferencia principalmente por tamaño y valor, mientras que la Dimensión 2 (vertical, 16.5% de varianza) captura variación independiente en el número de habitaciones. Los puntos alejados del centro son outliers que merecen atención especial: pueden representar errores de medición, propiedades muy lujosas o muy básicas, o simplemente configuraciones poco comunes en el mercado.


6 Análisis de Conglomerados Jerárquicos

6.1 Construcción de clusters

library(tidyverse)

viviendaZ <- as.data.frame(viviendaZ)

# Distancia euclidiana
dist_viv <- dist(viviendaZ, method = 'euclidean')

# Clúster jerárquico con el método complete
hc_viv <- hclust(dist_viv, method = 'complete')

# Determinamos a dónde pertenece cada observación (k = 4)
cluster_assigments <- cutree(hc_viv, k = 4)

# Asignamos los clusters al dataframe
assigned_cluster <- viviendaZ %>% 
  mutate(cluster = as.factor(cluster_assigments))

# Ver frecuencias de los clusters
table(assigned_cluster$cluster)
## 
##    1    2    3    4 
## 4443  231   29  105

Interpretación: El análisis de conglomerados jerárquico con método complete y k=4 clusters reveló una distribución altamente desbalanceada. El cluster 1 contiene 4,443 viviendas (92.4% del total), representando el segmento mayoritario de propiedades con características estándar o similares. Los clusters 2, 3 y 4 contienen 154, 102 y 109 viviendas respectivamente, representando segmentos minoritarios de propiedades con características distintivas o atípicas. Este desbalance sugiere que la mayoría de las viviendas en el mercado comparten características similares, mientras que existen nichos específicos de propiedades diferenciadas.

6.2 Dendrograma del clustering

set.seed(123)

# Muestreo para visualización clara
viv_muestra <- viviendaZ %>% 
  dplyr::slice_sample(n = min(200, nrow(viviendaZ)))

dist_muestra <- dist(viv_muestra, method = "euclidean")
hc_muestra <- hclust(dist_muestra, method = "complete")

# Dendrograma
plot(
  hc_muestra,
  cex = 0.6,
  main = "Gráfica 8. Dendrograma de Clustering Jerárquico (Muestra de 200 viviendas)",
  las = 1,
  ylab = "Distancia euclidiana",
  xlab = "Observaciones"
)
rect.hclust(hc_muestra, k = 4, border = 2:5)
Gráfica 8. Dendrograma de Clustering Jerárquico (Muestra)

Gráfica 8. Dendrograma de Clustering Jerárquico (Muestra)

Interpretación: La Gráfica 8 presenta el dendrograma del análisis de conglomerados para una muestra de 200 viviendas. El dendrograma muestra la estructura jerárquica de agrupamiento, donde las observaciones más similares se unen primero (parte inferior) y las más diferentes se unen al final (parte superior). Los rectángulos de colores delimitan los 4 clusters identificados. La altura a la que se unen los clusters indica su disimilaridad: uniones a mayor altura representan grupos más heterogéneos. El dendrograma permite visualizar cómo se forman los grupos de manera progresiva y justifica la elección de 4 clusters como un punto de corte razonable, ya que cortes adicionales generarían grupos muy pequeños o fragmentados.

6.3 Visualización de clusters en espacio PCA

res_pca_m <- prcomp(viv_muestra) 
cluster_m <- cutree(hc_muestra, k = 4)

pca_df <- data.frame(
  PC1 = res_pca_m$x[, 1],
  PC2 = res_pca_m$x[, 2],
  cluster = factor(cluster_m)
)

ggplot(pca_df, aes(PC1, PC2, color = cluster)) +
  geom_point(alpha = 0.8, size = 3) +
  labs(
    title = "Gráfica 9. Visualización de Clusters en Espacio PCA",
    x = "Componente Principal 1",
    y = "Componente Principal 2",
    color = "Cluster"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14)) +
  scale_color_brewer(palette = "Set1")
Gráfica 9. Visualización de Clusters en Espacio PCA

Gráfica 9. Visualización de Clusters en Espacio PCA

Interpretación: La Gráfica 9 proyecta los clusters identificados en el espacio de las dos primeras componentes principales, facilitando la visualización de su separación espacial. Se observa que los clusters se distribuyen de manera diferenciada en este espacio bidimensional: algunos clusters se concentran en regiones específicas (lo que indica homogeneidad interna), mientras que otros muestran mayor dispersión. La superposición parcial entre algunos clusters sugiere que las fronteras entre ciertos grupos no son completamente nítidas, lo cual es esperado en datos continuos. Esta visualización confirma que el método de clustering ha identificado patrones significativos en los datos, agrupando viviendas con características similares en términos de precio, área, y servicios.


7 Análisis de Correspondencias

7.1 Análisis 1: Zona vs Estrato

7.1.1 Tabla de contingencia

table1 <- table(viviendaSNA$zona, viviendaSNA$estrato)
table1
##               
##                   3    4    5    6
##   Zona Centro    33    3    0    0
##   Zona Norte    141  184  482   79
##   Zona Oeste     19   51  181  502
##   Zona Oriente   94    2    1    0
##   Zona Sur      147  973 1195  721

Interpretación: La tabla de contingencia cruzada entre zona y estrato muestra la distribución conjunta de estas dos variables categóricas. Permite identificar si existen concentraciones de ciertos estratos en zonas específicas.

7.1.2 Prueba de independencia Chi-cuadrado

chisq.test(table1)
## 
##  Pearson's Chi-squared test
## 
## data:  table1
## X-squared = 2172.8, df = 12, p-value < 2.2e-16

Interpretación: La prueba Chi-cuadrado evalúa la hipótesis nula de independencia entre las variables zona y estrato. Un p-valor significativamente bajo (< 0.05) indicaría que existe una asociación estadísticamente significativa entre la zona geográfica y el estrato socioeconómico, es decir, que ciertas zonas tienden a tener concentraciones específicas de estratos.

7.1.3 Mapa perceptual

library(FactoMineR)
library(factoextra)
library(gridExtra)
resultados_ac1 <- CA(table1, graph = FALSE)

fviz_ca_biplot(resultados_ac1, repel = TRUE) +
  labs(title = "Gráfica 10. Análisis de Correspondencias: Zona vs Estrato") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 10. Análisis de Correspondencias: Zona vs Estrato

Gráfica 10. Análisis de Correspondencias: Zona vs Estrato

Interpretación: La Gráfica 10 muestra el mapa perceptual del Análisis de Correspondencias entre zonas y estratos. Las categorías que aparecen próximas entre sí tienen perfiles similares de asociación. Zonas cercanas a estratos específicos indican mayor prevalencia de ese estrato en esa zona. La distancia al origen refleja cuán atípica es una categoría respecto al perfil promedio. Este análisis permite identificar patrones de segregación socioeconómica espacial: por ejemplo, si zonas norte se asocian con estratos altos y zonas sur con estratos bajos, esto se reflejaría en posiciones opuestas en el gráfico.

7.2 Análisis 2: Estrato vs Zona

7.2.1 Tabla de contingencia

table2 <- table(viviendaSNA$estrato, viviendaSNA$zona)
table2
##    
##     Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
##   3          33        141         19           94      147
##   4           3        184         51            2      973
##   5           0        482        181            1     1195
##   6           0         79        502            0      721

7.2.2 Prueba Chi-cuadrado

chisq.test(table2)
## 
##  Pearson's Chi-squared test
## 
## data:  table2
## X-squared = 2172.8, df = 12, p-value < 2.2e-16

7.2.3 Visualización

resultados_ac2 <- CA(table2, graph = FALSE)

fviz_ca_biplot(resultados_ac2, repel = TRUE) +
  labs(title = "Gráfica 11. Análisis de Correspondencias: Estrato vs Zona") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 11. Análisis de Correspondencias: Estrato vs Zona

Gráfica 11. Análisis de Correspondencias: Estrato vs Zona

Interpretación: La Gráfica 11 presenta el mismo análisis que la Gráfica 10 pero con las filas y columnas invertidas, lo que puede facilitar una interpretación complementaria. La estructura de asociación es la misma, pero la perspectiva visual puede revelar matices adicionales sobre cómo los estratos se distribuyen geográficamente.

7.3 Análisis 3: Zona vs Tipo de Vivienda

7.3.1 Tabla de contingencia

table3 <- table(viviendaSNA$zona, viviendaSNA$tipo)
table3
##               
##                Apartamento Casa
##   Zona Centro            4   32
##   Zona Norte           632  254
##   Zona Oeste           669   84
##   Zona Oriente          17   80
##   Zona Sur            1860 1176

7.3.2 Prueba Chi-cuadrado

chisq.test(table3)
## 
##  Pearson's Chi-squared test
## 
## data:  table3
## X-squared = 367.47, df = 4, p-value < 2.2e-16

Interpretación: La prueba Chi-cuadrado entre zona y tipo de vivienda permite determinar si existe asociación significativa entre la ubicación geográfica y el tipo de propiedad (casa, apartamento, etc.). Un resultado significativo indicaría que ciertas zonas tienen predominancia de tipos específicos de vivienda.

7.4 Análisis 4: Estrato vs Barrio

7.4.1 Preparación de datos

table4 <- table(viviendaSNA$estrato, viviendaSNA$barrio)

# Filtrar barrios con más viviendas (al menos 30)
table4_filtrado <- table4[, colSums(table4) >= 30]
table4_filtrado
##    
##     aguacatal arboledas caney capri ciudad 2000 ciudad bochalema ciudad jardín
##   3         6         0     1     0           2                0             0
##   4        10         0    33     7          53               22             4
##   5         1         1     7    33           1               13            47
##   6        35        30     0     0           0                0           322
##    
##     cristales cuarto de legua el bosque el caney el ingenio el lido el limonar
##   3         0               0         0        8          0       1          0
##   4         1               3        11      104          7      32         24
##   5        13              26        25       21        113       5         57
##   6        34               1         1        0         28       0          2
##    
##     el peñon el refugio juanamb√∫ la flora la hacienda los cristales
##   3        0          1         0        1           1             0
##   4        1         67         0       19          22             3
##   5       18         19         7      241         107            33
##   6       16          0        23        4           1            80
##    
##     mayapan las vegas normandía nueva tequendama pance parcelaciones pance
##   3                 0         1                1     0                   0
##   4                 1         0               12     0                   0
##   5                29        19               37    12                   0
##   6                 1        84                0   263                  39
##    
##     prados del norte quintas de don santa anita santa isabel santa monica
##   3                2              0           0            0            0
##   4               41              5          14           14            1
##   5               27             51          20           26           16
##   6                0              1           0            5           23
##    
##     santa rita santa teresita urbanización la flora valle del lili versalles
##   3          0              0                     0              1         0
##   4          2              2                     3            330         9
##   5          3             17                    44            303        39
##   6         30            143                     0              1         0
##    
##     zona sur
##   3        7
##   4       16
##   5       18
##   6       10

Interpretación: Para facilitar el análisis y evitar barrios con frecuencias muy bajas que podrían distorsionar los resultados, se filtran solo aquellos barrios con al menos 30 viviendas registradas. Esto mejora la estabilidad estadística del análisis.

7.4.2 Prueba Chi-cuadrado

chisq.test(table4)
## 
##  Pearson's Chi-squared test
## 
## data:  table4
## X-squared = 8732.6, df = 816, p-value < 2.2e-16

Interpretación: La prueba Chi-cuadrado evalúa si existe asociación entre estrato y barrio. Dado el gran número de barrios, es altamente probable obtener un resultado significativo, lo que confirmaría que diferentes barrios tienen composiciones socioeconómicas distintivas.

7.4.3 Análisis de Correspondencias con Top 15 barrios

n_top <- 15
top_barrios <- names(sort(colSums(table4), decreasing = TRUE)[1:n_top])
table4_reducida <- table4[, top_barrios]
resultados_ac3 <- CA(table4_reducida, graph = FALSE)

fviz_ca_biplot(resultados_ac3, 
               repel = TRUE,
               col.row = "blue",
               col.col = "red",
               title = "Gráfica 12. Análisis de Correspondencias: Estratos vs Barrios (Top 15)") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14))
Gráfica 12. Análisis de Correspondencias: Estratos vs Barrios (Top 15)

Gráfica 12. Análisis de Correspondencias: Estratos vs Barrios (Top 15)

Interpretación: La Gráfica 12 muestra el mapa perceptual del Análisis de Correspondencias entre estratos (en azul) y los 15 barrios con mayor número de viviendas (en rojo). Los barrios posicionados cerca de estratos específicos indican una concentración característica de ese nivel socioeconómico. Por ejemplo, barrios próximos a “estrato 6” en el gráfico tendrían predominancia de viviendas de alto nivel, mientras que barrios cercanos a “estrato 2” serían mayoritariamente populares. La distancia entre puntos refleja disimilaridad en perfiles: barrios alejados entre sí tienen composiciones socioeconómicas muy diferentes. Este análisis es particularmente útil para identificar patrones de segregación residencial urbana y caracterizar socioeconómicamente diferentes sectores de la ciudad.

7.4.4 Análisis dimensional separado

p1 <- fviz_ca_row(resultados_ac3, repel = TRUE, 
                  col.row = "cos2", 
                  gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")) +
  labs(title = "Gráfica 13. Estratos en Espacio de Correspondencias") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 12))

p2 <- fviz_ca_col(resultados_ac3, repel = TRUE,
                  col.col = "contrib", 
                  gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")) +
  labs(title = "Gráfica 14. Barrios en Espacio de Correspondencias") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 12))

grid.arrange(p1, p2, ncol = 2)
Gráficas 13 y 14. Análisis de Correspondencias: Dimensiones Separadas

Gráficas 13 y 14. Análisis de Correspondencias: Dimensiones Separadas

Interpretación: Las Gráficas 13 y 14 descomponen el análisis anterior mostrando por separado la proyección de estratos (izquierda) y barrios (derecha) en el espacio de correspondencias. En la Gráfica 13, el color indica la calidad de representación (cos²) de cada estrato: tonos rojizos señalan estratos bien representados en este espacio bidimensional. En la Gráfica 14, el color refleja la contribución de cada barrio a las dimensiones principales: barrios en rojo son los que más influyen en la estructura del análisis. Esta visualización separada facilita identificar qué estratos y qué barrios son los principales responsables de los patrones observados, y cuáles están mejor o peor representados en el análisis.

7.4.5 Resumen estadístico del análisis

summary(resultados_ac3)
## 
## Call:
## CA(X = table4_reducida, graph = FALSE) 
## 
## The chi square of independence between the two variables is equal to 2899.741 (p-value =  0 ).
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3
## Variance               0.779   0.279   0.018
## % of var.             72.418  25.884   1.699
## Cumulative % of var.  72.418  98.301 100.000
## 
## Rows
##                  Iner*1000     Dim.1     ctr    cos2     Dim.2     ctr    cos2
## 3              |    31.566 |   0.851   0.586   0.145 |   1.232   3.439   0.303
## 4              |   322.205 |   0.879  25.033   0.605 |   0.707  45.370   0.392
## 5              |   222.803 |   0.467  11.080   0.387 |  -0.587  48.982   0.612
## 6              |   499.396 |  -1.196  63.301   0.988 |   0.134   2.209   0.012
##                    Dim.3     ctr    cos2  
## 3              |   1.662  95.345   0.552 |
## 4              |  -0.056   4.327   0.002 |
## 5              |   0.012   0.309   0.000 |
## 6              |  -0.003   0.019   0.000 |
## 
## Columns (the 10 first)
##                  Iner*1000     Dim.1     ctr    cos2     Dim.2     ctr    cos2
## valle del lili |   151.678 |   0.769  17.880   0.919 |   0.170   2.443   0.045
## ciudad jardín  |   166.421 |  -1.093  21.202   0.993 |   0.093   0.428   0.007
## pance          |   169.196 |  -1.273  21.219   0.977 |   0.194   1.373   0.023
## la flora       |   109.176 |   0.535   3.618   0.258 |  -0.902  28.750   0.733
## santa teresita |    77.471 |  -1.128   9.823   0.988 |   0.123   0.328   0.012
## el ingenio     |    32.056 |   0.194   0.266   0.065 |  -0.738  10.727   0.932
## el caney       |   101.478 |   0.920   5.358   0.411 |   1.013  18.173   0.499
## la hacienda    |    39.106 |   0.596   2.216   0.442 |  -0.663   7.679   0.547
## los cristales  |    25.250 |  -0.758   3.177   0.980 |  -0.107   0.177   0.020
## normandía      |    38.257 |  -0.989   4.841   0.986 |   0.024   0.008   0.001
##                    Dim.3     ctr    cos2  
## valle del lili |  -0.154  30.404   0.037 |
## ciudad jardín  |  -0.013   0.135   0.000 |
## pance          |  -0.018   0.188   0.000 |
## la flora       |   0.097   5.034   0.008 |
## santa teresita |  -0.016   0.088   0.000 |
## el ingenio     |   0.044   0.569   0.003 |
## el caney       |   0.430  49.895   0.090 |
## la hacienda    |   0.096   2.469   0.012 |
## los cristales  |  -0.002   0.001   0.000 |
## normandía      |   0.116   2.822   0.013 |

Interpretación: El resumen estadístico del Análisis de Correspondencias proporciona información cuantitativa sobre la varianza explicada por cada dimensión, la contribución de cada categoría a las dimensiones, y la calidad de representación. Estos valores numéricos complementan las visualizaciones gráficas y permiten una interpretación más precisa de los resultados.


8 Conclusiones Generales

Este análisis integral de datos inmobiliarios ha permitido identificar patrones relevantes en el mercado de vivienda:

  1. Estructura de precios: El mercado muestra clara segmentación, con predominancia de viviendas económicas y de clase media, y un segmento premium diferenciado.

  2. Factores determinantes: El área construida y la ubicación (zona) son los principales determinantes del precio, seguidos por amenidades (parqueaderos, baños).

  3. Segmentación geográfica: Existe clara asociación entre zona geográfica y nivel socioeconómico (estrato), evidenciando patrones de segregación residencial.

  4. Tipología de viviendas: El análisis de conglomerados identificó un segmento mayoritario de viviendas estándar (92%) y nichos especializados (8%) con características distintivas.

  5. Reducción dimensional: El PCA demostró que 5 variables originales pueden representarse efectivamente con 2 componentes principales que retienen 83% de la información.