El presente análisis tiene como propósito explorar la oferta inmobiliaria urbana de la ciudad de Cali mediante técnicas estadísticas multivariadas. A partir de información sobre características físicas, económicas y geográficas de las viviendas ofertadas, se busca identificar patrones de comportamiento, reducir la dimensionalidad de los datos y reconocer segmentos de propiedades con características similares que puedan contribuir a la toma de decisiones en el mercado inmobiliario.
La información analizada proviene de datos de ofertas inmobiliarias
obtenidos mediante web scraping y contenidos en el paquete
paqueteMODELOS.
data("vivienda", package = "paqueteMODELOS")
dim(vivienda)
## [1] 8322 13
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=
## .. cols(
## .. id = col_double(),
## .. zona = col_character(),
## .. piso = col_character(),
## .. estrato = col_double(),
## .. preciom = col_double(),
## .. areaconst = col_double(),
## .. parqueaderos = col_double(),
## .. banios = col_double(),
## .. habitaciones = col_double(),
## .. tipo = col_character(),
## .. barrio = col_character(),
## .. longitud = col_double(),
## .. latitud = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
La base de datos está conformada por 8.322 registros de propiedades y 13 variables que describen características económicas, físicas, categóricas y geográficas de la oferta inmobiliaria.
Se realizó una exploración inicial de los datos con el propósito de reconocer su estructura, distribución y posibles problemas de calidad antes de aplicar las técnicas multivariadas.
head(vivienda)
## # A tibble: 6 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona O… <NA> 3 250 70 1 3 6
## 2 1169 Zona O… <NA> 3 320 120 1 2 3
## 3 1350 Zona O… <NA> 3 350 220 2 2 4
## 4 5992 Zona S… 02 4 400 280 3 5 3
## 5 1212 Zona N… 01 5 260 90 1 2 3
## 6 1724 Zona N… 01 5 240 87 1 3 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
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
Se evaluó la presencia de datos faltantes en cada una de las variables antes de realizar los análisis estadísticos.
tabla_faltantes <- data.frame(
Variable = names(vivienda),
Faltantes = unname(colSums(is.na(vivienda))),
Porcentaje = unname(round(colMeans(is.na(vivienda)) * 100, 2))
)
knitr::kable(
tabla_faltantes,
row.names = FALSE,
col.names = c("Variable", "Datos faltantes", "Porcentaje (%)"),
align = c("l", "r", "r"),
caption = "Valores faltantes en la base de datos"
)
| Variable | Datos faltantes | 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 |
El análisis de completitud evidenció que la mayoría de las variables
presentó una proporción mínima de datos faltantes, entre 0,02 % y 0,04
%. Las principales excepciones fueron piso y
parqueaderos, con 31,70 % y 19,29 % de valores ausentes,
respectivamente. Por esta razón, estas variables requieren una
evaluación particular antes de su incorporación en los análisis
multivariados.
Dado que las variables piso y parqueaderos
presentaron las mayores proporciones de valores faltantes, se examinó si
su ausencia estaba relacionada con el tipo de inmueble.
tabla_piso_tipo <- table(
Tipo = vivienda$tipo,
Piso_faltante = is.na(vivienda$piso)
)
tabla_parqueadero_tipo <- table(
Tipo = vivienda$tipo,
Parqueadero_faltante = is.na(vivienda$parqueaderos)
)
tabla_piso_tipo
## Piso_faltante
## Tipo FALSE TRUE
## Apartamento 3719 1381
## Casa 1965 1254
tabla_parqueadero_tipo
## Parqueadero_faltante
## Tipo FALSE TRUE
## Apartamento 4231 869
## Casa 2486 733
round(
prop.table(tabla_piso_tipo, margin = 1) * 100,
2
)
## Piso_faltante
## Tipo FALSE TRUE
## Apartamento 72.92 27.08
## Casa 61.04 38.96
round(
prop.table(tabla_parqueadero_tipo, margin = 1) * 100,
2
)
## Parqueadero_faltante
## Tipo FALSE TRUE
## Apartamento 82.96 17.04
## Casa 77.23 22.77
El Análisis de Componentes Principales (ACP) se utilizó con el propósito de reducir la dimensionalidad de las características cuantitativas de las propiedades e identificar las principales dimensiones que explican la variabilidad de la oferta inmobiliaria.
Para este análisis se seleccionaron las variables
preciom, areaconst, parqueaderos,
banios y habitaciones, debido a que
representan características económicas y físicas de los inmuebles y se
encuentran expresadas numéricamente. La variable piso no
fue incorporada debido a su naturaleza categórica y a su elevada
proporción de datos faltantes.
Antes de realizar el ACP se seleccionaron únicamente los registros completos para las variables incluidas.
datos_pca <- vivienda %>%
select(
preciom,
areaconst,
parqueaderos,
banios,
habitaciones
) %>%
drop_na()
dim(datos_pca)
## [1] 6717 5
summary(datos_pca)
## 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
## Min. : 0.000
## 1st Qu.: 3.000
## Median : 3.000
## Mean : 3.611
## 3rd Qu.: 4.000
## Max. :10.000
Antes de aplicar el Análisis de Componentes Principales se examinó la matriz de correlaciones entre las variables seleccionadas. Este procedimiento permite identificar el grado de asociación lineal existente entre las características de los inmuebles y valorar la pertinencia de resumir su información mediante componentes comunes.
matriz_cor <- cor(datos_pca)
round(matriz_cor, 2)
## preciom areaconst parqueaderos banios habitaciones
## preciom 1.00 0.68 0.69 0.67 0.27
## areaconst 0.68 1.00 0.58 0.67 0.53
## parqueaderos 0.69 0.58 1.00 0.57 0.28
## banios 0.67 0.67 0.57 1.00 0.60
## habitaciones 0.27 0.53 0.28 0.60 1.00
La matriz de correlaciones evidenció asociaciones positivas de magnitud moderada a alta entre varias características de los inmuebles. El precio presentó correlaciones de 0,69 con el número de parqueaderos, 0,68 con el área construida y 0,67 con el número de baños. Asimismo, se observó una correlación de 0,67 entre el área construida y el número de baños, y de 0,60 entre baños y habitaciones. Estos resultados indican que varias de las características analizadas comparten información, lo que sustenta la aplicación del Análisis de Componentes Principales como estrategia de reducción de dimensionalidad.
Debido a que las variables seleccionadas se encuentran expresadas en escalas diferentes, el Análisis de Componentes Principales se realizó sobre variables estandarizadas. Esto permite que cada variable contribuya al análisis independientemente de su unidad de medida y evita que variables de mayor magnitud, como el precio o el área construida, dominen la construcción de los componentes.
modelo_pca <- FactoMineR::PCA(
datos_pca,
scale.unit = TRUE,
ncp = 5,
graph = FALSE
)
modelo_pca$eig
## eigenvalue percentage of variance cumulative percentage of variance
## comp 1 3.2527065 65.054130 65.05413
## comp 2 0.8612191 17.224382 82.27851
## comp 3 0.3644694 7.289389 89.56790
## comp 4 0.3285488 6.570975 96.13888
## comp 5 0.1930562 3.861124 100.00000
A partir de los valores propios obtenidos se evaluó la proporción de variabilidad explicada por cada componente principal.
tabla_varianza <- data.frame(
Componente = paste0("CP", 1:nrow(modelo_pca$eig)),
Valor_propio = modelo_pca$eig[, 1],
Varianza_explicada = modelo_pca$eig[, 2],
Varianza_acumulada = modelo_pca$eig[, 3]
)
knitr::kable(
tabla_varianza,
digits = 2,
row.names = FALSE,
col.names = c(
"Componente",
"Valor propio",
"Varianza explicada (%)",
"Varianza acumulada (%)"
),
caption = "Varianza explicada por los componentes principales"
)
| Componente | Valor propio | Varianza explicada (%) | Varianza acumulada (%) |
|---|---|---|---|
| CP1 | 3.25 | 65.05 | 65.05 |
| CP2 | 0.86 | 17.22 | 82.28 |
| CP3 | 0.36 | 7.29 | 89.57 |
| CP4 | 0.33 | 6.57 | 96.14 |
| CP5 | 0.19 | 3.86 | 100.00 |
El primer componente principal explicó el 65,05 % de la variabilidad total de las características analizadas, mientras que el segundo explicó un 17,22 % adicional. En conjunto, los dos primeros componentes acumularon el 82,28 % de la variabilidad original, lo que indica que una representación bidimensional conserva una proporción considerable de la información contenida en las cinco variables estudiadas. Aunque únicamente el primer componente presentó un valor propio superior a 1 según el criterio de Kaiser, se conservaron los dos primeros componentes con fines interpretativos y de visualización, dada su elevada capacidad explicativa conjunta.
factoextra::fviz_eig(
modelo_pca,
addlabels = TRUE
)
El gráfico de sedimentación evidencia una marcada reducción de la varianza explicada después del primer componente. No obstante, la incorporación del segundo componente eleva la varianza acumulada hasta el 82,28 %, mientras que cada uno de los componentes restantes aporta individualmente menos del 8 % de la variabilidad total.
Para interpretar el significado de los componentes principales se examinaron las coordenadas y las contribuciones de cada variable. Las coordenadas permiten identificar la dirección y magnitud de la asociación de cada variable con los componentes, mientras que las contribuciones muestran cuáles variables participan en mayor medida en su construcción.
round(modelo_pca$var$coord, 3)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## preciom 0.841 -0.385 -0.215 -0.111 0.293
## areaconst 0.870 0.046 -0.270 0.381 -0.155
## parqueaderos 0.785 -0.398 0.462 0.098 -0.049
## banios 0.876 0.152 -0.062 -0.398 -0.217
## habitaciones 0.637 0.728 0.169 0.054 0.183
round(modelo_pca$var$contrib, 2)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## preciom 21.74 17.21 12.71 3.76 44.58
## areaconst 23.25 0.24 19.99 44.15 12.37
## parqueaderos 18.95 18.41 58.46 2.92 1.27
## banios 23.59 2.68 1.05 48.28 24.40
## habitaciones 12.48 61.46 7.80 0.89 17.38
El primer componente principal presentó asociaciones positivas elevadas con todas las variables analizadas, destacándose el número de baños (0,876), el área construida (0,870), el precio (0,841) y el número de parqueaderos (0,785). Asimismo, estas variables realizaron las mayores contribuciones a su construcción. En consecuencia, el primer componente puede interpretarse como una dimensión de tamaño, valor y dotación del inmueble, en la cual valores elevados representan propiedades de mayor dimensión y nivel de equipamiento.
El segundo componente estuvo determinado principalmente por el número de habitaciones, cuya coordenada fue de 0,728 y cuya contribución alcanzó el 61,46 %. En sentido contrario se ubicaron el precio (-0,385) y el número de parqueaderos (-0,398). Por esta razón, el segundo componente puede interpretarse principalmente como una dimensión asociada con la configuración habitacional del inmueble, permitiendo diferenciar propiedades caracterizadas por un mayor número de habitaciones de aquellas con mayor peso relativo del valor económico y la disponibilidad de parqueaderos.
factoextra::fviz_pca_var(
modelo_pca,
axes = c(1, 2),
col.var = "contrib",
repel = TRUE
)
El círculo de correlaciones muestra que el precio, el área construida, el número de baños y los parqueaderos se proyectan principalmente sobre el primer componente y presentan orientaciones similares, lo que refleja las asociaciones positivas observadas entre estas características. Este patrón respalda la interpretación de la Dimensión 1 como una medida general de tamaño, valor y dotación del inmueble. Por su parte, el número de habitaciones presenta una mayor proyección sobre la segunda dimensión, confirmando que este componente representa principalmente diferencias relacionadas con la configuración habitacional de las propiedades.
El análisis de conglomerados se utilizó con el propósito de identificar grupos de propiedades con características similares en términos de precio, área construida, número de parqueaderos, baños y habitaciones. A diferencia del Análisis de Componentes Principales, cuyo objetivo es reducir la dimensionalidad, el análisis de conglomerados busca clasificar las observaciones en segmentos internamente homogéneos y diferenciados entre sí.
Debido a que las variables se encuentran expresadas en escalas diferentes, se realizó una estandarización previa. Esta transformación permite que todas las variables tengan una influencia comparable en la construcción de los conglomerados.
datos_cluster <- scale(datos_pca)
summary(datos_cluster)
## preciom areaconst parqueaderos banios
## Min. :-1.2264 Min. :-1.0488 Min. :-0.7425 Min. :-2.3587
## 1st Qu.:-0.6593 1st Qu.:-0.6602 1st Qu.:-0.7425 1st Qu.:-0.9096
## Median :-0.3399 Median :-0.3549 Median : 0.1465 Median :-0.1851
## Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 0.3317 3rd Qu.: 0.3599 3rd Qu.: 0.1465 3rd Qu.: 0.5394
## Max. : 4.5669 Max. :10.8526 Max. : 7.2582 Max. : 4.8866
## habitaciones
## Min. :-2.6466
## 1st Qu.:-0.4477
## Median :-0.4477
## Mean : 0.0000
## 3rd Qu.: 0.2852
## Max. : 4.6831
Para orientar la selección del número de grupos se utilizó el método del codo (Elbow Method), basado en la variación de la suma de cuadrados dentro de los conglomerados para diferentes valores de \(K\).
set.seed(123)
factoextra::fviz_nbclust(
datos_cluster,
kmeans,
method = "wss",
k.max = 10,
nstart = 25
)
Como criterio complementario al método del codo, se evaluó el coeficiente silhouette promedio para soluciones de dos, tres y cuatro conglomerados. Debido al tamaño de la base de datos, esta evaluación se realizó sobre una muestra aleatoria reproducible de 1.500 observaciones.
set.seed(123)
muestra_cluster <- datos_cluster[
sample(seq_len(nrow(datos_cluster)), 1500),
,
drop = FALSE
]
dist_muestra <- dist(muestra_cluster)
sil_promedio <- function(k) {
modelo <- kmeans(
muestra_cluster,
centers = k,
nstart = 25
)
sil <- cluster::silhouette(
modelo$cluster,
dist_muestra
)
mean(sil[, 3])
}
resultado_silhouette <- data.frame(
Conglomerados = 2:4,
Silhouette_promedio = sapply(2:4, sil_promedio)
)
knitr::kable(
resultado_silhouette,
digits = 3,
row.names = FALSE,
col.names = c(
"Número de conglomerados",
"Silhouette promedio"
),
caption = "Coeficiente silhouette promedio según número de conglomerados"
)
| Número de conglomerados | Silhouette promedio |
|---|---|
| 2 | 0.515 |
| 3 | 0.386 |
| 4 | 0.375 |
La solución de dos conglomerados presentó el mayor coeficiente silhouette promedio (0,515), frente a 0,386 para tres conglomerados y 0,375 para cuatro. En conjunto con el comportamiento observado mediante el método del codo, estos resultados respaldan la selección de una solución de dos conglomerados, al presentar la mejor combinación de cohesión interna y separación entre grupos.
A partir de los resultados obtenidos en los procedimientos de selección, se aplicó el algoritmo k-means utilizando dos conglomerados. Se emplearon múltiples inicializaciones aleatorias para reducir la posibilidad de obtener una solución dependiente de centros iniciales desfavorables.
set.seed(123)
modelo_cluster <- kmeans(
datos_cluster,
centers = 2,
nstart = 50
)
table(modelo_cluster$cluster)
##
## 1 2
## 4860 1857
Para facilitar la interpretación de los segmentos identificados, los conglomerados obtenidos se incorporaron a los datos originales utilizados en el análisis y se calcularon los valores promedio de las características inmobiliarias para cada grupo.
resultados_cluster <- datos_pca %>%
mutate(
Cluster = factor(modelo_cluster$cluster)
)
perfil_cluster <- resultados_cluster %>%
group_by(Cluster) %>%
summarise(
n = n(),
Precio_promedio = mean(preciom),
Area_promedio = mean(areaconst),
Parqueaderos_promedio = mean(parqueaderos),
Banios_promedio = mean(banios),
Habitaciones_promedio = mean(habitaciones)
)
knitr::kable(
perfil_cluster,
digits = 2,
row.names = FALSE,
col.names = c(
"Conglomerado",
"n",
"Precio promedio",
"Área promedio (m²)",
"Parqueaderos",
"Baños",
"Habitaciones"
),
caption = "Características promedio de los conglomerados identificados"
)
| Conglomerado | n | Precio promedio | Área promedio (m²) | Parqueaderos | Baños | Habitaciones |
|---|---|---|---|---|---|---|
| 1 | 4860 | 321.40 | 118.96 | 1.41 | 2.64 | 3.16 |
| 2 | 1857 | 854.86 | 343.86 | 2.95 | 4.87 | 4.80 |
Los resultados evidencian dos segmentos claramente diferenciados de la oferta inmobiliaria. El Conglomerado 1, conformado por 4.860 propiedades, presenta un precio promedio de 321,40, un área construida media de 118,96 m², 1,41 parqueaderos, 2,64 baños y 3,16 habitaciones. Este grupo representa propiedades de menor tamaño, valor y dotación relativa dentro de la oferta analizada. En contraste, el Conglomerado 2, compuesto por 1.857 propiedades, presenta un precio promedio de 854,86, un área construida media de 343,86 m², 2,95 parqueaderos, 4,87 baños y 4,80 habitaciones, configurando un segmento de inmuebles de mayor tamaño, valor y dotación. Esta diferenciación es coherente con los resultados obtenidos mediante el Análisis de Componentes Principales, particularmente con la primera dimensión, asociada con el tamaño, valor y nivel de equipamiento de las propiedades.
Con el propósito de visualizar la separación entre los segmentos identificados, los conglomerados fueron proyectados sobre las dos primeras dimensiones del Análisis de Componentes Principales, las cuales representan conjuntamente el 82,28 % de la variabilidad de los datos.
cluster_pca <- data.frame(
CP1 = modelo_pca$ind$coord[, 1],
CP2 = modelo_pca$ind$coord[, 2],
Cluster = factor(modelo_cluster$cluster)
)
ggplot(
cluster_pca,
aes(
x = CP1,
y = CP2,
color = Cluster
)
) +
geom_point(
alpha = 0.30,
size = 0.8
) +
stat_ellipse(
linewidth = 0.8
) +
labs(
title = "Conglomerados de propiedades sobre los componentes principales",
x = "CP1 (65,05 %)",
y = "CP2 (17,22 %)",
color = "Conglomerado"
) +
theme_minimal()
La proyección de los conglomerados sobre los dos primeros componentes principales evidencia que la diferenciación entre los grupos ocurre principalmente a lo largo de la primera dimensión. El Conglomerado 1 se concentra en valores bajos de CP1, correspondientes a inmuebles de menor tamaño, valor y dotación relativa, mientras que el Conglomerado 2 se distribuye principalmente hacia valores más elevados de esta dimensión, asociados con propiedades de mayor área, precio y equipamiento. Aunque existe cierto solapamiento entre ambos segmentos, la distribución observada respalda la diferenciación obtenida mediante el algoritmo k-means y resulta coherente con la interpretación previa del primer componente principal.
El análisis de correspondencias se utilizó para explorar la relación entre variables categóricas de la oferta inmobiliaria. Inicialmente se examinó la asociación entre la zona de ubicación y el tipo de inmueble mediante una tabla de contingencia.
tabla_zona_tipo <- table(
Zona = vivienda$zona,
Tipo = vivienda$tipo
)
tabla_zona_tipo
## Tipo
## Zona Apartamento Casa
## Zona Centro 24 100
## Zona Norte 1198 722
## Zona Oeste 1029 169
## Zona Oriente 62 289
## Zona Sur 2787 1939
Antes de realizar el análisis de correspondencias se evaluó si existía asociación estadística entre la zona y el tipo de inmueble mediante la prueba chi-cuadrado de independencia.
prueba_chi <- chisq.test(tabla_zona_tipo)
prueba_chi
##
## Pearson's Chi-squared test
##
## data: tabla_zona_tipo
## X-squared = 690.93, df = 4, p-value < 2.2e-16
La prueba chi-cuadrado de independencia evidenció una asociación estadísticamente significativa entre la zona de ubicación y el tipo de inmueble ofertado (\(\chi^2 = 690,93\); gl = 4; p < 0,001). Por lo tanto, se rechaza la hipótesis de independencia, indicando que la distribución de casas y apartamentos difiere según la zona de la ciudad.
Una vez evaluada la asociación entre las variables, se aplicó un análisis de correspondencias para identificar los patrones de proximidad entre las categorías de zona y tipo de inmueble.
modelo_ca <- FactoMineR::CA(
tabla_zona_tipo,
graph = FALSE
)
modelo_ca$eig
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.08305442 100 100
El análisis de correspondencias generó una única dimensión, la cual explica el 100 % de la inercia total. Este resultado es esperado debido a que la variable tipo de inmueble posee únicamente dos categorías, por lo que la estructura de asociación entre zona y tipo puede representarse completamente mediante una sola dimensión.
Para identificar las categorías que explican la asociación observada se examinaron las coordenadas, contribuciones y residuos estandarizados.
round(modelo_ca$row$coord, 3)
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## -0.861 0.022 0.505 -0.896 -0.048
round(modelo_ca$col$coord, 3)
## [,1]
## Apartamento 0.229
## Casa -0.363
round(modelo_ca$row$contrib, 2)
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 13.31 0.14 44.19 40.79 1.57
round(prueba_chi$stdres, 2)
## Tipo
## Zona Apartamento Casa
## Zona Centro -9.66 9.66
## Zona Norte 1.12 -1.12
## Zona Oeste 18.89 -18.89
## Zona Oriente -17.15 17.15
## Zona Sur -5.01 5.01
La dimensión obtenida permitió identificar patrones diferenciados en la distribución de los tipos de inmueble según la zona. La Zona Oeste presentó una coordenada positiva de 0,505, ubicándose en la misma dirección que la categoría Apartamento (0,229), mientras que las zonas Oriente (-0,896) y Centro (-0,861) se localizaron en la dirección correspondiente a la categoría Casa (-0,363). Las mayores contribuciones a la construcción de la dimensión correspondieron a Zona Oeste (44,19 %) y Zona Oriente (40,79 %), seguidas por Zona Centro (13,31 %).
Los residuos estandarizados reforzaron esta interpretación. La combinación Zona Oeste–Apartamento presentó un residuo positivo de 18,89, indicando una frecuencia de apartamentos considerablemente mayor a la esperada bajo independencia. De forma complementaria, Zona Oriente–Casa presentó un residuo de 17,15 y Zona Centro–Casa de 9,66, evidenciando una mayor presencia relativa de casas en estas zonas. La Zona Sur también mostró una asociación positiva con casas (residuo = 5,01), mientras que la Zona Norte presentó residuos cercanos a cero, sugiriendo una distribución más próxima a la esperada bajo independencia.
datos_acm <- vivienda %>%
select(zona, tipo, barrio) %>%
drop_na() %>%
mutate(
zona = factor(zona),
tipo = factor(tipo),
barrio = factor(barrio)
)
dim(datos_acm)
## [1] 8319 3
modelo_acm <- FactoMineR::MCA(
datos_acm,
graph = FALSE
)
modelo_acm$eig
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.7110099 0.4847794 0.4847794
## dim 2 0.6602040 0.4501391 0.9349185
## dim 3 0.6508372 0.4437526 1.3786712
## dim 4 0.6231832 0.4248976 1.8035688
## dim 5 0.4442429 0.3028929 2.1064617
El Análisis de Correspondencias Múltiples evidenció una estructura categórica distribuida entre numerosas dimensiones, situación esperable dada la elevada cantidad de categorías contenidas en la variable barrio. Las dos primeras dimensiones explicaron conjuntamente el 0,93 % de la inercia total, por lo que su interpretación se realizó principalmente a partir de las categorías con mayor contribución.
La primera dimensión estuvo determinada principalmente por Zona Oeste (20,09 %) y Zona Oriente (16,96 %), junto con las categorías Casa (9,50 %) y Apartamento (6,00 %). Este patrón resulta coherente con el análisis de correspondencias simple realizado previamente, en el cual estas zonas mostraron una marcada diferenciación respecto al tipo de inmueble ofertado. También destacaron barrios como Santa Teresita, Normandía y Los Cristales.
La segunda dimensión estuvo explicada principalmente por Zona Norte (29,91 %) y Zona Sur (17,35 %), además de barrios como La Flora (5,87 %) y Valle del Lili (3,79 %). En consecuencia, esta dimensión refleja principalmente una diferenciación territorial adicional de la oferta inmobiliaria entre sectores de la ciudad.
factoextra::fviz_mca_var(
modelo_acm,
axes = c(1, 2),
repel = TRUE,
select.var = list(contrib = 20)
)
El mapa factorial del Análisis de Correspondencias Múltiples permitió
identificar patrones territoriales en la distribución de las categorías
analizadas. La Zona Oeste se ubicó próxima a la categoría Apartamento y
a barrios como Los Cristales, Cristales, Normandía, Santa Teresita y
Aguacatal. Por su parte, la Zona Norte presentó proximidad con La Flora,
Acopi y Prados del Norte, mientras que la Zona Oriente se relacionó
espacialmente con Ciudad Córdoba y Alfonso López. En la parte inferior
del plano, la Zona Sur se ubicó próxima a Valle del Lili, Ciudad Jardín
y Pance.
La disposición de las categorías Casa y Apartamento sobre la primera dimensión resulta consistente con el análisis de correspondencias simple, confirmando la existencia de diferencias territoriales en la composición de la oferta inmobiliaria. No obstante, debido a que las dos primeras dimensiones explican una proporción reducida de la inercia total, consecuencia de la elevada cantidad de categorías de la variable barrio, estas proximidades deben interpretarse principalmente como patrones exploratorios y no como asociaciones determinísticas.
La disponibilidad de coordenadas geográficas permitió representar espacialmente los segmentos identificados y complementar la caracterización de la oferta inmobiliaria.
filas_cluster <- complete.cases(
vivienda[, c(
"preciom",
"areaconst",
"parqueaderos",
"banios",
"habitaciones"
)]
)
datos_mapa <- vivienda[filas_cluster, ] %>%
mutate(
Cluster = factor(modelo_cluster$cluster)
) %>%
filter(
!is.na(longitud),
!is.na(latitud)
)
ggplot(
datos_mapa,
aes(
x = longitud,
y = latitud,
color = Cluster
)
) +
geom_point(alpha = 0.35, size = 0.8) +
coord_equal() +
labs(
title = "Distribución espacial de los conglomerados inmobiliarios",
x = "Longitud",
y = "Latitud",
color = "Conglomerado"
) +
theme_minimal()
La representación espacial permite complementar la segmentación obtenida
mediante k-means al mostrar la localización de los dos conglomerados
dentro de la ciudad. Esta visualización facilita reconocer la
distribución territorial de propiedades con diferentes características
de tamaño, valor y dotación, incorporando así el componente geográfico
al análisis multivariado de la oferta inmobiliaria.
Los diferentes procedimientos estadísticos utilizados proporcionaron una visión complementaria de la oferta inmobiliaria urbana. El Análisis de Componentes Principales mostró que el 82,28 % de la variabilidad de las cinco características cuantitativas consideradas puede representarse mediante los dos primeros componentes. La primera dimensión estuvo asociada principalmente con el tamaño, valor y dotación de los inmuebles.
De manera coherente con esta estructura, el análisis de conglomerados identificó dos segmentos claramente diferenciados. El primero agrupó 4.860 propiedades de menor tamaño, precio y dotación relativa, mientras que el segundo reunió 1.857 inmuebles caracterizados por mayores valores promedio de precio, área construida, parqueaderos, baños y habitaciones.
Desde la perspectiva categórica y territorial, la prueba chi-cuadrado y el análisis de correspondencias demostraron que el tipo de inmueble no se distribuye independientemente de la zona de la ciudad. La Zona Oeste presentó una mayor asociación relativa con apartamentos, mientras que las zonas Oriente y Centro mostraron mayor asociación con casas.
El Análisis de Correspondencias Múltiples amplió estos resultados al incorporar la variable barrio. El mapa factorial mostró agrupamientos territoriales reconocibles, como la proximidad de Zona Norte con La Flora, Acopi y Prados del Norte; Zona Oriente con Ciudad Córdoba y Alfonso López; Zona Sur con Valle del Lili, Ciudad Jardín y Pance; y Zona Oeste con barrios como Cristales, Normandía, Santa Teresita y Aguacatal. Debido al elevado número de categorías de barrio, estas relaciones se interpretaron con carácter exploratorio.
En conjunto, los resultados indican que la oferta inmobiliaria de Cali presenta una estructura heterogénea, determinada tanto por las características económicas y físicas de las propiedades como por su localización y composición territorial.
El Análisis de Componentes Principales permitió reducir satisfactoriamente la dimensionalidad de las características cuantitativas de los inmuebles. Los dos primeros componentes explicaron conjuntamente el 82,28 % de la variabilidad total.
La principal dimensión de diferenciación de las propiedades estuvo asociada con su tamaño, valor y dotación, principalmente mediante el área construida, el precio, el número de baños y la disponibilidad de parqueaderos.
El análisis de conglomerados permitió identificar dos segmentos de oferta claramente diferenciados: un grupo mayoritario de propiedades de menor tamaño, precio y dotación relativa y otro constituido por inmuebles de mayores dimensiones, valor y equipamiento.
Se identificó una asociación estadísticamente significativa entre la zona de ubicación y el tipo de inmueble. La Zona Oeste presentó una mayor asociación con apartamentos, mientras que las zonas Oriente y Centro mostraron una presencia relativa mayor de casas.
El análisis de correspondencias múltiples evidenció patrones adicionales relacionados con los barrios y las zonas de la ciudad, reforzando la importancia de incorporar la dimensión territorial en el estudio de la oferta inmobiliaria.
En consecuencia, la oferta inmobiliaria analizada no constituye un mercado homogéneo, sino que presenta segmentos diferenciados por características físicas, económicas, categóricas y geográficas.
Los resultados obtenidos sugieren que las estrategias comerciales de la inmobiliaria deberían diferenciarse según las características de los segmentos identificados. Las propiedades del primer conglomerado pueden orientarse hacia compradores que prioricen accesibilidad económica y características residenciales convencionales, mientras que los inmuebles del segundo conglomerado pueden dirigirse hacia segmentos con mayor capacidad adquisitiva y preferencias por propiedades amplias y con mayor dotación.
Asimismo, la asociación observada entre zona y tipo de inmueble puede utilizarse para orientar estrategias de captación y promoción específicas. La mayor presencia relativa de apartamentos en la Zona Oeste y de casas en las zonas Oriente y Centro evidencia que una estrategia comercial homogénea para toda la ciudad podría desaprovechar diferencias relevantes del mercado.
Finalmente, se recomienda incorporar de manera sistemática información geográfica y técnicas de segmentación multivariada en los procesos de análisis de mercado. La combinación de precio, características físicas, tipo de inmueble y ubicación puede contribuir a una mejor identificación de oportunidades comerciales y a una focalización más eficiente de las estrategias de promoción.
Los resultados deben interpretarse considerando algunas limitaciones
de la información disponible. La variable piso presentó una
proporción elevada de datos faltantes y no fue incorporada en los
análisis cuantitativos, mientras que parqueaderos también
presentó información faltante que redujo el número de registros
disponibles para el ACP y el análisis de conglomerados.
Adicionalmente, la variable barrio contiene numerosas
categorías y posibles variaciones en la denominación de algunos
sectores, lo cual incrementa la dimensionalidad del Análisis de
Correspondencias Múltiples. Por esta razón, las proximidades observadas
en el mapa factorial fueron utilizadas principalmente con fines
exploratorios.