1 Introducción

El presente informe analiza el mercado de viviendas urbanas en una gran ciudad mediante técnicas estadísticas multivariadas orientadas a la toma de decisiones. Se emplea un conjunto de datos obtenido por web scraping, disponible en el paquete paqueteMODELOS, que incluye características físicas, económicas y de localización de los inmuebles publicados durante el último trimestre.

El análisis busca identificar patrones de comportamiento, relaciones entre variables y segmentaciones del mercado, utilizando herramientas como Análisis de Componentes Principales (ACP), Clustering y Análisis de Correspondencia (AC), complementadas con visualizaciones exploratorias y geográficas.

Los resultados proporcionan evidencia para apoyar decisiones sobre inversión inmobiliaria, valoración de propiedades y estrategias comerciales, ofreciendo una comprensión integral del mercado urbano de vivienda.


2 Instalación y carga de librerías

Se cargan las librerías necesarias para la manipulación de datos, análisis multivariado, clustering y visualización gráfica. Si algún paquete no está instalado, se instala automáticamente para garantizar que el análisis se pueda ejecutar correctamente.

3 Limpieza y Preparación de Datos

Antes del análisis estadístico, se realizó una depuración de los datos para garantizar su calidad y consistencia. Se identificaron y trataron valores faltantes, se verificaron los tipos de variables y se aplicaron las transformaciones necesarias para asegurar su correcta representación.

Además, las variables numéricas seleccionadas fueron estandarizadas, considerando que las técnicas multivariadas utilizadas dependen de varianzas y medidas de distancia, por lo que diferencias de escala podrían afectar los resultados.

Este proceso asegura que la base de datos esté adecuada para aplicar los métodos estadísticos y obtener resultados confiables.

data("vivienda", package = "paqueteMODELOS")

vivienda_clean <- vivienda %>%
  filter(
    !if_any(c(preciom, areaconst, parqueaderos, banios, habitaciones), is.na)
  ) %>%
  mutate(
    zona = as.factor(zona),
    tipo = as.factor(tipo),
    piso = as.numeric(piso)
  )

summary(vivienda_clean)
##        id                 zona           piso           estrato    
##  Min.   :   1   Zona Centro :  64   Min.   : 1.000   Min.   :3.00  
##  1st Qu.:2474   Zona Norte  :1287   1st Qu.: 2.000   1st Qu.:4.00  
##  Median :4474   Zona Oeste  :1098   Median : 3.000   Median :5.00  
##  Mean   :4413   Zona Oriente: 163   Mean   : 3.886   Mean   :4.83  
##  3rd Qu.:6428   Zona Sur    :4105   3rd Qu.: 5.000   3rd Qu.:6.00  
##  Max.   :8319                       Max.   :12.000   Max.   :6.00  
##                                     NA's   :1909                   
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 248.0   1st Qu.:  86.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 355.0   Median : 130.0   Median : 2.000   Median : 3.000  
##  Mean   : 468.9   Mean   : 181.1   Mean   : 1.835   Mean   : 3.255  
##  3rd Qu.: 580.0   3rd Qu.: 233.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
##                                                                     
##   habitaciones             tipo         barrio             longitud     
##  Min.   : 0.000   Apartamento:4231   Length:6717        Min.   :-76.59  
##  1st Qu.: 3.000   Casa       :2486   Class :character   1st Qu.:-76.54  
##  Median : 3.000                      Mode  :character   Median :-76.53  
##  Mean   : 3.611                                         Mean   :-76.53  
##  3rd Qu.: 4.000                                         3rd Qu.:-76.52  
##  Max.   :10.000                                         Max.   :-76.46  
##                                                                         
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.379  
##  Median :3.412  
##  Mean   :3.415  
##  3rd Qu.:3.451  
##  Max.   :3.498  
## 
vars_num <- vivienda_clean %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones)

outliers <- sapply(vars_num, function(x) {
  Q1 <- quantile(x, 0.25)
  Q3 <- quantile(x, 0.75)
  IQR <- Q3 - Q1
  sum(x < (Q1 - 1.5 * IQR) | x > (Q3 + 1.5 * IQR))
})

outliers
##      preciom    areaconst parqueaderos       banios habitaciones 
##          497          321          567           53          614

La tabla anterior presenta un resumen estadístico de las variables clave después del proceso de limpieza. Este análisis permite identificar rangos, medidas de tendencia central y posibles valores atípicos, confirmando que los datos se encuentran en condiciones adecuadas para la aplicación de técnicas de análisis multivariado.

4 Descripción del dataset

dim(vivienda_clean)
## [1] 6717   13
str(vivienda_clean)
## tibble [6,717 × 13] (S3: tbl_df/tbl/data.frame)
##  $ id          : num [1:6717] 1147 1169 1350 5992 1212 ...
##  $ zona        : Factor w/ 5 levels "Zona Centro",..: 4 4 4 5 2 2 2 2 2 2 ...
##  $ piso        : num [1:6717] NA NA NA 2 1 1 1 1 2 2 ...
##  $ estrato     : num [1:6717] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:6717] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:6717] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:6717] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:6717] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:6717] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : Factor w/ 2 levels "Apartamento",..: 2 2 2 2 1 1 1 1 2 2 ...
##  $ barrio      : chr [1:6717] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:6717] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:6717] 3.43 3.43 3.44 3.44 3.46 ...
cat("El dataset contiene", 
    nrow(vivienda_clean), 
    "observaciones y", 
    ncol(vivienda_clean), 
    "variables.")
## El dataset contiene 6717 observaciones y 13 variables.

Para los análisis multivariados se utilizaron únicamente observaciones completas en las variables seleccionadas, con el fin de evitar sesgos derivados de valores faltantes y garantizar la consistencia de los resultados.

El conjunto de datos incluye características estructurales, económicas y de localización de las viviendas, constituyendo un estudio de tipo transversal basado en información recolectada mediante técnicas de web scraping.

4.1 Fórmulas matemáticas clave

A continuación se presentan las fórmulas esenciales utilizadas en este análisis:

1. Correlación de Pearson:

\[ r_{XY} = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})} {\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2 \sum_{i=1}^{n} (Y_i - \bar{Y})^2}} \]

2. Análisis de Componentes Principales (ACP):

\[ PC_1 = a_{11} X_1 + a_{12} X_2 + \dots + a_{1p} X_p \]

\[ PC_2 = a_{21} X_1 + a_{22} X_2 + \dots + a_{2p} X_p \]

3. Clustering K-means (Función objetivo):

\[ \min_{C} \sum_{k=1}^{K} \sum_{x_i \in C_k} \| x_i - \mu_k \|^2 \]

4. Análisis de Correspondencia (AC):

\[ N = (n_{ij}), \quad p_{ij} = \frac{n_{ij}}{n}, \quad s_{ij} = \frac{p_{ij} - p_{i\cdot} p_{\cdot j}}{\sqrt{p_{i\cdot} p_{\cdot j}}}, \quad S = U \Sigma V^T \]

5 Metodología

Se aplicó un enfoque cuantitativo de aprendizaje no supervisado para explorar patrones y estructuras subyacentes en los datos, sin una variable respuesta definida. Las técnicas empleadas fueron:

  • Análisis de Componentes Principales (ACP): reduce la dimensionalidad de las variables numéricas, tras estandarización, evitando efectos de escala.
  • Clustering K-means: identifica grupos homogéneos de propiedades según sus características estructurales y económicas.
  • Análisis de Correspondencia (AC): explora asociaciones entre variables categóricas.

Todo el procesamiento y análisis se realizó en R, garantizando la reproducibilidad de los resultados.

6 Análisis Exploratorio de Datos (EDA)

En esta etapa se realiza una exploración inicial de los datos con el fin de comprender su distribución, rangos y características principales. Se calcularon estadísticas descriptivas, se evaluaron correlaciones entre variables y se identificaron valores atípicos, lo que permitió reconocer patrones relevantes y seleccionar las variables más adecuadas para el Análisis de Componentes Principales (ACP) y el análisis de conglomerados.


6.1 Estadísticas descriptivas y correlaciones

Se presentan medidas básicas de resumen de las variables numéricas y se evalúan sus relaciones mediante la correlación de Pearson, lo que permite entender qué variables tienden a variar conjuntamente.

6.2 Estadísticas descriptivas

Incluye media, mediana, mínimo, máximo y cuartiles para las variables clave: preciom, areaconst, banios, habitaciones y parqueaderos.

tabla_resumen <- vivienda_clean %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones) %>%
  summary()

knitr::kable(tabla_resumen, digits = 2, caption = "**Tabla 1**: Estadísticas descriptivas de variables clave")
Tabla 1: Estadísticas descriptivas de variables clave
preciom areaconst parqueaderos banios habitaciones
Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000 Min. : 0.000
1st Qu.: 248.0 1st Qu.: 86.0 1st Qu.: 1.000 1st Qu.: 2.000 1st Qu.: 3.000
Median : 355.0 Median : 130.0 Median : 2.000 Median : 3.000 Median : 3.000
Mean : 468.9 Mean : 181.1 Mean : 1.835 Mean : 3.255 Mean : 3.611
3rd Qu.: 580.0 3rd Qu.: 233.0 3rd Qu.: 2.000 3rd Qu.: 4.000 3rd Qu.: 4.000
Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000 Max. :10.000

Interpretación:

  • La mayoría de las viviendas presentan entre tres y cuatro habitaciones, con precios concentrados alrededor de los 355 millones.
  • Los valores extremos identificados serán considerados en los análisis posteriores para evitar distorsiones en los componentes principales y en la formación de clusters.

6.3 Correlaciones entre variables numéricas

Se calculó la matriz de correlaciones entre las variables numéricas continuas para identificar relaciones lineales y posibles redundancias, lo que constituye un insumo previo para la aplicación de técnicas multivariadas.

La correlación de Pearson entre dos variables \(X\) y \(Y\) se calcula como:

\[ r_{XY} = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})} {\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2 \sum_{i=1}^{n} (Y_i - \bar{Y})^2}} \]

donde:

  • \(X_i, Y_i\) = valores de la observación \(i\)
  • \(\bar{X}, \bar{Y}\) = medias de las variables \(X\) y \(Y\)
  • \(n\) = número de observaciones
num_vars <- vivienda_clean %>% select(preciom, areaconst, parqueaderos, banios, habitaciones)

corrplot(round(cor(num_vars), 2), method = "color", type = "upper",
         addCoef.col = "black", tl.col = "black", number.cex = 0.8,
         diag = FALSE)

Interpretación:

  • preciom y areaconst muestran una correlación fuerte (>0.7), indicando que el tamaño de la propiedad es uno de los principales determinantes del precio.
  • banios, habitaciones y parqueaderos presentan correlaciones moderadas, aportando información adicional sobre las características estructurales de las viviendas.
  • estrato no se incluye en este análisis exploratorio por su naturaleza ordinal y baja correlación con otras variables.

Uso de los resultados de la correlación:

  • Debido a la alta correlación entre preciom y areaconst, se confirma que estas variables son determinantes para diferenciar propiedades, y se priorizan en el ACP y el clustering, ya que aportan la mayor parte de la variabilidad.
  • Variables con correlaciones moderadas (banios, habitaciones, parqueaderos) se incluyen en el ACP y clustering como información complementaria.
  • Variables poco correlacionadas o redundantes (estrato) no se incluyen en los análisis de reducción de dimensionalidad y segmentación para evitar distorsiones.

6.4 Histogramas de variables numéricas

vivienda_clean %>%
  select(preciom, areaconst, banios, habitaciones, parqueaderos) %>%
  gather(key = "variable", value = "valor") %>%
  ggplot(aes(x = valor)) +
  geom_histogram(fill = "steelblue", color = "black", bins = 30, alpha = 0.7) +
  facet_wrap(~variable, scales = "free") +
  labs(
    title = "Distribución de variables numéricas",
    x = "Valor",
    y = "Frecuencia"
  ) +
  scale_x_continuous(labels = comma) +
  theme_minimal()

Utilidad de los histogramas:

  • ACP: Identificar variables muy sesgadas o con poca variabilidad que podrían influir en los componentes principales.

  • Clustering: Verificar que las características reflejen correctamente la heterogeneidad del mercado y no estén dominadas por valores extremos.

6.5 Boxplots por variable para detectar outliers

Los boxplots permiten identificar valores extremos que podrían afectar los análisis multivariados.

vivienda_clean %>%
  select(preciom, areaconst, banios, habitaciones, parqueaderos) %>%
  gather(key = "variable", value = "valor") %>%
  ggplot(aes(x = variable, y = valor)) +
  geom_boxplot(fill = "orange", alpha = 0.6) +
  scale_y_continuous(labels = comma) +  # Mejora visual de valores grandes
  labs(
    title = "Boxplots de variables numéricas",
    x = "Variable",
    y = "Valor"
  ) +
  theme_minimal()

Interpretación adicional:

  • Las distribuciones no son perfectamente simétricas, indicando presencia de sesgos en precio y área.
  • Los outliers detectados reflejan propiedades excepcionales (muy grandes o muy costosas) y serán tratados con cautela en ACP y clustering.

6.6 Justificación del Análisis de Componentes Principales (ACP)

El ACP transforma un conjunto de variables correlacionadas en componentes ortogonales que capturan la mayor varianza posible. Esto permite reducir redundancias, simplificar la interpretación de relaciones complejas entre precio, área y características estructurales, y facilitar la identificación de factores dominantes del mercado inmobiliario.

7 Análisis de Componentes Principales (ACP)

El ACP reduce la dimensionalidad de variables numéricas, identificando cuáles influyen más en la variabilidad del mercado inmobiliario.
Cada componente principal es una combinación lineal de las variables originales:

\[ PC_1 = a_{11} X_1 + a_{12} X_2 + ... + a_{1p} X_p \]

\[ PC_2 = a_{21} X_1 + a_{22} X_2 + ... + a_{2p} X_p \]

donde los coeficientes \(a_{ij}\) maximizan la varianza explicada por cada componente.

Interpretación práctica: PC1 y PC2 resumen la mayor parte de la información, destacando variables como preciom, areaconst y número de habitaciones.

vars_num <- vivienda_clean %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones) %>%
  na.omit()

res_pca <- PCA(vars_num, scale.unit = TRUE, graph = FALSE)

La estandarización asegura que todas las variables contribuyan de manera equilibrada al análisis, dado que ACP y clustering dependen de varianza y distancias.

7.1 Varianza explicada (Scree Plot)

El gráfico de varianza explicada muestra cuánto de la variabilidad total del conjunto de datos captura cada componente principal:

  • Los números 1, 2, 3, 4, 5 en el eje X corresponden a los componentes principales (PC1, PC2, …), no a las variables individuales.

  • Cada componente es una combinación lineal de todas las variables originales, diseñada para capturar la máxima varianza posible.

  • La altura de cada barra indica el porcentaje de varianza explicada por ese componente.

fviz_eig(res_pca, addlabels = TRUE, ylim = c(0, 60))

var_explicada <- res_pca$eig[1:2, "cumulative percentage of variance"]
cat("PC1 y PC2 explican un", round(var_explicada[2],1), "% de la varianza total.")
## PC1 y PC2 explican un 82.3 % de la varianza total.

En este análisis, el primer componente principal (PC1) explica la mayor parte de la variabilidad del mercado inmobiliario, mientras que los componentes siguientes aportan información adicional pero menor. Esto indica que la mayoría de la información puede resumirse en los primeros componentes

7.2 Individuos PCA

El gráfico de individuos muestra cómo se distribuyen las propiedades según las componentes principales. Cada punto representa una propiedad, y los colores indican el cluster asignado, permitiendo visualizar similitudes y diferencias entre grupos. Esta representación ayuda a identificar cómo se agrupan las propiedades según sus características principales.

vars_num <- vivienda_clean %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones) %>%
  na.omit()

res_pca <- PCA(vars_num, scale.unit = TRUE, graph = FALSE)

fviz_pca_ind(
  res_pca,
  geom.ind = "point",
  label = "none",          
  col.ind = "blue"         
) +
  theme_minimal() +
  labs(title = "Individuos - PC")

7.3 Variables PCA

El gráfico de variables permite identificar cuáles características contribuyen más a la variabilidad del mercado. Así se puede resumir la información de manera eficiente y comprender la importancia relativa de cada variable, como el precio, el área construida, el número de habitaciones, banios y parqueaderos.

fviz_pca_var(
  res_pca,
  col.var = "contrib",                    
  gradient.cols = c("blue","yellow","red"),
  repel = TRUE
) +
  theme_minimal() +
  labs(title = "Variables - PCA")

Interpretación:

Los resultados del ACP indican que las variables preciom y areaconst concentran la mayor proporción de la variabilidad del mercado inmobiliario, lo que sugiere que el tamaño de la propiedad y su valor económico son los factores más determinantes para diferenciar las viviendas. Variables como el número de habitaciones, banios y parqueaderos presentan contribuciones secundarias, asociadas principalmente al tamaño de la propiedad.

7.4 Clustering (K-means)

El análisis de conglomerados K-means agrupa observaciones en clusters homogéneos minimizando la distancia euclideana respecto a los centroides. La función objetivo es:

\[ \min_{C} \sum_{k=1}^{K} \sum_{x_i \in C_k} \| x_i - \mu_k \|^2 \]

donde \(C_k\) es el cluster \(k\), \(x_i\) la observación \(i\) y \(\mu_k\) el centroide del cluster \(k\).

Se utilizan las variables numéricas preciom, areaconst, parqueaderos, banios y habitaciones, previamente centradas y escaladas (media 0, varianza 1) para evitar que diferencias de escala afecten la formación de los clusters. La segmentación se basa solo en características estructurales y económicas; variables categóricas como el estrato se usan después para caracterizar e interpretar los grupos obtenidos.

8 Análisis de Conglomerados (Clustering)

El clustering agrupa propiedades con características similares en segmentos homogéneos según precio, área, número de habitaciones, banios y parqueaderos. El estrato socioeconómico se usa posteriormente para caracterizar los clusters, pero no interviene en su formación. Las variables se estandarizan previamente (media 0, varianza 1) para garantizar que todas contribuyan de manera equilibrada a la formación de los clusters.

8.1 Preparación de datos y estandarización

Selecciona las variables numéricas que se usarán para formar los clusters. Esto asegura que solo las características relevantes (preciom, areaconst, banios, habitaciones, parqueaderos) entren al análisis.

vars_num_complete <- vivienda_clean %>% 
  select(preciom, areaconst, parqueaderos, banios, habitaciones)

complete_cases <- complete.cases(vars_num_complete)
data_scaled <- as.data.frame(scale(vars_num_complete[complete_cases, ]))

8.2 Determinación del número óptimo de clusters

Se emplea el método del codo (WSS) para evaluar la variabilidad interna de los clusters y determinar el valor de 𝑘más adecuado.

fviz_nbclust(data_scaled, kmeans, method = "wss") +
  theme_minimal()

Interpretación El gráfico evidencia un punto de inflexión en \(k = 4\), por lo que se adopta esta partición como estructura de segmentación del mercado inmobiliario.

8.3 Aplicación del algoritmo K-means

El algoritmo K-means busca minimizar la suma de cuadrados intra-cluster, agrupando observaciones en función de la distancia euclidiana respecto a los centroides estimados.

set.seed(123)
km_res <- kmeans(data_scaled, centers = 4, nstart = 25)

vivienda_clean$cluster <- NA
vivienda_clean$cluster[complete_cases] <- as.factor(km_res$cluster)

fviz_cluster(
  km_res,
  data = data_scaled,
  palette = "Dark2",
  geom = "point",
  ellipse.type = "convex",
  ggtheme = theme_minimal()
)

# Validación Silhouette
sil <- silhouette(km_res$cluster, dist(data_scaled))
fviz_silhouette(sil) + theme_minimal()
##   cluster size ave.sil.width
## 1       1 3495          0.53
## 2       2  469          0.19
## 3       3 2022          0.23
## 4       4  731          0.12

8.4 Interpretación de resultados

El análisis de conglomerados permitió identificar cuatro segmentos claramente diferenciados dentro del mercado inmobiliario:

  1. Económico: propiedades con menor área construida y precios bajos, que posteriormente tienden a corresponder con estratos socioeconómicos bajos.

  2. Intermedio bajo: viviendas con valores promedio de tamaño y precio, que suelen asociarse con estratos medios.

  3. Intermedio alto: propiedades de mayor tamaño y precios medio-altos, generalmente vinculadas a estratos medio-altos.

  4. Premium: viviendas con grandes áreas construidas y precios elevados, que tienden a concentrarse en estratos altos.

La segmentación resultante evidencia una estructura coherente del mercado inmobiliario, donde el precio y el tamaño de la propiedad constituyen los principales ejes de diferenciación. La correspondencia con el estrato socioeconómico refuerza la consistencia de los grupos identificados y permite diseñar estrategias diferenciadas de análisis, comercialización y valoración de propiedades.

9 Análisis de Correspondencia (AC)

El Análisis de Correspondencia (AC) permite explorar asociaciones entre variables categóricas mediante tablas de contingencia bidimensionales. En este estudio se analiza la relación entre tipo de vivienda y zona.

Variables categóricas adicionales como estrato y barrio no se incluyen:

  • Estrato socioeconómico → ordinal, su inclusión podría inducir interpretaciones ambiguas.
  • Barrio → alta cardinalidad, generando demasiados ejes factoriales difíciles de interpretar.

Se prioriza la interpretabilidad y la utilidad práctica de los resultados para el análisis del mercado inmobiliario.


La tabla de contingencia se denota como:

\[ N = (n_{ij}), \quad p_{ij} = \frac{n_{ij}}{n} \]

donde \(p_{ij}\) son las proporciones relativas.
La matriz se centra y escala para eliminar efectos de márgenes:

\[ s_{ij} = \frac{p_{ij} - p_{i\cdot} p_{\cdot j}}{\sqrt{p_{i\cdot} p_{\cdot j}}} \]

Finalmente, se aplica la descomposición en valores singulares (SVD):

\[ S = U \Sigma V^T \]

9.1 Tabla de contingencia: Tipo de Vivienda vs Zona

# Crear tabla de contingencia limpia
tab_tipo_zona <- table(vivienda_clean$tipo, vivienda_clean$zona)
tab_tipo_zona <- tab_tipo_zona[rowSums(tab_tipo_zona) > 0,
                               colSums(tab_tipo_zona) > 0]

# Mostrar tabla
knitr::kable(
  tab_tipo_zona,
  caption = "**Tabla 2:** Distribución de Tipo de Vivienda por Zona",
  digits = 0
)
Tabla 2: Distribución de Tipo de Vivienda por Zona
Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
Apartamento 10 852 966 22 2381
Casa 54 435 132 141 1724
# Análisis de Correspondencia con biplot o gráfico alternativo
if(nrow(tab_tipo_zona) > 1 & ncol(tab_tipo_zona) > 1){
  res_ca <- CA(tab_tipo_zona, graph = FALSE)
  
  tryCatch({
    fviz_ca_biplot(res_ca,
               repel = TRUE,
               label = "all",      # "row" para filas, "col" para columnas
               col.row = "blue",
               col.col = "red") +
  theme_minimal()

  }, error = function(e){
    message("Error en biplot, se muestra gráfico de barras alternativo")
    barplot(tab_tipo_zona, beside = TRUE,
            col = rainbow(ncol(tab_tipo_zona)),
            main = "Distribución de Tipo de Vivienda por Zona",
            xlab = "Tipo de vivienda",
            ylab = "Frecuencia",
            las = 2)
  })
  
} else {
  message("No hay suficientes categorías para AC, mostrando gráfico de barras")
  barplot(tab_tipo_zona, beside = TRUE,
          col = rainbow(ncol(tab_tipo_zona)),
          main = "Distribución de Tipo de Vivienda por Zona",
          xlab = "Tipo de vivienda",
          ylab = "Frecuencia",
          las = 2)
}

La tabla confirma las tendencias observadas en el biplot: Se observa una mayor frecuencia relativa de casas en zonas norte y centro, apartamentos en zonas sur y occidente, reflejando preferencias del mercado según ubicación

El gráfico se utiliza como complemento al biplot de Análisis de Correspondencia, especialmente útil si el biplot no se puede generar debido a dimensiones insuficientes o datos faltantes

Interpretación:

“Estos resultados complementan los hallazgos del ACP y del clustering, mostrando que las casas se concentran principalmente en zonas norte y centro, mientras que los apartamentos predominan en zonas sur y occidente, ofreciendo una visión clara de la distribución y preferencias de tipo de vivienda según las zonas de la ciudad.”

10 Visualización Geográfica

Esta sección muestra la distribución espacial de las propiedades según los clusters obtenidos en el análisis de conglomerados.
La visualización permite identificar concentraciones de propiedades económicas, intermedias y premium en diferentes zonas de la ciudad, facilitando la planificación estratégica de inversiones y operaciones inmobiliarias.

# Preparar datos para el mapa y escalar tamaño según precio
vivienda_map <- vivienda_clean %>%
  filter(!is.na(latitud), !is.na(longitud), !is.na(cluster)) %>%
  mutate(
    cluster = as.factor(cluster),
    size_scaled = (preciom - min(preciom)) / (max(preciom) - min(preciom)) * 5 + 1
  )

# Graficar
ggplot(vivienda_map, aes(x = longitud, y = latitud)) +
  geom_point(aes(color = cluster, size = size_scaled), alpha = 0.6) +
  scale_color_brewer(palette = "Set1") +  # Funciona porque cluster es factor
  labs(
    title = "Distribución de propiedades por cluster y precio",
    x = "Longitud",
    y = "Latitud",
    color = "Cluster",
    size = "Precio (escalado)"
  ) +
  theme_minimal() +
  coord_fixed(ratio = 1.2)  # Mantiene proporción espacial

El mapa espacial muestra la concentración de propiedades según el cluster asignado y el nivel de precio. Se observa que las propiedades del cluster Premium tienden a concentrarse en determinadas zonas de la ciudad, mientras que los clusters Económicos presentan una distribución territorial diferente. Esta configuración espacial refuerza la consistencia interna de los resultados multivariados, al evidenciar patrones territoriales acordes con la segmentación identificada previamente mediante el ACP y el análisis de conglomerados.

10.1 Justificación de la Visualización Geográfica

La visualización espacial permite:

  • Identificar concentraciones de propiedades por cluster.

  • Detectar zonas con alta variabilidad de estrato o precio que representan oportunidades de inversión.

  • Relacionar resultados de ACP y clustering con la distribución real de propiedades en la ciudad.

  • Esto facilita decisiones estratégicas basadas en ubicación y segmentación del mercado.

11 Conclusiones y Recomendaciones

11.1 Conclusiones

  • Análisis de Componentes Principales (ACP):
    Las variables preciom y areaconst concentran la mayor proporción de la variabilidad, indicando que el tamaño y el valor económico de la propiedad son los factores más determinantes del mercado. Las variables banios, habitaciones y parqueaderos aportan información complementaria sobre equipamiento y capacidad habitacional.

  • Clustering (Segmentación de propiedades):
    Se identificaron 4 clusters diferenciados principalmente por precio y área construida:

    1. Económico: menor área y precio.
    2. Intermedio bajo: valores promedio de tamaño y precio.
    3. Intermedio alto: mayor tamaño y precios medio-altos.
    4. Premium: grandes áreas y precios elevados.
      Aunque el estrato no se incluyó en la formación de los clusters, existe correspondencia con niveles socioeconómicos, reforzando la coherencia de la segmentación.
  • Análisis de Correspondencia (AC):
    Se observan asociaciones claras entre tipo de vivienda y zonas:

    • Casas predominan en zonas norte y centro.
    • Apartamentos predominan en zonas sur y occidente.
      Los resultados reflejan tendencias de ocupación y demanda, aunque barrio no se incluyó por su alta cardinalidad.
  • Visualización Geográfica:
    La distribución espacial muestra concentraciones de propiedades premium en ciertas zonas, mientras que áreas con alta variabilidad de estrato presentan oportunidades de compra-venta con potencial de revalorización.


11.2 Recomendaciones

Área de acción Recomendación concreta
Inversión Priorizar adquisición de propiedades en Cluster 4, ubicadas en zonas con alta densidad de propiedades premium.
Marketing Dirigir campañas a Cluster 2 y 3, destacando precio y ubicación, para atraer clientes de estratos medio y medio-alto.
Operaciones Reasignar agentes a barrios con concentración de propiedades premium para maximizar eficiencia y oportunidades de alto valor.
Seguimiento y análisis Monitorear zonas con alta variabilidad de precio y estrato, anticipando cambios en la demanda.
Planificación estratégica Utilizar ACP y clustering para modelar escenarios de crecimiento y evaluar el impacto de nuevas construcciones o cambios en la oferta.

Síntesis final:
Los hallazgos del ACP, clustering y análisis de correspondencia ofrecen una visión integral: los clusters reflejan patrones de tamaño y precio, las preferencias de tipo de vivienda varían según zona y la visualización geográfica permite localizar oportunidades estratégicas. Esto permite diseñar decisiones coordinadas de inversión, marketing y gestión de propiedades, optimizando rentabilidad y posicionamiento en el mercado urbano.

12 Bibliografía

[1] D. Ortega Lenis, “Modelos Estadísticos para la toma de decisiones: Conceptos generales, Análisis de Componentes Principales, Análisis de Conglomerados y Análisis de Correspondencia,” Material de clase, Maestría/Especialización en Estadística, Pontificia Universidad Javeriana Cali, Colombia, 2025.

[2] G. James, D. Witten, T. Hastie and R. Tibshirani, An Introduction to Statistical Learning, New York: Springer, 2021.

[3] F. Husson, S. Lê and J. Pagès, Exploratory Multivariate Analysis by Example Using R, Boca Raton: CRC Press, 2017.

[4] B. Everitt and T. Hothorn, An Introduction to Applied Multivariate Analysis with R, New York: Springer, 2011.

[5] A. Kassambara, Practical Guide to Cluster Analysis in R, STHDA, 2017.