ANÁLISIS DESCRIPTIVO

## # 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>
##        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

#ESTADÍSTICOS

Se calculan algunos estadísticos de la variable a predecir

mean(vivienda$preciom)
## [1] NA
median(vivienda$preciom)
## [1] NA
sd(vivienda$preciom)
## [1] NA

Al analizar los resultados se evidencia que existen valores NA, dichos valores se eliminan suprimiento las columnas donde se encuentran

sum(is.na(vivienda$preciom))
## [1] 2
mean(vivienda$preciom, na.rm = TRUE)
## [1] 433.8919
median(vivienda$preciom, na.rm = TRUE)
## [1] 330
sd(vivienda$preciom, na.rm = TRUE)
## [1] 328.6472
vivienda <- vivienda[!is.na(vivienda$preciom), ]
dim(vivienda)
## [1] 8320   13
sum(is.na(vivienda$preciom))  
## [1] 0
hist(vivienda$preciom)

La mayoría de las viviendas tienen precios moderados, pero existe un grupo pequeño de viviendas muy costosas que generan una cola derecha larga.

boxplot(vivienda$preciom, horizontal=TRUE)

quantile(vivienda$preciom, probs = c(0.75, 0.90, 0.95, 0.99), na.rm=TRUE)
##  75%  90%  95%  99% 
##  540  870 1200 1650
Q1 <- quantile(vivienda$preciom, 0.25, na.rm = TRUE)
Q3 <- quantile(vivienda$preciom, 0.75, na.rm = TRUE)

IQR_val <- IQR(vivienda$preciom, na.rm = TRUE)

limite_superior <- Q3 + 1.5 * IQR_val
limite_inferior <- Q1 - 1.5 * IQR_val

limite_superior
##  75% 
## 1020
limite_inferior
##  25% 
## -260
limite_superior
##  75% 
## 1020
max(vivienda$preciom, na.rm=TRUE)
## [1] 1999

La variable precio presenta asimetría positiva con presencia de valores elevados correspondientes al segmento de alta gama. Dado que estos representan características reales del mercado y no errores de medición, no fueron eliminados

Análisis por zona

Precio promedio por zona

aggregate(preciom ~ zona, data = vivienda, mean)
##           zona  preciom
## 1  Zona Centro 309.6935
## 2   Zona Norte 345.6083
## 3   Zona Oeste 677.5801
## 4 Zona Oriente 228.5299
## 5     Zona Sur 426.5184

El análisis territorial evidencia una marcada segmentación espacial del mercado inmobiliario. La Zona Oeste concentra los valores promedio más elevados, duplicando ampliamente a las zonas de menor valor como Oriente. Este patrón sugiere la existencia de diferenciación socioeconómica estructural en la ciudad.

Análisis general para el resto de variables

colSums(is.na(vivienda))
##           id         zona         piso      estrato      preciom    areaconst 
##            1            1         2636            1            0            1 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##         1603            1            1            1            1            1 
##      latitud 
##            1
round(colMeans(is.na(vivienda)) * 100, 2)
##           id         zona         piso      estrato      preciom    areaconst 
##         0.01         0.01        31.68         0.01         0.00         0.01 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##        19.27         0.01         0.01         0.01         0.01         0.01 
##      latitud 
##         0.01

variables con 1 NA

vivienda <- vivienda[complete.cases(vivienda$id), ]

Variable piso

2636 / nrow(vivienda) * 100
## [1] 31.6865
vivienda$piso[is.na(vivienda$piso)] <- "No especificado"

Variable parqueadero

vivienda$parqueaderos[is.na(vivienda$parqueaderos)] <- 0

validación

colSums(is.na(vivienda))
##           id         zona         piso      estrato      preciom    areaconst 
##            0            0            0            0            0            0 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##            0            0            0            0            0            0 
##      latitud 
##            0

Análisis componentes principales

vars_pca <- vivienda[, c("preciom",
                         "areaconst",
                         "estrato",
                         "parqueaderos",
                         "banios",
                         "habitaciones")]
vars_pca_scaled <- scale(vars_pca)
pca <- prcomp(vars_pca_scaled, center = TRUE, scale. = TRUE)

summary(pca)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6
## Standard deviation     1.8481 1.1222 0.6780 0.65924 0.49098 0.43579
## Proportion of Variance 0.5692 0.2099 0.0766 0.07243 0.04018 0.03165
## Cumulative Proportion  0.5692 0.7791 0.8557 0.92817 0.96835 1.00000
biplot(pca, cex = 0.6)

El Análisis de Componentes Principales mostró que las dos primeras componentes explican el 77.9% de la variabilidad total del mercado inmobiliario. La primera componente (56.9%) representa principalmente características asociadas al tamaño y nivel de lujo del inmueble, mientras que la segunda (20.9%) refleja patrones de segmentación socioeconómica.

ANÁLISIS DE CONGLOMERADOS (CLUSTERING)

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
library(cluster)
set.seed(123)
kmeans_result <- kmeans(vars_pca_scaled, centers = 3, nstart = 25)

vivienda$cluster <- as.factor(kmeans_result$cluster)
fviz_cluster(kmeans_result, data = vars_pca_scaled)

aggregate(preciom ~ cluster, vivienda, mean)
##   cluster   preciom
## 1       1  482.7300
## 2       2 1071.1647
## 3       3  226.9308
aggregate(zona ~ cluster, vivienda, function(x) names(sort(table(x), decreasing=TRUE))[1])
##   cluster     zona
## 1       1 Zona Sur
## 2       2 Zona Sur
## 3       3 Zona Sur

El análisis de conglomerados permitió identificar tres segmentos diferenciados del mercado inmobiliario. La segmentación no estuvo determinada por la variable geográfica “zona”, sino por características estructurales de los inmuebles, principalmente precio, área construida y estrato socioeconómico.

ANÁLISIS DE CORRESPONDENCIA

library(FactoMineR)

# Limpiar variables
vivienda$zona <- trimws(vivienda$zona)
vivienda$tipo <- trimws(vivienda$tipo)

# Crear tabla
tabla <- table(vivienda$zona, vivienda$tipo)

# Eliminar filas y columnas con frecuencia 0
tabla <- tabla[rowSums(tabla) > 0, colSums(tabla) > 0]

print(tabla)
##               
##                Apartamento Casa
##   Zona Centro           24  100
##   Zona Norte          1198  722
##   Zona Oeste          1029  169
##   Zona Oriente          62  289
##   Zona Sur            2787 1939
print(dim(tabla))
## [1] 5 2
# Ejecutar CA
ca_result <- CA(tabla, graph = TRUE)

El análisis de correspondencia produjo una única dimensión significativa, debido a que la variable tipo de vivienda contiene únicamente dos categorías. Esta dimensión representa la oposición estructural entre casas y apartamentos. Se observa una asociación fuerte de la Zona Oeste y Zona Norte con apartamentos, mientras que la Zona Centro y Zona Oriente muestran mayor asociación con casas. La Zona Sur presenta una distribución más equilibrada.