#Problema

Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.

#Retos:

El reto principal consiste en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos

ANÁLISIS DE COMPONENTES PRINCIPALES

Análisis de Componentes Principales: Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y oferta del mercado.

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

La base de datos se compone de 13 variables, incluido ID, con información sobre el mercado de viviendas de la ciudad de Cali.

Análisis de variables numéricas y categóricas

# separar variables no numericas de numericas

numeric_vars <- sapply(vivienda, is.numeric)

# Mostrar los nombres de las variables numéricas
names(vivienda)[numeric_vars]
## [1] "id"           "estrato"      "preciom"      "areaconst"    "parqueaderos"
## [6] "banios"       "habitaciones" "longitud"     "latitud"
# Mostrar los nombres de las variables no numéricas
names(vivienda)[!numeric_vars]
## [1] "zona"   "piso"   "tipo"   "barrio"

4 de las 13 variables son categóricas, para usar esta información se transformara la variable piso en numérica y se generará varibles dumies para zona y tipo. La variable barrio se omitirá del análisis.

Combertir piso en variable numérica

# Convertir la variable 'piso' a factor y luego a numérico
vivienda$piso_numeric <- as.numeric(as.factor(vivienda$piso))

Creación de dummies

# fastDummies'
library(fastDummies)
## Warning: package 'fastDummies' was built under R version 4.3.3
## Thank you for using fastDummies!
## To acknowledge our work, please cite the package:
## Kaplan, J. & Schlegel, B. (2023). fastDummies: Fast Creation of Dummy (Binary) Columns and Rows from Categorical Variables. Version 1.7.1. URL: https://github.com/jacobkap/fastDummies, https://jacobkap.github.io/fastDummies/.

Convertir variables categóricas en dummy variables

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
## 
##     combine
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
vivienda_dummies <- vivienda %>%
  dummy_cols(select_columns = c("zona", "tipo"), remove_first_dummy = FALSE) %>% 
  select(-c(zona, tipo)) 

Eliminar la variables que no se usará en el análisis

viviendaACP <- vivienda_dummies %>%
  select(-c(barrio, id, `zona_Zona Centro`, zona_NA, tipo_Casa, tipo_NA))

Estandarizar variables numéricas

numeric_vars <- select(viviendaACP, where(is.numeric))
viviendaZ <- scale(numeric_vars)

summary(viviendaZ)
##     estrato           preciom          areaconst        parqueaderos    
##  Min.   :-1.5872   Min.   :-1.1438   Min.   :-1.0138   Min.   :-0.7425  
##  1st Qu.:-0.6156   1st Qu.:-0.6508   1st Qu.:-0.6640   1st Qu.:-0.7425  
##  Median : 0.3560   Median :-0.3161   Median :-0.3633   Median : 0.1465  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.3560   3rd Qu.: 0.3229   3rd Qu.: 0.3782   3rd Qu.: 0.1465  
##  Max.   : 1.3276   Max.   : 4.7623   Max.   :10.9822   Max.   : 7.2582  
##  NA's   :3         NA's   :2         NA's   :3         NA's   :1605     
##      banios          habitaciones        longitud           latitud        
##  Min.   :-2.17847   Min.   :-2.4702   Min.   :-3.47989   Min.   :-1.98516  
##  1st Qu.:-0.77812   1st Qu.:-0.4148   1st Qu.:-0.74572   1st Qu.:-0.86422  
##  Median :-0.07794   Median :-0.4148   Median :-0.08013   Median :-0.03856  
##  Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.00000  
##  3rd Qu.: 0.62224   3rd Qu.: 0.2704   3rd Qu.: 0.55844   3rd Qu.: 0.80575  
##  Max.   : 4.82330   Max.   : 4.3813   Max.   : 3.77083   Max.   : 1.87755  
##  NA's   :3          NA's   :3         NA's   :3          NA's   :3         
##   piso_numeric     zona_Zona Norte   zona_Zona Oeste   zona_Zona Oriente
##  Min.   :-1.0597   Min.   :-0.5477   Min.   :-0.4101   Min.   :-0.2099  
##  1st Qu.:-0.6773   1st Qu.:-0.5477   1st Qu.:-0.4101   1st Qu.:-0.2099  
##  Median :-0.2948   Median :-0.5477   Median :-0.4101   Median :-0.2099  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.4700   3rd Qu.:-0.5477   3rd Qu.:-0.4101   3rd Qu.:-0.2099  
##  Max.   : 3.1471   Max.   : 1.8255   Max.   : 2.4379   Max.   : 4.7643  
##  NA's   :2638      NA's   :3         NA's   :3         NA's   :3        
##  zona_Zona Sur     tipo_Apartamento 
##  Min.   :-1.1468   Min.   :-1.2586  
##  1st Qu.:-1.1468   1st Qu.:-1.2586  
##  Median : 0.8719   Median : 0.7944  
##  Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.8719   3rd Qu.: 0.7944  
##  Max.   : 0.8719   Max.   : 0.7944  
##  NA's   :3         NA's   :3

Para realizar el análisis de componentes principales se estandarizan las variables, la base de datos a trabajar está compuesta por 14 variables estandarizadas con la información del mercado de vivienda.

Detección de faltantes

library(mice)
## Warning: package 'mice' was built under R version 4.3.3
## Warning in check_dep_version(): ABI version mismatch: 
## lme4 was built with Matrix ABI version 1
## Current Matrix ABI version is 0
## Please re-install lme4 from source or restore original 'Matrix' package
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
md.pattern(viviendaZ)

##      preciom estrato areaconst banios habitaciones longitud latitud
## 4808       1       1         1      1            1        1       1
## 1909       1       1         1      1            1        1       1
## 876        1       1         1      1            1        1       1
## 726        1       1         1      1            1        1       1
## 1          1       0         0      0            0        0       0
## 2          0       0         0      0            0        0       0
##            2       3         3      3            3        3       3
##      zona_Zona Norte zona_Zona Oeste zona_Zona Oriente zona_Zona Sur
## 4808               1               1                 1             1
## 1909               1               1                 1             1
## 876                1               1                 1             1
## 726                1               1                 1             1
## 1                  0               0                 0             0
## 2                  0               0                 0             0
##                    3               3                 3             3
##      tipo_Apartamento parqueaderos piso_numeric     
## 4808                1            1            1    0
## 1909                1            1            0    1
## 876                 1            0            1    1
## 726                 1            0            0    2
## 1                   0            0            0   13
## 2                   0            0            0   14
##                     3         1605         2638 4278
viviendaZ <- na.omit(viviendaZ)
grafico <-md.pattern(viviendaZ, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

La base de datos resultante es “viviendaZ” con 14 variables estandarizadas y 4808 observaciones.

#ACP

prcomp(viviendaZ)
## Standard deviations (1, .., p=14):
##  [1] 1.9370976 1.5717563 1.4234921 1.0221583 0.8832796 0.7523825 0.6388593
##  [8] 0.6137218 0.5707676 0.5361991 0.4635492 0.4597138 0.3998675 0.1095118
## 
## Rotation (n x k) = (14 x 14):
##                           PC1         PC2         PC3         PC4          PC5
## estrato            0.23278571  0.14072423 -0.33622605 -0.19819182 -0.315210350
## preciom            0.43145990  0.15401089 -0.12115537 -0.17913555 -0.073177548
## areaconst          0.42356670  0.02619770  0.16094142 -0.06989721  0.063096896
## parqueaderos       0.39352563  0.07493341 -0.02715384 -0.22322435 -0.183456055
## banios             0.41969986  0.02802121  0.04842751 -0.10673782  0.152357926
## habitaciones       0.27891440 -0.06233759  0.29285598  0.08757310  0.424243745
## longitud          -0.16272075 -0.08127344  0.37515643 -0.35061979  0.080871052
## latitud           -0.10605729  0.49997162  0.31380308  0.05244955 -0.010331803
## piso_numeric      -0.13994153  0.20163536 -0.28296886 -0.58805356  0.615310653
## zona_Zona Norte   -0.11234690  0.29386072  0.38838790 -0.32512220 -0.334496112
## zona_Zona Oeste    0.09274834  0.45509645 -0.31446055  0.45277587  0.190726025
## zona_Zona Oriente -0.01387408 -0.01152512  0.16176908  0.15219516  0.343684548
## zona_Zona Sur      0.03646783 -0.56726519 -0.18824513 -0.12505614 -0.004609348
## tipo_Apartamento  -0.30229866  0.18133259 -0.35623298 -0.18398015 -0.052877149
##                           PC6          PC7         PC8        PC9        PC10
## estrato            0.04802018  0.456921050  0.27201569  0.2758089 -0.24436928
## preciom            0.20934295  0.014294457 -0.07563302  0.1240471  0.32949988
## areaconst          0.01942104 -0.064950533 -0.30316299  0.2251278  0.56423436
## parqueaderos       0.22750758 -0.596202685  0.07832407 -0.4632522 -0.30670922
## banios            -0.14146102  0.320822606  0.20748702 -0.1270752 -0.13694082
## habitaciones      -0.33308207  0.217454527  0.27613394 -0.3558839  0.02541579
## longitud           0.63135606  0.421130159 -0.22729982 -0.2309056 -0.08813902
## latitud           -0.12301905 -0.006998522 -0.14181289 -0.1307549  0.07981286
## piso_numeric      -0.16124318 -0.154777918 -0.16038578  0.1812635 -0.15768695
## zona_Zona Norte   -0.26311563 -0.038556788  0.14731218  0.1373190 -0.02143124
## zona_Zona Oeste    0.19980206  0.147025794 -0.26694803 -0.1579503 -0.13547090
## zona_Zona Oriente  0.45783986 -0.224658445  0.58323664  0.3624971  0.05746244
## zona_Zona Sur     -0.09293356  0.031514039 -0.15252480 -0.1403156  0.09438319
## tipo_Apartamento   0.06024641  0.072148717  0.38607410 -0.4497633  0.57433287
##                           PC11        PC12         PC13         PC14
## estrato            0.463277608 -0.17522243  0.086829456  0.024318529
## preciom           -0.158436186  0.20712828 -0.704393534 -0.010884754
## areaconst          0.120780464 -0.26650250  0.483631910  0.008839805
## parqueaderos       0.118642403 -0.08727473  0.107594347  0.002318014
## banios            -0.418506017  0.52280900  0.369650545  0.010370115
## habitaciones       0.209723792 -0.38907816 -0.295864253 -0.014946002
## longitud          -0.008494637 -0.08791431  0.013522655  0.001934574
## latitud            0.562026215  0.51262043 -0.004788416  0.003681811
## piso_numeric       0.031910491 -0.02919665  0.001204501  0.001012471
## zona_Zona Norte   -0.274506848 -0.20092774 -0.023385777 -0.551888401
## zona_Zona Oeste   -0.128317822 -0.17315013  0.060441165 -0.466709967
## zona_Zona Oriente  0.121325952  0.12171812  0.058770170 -0.253523073
## zona_Zona Sur      0.294392144  0.25595676 -0.009226538 -0.641893923
## tipo_Apartamento  -0.048025411 -0.03162745  0.136713251  0.012514526

Se obtienen 14 componentes prinicipales, el mismo número de variables, a continuación se evaluan el número conveniente de componenetes para explicar el máximo de varianza

Número de componentes

library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
res.pca <- prcomp(viviendaZ)
fviz_eig(res.pca, addlabels = TRUE)

fviz_pca_var(res.pca,
             col.var = "contrib", # Color by contributions to the PC
             gradient.cols = c("#FF7F00",  "#034D94"),
             repel = TRUE     # Avoid text overlapping
)

# Proporción de varianza explicada

prop_var <- (res.pca$sdev)^2 / sum((res.pca$sdev)^2)

Varianza acumulada

cum_var <- cumsum(prop_var)

Resultados

data.frame(
  Component = 1:length(prop_var),
  Proportion_Var = prop_var,
  Cumulative_Var = cum_var
)
# Crear un gráfico de dispersión de las dos primeras componentes principales
pca_data <- as.data.frame(res.pca$x)
plot(pca_data[, 1:2], main = "PCA: Primer y Segundo Componente")

###sentido de los ejes

datos<- rbind(viviendaZ[90,], # ok
              viviendaZ[3377,],
              viviendaZ[23,],
              viviendaZ[2856,])

datos <- as.data.frame(datos)
rownames(datos) = c("viv 90","viv 3377","viv 23","viv 2856")
datos
casos1 <- rbind(res.pca$x[90,1:2],res.pca$x[3377,1:2]) # CP1
rownames(casos1) = c("90","3377")
casos1 <- as.data.frame(casos1)

casos2 <- rbind(res.pca$x[23,1:2], res.pca$x[2856,1:2]) # CP2
rownames(casos2) = c("23","2856")
casos2 <- as.data.frame(casos2)

fviz_pca_ind(res.pca, col.ind = "#DEDEDE", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")) +
  geom_point(data = casos1, aes(x = PC1, y = PC2), color = "red", size = 3) +
  geom_point(data = casos2, aes(x = PC1, y = PC2), color = "blue", size = 3)

# Conclusión

La presente conclusión resume los hallazgos clave del análisis de componentes principales realizado sobre la base de datos de vivienda, cuyo propósito fue reducir la dimensionalidad y comprender mejor las relaciones subyacentes entre las variables consideradas.

El análisis reveló que los primeros ocho componentes principales explican conjuntamente el 80% de la varianza total de los datos. Esto indica que una gran parte de la variabilidad en las características de la vivienda puede ser capturada por estos ocho componentes.

El primer componente principal, que por sí solo explica el 29% de la varianza, está fuertemente influenciado por las variables de precio, área de construcción, número de baños y parqueadero. Esto sugiere que estas características son fundamentales para diferenciar las viviendas en el mercado.

Por otro lado, el segundo componente, que añade un 19% adicional a la varianza explicada, está dominado por las variables de zona, destacando la importancia de la ubicación geográfica en la valoración y características de la vivienda.

Los resultados sugieren que, en el análisis del mercado de vivienda, tanto las características físicas de la propiedad como su ubicación juegan un papel crítico en la variación de los datos. Específicamente, mientras que el precio y las características físicas del inmueble son determinantes para el primer componente, la zona o ubicación geográfica emerge como un factor clave en el segundo componente, indicando una clara segmentación del mercado basada en la localización.

ANÁLSIS DE CONGLOMERADOS:

Análisis de Conglomerados: Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.

# Distribución de los individuos por distancias

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ✔ readr     2.1.5     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::combine() masks gridExtra::combine()
## ✖ mice::filter()   masks dplyr::filter(), stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ✖ tibble::view()   masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# distancia euclidiana
dist_emp <- dist(viviendaZ, method = 'euclidean')

# Cluster jerarquico con el método complete
hc_emp <- hclust(dist_emp, method = 'complete')

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

# asignamos los clusters
viviendaZ <- as.data.frame(viviendaZ)
assigned_cluster <- viviendaZ %>% mutate(cluster = as.factor(cluster_assigments))

# gráfico de puntos
ggplot(assigned_cluster, aes(x = preciom, y = areaconst, color = cluster)) +
  geom_point(size = 4) +
  geom_text(aes(label = cluster), vjust = -.8) + # Agregar etiquetas del clúster
  theme_classic()

#dendograma
plot(hc_emp, cex = 0.6, main = "Dendograma de viviendas", las=1,
     ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_emp, k = 2, border = 2:5)

#Elección del número de conglomerados
library(factoextra)

dist_emp <- dist(viviendaZ, method = "euclidean")
dendograma <- hclust(dist_emp, method = "average")
# plot(dendograma, cex = 0.6, hang = -1) 
barplot(sort(dendograma$height, decreasing = TRUE), horiz = TRUE, 
        main = "Agregaciones (distancias euclidianas)",
        col = "lightblue", ylab = "Nodo", xlab = "Peso", xlim = c(0, 5))

#Por último se mide el indice de Silhouette promedio con el fin de valorar la mejor alternativa para la elección del número de conglomerados

library(tidyverse)
library(cluster)
# distancia euclidiana
dist_emp <- dist(viviendaZ, method = 'euclidean')

# Cluster jerarquico con el método complete
hc_emp <- hclust(dist_emp, method = 'complete')

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

# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(viviendaZ))
sil_avg <- mean(sil[,3])

# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=4 : ", sil_avg)
## Coeficiente de Silhouette promedio k=4 :  0.2490852
# Determinamos a dónde pertenece cada observación k=2
cluster_assigments <- cutree(hc_emp, k = 2)

# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(viviendaZ))
sil_avg <- mean(sil[,3])

# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=2 : ", sil_avg)
## Coeficiente de Silhouette promedio k=2 :  0.515953

k=2 parece ser una mejor elección para tu análisis de clústeres en comparación con k=4, ya que el coeficiente de Silhouette es significativamente más alto. Esto sugiere que al dividir tus datos en 2 clústeres, se logra una mejor cohesión dentro de los clústeres y una mayor separación entre ellos.

Conclusión: Este análisis se llevó a cabo para identificar conglomerados de viviendas con características similares en el mercado, lo que nos permitirá entender mejor las dinámicas y segmentaciones existentes.

Tras aplicar el análisis de conglomerados, se determinó que dividir los datos en 2 conglomerados es más efectivo que en 4, basándose en un coeficiente de Silhouette significativamente más alto.

Los dos conglomerados identificados reflejan dos segmentos distintos en el mercado de vivienda. El primer conglomerado agrupa viviendas que comparten características específicas, como un rango de precios similar, ubicaciones en ciertas zonas, y determinadas características físicas.

ANÁLISIS DE CORRESPONDENCIAS

Análisis de Correspondencia : Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.

#Se convierte en variable tipo factor la variable vivienda$estrato
vivienda$estrato <- as.factor(vivienda$estrato)

#Se revisa si la base tiene datos faltantes (rectángulos de color rojo)
library(mice)
md.pattern(vivienda, rotate.names = TRUE)

##      preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808       1  1    1       1         1      1            1    1      1        1
## 1909       1  1    1       1         1      1            1    1      1        1
## 876        1  1    1       1         1      1            1    1      1        1
## 726        1  1    1       1         1      1            1    1      1        1
## 1          1  0    0       0         0      0            0    0      0        0
## 2          0  0    0       0         0      0            0    0      0        0
##            2  3    3       3         3      3            3    3      3        3
##      latitud parqueaderos piso piso_numeric     
## 4808       1            1    1            1    0
## 1909       1            1    0            0    2
## 876        1            0    1            1    1
## 726        1            0    0            0    3
## 1          0            0    0            0   13
## 2          0            0    0            0   14
##            3         1605 2638         2638 6913
#eliminar faltantes
vivienda <- na.omit(vivienda)
grafico <-md.pattern(vivienda, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

#Se construye entonces una tabla cruzada con las variables involucradas en el análisis
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.3.3
tabla <- table(vivienda$zona, vivienda$estrato)
colnames(tabla) <- c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
tabla
##               
##                Estrato3 Estrato4 Estrato5 Estrato6
##   Zona Centro        33        3        0        0
##   Zona Norte        141      184      482       79
##   Zona Oeste         19       51      181      502
##   Zona Oriente       94        2        1        0
##   Zona Sur          147      973     1195      721
chisq.test(tabla)
## Warning in chisq.test(tabla): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 2172.8, df = 12, p-value < 2.2e-16
#análisis de correspondencia que consistes en estimar las coordenadas para cada uno de los niveles de ambas variables y representarlas en un plano cartesiano

library(FactoMineR)
library(factoextra)
library(gridExtra)
resultados_ac <- CA(tabla)

#Para medir el grado de representatividad del proceso calculas los valores de la varianza acumulada, utilizando para ellos los valores propios de la matriz de discrepancias

valores_prop <-resultados_ac$eig ; valores_prop
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.29526876              65.338252                          65.33825
## dim 2 0.13919088              30.800716                          96.13897
## dim 3 0.01744831               3.861032                         100.00000
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
  ylab("Porcentaje de varianza explicado") + xlab("Ejes")

Este análisis de correspondencias fue realizado para explorar las relaciones y asociaciones entre las variables ‘zona’ y ‘estrato’ en el mercado inmobiliario, con el fin de comprender mejor cómo se distribuyen estas características en la ciudad de Cali.

El análisis reveló que el primer eje explica el 65.34% de la varianza, mientras que el segundo eje añade un 30.80% más, alcanzando un total del 96.14% de la varianza explicada por los dos primeros ejes. El tercer eje explica un 3.86% adicional, completando el 100% de la varianza.

Estos resultados sugieren que hay una fuerte asociación entre ‘zona’ y ‘estrato’, donde el primer eje captura la mayor parte de la relación entre estas variables. Esto podría indicar que ciertas zonas de la ciudad están fuertemente relacionadas con ciertos estratos socioeconómicos.

Conclusión General del Análisis del Mercado Inmobiliario

El conjunto de análisis realizados sobre la base de datos del mercado inmobiliario de la ciudad de Cali revela claves que pueden informar decisiones estratégicas para los actores del sector.

  • A través del análisis de componentes principales, se identificó que los primeros ocho componentes explican el 80% de la varianza en los datos, con el primer componente explicando un 29% y el segundo un 19% adicional. Las variables de mayor correlación y peso en el primer componente incluyen el precio, el área de construcción, el número de baños y la disponibilidad de parqueaderos, mientras que las variables de zona predominan en el segundo componente.

Esto sugiere que tanto las características físicas de las viviendas como su ubicación son determinantes clave en la diferenciación del mercado inmobiliario.

  • El análisis de conglomerados indicó que dividir el mercado en dos grupos proporciona una mejor cohesión interna y separación entre grupos, según un coeficiente de Silhouette elevado. Estos conglomerados representan dos segmentos distintos del mercado, cada uno caracterizado por diferentes rangos de precios, ubicaciones y características físicas, lo que resalta la importancia de estrategias de mercado específicas para cada segmento.

  • El análisis de correspondencias entre las variables “zona” y “estrato” mostró que el primer eje explica el 65.34% de la varianza y el segundo eje agrega un 30.80%, alcanzando un total de 96.14% de la varianza explicada. Esto indica una fuerte asociación entre la zona geográfica y el estrato socioeconómico, sugiriendo que ciertas zonas están vinculadas a determinados niveles de estrato, lo que influye significativamente en la segmentación del mercado. La zona Oeste es diferencial a otras zonas y está asociada al estrato 6, lo que constituye un segmento de mercado diferente al que se conforma con los estratos 3 y 4 y el resto de zonas de la ciudad.