Carga de librerías

# ============================
# CARGA DE LIBRERÍAS
# ============================

# Manipulación de datos
library(tidyverse)

# Visualización
library(ggplot2)

# Tablas profesionales
library(gt)

# Análisis multivariado
library(FactoMineR)
library(factoextra)

# Análisis de correspondencia
library(ca)

# Detección de outliers
library(outliers)

# Imputación de datos
library(mice)

# Traer paqueteMODELOS
library(paqueteMODELOS)

# Configuración global de paleta personal de colores
pal <- c("#222222", "#6B2EBF", "#F7B26A", "#76A9DC", "#6DC8A4")

En esta sección se cargan las librerías necesarias para la manipulación, visualización y análisis multivariado de los datos. Se incorporan herramientas específicas para análisis exploratorio, reducción de dimensionalidad, segmentación y análisis de correspondencia. Asimismo, se incluye la instalación y carga de la librería paqueteMODELOS, suministrada dentro del contenido oficial del curso en la plataforma Brightspace, la cual contiene funciones auxiliares diseñadas para apoyar el desarrollo de los modelos estadísticos trabajados en la asignatura. Adicionalmente, se define una paleta de colores personal que se utilizará consistentemente en todas las visualizaciones del informe.

Carga de la base de datos

# ============================
# CARGA DE BASE DE DATOS
# ============================

# Listar datasets disponibles en el paquete
data(package = "paqueteMODELOS")

# Cargar dataset (verifica el nombre exacto)
data("vivienda")   # ← prueba con este nombre

# Verificación
dim(vivienda)
## [1] 8322   13
glimpse(vivienda)
## Rows: 8,322
## Columns: 13
## $ id           <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona         <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso         <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato      <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom      <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst    <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios       <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo         <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio       <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud     <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud      <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…

La base de datos vivenda se obtiene desde paqueteMODELOS, instalado desde un repositorio en GitHub. Posteriormente, se carga el conjunto de datos en memoria y se realiza una verificación inicial de su estructura (dimensiones y tipos de variables), con el fin de garantizar que la información está lista para el análisis exploratorio y multivariado.

1 ANÁLISIS EXPLORATORIO DE DATOS

1.1 CONOCIMIENTO DE LOS DATOS

1.1.1 ¿Cuántos registros hay y cuántos atributos tiene cada registro?

# ============================
# 1.1.1 DIMENSIONES DEL DATASET
# ============================

dimensiones <- data.frame(
  Concepto = c("Número de registros", "Número de atributos"),
  Valor = c(nrow(vivienda), ncol(vivienda))
)

dimensiones %>%
  gt() %>%
  tab_header(
    title = "Tabla 1. Dimensiones del conjunto de datos"
  )
Tabla 1. Dimensiones del conjunto de datos
Concepto Valor
Número de registros 8322
Número de atributos 13

Con lo descrito en la tabla 1. se identifica que la base de datos contiene 8322 registros, cada uno correspondiente a una propiedad residencial disponible en el mercado urbano, y 13 atributos, que describen características estructurales, económicas y geográficas de los inmuebles.

La estructura del conjunto de datos es adecuada para realizar análisis multivariados, dado que combina variables numéricas (precio, área, coordenadas, número de habitaciones, etc.) y categóricas (zona, tipo de vivienda, barrio), lo que permite explorar patrones complejos en la oferta inmobiliaria.

Con esto podemos intuir que el tamaño de la muestra es suficiente para aplicar técnicas como ACP y clustering-conglomerados sin riesgo de inestabilidad estadística.

1.1.2 ¿De qué tipo son los atributos?

La correcta identificación del tipo de variable es fundamental para seleccionar herramientas estadísticas apropiadas y evitar aplicaciones incorrectas de los métodos multivariados.

# ============================
# 1.1.2 TIPOS DE VARIABLES
# ============================

tipos_variables <- data.frame(
  Variable = names(vivienda),
  Tipo = sapply(vivienda, class)
)

tipos_variables %>%
  gt() %>%
  tab_header(
    title = "Tabla 2. Tipo de datos de los atributos"
  )
Tabla 2. Tipo de datos de los atributos
Variable Tipo
id numeric
zona character
piso character
estrato numeric
preciom numeric
areaconst numeric
parqueaderos numeric
banios numeric
habitaciones numeric
tipo character
barrio character
longitud numeric
latitud numeric

Tal y como se muestra en la Tabla 2. la base de datos presenta una combinación de variables numéricas y categóricas.

Las variables numéricas incluyen atributos como precio por metro cuadrado, área construida, número de habitaciones y coordenadas geográficas. Por su parte, las variables categóricas describen características como zona, tipo de vivienda y barrio.

La correcta identificación del tipo de variable es fundamental para seleccionar herramientas estadísticas apropiadas y evitar aplicaciones incorrectas de los métodos multivariados. De tal modo, esta estructura mixta permite aplicar técnicas multivariadas diferenciadas: análisis de componentes principales y conglomerados sobre variables cuantitativas, y análisis de correspondencia sobre variables categóricas.

1.1.3 Medidas de centralidad para cada atributo

Las medidas de centralidad permiten identificar el comportamiento típico de las variables dentro del mercado inmobiliario urbano; aplican formalmente a variables numéricas de las que se puede obtener media y mediana, mientras que para las variables categóricas, lo adecuado sería la moda o frecuencias.

Para variables numéricas…

# ============================
# 1.1.3.1 MEDIDAS DE CENTRALIDAD PARA VARIABLES NUMÉRICAS
# ============================

# Seleccionar solo variables numéricas
vars_numericas <- vivienda %>% 
  select(where(is.numeric))

# Calcular medidas de centralidad
centralidad <- data.frame(
  Variable = names(vars_numericas),
  Media = sapply(vars_numericas, mean, na.rm = TRUE),
  Mediana = sapply(vars_numericas, median, na.rm = TRUE)
)

centralidad %>%
  gt() %>%
  tab_header(
    title = "Tabla 3.1 Medidas de centralidad de variables numéricas"
  )
Tabla 3.1 Medidas de centralidad de variables numéricas
Variable Media Mediana
id 4160.000000 4160.000
estrato 4.633610 5.000
preciom 433.891947 330.000
areaconst 174.934938 123.000
parqueaderos 1.835194 2.000
banios 3.111311 3.000
habitaciones 3.605361 3.000
longitud -76.528606 -76.530
latitud 3.417644 3.416

Las medidas de centralidad permiten identificar el comportamiento típico de las variables cuantitativas del mercado inmobiliario urbano.

Dentro de la Tabla 3.1 Se observa que en variables como precio por metro cuadrado (preciom) y área construida (areaconst) existe una diferencia considerable entre la media y la mediana. Esto sugiere la presencia de asimetrías positivas, es decir, un grupo de propiedades con valores significativamente altos que elevan la media por encima de la mediana. Este comportamiento es consistente con mercados inmobiliarios donde existen inmuebles de lujo que tienden a distorsionar el promedio general.

En variables como número de baños, habitaciones y parqueaderos, la media y la mediana son relativamente cercanas, lo que indica una distribución más estable y concentrada alrededor de valores típicos del mercado.

La variable longitud presenta valores negativos debido a que Colombia se encuentra en el hemisferio occidental, donde las coordenadas longitudinales se expresan con signo negativo al ubicarse al oeste del meridiano de Greenwich. Este comportamiento es esperado y no representa ningún problema en la calidad de los datos.

En conjunto, se puede afirmar que estos resultados sugieren que el mercado presenta heterogeneidad en precios y tamaños, lo que es un aspecto que justifica la aplicación posterior de técnicas de segmentación y reducción de dimensionalidad.

Para variables categóricas o cualitativas…

# ============================
# 1.1.3.2 MEDIDAS DE CENTRALIDAD PARA VARIABLES CATEGÓRICAS
# ============================

# Función robusta para calcular la moda (incluye NA como categoría)
moda <- function(x) {
  tab <- table(x, useNA = "ifany")
  names(tab)[which.max(tab)]
}

# Seleccionar variables categóricas
vars_categoricas <- vivienda %>%
  select(where(~is.factor(.) | is.character(.)))

# Calcular moda y frecuencia absoluta (incluye NA)
centralidad_cat <- data.frame(
  Variable = names(vars_categoricas),
  Moda = sapply(vars_categoricas, moda),
  Frecuencia = sapply(vars_categoricas, function(x) max(table(x, useNA = "ifany")))
)

centralidad_cat %>%
  gt() %>%
  tab_header(
    title = "Tabla 3.2 Medidas de centralidad para variables categóricas"
  )
Tabla 3.2 Medidas de centralidad para variables categóricas
Variable Moda Frecuencia
zona Zona Sur 4726
piso NA 2638
tipo Apartamento 5100
barrio valle del lili 1008

En la Tabla 3.2 se presenta la categoría más frecuente (moda) para cada variable cualitativa del conjunto de datos, junto con su frecuencia absoluta.

  • Zona. Para esta variable la categoría predominante es Zona Sur, con 4726 registros, lo que indica una fuerte concentración de la oferta inmobiliaria en este sector de la ciudad.

  • Tipo de vivienda. La categoría más frecuente es Apartamento, con 5100 registros, lo que evidencia que la oferta urbana está dominada por este tipo de inmueble, coherente con patrones de densificación en grandes ciudades.

  • Barrio. La moda en esta variable corresponde a Valle del Lili, con 1008 registros, lo que sugiere una concentración relevante de propiedades en este sector específico.

  • Piso. En esta variable la categoría modal corresponde a valores NA, con 2638 registros. Este resultado indica una proporción significativa de datos faltantes en esta variable. Una posible interpretación es que el número de piso no sea relevante o aplicable en todos los tipos de vivienda (por ejemplo, casas unifamiliares), o que exista una omisión sistemática en el registro de esta información. Este hallazgo sugiere la necesidad de evaluar el tratamiento de los datos faltantes en esta variable antes de utilizarla en análisis posteriores.

Es válido aclarar que para garantizar consistencia con el análisis de datos faltantes que se desarrolla subsecuentemente (dentro de la sección 1.1.5), los NA se consideraron como una categoría en el cálculo de frecuencias y moda.

1.1.4 Medidas de dispersión o desviación

Las medidas de dispersión permiten evaluar el grado de heterogeneidad presente en las variables cuantitativas del mercado inmobiliario.

# ============================
# 1.1.4 MEDIDAS DE DISPERSIÓN
# ============================

# Seleccionar variables numéricas
vars_numericas <- vivienda %>% 
  select(where(is.numeric))

# Calcular medidas de dispersión
dispersion <- data.frame(
  Variable = names(vars_numericas),
  Desviacion_Estandar = sapply(vars_numericas, sd, na.rm = TRUE),
  Varianza = sapply(vars_numericas, var, na.rm = TRUE),
  Rango = sapply(vars_numericas, function(x) diff(range(x, na.rm = TRUE)))
)

dispersion %>%
  gt() %>%
  tab_header(
    title = "Tabla 4. Medidas de dispersión de variables numéricas"
  )
Tabla 4. Medidas de dispersión de variables numéricas
Variable Desviacion_Estandar Varianza Rango
id 2.401633e+03 5.767840e+06 8318.00000
estrato 1.029222e+00 1.059298e+00 3.00000
preciom 3.286472e+02 1.080090e+05 1941.00000
areaconst 1.429641e+02 2.043874e+04 1715.00000
parqueaderos 1.124909e+00 1.265420e+00 9.00000
banios 1.428210e+00 2.039784e+00 10.00000
habitaciones 1.459537e+00 2.130248e+00 10.00000
longitud 1.739827e-02 3.026997e-04 0.12615
latitud 4.263847e-02 1.818039e-03 0.16470

En la Tabla 4. observa que variables como precio por metro cuadrado y área construida presentan altos niveles de variabilidad, lo cual refleja una oferta inmobiliaria diversa, con inmuebles de características significativamente distintas.

Esta heterogeneidad es esperada en mercados urbanos y justifica la aplicación posterior de técnicas como análisis de componentes principales y conglomerados, que permiten estructurar dicha variabilidad en segmentos más homogéneos.

Como idea final podría afirmarse que la alta dispersión en las variables numéricas sugiere que el mercado inmobiliario presenta una marcada heterogeneidad, lo cual refuerza la pertinencia de aplicar técnicas de análisis multivariado para identificar patrones estructurales y segmentaciones relevantes.

1.1.5 Datos Faltantes

La evaluación de datos faltantes permite identificar posibles debilidades en la calidad del registro de información, además este análisis es clave antes de cualquier técnica multivariada, ya que muchos métodos no admiten valores NA.

# ============================
# 1.1.5 DATOS FALTANTES
# ============================

faltantes <- data.frame(
  Variable = names(vivienda),
  NA_Absolutos = sapply(vivienda, function(x) sum(is.na(x))),
  NA_Porcentaje = round(sapply(vivienda, function(x) mean(is.na(x))) * 100, 2)
)

faltantes %>%
  gt() %>%
  tab_header(
    title = "Tabla 5. Cantidad y porcentaje de datos faltantes por variable"
  )
Tabla 5. Cantidad y porcentaje de datos faltantes por variable
Variable NA_Absolutos NA_Porcentaje
id 3 0.04
zona 3 0.04
piso 2638 31.70
estrato 3 0.04
preciom 2 0.02
areaconst 3 0.04
parqueaderos 1605 19.29
banios 3 0.04
habitaciones 3 0.04
tipo 3 0.04
barrio 3 0.04
longitud 3 0.04
latitud 3 0.04

La Tabla 5. presenta los datos faltantes demostrando que, en general, el conjunto de datos tiene un nivel muy bajo de valores ausentes, inferior al 0.05% en la mayoría de las variables. Esto indica una adecuada calidad en el registro de información y reduce el riesgo de sesgos significativos en el análisis multivariado.

Sin embargo, se identifican dos variables con porcentajes relevantes de datos faltantes:

  • Piso. Tiene 2638 valores ausentes (31.70%), lo que constituye un nivel alto de ausencia.

  • Parqueaderos. Presenta 1605 valores ausentes (19.29%), lo que representa un nivel moderado-alto de faltantes.

En el caso de piso, y como se mencionaba previamente en la sección 1.1.3, la proporción elevada de NA puede deberse a que esta variable no es aplicable a todos los tipos de vivienda, especialmente a casas unifamiliares donde el concepto de “piso” como número de nivel en edificio no es pertinente. Esto sugiere que los valores faltantes podrían ser estructurales y no necesariamente errores de registro.

En cuanto a parqueaderos, la ausencia podría indicar que la información no fue reportada o que ciertas propiedades no cuentan con parqueadero, pero no se registró explícitamente como cero. Esto será relevante en la fase de tratamiento de datos.

Dado que varias técnicas multivariadas requieren matrices completas sin valores NA, será necesario definir una estrategia de imputación o exclusión controlada antes de aplicar ACP o clustering.

1.1.6 Datos Atípicos

# ============================
# 1.1.6 DETECCIÓN DE OUTLIERS (Regla IQR)
# ============================

# Seleccionar variables numéricas
vars_numericas <- vivienda %>% 
  select(where(is.numeric))

# Función para contar outliers según regla IQR
contar_outliers <- function(x) {
  Q1 <- quantile(x, 0.25, na.rm = TRUE)
  Q3 <- quantile(x, 0.75, na.rm = TRUE)
  IQR_val <- Q3 - Q1
  lim_inf <- Q1 - 1.5 * IQR_val
  lim_sup <- Q3 + 1.5 * IQR_val
  sum(x < lim_inf | x > lim_sup, na.rm = TRUE)
}

# Aplicar función a cada variable numérica
outliers_tabla <- data.frame(
  Variable = names(vars_numericas),
  Outliers = sapply(vars_numericas, contar_outliers)
)

outliers_tabla %>%
  gt() %>%
  tab_header(
    title = "Tabla 6. Número de valores atípicos por variable (Regla IQR)"
  )
Tabla 6. Número de valores atípicos por variable (Regla IQR)
Variable Outliers
id 0
estrato 0
preciom 552
areaconst 382
parqueaderos 567
banios 72
habitaciones 888
longitud 130
latitud 0
# 1) Eliminar variable id 
vars_numericas_filtrado <- vars_numericas %>%
  select(-any_of("id"))

# 2) Pasar a formato largo respetando el orden original
datos_largos <- vars_numericas_filtrado %>%
  pivot_longer(cols = everything(),
               names_to = "Variable",
               values_to = "Valor") %>%
  mutate(Variable = factor(Variable, levels = names(vars_numericas_filtrado)))

# 3) Etiquetas A-H (serán 8 habiendo excluido id)
niveles <- levels(datos_largos$Variable)
lab_map <- setNames(paste0(LETTERS[seq_along(niveles)], ". ", niveles), niveles)

# 4) Figura única: un boxplot por variable con escala libre
ggplot(datos_largos, aes(x = "", y = Valor)) +
  geom_boxplot(fill = pal[2], width = 0.45, outlier.alpha = 0.6) +
  facet_wrap(~ Variable,
             scales = "free_y",
             ncol = 3,
             labeller = labeller(Variable = lab_map)) +
  theme_minimal() +
  labs(
  x = NULL,
  y = "Valor"
) +
  theme(
    axis.text.x  = element_blank(),
    axis.ticks.x = element_blank(),
    strip.text   = element_text(face = "bold")
  )

Figura 1. Distribución y valores atípicos por variable.

  • A. Estrato. La mediana se ubica alrededor de 4, con concentración entre 4 y 5. La dispersión es moderada y no se observan valores atípicos fuera del rango natural de la variable (estrato es una variable ordinal discreta y acotada [1–6]). La distribución sugiere predominancia de estratos medios–altos.

  • B. Precio. Presenta alta asimetría positiva, con numerosos valores atípicos superiores. La mediana está considerablemente por debajo de los máximos observados. Indica fuerte heterogeneidad en precios del mercado.

  • C. Área construida. Distribución claramente asimétrica a la derecha con múltiples outliers altos. La mayoría de inmuebles se concentra en áreas relativamente pequeñas o medias. Existen propiedades significativamente más grandes que elevan la dispersión.

  • D. Parqueaderos. Es una variable discreta con acumulación en valores bajos, por eso el boxplot marca como outliers valores altos que en realidad pueden ser propiedades de alto estándar y por lo tanto son poco frecuentes. Con una mediana baja (≈1–2), la mayoría de inmuebles dispone de pocos parqueaderos.

  • E. Baños. Mediana cercana a 3, con dispersión moderada. Se presentan algunos valores extremos altos, aunque no dominantes. La distribución es relativamente estable con ligera asimetría positiva.

  • F. Habitaciones. Mediana alrededor de 3–4 habitaciones. Existen algunos valores extremos altos, pero la mayoría se concentra en rangos estándar residenciales. Dispersión moderada.

  • G. Longitud. Presenta baja variabilidad central (IQR reducido), con ligera extensión en ambos extremos, lo que sugiere concentración espacial con algunos inmuebles ubicados hacia los límites geográficos del área urbana.

  • H. Latitud. Presenta baja dispersión y concentración alrededor de la mediana. No se observan outliers extremos significativos. Indica localización geográfica relativamente homogénea.

De la Figura 1. se puede concluir que las variables estructurales del inmueble (estrato, baños, habitaciones y parqueaderos) presentan dispersión moderada y concentraciones coherentes con el mercado residencial medio, mientras que las variables económicas y físicas (precio y área construida) exhiben marcada asimetría positiva y numerosos valores atípicos superiores, reflejando alta heterogeneidad en la oferta.

Por su parte, las variables geográficas (latitud y longitud) muestran baja variabilidad y fuerte concentración, indicando localización espacial relativamente homogénea dentro del área urbana analizada.

En conjunto, los resultados sugieren un mercado con estructura residencial estable pero con segmentos de alto valor que incrementan la dispersión general del sistema inmobiliario.

Nota metodológica. La variable id fue excluida del análisis gráfico debido a que corresponde a un identificador único de observación y no representa una característica cuantitativa con significado analítico. Su inclusión podría distorsionar la escala visual de las demás variables y afectar la interpretación comparativa de las distribuciones. En consecuencia, únicamente se consideran variables numéricas con relevancia estadística para el análisis exploratorio.

1.2 TRATAMIENTO DE LOS DATOS

1.2.1 Imputación de datos faltantes

# ============================
# 1.2.1 IMPUTACIÓN DE DATOS FALTANTES
# ============================

# Copia de trabajo
vivienda_tratada <- vivienda

# 1) Imputación estructural para parqueaderos (asumimos 0 cuando es NA)
vivienda_tratada$parqueaderos[is.na(vivienda_tratada$parqueaderos)] <- 0

# 2) Crear categoría explícita para piso cuando es NA
vivienda_tratada$piso <- as.character(vivienda_tratada$piso)
vivienda_tratada$piso[is.na(vivienda_tratada$piso)] <- "No aplica"
vivienda_tratada$piso <- as.factor(vivienda_tratada$piso)

# 3) Eliminar registros con NA marginal en otras variables
vivienda_tratada <- vivienda_tratada %>% drop_na()

# Verificación final de NA
data.frame(
  Variable = names(vivienda_tratada),
  NA_restantes = sapply(vivienda_tratada, function(x) sum(is.na(x)))
) %>%
  gt() %>%
  tab_header(
    title = "Tabla 7. Verificación de datos faltantes después del tratamiento"
  )
Tabla 7. Verificación de datos faltantes después del tratamiento
Variable NA_restantes
id 0
zona 0
piso 0
estrato 0
preciom 0
areaconst 0
parqueaderos 0
banios 0
habitaciones 0
tipo 0
barrio 0
longitud 0
latitud 0

Dado que la mayoría de variables presentan porcentajes mínimos de datos faltantes —específicamente id, zona, estrato, preciom, areaconst, banios, habitaciones, tipo, barrio, longitud y latitud, todas con porcentajes inferiores al 0.05%— se optó por eliminar estos registros con ausencia marginal de información, dado que su impacto sobre el tamaño muestral y la representatividad no es significativa.

En la variable parqueaderos, los valores faltantes fueron imputados como cero, bajo el supuesto de que la ausencia de registro puede asociarse a inmuebles sin parqueadero.

Para la variable piso, los valores NA fueron transformados en la categoría “No aplica”, considerando que esta característica no es pertinente para todos los tipos de vivienda.

Tras el tratamiento aplicado, y como puede observarse en la Tabla 7., el conjunto de datos quedó libre de valores faltantes, permitiendo la aplicación de técnicas multivariadas sin restricciones.

1.2.2 Estandarización Outliers o Datos Atípicos

# ============================
# 1.2.2 TRATAMIENTO DE OUTLIERS
# ============================

library(dplyr)

# Seleccionar solo variables numéricas
resumen_numerico <- vivienda_tratada %>%
  select(where(is.numeric)) %>%
  summarise(across(
    everything(),
    list(
      Min = ~min(., na.rm = TRUE),
      Q1 = ~quantile(., 0.25, na.rm = TRUE),
      Mediana = ~median(., na.rm = TRUE),
      Media = ~mean(., na.rm = TRUE),
      Q3 = ~quantile(., 0.75, na.rm = TRUE),
      Max = ~max(., na.rm = TRUE)
    ),
    .names = "{.col}_{.fn}"
  )) %>%
  tidyr::pivot_longer(
    everything(),
    names_to = c("Variable", "Estadístico"),
    names_sep = "_"
  ) %>%
  tidyr::pivot_wider(
    names_from = Estadístico,
    values_from = value
  )

# Tabla 8
resumen_numerico %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 8. Resumen estadístico posterior al tratamiento de valores atípicos**")
  ) %>%
  fmt_number(
    columns = -Variable,
    decimals = 2
  ) %>%
  cols_label(
    Variable = "Variable",
    Min = "Mínimo",
    Q1 = "Q1",
    Mediana = "Mediana",
    Media = "Media",
    Q3 = "Q3",
    Max = "Máximo"
  ) %>%
  tab_options(
    table.font.size = 12,
    heading.align = "center"
  )
Tabla 8. Resumen estadístico posterior al tratamiento de valores atípicos
Variable Mínimo Q1 Mediana Media Q3 Máximo
id 1.00 2,080.50 4,160.00 4,160.00 6,239.50 8,319.00
estrato 3.00 4.00 5.00 4.63 5.00 6.00
preciom 58.00 220.00 330.00 433.90 540.00 1,999.00
areaconst 30.00 80.00 123.00 174.93 229.00 1,745.00
parqueaderos 0.00 1.00 1.00 1.48 2.00 10.00
banios 0.00 2.00 3.00 3.11 4.00 10.00
habitaciones 0.00 3.00 3.00 3.61 4.00 10.00
longitud −76.59 −76.54 −76.53 −76.53 −76.52 −76.46
latitud 3.33 3.38 3.42 3.42 3.45 3.50

Aunque se identificaron valores atípicos en variables como precio y área construida, estos no serán eliminados en esta etapa del análisis, dado que pueden representar segmentos reales del mercado inmobiliario y no errores evidentes de registro.

En mercados urbanos es esperable la presencia de inmuebles de alto valor que generen colas largas en la distribución. Por tanto, en lugar de excluir estas observaciones, se considerará su efecto mediante técnicas de estandarización y análisis multivariado, preservando así la estructura real del sistema inmobiliario.

Estandarización para análisis multivariado

# ============================
#      ESTANDARIZACIÓN
# ============================

# Estandarización de variables numéricas
vars_numericas_tratadas <- vivienda_tratada %>%
  select(where(is.numeric))

vivienda_escalada <- scale(vars_numericas_tratadas)

# ============================
# VERIFICACIÓN DE ESTANDARIZACIÓN
# ============================

# Convertir a data.frame
vivienda_escalada_df <- as.data.frame(vivienda_escalada)

# Calcular media y desviación estándar
verificacion_escalado <- data.frame(
  Variable = names(vivienda_escalada_df),
  Media = round(sapply(vivienda_escalada_df, mean), 4),
  Desviacion_Estandar = round(sapply(vivienda_escalada_df, sd), 4)
)

verificacion_escalado %>%
  gt() %>%
  tab_header(
    title = "Tabla 9. Verificación del proceso de estandarización"
  )
Tabla 9. Verificación del proceso de estandarización
Variable Media Desviacion_Estandar
id 0 1
estrato 0 1
preciom 0 1
areaconst 0 1
parqueaderos 0 1
banios 0 1
habitaciones 0 1
longitud 0 1
latitud 0 1

En lugar de eliminar los datos atípicos, pero con el fin de evitar que variables con mayor magnitud o dispersión - como lo son precio o área construida - dominen los análisis multivariados posteriores, se optó por aplicar un proceso de estandarización sobre las variables numéricas.

Este procedimiento centra cada variable en cero y la escala a una desviación estándar unitaria, garantizando comparabilidad entre atributos con diferentes unidades de medida.

La Tabla 9. es evidencia de ello y allí se puede observar que, luego de la transformación, todas las variables presentan media aproximada a cero y desviación estándar a uno, confirmando la correcta aplicación del proceso.

Esta estrategia permite conservar la estructura real del mercado sin introducir sesgos derivados de la eliminación arbitraria de observaciones, , asegurando que el análisis de componentes principales refleje patrones estructurales y no diferencias de escala.

2 ANÁLISIS DE COMPONENTES PRINCIPALES

Se calculará el Análisis de Componentes Principales excluyendo la variable identificadora id, dado que no representa una característica intrínseca del inmueble y podría introducir varianza artificial en la estructura del modelo.

2.1 Cálculo del ACP y Varianza explicada

# ============================
# 2.1 ANÁLISIS DE COMPONENTES PRINCIPALES (ACP)
# ============================

# Seleccionar variables numéricas relevantes
vars_numericas_acp <- vivienda_tratada %>%
  select(where(is.numeric), -id)

# Estandarización
vivienda_escalada_acp <- scale(vars_numericas_acp)

# ACP ajustado
acp <- FactoMineR::PCA(
  as.data.frame(vivienda_escalada_acp),
  graph = FALSE
)

# Tabla de autovalores y varianza explicada
eig <- as.data.frame(acp$eig)

tabla_varianza <- data.frame(
  Componente = paste0("PC", 1:nrow(eig)),
  Autovalor = round(eig[, 1], 4),
  Varianza_Explicada = round(eig[, 2], 2),
  Varianza_Acumulada = round(eig[, 3], 2)
)

tabla_varianza %>%
  gt() %>%
  tab_header(
    title = "Tabla 10. Autovalores y varianza explicada del ACP"
  )
Tabla 10. Autovalores y varianza explicada del ACP
Componente Autovalor Varianza_Explicada Varianza_Acumulada
PC1 3.6094 45.12 45.12
PC2 1.5025 18.78 63.90
PC3 0.9036 11.29 75.19
PC4 0.6937 8.67 83.86
PC5 0.4363 5.45 89.32
PC6 0.4267 5.33 94.65
PC7 0.2398 3.00 97.65
PC8 0.1881 2.35 100.00
# Scree plot
fviz_eig(acp, addlabels = TRUE)

Figura 2. Scree plot (varianza explicada por componente).

Dentro de la Tabla 10. podemos identificar que el primer componente principal (PC1) captura el 45.12% de la variabilidad total del sistema inmobiliario, constituyéndose como la dimensión dominante del mercado. El segundo componente (PC2) aporta un 18.78% adicional, alcanzando conjuntamente el 63.90% de la varianza explicada.

El scree plot de la Figura 2. evidencia un punto de inflexión después del segundo componente, lo que sugiere que los dos primeros ejes resumen de manera eficiente la estructura del mercado sin pérdida significativa de información. A partir del tercer componente, la ganancia marginal en varianza explicada se reduce (por ejemplo, PC3 explica 11.29% y PC4 8.67%), reforzando la decisión de priorizar la interpretación sobre los dos primeros componentes.

En consecuencia, el análisis se centra en la interpretación conjunta de PC1 y PC2, los cuales representan las dimensiones estratégicas más relevantes del sistema inmobiliario.

2.2 Estructura de variables

# Círculo de correlaciones
fviz_pca_var(acp, col.var = "contrib")

Figura 3. Círculo de correlaciones (PC1 - PC2).

# Tabla de contribuciones a PC1 y PC2
contrib <- as.data.frame(acp$var$contrib)

tabla_contrib <- data.frame(
  Variable = rownames(contrib),
  Contrib_PC1 = round(contrib$Dim.1, 2),
  Contrib_PC2 = round(contrib$Dim.2, 2)
) %>%
  arrange(desc(Contrib_PC1 + Contrib_PC2))

tabla_contrib %>%
  gt() %>%
  tab_header(title = "Tabla 11. Contribución de variables a PC1 y PC2")
Tabla 11. Contribución de variables a PC1 y PC2
Variable Contrib_PC1 Contrib_PC2
habitaciones 6.22 33.21
estrato 12.08 19.17
areaconst 16.91 8.89
banios 19.67 4.94
longitud 6.01 18.27
preciom 21.56 0.15
parqueaderos 15.99 1.13
latitud 1.57 14.23

Dentro de la Figura 3. el primer componente principal (PC1) representa una dimensión asociada a la valoración y calidad estructural del inmueble. De acuerdo con la Tabla 11., las variables con mayor contribución a PC1 son precio (21.56%), baños (19.67%), área construida (16.91%) y parqueaderos (15.99%), seguidas por estrato (12.08%). Esto indica que este eje sintetiza el estándar constructivo, dotación y nivel socioeconómico que explican la valorización de las propiedades. En términos económicos, PC1 puede interpretarse como una dimensión de valorización integral del activo inmobiliario.

El segundo componente principal (PC2) refleja principalmente una dimensión espacial y de configuración interna del inmueble. Según la Tabla 11., la mayor contribución a PC2 proviene de habitaciones (33.21%), seguida por estrato (19.17%) y longitud (18.27%), y en menor medida latitud (14.23%). En conjunto, esto sugiere que PC2 diferencia inmuebles tanto por distribución interna (número de habitaciones) como por ubicación dentro del área urbana (coordenadas), con un componente socioeconómico adicional (estrato). En consecuencia, PC2 puede interpretarse como una dimensión geográfico-configuracional del mercado inmobiliario, diferenciando inmuebles según ubicación dentro de la ciudad y composición habitacional.

El análisis conjunto de PC1 y PC2 revela que la variabilidad del mercado inmobiliario urbano se estructura principalmente en torno a dos grandes dimensiones:

  • Dimensión de valorización y calidad (PC1) asociada a precio, área construida, baños, parqueaderos y estrato.
  • Dimensión espacial y configuracional (PC2) asociada principalmente a habitaciones, y complementada por ubicación geográfica (longitud y latitud) y estrato.

Esto sugiere que el mercado no se organiza únicamente por precio, sino por una combinación de atributos estructurales, socioeconómicos y espaciales, lo cual tiene implicaciones directas para estrategias de segmentación y posicionamiento, teniendo en cuenta que:

  • El precio está altamente correlacionado con atributos estructurales (baños, parqueaderos, área), lo que confirma que la valorización depende de estándares constructivos y dotación.

  • La configuración interna (habitaciones) y la ubicación (coordenadas) introducen una dimensión diferenciadora adicional que no es estrictamente económica.

  • La empresa puede diseñar estrategias segmentadas basadas en: perfil premium (alto PC1); perfil residencial estándar (valores intermedios); y perfiles geográfico-configuracionales (alto o bajo PC2), útiles para focalizar oferta, inversión y valorización por zonas y tipologías.

3 ANÁLISIS DE CONGLOMERADOS

# ============================
# 3. CLUSTERING
# ============================

# Extraer coordenadas de los individuos en PC1 y PC2
coords_pca <- as.data.frame(acp$ind$coord[, 1:2])

colnames(coords_pca) <- c("PC1", "PC2")

# Figura 4.
fviz_nbclust(coords_pca, kmeans, method = "wss")

Figura 4. Método del codo para determinar número óptimo de clusters (PC1 - PC2).

El método del codo que se observa en la Figura 4 evidencia una reducción pronunciada de la suma de cuadrados intra-cluster hasta aproximadamente cuatro conglomerados. A partir de ese punto, la disminución de la variabilidad interna se vuelve marginal, lo que indica que agregar más clusters no produce mejoras sustanciales en la estructura de segmentación.

En consecuencia, se seleccionó k = 4 como número óptimo de clusters, al representar un equilibrio adecuado entre capacidad explicativa e interpretabilidad estratégica.

set.seed(123)

kmeans_model <- kmeans(coords_pca, centers = 4, nstart = 25)

coords_pca$cluster <- as.factor(kmeans_model$cluster)

ggplot(coords_pca, aes(x = PC1, y = PC2, color = cluster)) +
  geom_point(alpha = 0.6, size = 2) +
  scale_color_manual(values = pal) +
  theme_minimal() +
  labs(title = "(k = 4)",
       x = "Componente Principal 1 (Valorización)",
       y = "Componente Principal 2 (Configuración - Ubicación)")

Figura 5. Segmentación del mercado inmobiliario (k = 4).

La Figura 5. muestra la segmentación del mercado inmobiliario urbano en el espacio reducido de los dos primeros componentes principales, donde el eje horizontal (PC1) representa la dimensión de valorización y el eje vertical (PC2) la dimensión espacial-configuracional. La clara separación visual de los cuatro grupos confirma que existen perfiles estructuralmente diferenciados dentro de la oferta inmobiliaria.

La caracterización cuantitativa de cada segmento se presentará a continuación en la Tabla 12, donde se observan diferencias sustanciales en precio, área construida, dotación y estrato promedio.

vivienda_cluster <- vivienda_tratada
vivienda_cluster$cluster <- coords_pca$cluster

perfil_cluster <- vivienda_cluster %>%
  group_by(cluster) %>%
  summarise(
    precio_prom = mean(preciom),
    area_prom = mean(areaconst),
    banios_prom = mean(banios),
    habitaciones_prom = mean(habitaciones),
    parqueaderos_prom = mean(parqueaderos),
    estrato_prom = mean(estrato)
  )

perfil_cluster %>%
  gt() %>%
  tab_header(title = "Tabla 12. Perfil promedio de variables clave por cluster")
Tabla 12. Perfil promedio de variables clave por cluster
cluster precio_prom area_prom banios_prom habitaciones_prom parqueaderos_prom estrato_prom
1 437.0709 285.69034 4.182524 5.915534 1.3126214 3.981553
2 203.1106 87.29163 1.995682 2.901362 0.6941216 3.831950
3 419.3889 140.80200 3.042009 3.164424 1.5953397 5.215622
4 1031.7011 381.12420 5.115353 4.485784 3.2688871 5.699431

Cluster 1Segmento Amplio de Tamaño Medio-Alto

Este grupo presenta un precio promedio de 437.07, con una área promedio considerable (285.69 m²) y alto número de habitaciones (5.92), aunque con menor número de parqueaderos (1.31) y un estrato promedio intermedio (3.98).

Se posiciona en valores positivos de PC2, lo que indica mayor diferenciación en configuración interna (más habitaciones). Este segmento podría representar viviendas amplias en zonas no necesariamente premium, posiblemente casas familiares de gran tamaño pero sin alta valorización por ubicación o estrato.

Cluster 2Segmento Económico / Residencial Estándar

Este grupo presenta el menor precio promedio (203.11), la menor área promedio (87.29 m²), menor número de baños (2.00), habitaciones (2.90) y parqueaderos (0.69).

Corresponde claramente al segmento de menor valorización, probablemente asociado a vivienda compacta o de interés medio. Se ubica en la zona izquierda de la figura 5 (bajo PC1), confirmando su menor estándar estructural y económico.

Cluster 3Segmento Socioeconómico Alto Consolidado

Con un precio promedio de 419.39 y estrato promedio de 5.22, este grupo presenta una combinación interesante: estrato alto pero con área promedio moderada (140.80 m²) y dotación intermedia.

Este segmento podría representar apartamentos en zonas de alto estrato pero con dimensiones más compactas que el segmento premium. Es un mercado consolidado, atractivo para inversión estable.

Cluster 4Segmento Premium de Alta Valorización

Este grupo presenta el mayor precio promedio (1031.70), la mayor área construida promedio (381.12 m²), así como los valores más altos en baños (5.12), parqueaderos (3.27) y estrato (5.70).

Se ubica en la zona derecha de la figura 5 (alto PC1), lo que confirma que corresponde a inmuebles de alta valorización, gran tamaño y estándar constructivo superior. Este segmento representa el mercado de lujo o de alto poder adquisitivo, con fuerte potencial de rentabilidad pero menor volumen relativo.

Conclusión de la Clusterización

El análisis conjunto evidencia que el mercado inmobiliario urbano se organiza en cuatro perfiles claramente diferenciados, estructurados principalmente por:

  • Nivel de valorización y estándar constructivo (PC1)
  • Configuración interna y ubicación relativa (PC2)

Desde una perspectiva estratégica, la empresa podría utilizar esta segmentación para:

  • Optimizar portafolios familiares amplios en el segmento de tamaño medio-alto (Cluster 1).
  • Mantener volumen y rotación en el segmento estándar o económico (Cluster 2).
  • Consolidar inversión en zonas de alto estrato con tamaño intermedio (Cluster 3).
  • Diseñar estrategias comerciales diferenciadas para el segmento premium (Cluster 4).

La clusterización realizada confirma que la oferta inmobiliaria no es homogénea, sino que responde a combinaciones específicas de valorización, tamaño, dotación y estrato, lo que permite orientar decisiones de inversión, fijación de precios y posicionamiento competitivo con mayor precisión.

4 ANÁLISIS DE CORRESPONDENCIA

En primer lugar, se construirá una tabla de contingencia (Ver Tabla 13.) entre las variables categóricas tipo de vivienda y zona.

# ============================
# 4. ANÁLISIS DE CORRESPONDENCIA SIMPLE
# ============================

# Tabla de contingencia
tabla_cont <- table(vivienda_tratada$tipo,
                    vivienda_tratada$zona)

# Convertir a data frame
tabla_df <- as.data.frame.matrix(tabla_cont) %>%
  tibble::rownames_to_column("Tipo")

# Crear tabla con gt
tabla_df %>%
  gt() %>%
  tab_header(
    title = md("**Tabla 13. Tabla de contingencia entre tipo de vivienda y zona**")
  ) %>%
  cols_label(
    Tipo = "Tipo de vivienda"
  ) %>%
  fmt_number(
    columns = -`Tipo`,
    decimals = 0
  ) %>%
  tab_options(
    heading.align = "center",
    table.font.size = 12
  )
Tabla 13. Tabla de contingencia entre tipo de vivienda y zona
Tipo de vivienda Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
Apartamento 24 1,198 1,029 62 2,787
Casa 100 722 169 289 1,939

Esta Tabla 13. resume la frecuencia de inmuebles para cada combinación de categorías, permitiendo observar cómo se distribuye la oferta según tipología y localización dentro del área urbana; además constituye el insumo fundamental del Análisis de Correspondencia, ya que este método no trabaja directamente sobre los datos individuales, sino sobre las relaciones de frecuencia entre categorías.

Ahora, sé aplicará el Análisis de Correspondencia (AC) sobre dicha tabla. Esta técnica multivariada permite transformar la información contenida en la tabla de contingencia (Tabla 13.) en un espacio geométrico de baja dimensión, donde las categorías pueden representarse como puntos en un plano factorial.

# Aplicar análisis de correspondencia
ac_model <- FactoMineR::CA(tabla_cont, graph = FALSE)

El objetivo es identificar asociaciones estructurales entre categorías: aquellas que aparecen próximas en el plano presentan patrones de comportamiento similares dentro del mercado, mientras que las categorías alejadas o en direcciones opuestas reflejan dinámicas diferenciadas.

En consecuencia, estos dos pasos permiten pasar de una simple tabla de frecuencias a una representación analítica que revela la estructura subyacente de la oferta inmobiliaria categórica.

eig_ac <- as.data.frame(ac_model$eig)

tabla_eig_ac <- data.frame(
  Dimension = paste0("Dim", 1:nrow(eig_ac)),
  Autovalor = round(eig_ac[,1], 4),
  Inercia_Porcentaje = round(eig_ac[,2], 2),
  Inercia_Acumulada = round(eig_ac[,3], 2)
)

tabla_eig_ac %>%
  gt() %>%
  tab_header(
    title = "Tabla 14. Inercia explicada del Análisis de Correspondencia"
  )
Tabla 14. Inercia explicada del Análisis de Correspondencia
Dimension Autovalor Inercia_Porcentaje Inercia_Acumulada
Dim1 0.0831 100 100

Según se puede ver en la Tabla 14. el Análisis de Correspondencia entre tipo de vivienda y zona produjo una única dimensión factorial, lo cual se explica por la estructura de las variables categóricas involucradas (la variable tipo de vivienda sólo tiene 2 categorías). Matemáticamente, el número máximo de dimensiones en un análisis de correspondencia está determinado por el mínimo entre (r − 1) y (c − 1), donde r y c corresponden al número de categorías de cada variable.

En este caso, la estructura de las variables permite únicamente una dimensión, lo que indica que la asociación entre tipo de vivienda y zona se resume en un único patrón estructural dominante. La totalidad de la inercia (100%) se concentra en dicha dimensión.

Entonces, dado que el Análisis de Correspondencia Simple entre tipo y zona produjo únicamente una dimensión factorial —debido a la estructura limitada de categorías— se optó por ampliar el estudio hacia un Análisis de Correspondencia Múltiple (ACM). La inclusión adicional de la variable estrato permite capturar una estructura de asociación más rica y multidimensional, facilitando una interpretación más completa de los patrones categóricos del mercado inmobiliario urbano.

# ============================
# 4. ANÁLISIS DE CORRESPONDENCIA MÚLTIPLE
# ============================

# Seleccionar variables categóricas
datos_acm <- vivienda_tratada %>%
  select(tipo, zona, estrato)

# Convertir estrato a factor
datos_acm$estrato <- as.factor(datos_acm$estrato)

acm_model <- FactoMineR::MCA(datos_acm, graph = FALSE)

Siendo así, se aplica un Análisis de Correspondencia Múltiple (ACM / MCA) con el fin de explorar y sintetizar, en un espacio de baja dimensión, la estructura de asociación existente entre tres variables categóricas del sistema inmobiliario: tipo de vivienda, zona y estrato. Para ello, se seleccionan únicamente dichas variables y se garantiza que estrato sea tratado como factor (categoría) —no como numérica—, ya que su interpretación es ordinal/cualitativa y su análisis debe basarse en perfiles de categoría.

eig_acm <- as.data.frame(acm_model$eig)

tabla_eig_acm <- data.frame(
  Dimension = paste0("Dim", 1:nrow(eig_acm)),
  Autovalor = round(eig_acm[,1], 4),
  Inercia_Porcentaje = round(eig_acm[,2], 2),
  Inercia_Acumulada = round(eig_acm[,3], 2)
)

tabla_eig_acm %>%
  gt() %>%
  tab_header(
    title = "Tabla 14. Inercia explicada del Análisis de Correspondencia Múltiple"
  )
Tabla 14. Inercia explicada del Análisis de Correspondencia Múltiple
Dimension Autovalor Inercia_Porcentaje Inercia_Acumulada
Dim1 0.5621 21.08 21.08
Dim2 0.4531 16.99 38.07
Dim3 0.3796 14.24 52.31
Dim4 0.3334 12.50 64.81
Dim5 0.3233 12.12 76.94
Dim6 0.2718 10.19 87.13
Dim7 0.2014 7.55 94.68
Dim8 0.1419 5.32 100.00

La Tabla 15 muestra la inercia explicada por cada dimensión del Análisis de Correspondencia Múltiple (ACM). La primera dimensión (Dim1) explica el 21.08% de la variabilidad total, mientras que la segunda (Dim2) aporta un 16.99%, acumulando conjuntamente el 38.07% de la inercia total. Aunque los porcentajes individuales no son elevados —lo cual es común en ACM debido a la naturaleza categórica y dispersa de los datos— las dos primeras dimensiones permiten capturar la estructura principal de asociación entre tipo de vivienda, zona y estrato.

fviz_mca_var(acm_model,
             col.var = "contrib",
             repel = TRUE) +
  labs(title = "Mapa factorial")

Figura 6. Mapa factorial del Análisis de Correspondencia Múltiple.

En la Figura 6, se observa que Dim1 (21.1%) diferencia principalmente categorías asociadas a mayor nivel socioeconómico y localización central/oriental frente a aquellas vinculadas a estratos y zonas tradicionalmente menos valorizadas.

Por ejemplo, Zona Oriente y Zona Centro se ubican claramente hacia el extremo positivo de la primera dimensión, junto con estratos altos, lo que sugiere una asociación estructural entre estas zonas y niveles socioeconómicos elevados.

Por su parte, Zona Sur, Apartamento y estratos intermedios (4 y 5) tienden a agruparse en el cuadrante inferior izquierdo, indicando patrones de oferta más estandarizados o residenciales tradicionales.

En contraste, en la dimensión vertical (Dim2), Zona Oeste y estrato 6 aparecen diferenciados, lo que sugiere una configuración particular dentro del mercado de mayor valorización.

Todo lo anterior en lo referente al ACM confirma que la estructura categórica del mercado inmobiliario urbano no es aleatoria, sino que presenta asociaciones claras entre tipología de vivienda, localización geográfica y nivel socioeconómico. Esto refuerza los hallazgos del ACP y del análisis de conglomerados, evidenciando que la segmentación del mercado responde tanto a factores estructurales como a dinámicas espaciales y socioeconómicas.

5 CONCLUSIONES

5.1 Conclusiones Finales

  • En primer lugar el Análisis Exploratorio de Datos desarrollado permitió comprender de manera integral la estructura del mercado inmobiliario urbano a partir de un enfoque multivariado riguroso y evidenció una marcada heterogeneidad en variables económicas y estructurales como precio y área construida, confirmando que el mercado no es uniforme y presenta distintos niveles de valorización.

  • Seguidamente el Análisis de Componentes Principales (ACP) ayudó a reducir la dimensionalidad del sistema, identificando dos dimensiones estratégicas que explican el 63.90% de la variabilidad total: una dimensión de valorización y calidad estructural (asociada principalmente a precio, área, baños y parqueaderos) y una dimensión geográfico-configuracional (relacionada con habitaciones y ubicación espacial). Esto demuestra que la dinámica del mercado inmobiliario se estructura fundamentalmente en torno a factores económicos, constructivos y espaciales.

  • Posteriormente, el Análisis de Conglomerados (k = 4) facilitó segmentar la oferta en cuatro perfiles claramente diferenciados: un segmento premium de alta valorización, un segmento de tamaño medio-alto, un segmento socioeconómico alto consolidado y un segmento residencial estándar o económico. Esta segmentación confirma la existencia de comportamientos estructurales distintos dentro del mercado, lo que hace insensato sugerir una estrategia comercial homogénea.

  • Finalmente, el Análisis de Correspondencia Múltiple (ACM) evidenció asociaciones claras entre tipo de vivienda, zona y estrato, demostrando que la localización geográfica y el nivel socioeconómico están estrechamente vinculados con la tipología de la oferta. Esto refuerza la conclusión de que el mercado inmobiliario urbano responde a patrones estructurales definidos y no a dinámicas aleatorias.

Estos resultados no hacen más que confirmar que el mercado inmobiliario presenta una organización multidimensional donde la valorización, la configuración interna del inmueble y la localización geográfica interactúan de manera sistemática.

5.2 Recomendaciones estratégicas para la empresa inmobiliaria

A partir de los hallazgos obtenidos, se proponen las siguientes recomendaciones estratégicas para fortalecer la toma de decisiones de la empresa inmobiliaria:

  • Segmentación diferenciada del portafolio: Diseñar estrategias comerciales específicas para cada uno de los cuatro clusters identificados, evitando enfoques generalistas que no capturen la heterogeneidad del mercado.

  • Optimización del segmento premium: En el cluster de alta valorización, priorizar estrategias de posicionamiento, marketing especializadoy dirigido, así como análisis detallado de rentabilidad, dado su alto potencial de margen (aunque menor volumen).

  • Consolidación del segmento socioeconómico alto: En zonas de estrato elevado con área intermedia, se podría fortalecer la oferta mediante diferenciación en acabados y servicios complementarios que incrementen el valor percibido sin necesidad de ampliar área construida.

  • Estrategias de volumen en el segmento estándar: En el segmento económico o residencial estándar, enfocar esfuerzos en rotación y competitividad en precio.

  • Planeación geoestratégica: Utilizar la información derivada del ACM para orientar futuras inversiones hacia zonas con mayor asociación a estratos altos y mayor valorización proyectada.

El análisis desarrollado proporciona una base cuantitativa sólida para orientar decisiones de inversión, segmentación y posicionamiento competitivo, permitiendo a la empresa maximizar beneficios y reducir riesgos en un entorno inmobiliario que - como se sabe- es ampliamente dinámico y competitivo.