JOHN WILMAR VARGAS MENDEZ
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, se cargara la data para el desarrollo de la actividad
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Warning: package 'GGally' was built under R version 4.3.2
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.3.2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Warning: package 'knitr' was built under R version 4.3.2
## Loading required package: summarytools
data(vivienda)
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")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
Porcentaje de datos faltantes por variable
na_percentage <- sapply(vivienda, function(x) sum(is.na(x)) / length(x) * 100)
na_percentage
## id zona piso estrato preciom areaconst
## 0.03604903 0.03604903 31.69911079 0.03604903 0.02403268 0.03604903
## parqueaderos banios habitaciones tipo barrio longitud
## 19.28622927 0.03604903 0.03604903 0.03604903 0.03604903 0.03604903
## latitud
## 0.03604903
Donde la variable piso tiene 31% de NA y parqueadero es la segunda variable con mas Na donde equivale al 19%
quiero idenificar si quito todos los Na con cuantas observaciones trabajaria
# Número de observaciones original
n_obs_original <- nrow(vivienda)
# Número de observaciones después de eliminar filas con NA
vivienda_sin_na <- na.omit(vivienda)
n_obs_sin_na <- nrow(vivienda_sin_na)
# Calcular la diferencia
n_obs_original
## [1] 8322
n_obs_sin_na
## [1] 4808
con esto perderiamos el 43 % de la informacion, entonces se trabajaria contoda la informacion y los NA se llenaran con la moda de la variable
Una estrategia común es la imputación, que consiste en reemplazar los valores faltantes con un valor estimado para este caso se utilizara, Imputación por la Media/Mediana/Moda. por esto se rellenaran los Na con la moda de la variable respectiva.
Imputacion para las variables Numericas
library(dplyr)
##
## 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 <- vivienda %>%
mutate_if(is.character, as.factor)
# Verificar los cambios
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 : Factor w/ 5 levels "Zona Centro",..: 4 4 4 5 2 2 2 2 2 2 ...
## $ piso : Factor w/ 12 levels "01","02","03",..: NA NA NA 2 1 1 1 1 2 2 ...
## $ 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 : Factor w/ 2 levels "Apartamento",..: 2 2 2 2 1 1 1 1 2 2 ...
## $ barrio : Factor w/ 436 levels "20 de julio",..: 1 1 1 2 3 3 3 3 3 3 ...
## $ 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")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
# Imputar valores NA para variables numéricas con la mediana
vivienda <- vivienda %>%
mutate_if(is.numeric, ~ifelse(is.na(.), median(., na.rm = TRUE), .))
# Imputación para variables categóricas con la moda
# Definir función para calcular la moda
impute_mode <- function(x) {
ux <- unique(x[!is.na(x)])
ux[which.max(tabulate(match(x, ux)))]
}
# Imputar valores NA para variables categóricas con la moda
vivienda <- vivienda %>%
mutate_if(is.factor, ~ifelse(is.na(.), impute_mode(.), .))
despues de la imputacion validamos los N del nuevo data set y se observa que ya no existen Na
# Número de observaciones original
n_obs_original <- nrow(vivienda)
# Número de observaciones después de eliminar filas con NA
vivienda_sin_na <- na.omit(vivienda)
n_obs_sin_na <- nrow(vivienda_sin_na)
# Calcular la diferencia
n_obs_original
## [1] 8322
n_obs_sin_na
## [1] 8322
Analisis descriptivo
summary(vivienda)
## id zona piso estrato
## Min. : 1 Min. :1.000 Min. : 1.00 Min. :3.000
## 1st Qu.:2081 1st Qu.:3.000 1st Qu.: 2.00 1st Qu.:4.000
## Median :4160 Median :5.000 Median : 2.00 Median :5.000
## Mean :4160 Mean :3.918 Mean : 3.21 Mean :4.634
## 3rd Qu.:6239 3rd Qu.:5.000 3rd Qu.: 4.00 3rd Qu.:5.000
## Max. :8319 Max. :5.000 Max. :12.00 Max. :6.000
## 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.867 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
## habitaciones tipo barrio longitud
## Min. : 0.000 Min. :1.000 Min. : 1.0 Min. :-76.59
## 1st Qu.: 3.000 1st Qu.:1.000 1st Qu.:136.0 1st Qu.:-76.54
## Median : 3.000 Median :1.000 Median :251.0 Median :-76.53
## Mean : 3.605 Mean :1.387 Mean :241.5 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:2.000 3rd Qu.:367.0 3rd Qu.:-76.52
## Max. :10.000 Max. :2.000 Max. :436.0 Max. :-76.46
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
vivienda_pca <- vivienda %>%
select(-c(id, zona, tipo, barrio)) %>%
na.omit() # Eliminar filas con NA para simplificar el análisis
# Asumiendo que vivienda es tu data.frame
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
# Realizar el PCA
pca_res <- PCA(vivienda_pca, scale.unit = TRUE, graph = FALSE)
fviz_screeplot(pca_res, addlabels = TRUE, ylim = c(0, 100))
Basándome en la imagen del scree plot que has proporcionado para el análisis de componentes principales (PCA), aquí te dejo algunos posibles descubrimientos y conclusiones:
Dominancia del Primer Componente Principal:
Potencial de Reducción de Dimensionalidad:
Decisión sobre la Retención de Componentes:
Componentes Secundarios:
Consideraciones para la Interpretación de Componentes Adicionales:
Potencial para Descubrimientos Analíticos:
fviz_pca_var(pca_res, col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE) # Usa repel = TRUE para evitar la superposición de texto
Distribución de Variables:
banios,
areaconst,
parqueaderos,
habitaciones, y
preciom están posicionadas en la misma
dirección general con respecto al primer componente principal (Dim1), lo
que sugiere que estas variables están positivamente correlacionadas
entre sí y pueden representar características relacionadas con el tamaño
y el valor de las viviendas.Primer Componente Principal (Dim1):
preciom,
banios,
parqueaderos,
estrato, y
areaconst, que pueden ser interpretados
como factores relacionados con la calidad y el precio de la
propiedad.Segundo Componente Principal (Dim2):
longitud y
latitud, lo que podría interpretarse como
una influencia geográfica en los datos.Relaciones entre Variables:
longitud y
latitud sugiere una relación o dependencia
entre estas dos variables, lo cual tiene sentido dado que juntas definen
una ubicación geográfica. Su orientación perpendicular a
preciom indica que la variabilidad en la
ubicación es relativamente independiente de los precios de las
viviendas.Variables Menos Influyentes:
piso parece tener una contribución
menor en ambas dimensiones, lo que puede implicar que el número de pisos
no es un factor tan decisivo en la variabilidad de los datos, al menos
no tanto como las características de tamaño y ubicación.Implicaciones para Estrategias de Mercado:
Consideraciones de Diseño Urbano:
piso podría también sugerir que, en esta
muestra específica, los compradores o el mercado no diferencian tanto el
valor de las propiedades basado en el número de pisos, lo que puede
tener implicaciones para el diseño y desarrollo urbano.fviz_contrib(pca_res, choice = "var", axes = 1:2)
Contribuciones Relativamente Equilibradas:
Variables Significativas:
preciom,
banios,
estrato,
areaconst, y
habitaciones parecen ser las más
contribuyentes, lo que sugiere que estas características de las
viviendas son factores importantes en la variación de los datos y
podrían ser claves en la determinación del precio y la oferta del
mercado inmobiliario.Variables con Menor Contribución:
longitud,
latitud, y
piso tienen las contribuciones más bajas
en las dos dimensiones principales. Esto podría indicar que estas
variables son menos importantes en la explicación de la variabilidad de
los datos en este análisis específico.Línea de Corte:
Evaluación del Modelo de PCA:
Implicaciones Prácticas:
Basándome en los gráficos de PCA proporcionados y en el contexto de una
empresa inmobiliaria que busca obtener una comprensión profunda del
mercado de viviendas urbanas, aquí hay algunas conclusiones que podrían
derivarse de los resultados de PCA:
Factores Influyentes en el Valor de la Propiedad:
Relevancia de la Ubicación:
Segmentación de Propiedades:
Estrategias de Inversión y Desarrollo:
Optimización de la Cartera de Propiedades:
Desarrollo de Herramientas de Valoración:
Marketing Dirigido:
Consideraciones Sobre la Densidad de Propiedades:
piso no pareció
ser un factor significativo en los componentes principales, esto podría
sugerir que la densidad de ocupación (por ejemplo, la cantidad de
unidades por edificio) no es un factor diferenciador clave en el mercado
actual.DETERMINAR EL NUMERO OPTIMO DE CLUSTER
# Cargar paquete necesario
library(factoextra)
# Calcular la suma total de cuadrados dentro del cluster para diferentes cantidades de clusters
fviz_nbclust(vivienda_pca, kmeans, method = "wss") + geom_vline(xintercept = 4, linetype = 2) + labs(subtitle = "Método del codo")
## Warning: did not converge in 10 iterations
Una vez que has decidido el número de clusters, ejecuta el algoritmo K-Means:
set.seed(123) # Establecer una semilla para reproducibilidad
k_optimo <- 4 # Suponiendo que el método del codo sugirió 4 clusters
# Aplicar el modelo K-Means
kmeans_res <- kmeans(vivienda_pca, centers = k_optimo, nstart = 25)
# Ver los centros de los clusters
kmeans_res$centers
## piso estrato preciom areaconst parqueaderos banios habitaciones
## 1 3.058475 4.851837 436.4812 198.12992 1.904386 3.521533 4.031213
## 2 3.016198 5.531969 780.4893 306.57116 2.643649 4.538789 4.255754
## 3 3.363237 4.095807 212.8762 89.06863 1.398098 2.188445 3.066797
## 4 3.168605 5.798450 1389.8740 444.22180 3.645349 5.189922 4.315891
## longitud latitud
## 1 -76.53185 3.421674
## 2 -76.53732 3.410036
## 3 -76.52281 3.418885
## 4 -76.53897 3.405304
# Ver la asignación de cada observación a un cluster
kmeans_res$cluster
## [1] 3 3 1 1 3 3 3 3 3 2 2 2 2 1 1 1 1 3 1 3 3 2 1 3 1 1 3 3 1 1 3 1 3 1 1 3 3
## [38] 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 1 1 3 3 3 3 1 1 1 3 3 1 1 3 3 3 1 3 3 3 1 3
## [75] 1 1 3 1 3 3 3 1 1 3 3 1 2 3 3 1 3 1 3 3 3 1 3 3 2 3 4 2 1 2 1 2 1 2 2 2 1
## [112] 3 2 2 2 2 2 2 1 3 2 2 2 1 1 1 1 3 3 2 2 2 3 1 1 1 1 2 1 3 3 2 1 1 1 1 3 4
## [149] 1 4 2 3 4 1 1 3 1 3 3 2 3 1 3 3 3 2 3 3 3 1 3 3 2 3 3 3 3 3 4 3 4 2 4 2 3
## [186] 3 3 2 3 3 2 2 4 3 3 3 3 3 2 2 3 3 2 3 2 3 3 3 2 2 2 3 2 3 2 2 4 3 3 2 4 2
## [223] 2 2 3 2 4 4 2 2 4 2 1 4 2 3 2 3 2 2 2 2 2 4 2 2 2 2 2 2 2 3 1 2 2 3 3 3 4
## [260] 3 4 3 4 2 4 3 4 2 4 2 2 3 3 3 2 1 1 1 3 2 3 3 3 3 2 3 1 1 1 3 3 3 3 3 3 3
## [297] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 3 1 1 1 3 1 3 1 1 1 3 3
## [334] 3 3 1 1 3 3 1 3 2 1 1 1 3 3 1 1 1 3 3 3 1 3 3 1 1 3 1 3 2 3 1 1 3 1 2 4 4
## [371] 4 3 1 4 2 1 3 1 2 1 1 1 1 1 2 1 2 1 1 1 4 2 2 2 2 1 2 4 2 2 1 2 2 1 2 4 1
## [408] 2 2 1 1 3 3 3 3 3 1 1 1 1 1 3 3 3 3 3 3 3 2 1 3 3 1 1 3 3 3 3 3 3 3 3 4 3
## [445] 1 3 3 3 3 1 3 3 3 3 1 4 1 3 1 3 4 1 3 4 1 4 3 1 2 2 2 1 2 1 1 1 1 3 3 4 2
## [482] 2 1 3 1 1 2 2 2 1 2 2 2 2 1 2 1 2 1 2 1 1 3 1 1 3 1 3 3 3 1 1 1 3 3 3 3 3
## [519] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 1 1 3 3 1
## [556] 3 2 3 3 3 3 3 3 3 3 3 3 3 3 2 1 1 3 3 3 3 1 1 3 1 1 3 3 3 1 3 1 1 2 3 3 3
## [593] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [630] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [667] 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 2 4 4 1 1 1 2 3 3 1 3 3 3 3 3 3 1 1 3 3 3 3
## [704] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 3 3 3 2 3 3 3 1 3 3 3 3 3 3 2 4
## [741] 3 4 3 2 2 1 2 2 1 2 4 2 2 1 3 2 4 1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 1 3 1
## [778] 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 1 3 1 1 3 1 1 1 3 3 3 3 3 3 3 3
## [815] 3 2 1 1 3 1 3 1 3 1 1 3 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 1 3 3 1 3
## [852] 3 3 1 3 1 3 1 3 3 3 3 3 1 1 3 1 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3
## [889] 1 1 3 3 3 3 3 1 1 1 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 1 3
## [926] 1 1 3 3 3 1 2 3 3 3 1 1 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 3
## [963] 1 1 3 3 3 3 3 3 3 3 3 3 2 3 1 1 1 3 3 3 3 2 1 3 3 2 3 3 1 3 3 3 3 1 1 3 2
## [1000] 3 2 1 1 1 2 3 1 1 1 1 1 3 3 1 1 3 3 1 1 3 3 3 1 1 2 3 1 2 3 1 1 1 1 3 1 1
## [1037] 1 1 1 1 1 1 1 1 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1
## [1074] 1 1 1 1 1 3 1 2 1 3 3 1 1 2 2 1 1 1 1 1 1 2 1 2 3 1 1 3 1 3 1 3 3 1 3 1 1
## [1111] 3 3 3 3 1 1 1 1 3 3 3 3 3 3 3 1 3 1 1 1 1 3 1 1 3 1 3 1 1 3 1 1 1 1 3 3 3
## [1148] 1 3 1 1 1 1 1 1 1 2 1 3 3 3 1 3 3 3 3 3 1 1 3 1 1 1 1 1 1 3 1 3 1 3 1 3 3
## [1185] 3 3 3 1 1 3 3 1 3 1 3 1 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [1222] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [1259] 3 3 3 3 3 3 2 1 3 3 2 2 3 3 3 1 2 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3
## [1296] 3 3 3 2 1 3 2 1 2 3 3 1 3 1 4 1 1 1 1 1 2 2 1 1 2 1 1 1 2 4 4 4 1 1 1 2 1
## [1333] 2 1 4 2 2 2 1 2 4 4 2 1 4 2 2 2 1 2 4 1 4 4 2 4 4 2 1 4 2 1 2 2 2 4 4 2 1
## [1370] 2 2 2 2 4 3 2 2 2 1 2 1 1 1 2 1 2 4 2 2 2 2 2 4 2 2 4 1 2 2 4 2 2 2 2 2 2
## [1407] 2 1 4 2 2 1 4 1 1 2 2 1 2 2 1 4 2 2 2 2 4 2 2 2 2 2 4 2 2 4 2 4 1 2 1 4 2
## [1444] 2 2 1 1 4 2 1 1 2 2 2 4 2 2 2 2 4 2 2 2 2 2 2 2 2 2 2 2 2 4 4 1 4 4 2 2 4
## [1481] 4 2 2 4 1 3 3 4 4 4 1 2 2 1 4 2 2 1 2 1 1 1 2 1 3 2 1 1 1 4 3 1 1 4 4 3 1
## [1518] 1 4 4 4 1 1 1 1 1 4 1 1 1 2 1 2 2 3 1 1 1 1 1 1 1 2 1 1 1 1 1 1 4 1 1 1 4
## [1555] 4 2 1 1 2 2 4 1 4 4 2 1 2 4 1 4 1 1 1 1 3 1 1 1 3 3 2 4 3 3 2 1 1 3 3 3 2
## [1592] 3 4 1 2 1 2 4 1 3 1 3 3 1 4 1 3 1 1 1 1 1 1 1 1 1 3 3 1 3 1 3 1 1 2 2 3 2
## [1629] 2 1 2 2 1 2 1 3 1 1 1 4 2 3 2 2 2 3 1 4 4 4 2 2 4 2 2 3 3 3 3 1 1 3 1 4 1
## [1666] 4 3 3 3 1 1 1 1 1 3 1 3 1 2 3 2 2 1 2 4 2 2 1 2 1 2 2 2 2 3 3 3 4 1 1 3 3
## [1703] 2 3 3 1 1 1 1 2 1 1 2 3 2 1 2 2 2 2 1 2 1 1 4 2 4 2 1 4 2 4 2 4 2 2 2 4 2
## [1740] 2 1 4 2 1 1 4 2 1 2 2 2 2 4 2 2 4 1 2 1 4 4 4 2 1 1 1 2 1 1 2 2 2 2 4 2 2
## [1777] 1 1 4 2 2 2 3 2 1 4 2 2 2 2 2 1 2 4 1 2 4 4 1 2 2 2 1 2 4 2 1 2 2 2 2 1 1
## [1814] 4 4 1 2 4 2 4 2 4 4 4 4 4 2 3 1 3 4 2 2 3 3 3 3 2 2 3 3 3 3 3 3 3 3 3 3 3
## [1851] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 3 3 1 3 1 3 3 3 3 3 3 1
## [1888] 3 3 3 3 3 3 1 1 3 1 3 3 3 3 2 4 4 4 2 4 2 2 4 2 2 2 4 4 4 1 2 2 4 2 2 4 3
## [1925] 3 3 1 3 3 2 3 3 3 1 3 3 3 3 3 1 1 1 1 3 1 1 2 1 3 3 2 1 1 2 3 3 3 3 3 3 3
## [1962] 3 3 3 3 3 1 3 1 3 1 1 1 1 1 1 1 1 3 3 3 1 1 1 1 3 3 3 2 3 3 3 1 1 2 2 2 3
## [1999] 1 1 3 2 1 3 2 3 1 3 1 1 1 1 4 2 1 1 1 1 1 1 1 3 3 3 1 1 4 1 1 1 1 4 1 2 2
## [2036] 2 2 1 2 3 4 3 2 1 1 1 1 4 4 2 1 4 2 4 3 1 1 1 3 1 1 1 1 1 2 1 1 1 2 4 3 1
## [2073] 2 3 3 1 1 1 3 1 1 1 1 3 3 3 3 1 3 1 1 1 1 1 3 1 2 3 1 1 1 3 1 3 3 3 1 3 3
## [2110] 3 3 1 1 3 1 3 2 1 1 3 3 1 1 1 2 3 2 1 1 2 3 1 3 3 3 1 3 3 3 2 3 3 2 3 1 3
## [2147] 2 3 1 3 3 3 1 3 3 2 3 2 2 1 3 1 1 3 1 1 1 1 1 1 1 3 1 3 1 1 1 1 3 3 1 3 1
## [2184] 1 1 1 1 3 1 1 1 3 3 2 2 3 3 3 1 1 1 1 3 1 1 1 1 2 1 1 2 3 3 3 3 3 3 3 3 3
## [2221] 3 3 3 1 3 3 3 3 3 3 1 1 3 3 3 3 1 3 3 3 3 3 1 1 3 1 3 3 1 1 3 1 3 3 3 1 3
## [2258] 3 1 3 3 3 1 3 3 3 3 1 1 1 1 3 1 1 1 1 3 1 1 1 1 3 3 3 1 3 3 3 3 3 3 3 3 1
## [2295] 1 1 3 3 2 1 1 3 3 1 3 3 3 2 1 1 3 3 3 3 3 3 3 1 3 3 3 3 3 1 1 3 3 3 1 3 3
## [2332] 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [2369] 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 1 1 3 1 3 3 3 3 3 1 3 3 1 1 3 1 1 3 3 1 3
## [2406] 3 3 1 3 3 3 1 3 3 3 3 3 1 3 3 1 3 1 1 3 3 1 1 4 1 1 1 1 1 3 1 3 3 3 3 3 3
## [2443] 2 3 3 1 1 2 3 2 3 3 3 3 3 1 3 1 3 1 3 3 3 1 3 3 3 3 1 3 1 1 3 3 1 1 3 3 2
## [2480] 1 3 3 3 3 1 1 1 3 3 1 1 1 1 2 1 2 3 3 1 4 2 1 2 1 3 3 3 1 2 3 1 2 1 2 2 1
## [2517] 1 2 2 2 2 1 1 2 3 1 2 3 3 3 4 3 3 3 2 3 3 3 2 2 4 3 2 3 2 2 3 3 3 3 3 2 2
## [2554] 3 3 4 3 1 3 3 1 1 3 3 1 1 3 4 1 1 3 3 1 1 3 1 3 3 3 3 3 1 3 3 1 3 3 3 1 3
## [2591] 3 3 3 2 3 3 3 3 2 1 1 1 3 3 3 3 3 3 3 3 3 1 1 1 3 3 1 1 1 3 3 1 3 3 3 2 2
## [2628] 3 3 2 1 1 1 2 3 3 3 3 3 3 1 3 1 1 1 3 1 1 1 1 2 3 2 3 1 1 1 2 1 1 2 1 2 2
## [2665] 1 1 3 2 1 3 1 3 3 3 1 2 1 2 3 3 3 3 3 3 3 3 3 3 2 2 3 3 3 3 2 2 2 1 1 1 2
## [2702] 4 2 2 2 3 1 3 3 1 3 1 2 3 1 1 2 2 3 2 3 3 2 3 3 3 3 2 2 1 1 2 3 3 3 3 3 1
## [2739] 1 3 1 3 1 1 3 1 1 1 3 3 3 4 1 1 3 3 1 1 1 3 3 1 1 1 1 1 3 3 2 1 3 3 3 3 3
## [2776] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 4 3 1 1 1 1 1 1 3 3 1 3 3 1 3 1
## [2813] 3 1 3 1 1 1 1 1 1 3 2 3 2 3 1 2 1 2 1 3 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 1 2
## [2850] 2 1 2 2 2 2 3 3 2 3 1 3 2 3 3 1 3 2 3 3 1 1 3 2 2 2 3 3 1 2 3 3 3 3 3 3 3
## [2887] 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 1 3 3 1 1 3 1 3 3 1 1 1 2 3 1 3 1 1 1 3 1
## [2924] 1 3 2 3 2 2 1 2 1 1 2 2 1 1 3 3 3 2 2 1 3 3 3 1 3 3 1 3 1 2 2 1 3 1 3 1 2
## [2961] 1 3 1 1 1 1 1 1 4 1 1 2 1 3 2 2 1 2 3 1 3 4 1 1 1 1 4 3 3 4 2 1 1 1 2 1 1
## [2998] 1 1 1 1 3 1 1 2 2 1 1 3 3 3 1 3 1 3 1 3 3 1 1 3 3 3 3 1 3 1 3 1 1 1 2 3 1
## [3035] 3 3 1 2 1 3 3 1 1 3 2 3 3 1 3 3 3 3 3 1 1 1 1 3 1 3 3 1 3 3 1 3 3 2 3 3 3
## [3072] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 3
## [3109] 3 1 3 3 3 3 3 3 3 1 1 1 3 3 1 3 1 3 3 3 1 3 3 3 3 1 3 3 1 3 3 3 3 2 1 1 3
## [3146] 1 3 3 3 3 3 3 1 1 2 3 3 3 4 3 3 2 3 3 3 3 3 3 1 1 3 3 1 3 3 3 3 1 3 3 1 3
## [3183] 3 3 3 3 3 3 1 3 1 1 1 1 4 1 1 2 3 2 1 1 1 2 3 3 2 3 3 3 3 2 1 3 1 1 1 1 1
## [3220] 1 4 1 4 1 3 3 1 2 2 2 3 3 1 1 2 3 1 1 1 1 1 1 2 3 3 3 3 3 1 3 2 3 3 3 3 3
## [3257] 3 2 3 3 3 3 3 3 3 1 1 1 3 3 1 1 4 3 3 3 3 3 1 1 1 3 2 1 1 1 1 1 2 4 1 1 2
## [3294] 2 2 4 2 2 1 3 1 2 1 2 2 2 2 2 2 1 2 4 4 1 2 4 2 2 2 1 1 1 2 1 2 1 2 1 2 4
## [3331] 1 1 2 3 1 1 2 3 3 3 1 1 3 3 3 1 3 3 3 3 3 3 1 3 1 3 3 3 3 1 1 3 3 3 3 3 3
## [3368] 3 3 3 3 1 4 2 2 2 1 2 1 2 4 1 2 2 1 2 4 4 2 3 3 3 2 3 3 1 3 3 1 1 1 1 1 1
## [3405] 3 2 4 3 3 3 1 3 3 1 1 1 1 3 3 1 1 1 1 3 2 1 3 3 1 3 1 3 3 3 1 3 1 1 3 3 3
## [3442] 3 1 1 3 1 1 3 1 3 3 1 3 3 3 3 3 3 1 3 3 2 2 2 3 1 3 1 3 3 3 2 3 1 1 1 1 3
## [3479] 1 2 1 1 1 3 1 1 2 1 2 3 1 1 1 3 3 2 3 1 3 1 2 2 3 1 2 1 3 1 3 1 1 1 1 2 1
## [3516] 3 1 1 1 1 1 1 3 1 2 2 2 1 2 3 3 1 1 3 3 3 3 3 3 3 3 3 3 1 1 1 3 3 1 3 2 3
## [3553] 3 1 1 1 3 3 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 3 1 3 1 3 1 3 1 3 3
## [3590] 3 3 3 3 3 3 1 3 1 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3 1 1 3 1 3 3 3 3 3 3 1 1 3
## [3627] 1 1 1 3 1 1 3 3 3 3 3 1 1 1 1 3 3 1 1 3 3 1 1 1 3 1 1 1 1 1 3 1 3 3 1 3 1
## [3664] 1 3 3 3 1 1 1 1 1 1 3 1 1 1 1 1 3 1 1 1 1 3 1 3 3 1 3 3 1 1 1 1 1 3 1 3 1
## [3701] 1 3 3 3 3 1 1 3 3 1 1 3 3 1 1 1 3 3 1 3 1 1 1 1 1 2 1 3 3 3 3 1 1 3 1 3 1
## [3738] 1 3 1 3 1 3 1 1 1 1 1 3 3 1 1 1 1 1 1 2 1 3 1 3 2 1 1 1 3 1 2 1 1 2 3 3 3
## [3775] 1 3 1 1 1 2 1 1 3 3 1 1 1 3 1 1 3 3 2 1 3 1 4 3 3 1 3 1 1 3 1 3 3 3 3 3 1
## [3812] 3 3 3 1 1 1 1 3 3 3 3 3 1 1 1 1 1 3 3 3 3 1 3 4 1 1 3 3 1 1 3 3 3 3 3 1 3
## [3849] 3 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 3 3 1 1 1 1 1 1 1 1 2 3 1 3 1 3 3 3 3 3 3
## [3886] 1 3 1 3 1 1 3 3 3 1 3 1 3 3 3 1 3 3 3 3 3 3 3 1 1 3 2 3 1 1 1 3 3 3 3 3 1
## [3923] 1 3 3 3 3 1 1 3 3 1 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 1 3 3 1 3 3 3 3
## [3960] 3 3 1 3 1 1 2 1 3 3 3 1 3 2 3 1 3 3 1 1 1 3 3 1 1 1 1 3 3 3 3 3 3 1 3 3 1
## [3997] 1 3 3 1 3 1 1 1 1 3 1 1 1 1 1 3 1 1 1 1 3 3 1 1 1 1 3 1 1 3 1 1 3 3 3 1 3
## [4034] 3 3 1 1 4 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 3 3 3 3 3 3 1 1 3 3 3 3 1 3
## [4071] 3 3 3 3 3 3 1 1 3 1 1 1 3 1 3 1 3 3 1 3 1 1 3 3 1 1 3 3 3 3 3 3 3 3 3 1 1
## [4108] 3 3 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3
## [4145] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 1 3 3 3 3 1 1 3 3 1 3 1 3 3 1 3 1
## [4182] 2 3 3 3 3 3 3 3 1 1 3 1 3 3 3 3 3 1 3 1 1 1 3 1 2 2 3 4 1 3 3 1 1 1 2 1 3
## [4219] 1 1 2 1 3 1 1 3 2 1 1 4 4 1 1 1 2 1 1 3 3 1 2 1 1 4 4 3 2 2 2 1 3 3 1 1 2
## [4256] 1 2 1 3 1 2 1 1 1 3 1 1 1 1 1 2 2 1 2 1 4 1 1 3 1 1 1 1 1 1 1 3 3 3 1 1 1
## [4293] 3 1 2 2 2 1 2 1 2 1 1 2 1 1 1 1 4 4 1 1 1 1 3 2 1 2 4 1 2 4 2 2 2 1 1 3 2
## [4330] 2 1 1 2 2 2 1 1 1 2 2 3 1 2 1 1 1 3 2 2 1 3 1 1 1 1 1 2 3 1 1 1 3 3 3 3 3
## [4367] 3 3 3 3 3 3 3 3 3 1 1 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 2 1 1 3 1 3 3 3 3
## [4404] 3 3 3 3 3 1 1 3 3 3 3 3 3 3 1 1 1 1 1 3 1 3 3 3 1 1 3 3 3 1 3 3 3 3 3 3 3
## [4441] 3 3 3 3 3 3 1 1 1 2 3 3 2 1 1 2 1 2 1 3 1 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3
## [4478] 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 1 3 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 3
## [4515] 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 4 2 3 3 3 3 3 3 3 3 2 1 2
## [4552] 1 1 1 4 1 3 1 1 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 1 1 1
## [4589] 3 1 1 3 1 1 2 3 1 1 1 1 1 1 4 1 1 4 1 4 3 3 3 3 3 1 3 1 3 1 3 1 1 3 1 3 1
## [4626] 3 1 3 3 3 1 1 1 4 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 1 3 1 3 3 3 1
## [4663] 3 3 1 3 3 3 3 3 1 3 3 3 3 4 1 3 1 4 4 4 1 4 4 2 1 1 4 1 1 2 1 2 1 1 2 1 1
## [4700] 1 3 4 2 3 2 1 1 3 3 4 4 1 1 2 1 4 4 1 2 1 4 2 2 1 1 1 1 4 2 1 3 1 2 1 1 1
## [4737] 3 1 1 1 4 4 1 1 2 4 1 1 1 2 1 4 1 2 2 1 2 4 3 1 2 4 4 3 2 4 4 4 2 4 4 4 3
## [4774] 3 3 1 4 2 2 4 3 1 1 3 1 3 1 1 2 1 3 3 3 1 2 4 3 1 4 1 3 1 1 4 1 1 2 1 1 1
## [4811] 4 1 4 1 4 1 1 4 2 1 4 2 1 2 1 2 1 3 4 1 4 4 1 3 3 1 3 3 1 1 1 1 1 3 3 1 3
## [4848] 3 3 3 1 1 1 3 1 3 3 3 1 1 3 1 3 1 1 1 1 1 3 1 1 1 3 2 3 1 1 1 1 1 3 3 1 1
## [4885] 3 3 3 3 1 1 3 2 3 3 3 3 1 1 3 3 3 1 3 3 3 3 3 3 3 1 1 1 3 1 1 1 1 1 1 1 1
## [4922] 1 1 2 1 1 1 1 2 2 3 3 3 3 1 3 3 3 1 1 2 1 2 4 4 4 1 1 3 3 3 3 3 3 3 3 3 3
## [4959] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 1 1 1 1 2 2 1 3 3 3 3 3 3 3 3 2 3 3 3 2
## [4996] 2 1 2 1 1 2 1 2 2 2 3 3 1 3 1 1 1 3 3 1 3 3 2 3 2 2 4 4 4 2 4 1 4 2 4 1 4
## [5033] 1 4 1 1 2 3 1 4 1 4 2 4 4 1 1 2 2 4 1 1 4 4 4 4 4 1 4 2 1 4 1 2 4 4 2 4 1
## [5070] 2 1 2 4 1 2 4 1 1 4 4 2 2 2 2 4 2 2 1 2 2 1 4 1 2 2 1 1 1 2 2 2 2 2 1 1 4
## [5107] 4 4 4 1 4 1 2 2 2 2 4 1 2 4 2 1 2 2 4 4 4 4 2 2 1 2 2 4 1 2 2 4 1 2 1 2 1
## [5144] 2 4 4 4 4 2 1 4 4 2 4 4 2 2 2 4 4 2 4 1 1 1 2 2 1 4 1 4 4 4 4 2 4 2 2 4 1
## [5181] 1 2 1 2 1 2 1 3 1 3 1 1 1 1 1 2 2 2 1 2 2 1 2 4 4 1 4 1 2 1 2 1 2 4 4 2 3
## [5218] 2 3 2 2 2 2 1 2 1 1 2 2 2 1 1 1 1 2 1 1 1 2 2 1 1 1 2 2 1 1 1 1 1 1 3 2 2
## [5255] 1 2 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 4 2 2 2 2 1 2 2 2 2
## [5292] 2 1 2 1 4 1 2 1 2 1 2 1 4 4 2 4 4 1 4 4 4 2 4 4 4 4 1 2 1 2 2 1 1 2 2 4 4
## [5329] 2 1 1 1 4 2 4 1 1 2 4 1 4 4 4 1 1 2 4 2 4 2 4 2 2 2 2 2 2 2 4 4 4 2 2 2 2
## [5366] 2 1 2 4 1 2 1 1 2 4 4 4 4 2 2 4 4 2 2 4 4 2 4 4 2 4 1 1 2 4 2 2 2 2 2 1 2
## [5403] 4 2 2 2 2 1 4 2 2 1 2 2 2 1 4 2 1 4 4 4 2 2 2 1 4 4 4 1 1 4 1 4 4 4 4 2 4
## [5440] 4 2 4 4 2 2 2 2 4 2 1 4 2 2 2 2 4 2 2 2 2 2 2 2 4 1 1 1 1 2 2 1 1 1 2 2 1
## [5477] 4 4 2 2 2 4 2 4 2 1 2 2 2 4 4 1 2 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 2 3 1
## [5514] 3 3 1 1 3 3 3 3 1 2 3 3 3 3 3 1 3 3 3 1 1 1 1 1 3 2 1 2 1 1 1 2 2 1 1 1 4
## [5551] 3 3 1 2 1 1 3 1 1 3 3 3 3 3 1 1 1 1 3 2 3 1 1 3 3 3 3 3 3 3 3 3 2 3 1 3 3
## [5588] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [5625] 3 3 3 3 3 1 3 1 3 3 3 3 3 3 3 1 1 3 3 1 3 3 3 3 1 3 3 3 3 3 1 1 2 3 1 1 3
## [5662] 3 3 3 3 3 3 1 3 1 1 3 2 1 3 3 3 3 3 3 3 3 2 3 3 3 1 1 2 1 3 2 3 1 3 3 3 3
## [5699] 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1
## [5736] 3 3 1 1 1 1 3 1 1 1 1 1 1 4 3 3 3 3 3 1 1 3 1 3 3 3 3 3 3 3 1 1 3 3 1 3 1
## [5773] 3 3 3 3 1 3 1 1 1 1 1 1 1 1 2 1 1 1 1 1 3 3 1 1 1 3 3 3 3 3 3 3 3 1 1 3 1
## [5810] 3 3 1 3 3 3 3 1 3 3 3 3 3 1 3 3 3 2 3 1 3 2 3 3 1 3 3 3 3 3 3 1 3 3 3 3 1
## [5847] 3 1 3 3 3 3 1 3 1 3 4 3 3 3 1 2 4 1 2 4 1 4 1 2 2 3 1 1 1 1 3 2 1 2 1 3 3
## [5884] 1 1 3 3 3 2 3 3 3 3 1 3 3 3 1 1 3 2 1 1 1 3 1 3 3 1 1 1 3 2 1 1 1 3 2 1 1
## [5921] 1 1 2 1 1 1 3 1 3 1 1 1 1 3 3 1 1 3 3 1 1 1 1 1 1 1 3 1 3 1 1 1 2 1 4 1 1
## [5958] 1 3 1 3 1 1 1 1 1 3 1 1 1 1 2 1 2 1 1 3 1 1 1 1 1 1 1 1 1 2 3 1 1 1 1 1 1
## [5995] 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 3 1 3 3 3 1 3 3 4 1 3 3 1 2 3 3 3 2 1 2 1 3
## [6032] 1 1 2 1 1 2 2 1 2 3 1 3 3 3 2 2 2 4 3 3 1 3 3 3 3 1 3 3 2 2 1 1 1 1 1 1 1
## [6069] 1 1 4 3 4 1 4 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [6106] 3 3 3 1 3 3 1 3 3 1 3 3 3 3 3 3 1 1 2 2 1 1 3 1 3 3 1 1 1 3 3 1 1 1 3 3 3
## [6143] 1 3 1 3 1 1 1 1 3 3 1 3 3 3 3 1 3 1 1 2 1 1 3 2 1 1 3 2 1 1 3 1 1 1 1 1 1
## [6180] 2 1 3 1 1 1 1 1 3 1 1 1 1 2 1 2 2 1 3 1 1 3 1 1 1 3 2 1 2 1 1 1 2 2 2 1 2
## [6217] 3 3 3 1 3 3 3 2 1 2 1 4 2 2 2 2 2 2 2 4 1 1 2 2 2 2 2 3 1 4 2 3 1 1 1 1 2
## [6254] 2 1 1 2 1 4 1 2 2 1 2 1 2 1 1 4 1 2 3 2 1 3 2 3 2 2 1 2 1 2 2 1 2 2 1 1 2
## [6291] 1 1 2 1 2 2 3 3 2 1 2 1 4 4 2 3 2 2 2 3 2 1 4 2 2 2 3 3 1 2 2 2 1 4 4 2 1
## [6328] 1 1 1 1 4 1 4 1 1 1 3 4 3 1 2 4 4 4 4 2 4 1 1 1 4 2 4 4 4 2 1 4 1 2 1 4 4
## [6365] 3 1 1 2 3 1 1 4 3 1 2 4 2 4 1 2 2 4 2 4 2 2 2 2 2 2 1 1 4 1 1 1 4 4 1 2 2
## [6402] 1 4 4 1 1 1 2 2 2 1 4 1 2 4 4 1 2 2 2 2 2 1 3 4 1 1 2 1 1 1 2 2 1 2 1 3 2
## [6439] 1 2 2 1 1 1 4 1 2 2 1 1 1 1 2 2 1 2 1 4 1 1 4 3 2 2 1 2 1 1 4 4 2 4 2 1 2
## [6476] 1 1 2 2 2 1 1 2 2 4 4 4 1 2 4 2 4 3 4 4 4 4 2 4 1 2 2 2 4 4 2 4 2 4 4 2 4
## [6513] 4 4 1 4 2 2 1 4 4 4 1 4 4 1 2 1 4 2 1 4 2 2 2 4 4 4 1 4 4 3 1 1 2 2 4 2 2
## [6550] 1 4 4 1 1 1 1 1 1 2 2 2 2 2 1 4 1 2 2 2 2 1 2 2 4 4 1 2 4 1 4 4 1 1 2 1 4
## [6587] 2 1 3 1 2 2 4 2 2 2 2 2 4 1 3 4 1 4 2 4 4 1 1 2 2 2 2 1 1 4 2 1 2 1 1 4 2
## [6624] 4 1 2 4 1 4 1 2 4 1 3 1 1 3 1 2 3 3 3 3 1 4 3 3 1 1 1 3 3 3 3 1 1 1 3 3 3
## [6661] 3 3 1 1 1 3 2 3 2 1 3 3 3 3 1 3 3 3 3 3 3 1 1 3 3 2 3 2 4 4 4 1 2 2 2 2 2
## [6698] 4 1 1 2 2 4 2 3 3 2 1 3 2 2 1 2 2 2 3 2 2 1 1 2 2 1 1 2 3 2 2 1 2 1 1 3 1
## [6735] 3 1 1 1 1 1 3 4 1 1 1 4 1 1 1 1 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [6772] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [6809] 3 3 3 3 1 4 3 3 3 1 1 3 1 3 2 3 3 3 3 1 3 3 1 2 1 2 2 3 1 2 3 1 1 3 3 1 1
## [6846] 3 3 1 1 3 1 1 1 3 1 3 3 1 3 1 1 1 1 3 1 3 1 1 1 1 1 1 2 1 3 2 2 1 1 1 1 3
## [6883] 1 1 2 3 1 1 1 3 3 3 3 1 1 3 1 3 2 3 3 3 3 3 1 1 1 1 1 3 3 1 3 1 1 1 3 3 2
## [6920] 1 1 1 3 1 1 1 1 2 1 3 2 3 4 1 3 3 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [6957] 3 3 3 3 3 3 3 3 3 3 3 1 2 1 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3
## [6994] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7031] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3
## [7068] 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 3 3 1 3 1 3 3 3 3 3 3 3
## [7105] 3 3 3 3 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 1 3
## [7142] 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 2 2 1 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 3 3 3 3
## [7179] 3 3 1 3 1 3 1 2 3 3 3 3 1 3 1 1 3 3 3 3 3 3 2 3 1 3 3 1 1 3 1 3 3 3 3 3 3
## [7216] 3 2 1 3 3 3 3 3 1 3 3 3 3 3 3 1 2 3 3 3 3 3 3 3 3 3 1 1 3 3 3 3 3 1 3 3 3
## [7253] 3 1 3 3 2 2 1 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 3 3 3 3
## [7290] 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7327] 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7364] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3
## [7401] 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 1
## [7438] 1 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7475] 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 1
## [7512] 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7549] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7586] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3
## [7623] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 1 3 3 3 3 3 3 3
## [7660] 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 3 3 3 3 3 3 3 1 1 1 3 1
## [7697] 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3
## [7734] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 1 3 3 3 3 3 3 3 3 1
## [7771] 3 3 3 3 1 3 3 3 3 3 3 3 1 3 3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3
## [7808] 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 1 3 3 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3
## [7845] 3 3 3 3 3 1 3 3 3 3 1 3 3 1 1 3 3 1 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7882] 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [7919] 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 2 4 1 2 2 3
## [7956] 1 2 2 4 3 3 1 1 3 1 1 3 3 3 3 3 3 3 3 3 1 1 1 1 1 3 3 3 3 3 1 1 3 3 3 1 3
## [7993] 3 3 3 3 2 1 3 2 3 2 3 3 3 3 3 3 2 1 1 1 3 3 4 1 3 3 3 2 1 3 1 2 1 1 3 3 3
## [8030] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [8067] 3 1 3 3 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
## [8104] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 3 3 3 3 3 1 3 1 1 1 1
## [8141] 1 1 1 1 3 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 4 3 3 3 2 1 3 3 3 3 3 3
## [8178] 1 3 1 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 2 3 1 3 3 3 3 1 3 3 1 1 3 3 3 1
## [8215] 2 3 1 1 3 3 2 1 2 4 1 2 3 3 3 3 3 3 3 3 1 1 3 3 1 3 3 3 1 1 3 3 2 2 1 1 3
## [8252] 1 3 3 1 4 2 3 3 3 3 2 1 1 2 1 1 2 2 1 1 1 1 3 1 1 1 3 3 3 3 3 1 4 3 3 3 1
## [8289] 1 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 3 3 3 3 1 3 1 1 2 4 1 4 2 1 3 3 3
vivienda$cluster <- kmeans_res$cluster
# Visualizar los clusters en las dos primeras componentes principales
fviz_cluster(kmeans_res, data = vivienda_pca)
# Cargar la librería necesaria
library(ggplot2)
# Crear el diagrama de cajas
ggplot(vivienda, aes(x=factor(cluster), y=preciom, fill=factor(cluster))) +
geom_boxplot() +
labs(x="Cluster", y="Precio del Inmueble", fill="Cluster") +
theme_minimal() +
theme(axis.title=element_text(size=12),
axis.text=element_text(size=10))
Diferencias en la Mediana de Precios:
Cada caja (o “box”) representa la mediana y la distribución intercuartílica (IQR) de los precios en cada cluster.
Los clusters muestran diferencias claras en la mediana de precios, lo cual sugiere que el algoritmo de clustering ha agrupado las propiedades en segmentos con diferentes niveles de valor de mercado.
Variabilidad de Precios:
La longitud de las cajas indica la variabilidad o dispersión de los precios dentro de cada cluster. Un cluster con una caja más larga tiene precios más variados.
El Cluster 4 muestra la mayor variabilidad en precios, mientras que el Cluster 3 parece tener la menor.
Valores Atípicos:
Los puntos negros representan valores atípicos, es decir, precios de inmuebles que caen fuera del rango típico (más allá de 1.5 veces el IQR desde la caja).
Los Clusters 1 y 2 tienen algunos valores atípicos, indicando la presencia de propiedades con precios que son inusualmente altos o bajos comparados con el resto del cluster.
Comparación de Rangos de Precios:
El Cluster 1 parece tener los precios más bajos, con la mediana más baja y sin valores atípicos por encima del bigote superior.
El Cluster 2 tiene precios ligeramente más altos que el Cluster 1, pero con menos variabilidad.
El Cluster 3 tiene precios más bajos en comparación con los Clusters 2 y 4, y presenta poca variabilidad.
El Cluster 4 destaca por tener tanto la mediana más alta como la mayor variabilidad de precios, y una cantidad significativa de valores atípicos, sugiriendo que este cluster podría contener propiedades de lujo o ubicadas en áreas de alta demanda.
Implicaciones Estratégicas:
Si estos clusters representan segmentos del mercado, la empresa inmobiliaria podría personalizar estrategias de marketing y precios para cada segmento.
Por ejemplo, podrían enfocarse en el Cluster 4 para clientes de alto poder adquisitivo, mientras que el Cluster 1 podría ser más adecuado para compradores con presupuestos más ajustados.
Este análisis puede ayudar a la empresa inmobiliaria a entender mejor la estructura del mercado y a diseñar estrategias que se alineen con las características y expectativas de cada segmento de clientes.
ggplot(vivienda, aes(x=factor(cluster), y=estrato, fill=factor(cluster))) +
geom_boxplot() +
labs(x="Cluster", y="ESTRATO", fill="Cluster") +
theme_minimal() +
theme(axis.title=element_text(size=12),
axis.text=element_text(size=10))
Variabilidad entre grupos: Los cuatro grupos mostrados tienen medianas diferentes, lo que sugiere variaciones en la centralidad de los datos entre los grupos. Esto puede indicar diferencias significativas en la variable ‘ESTRATO’ entre los clusters.
Consistencia interna: El cluster 1 y el cluster 3 tienen una variabilidad interna similar, como se indica por el tamaño de las cajas, que representan el rango intercuartílico (IQR). Esto sugiere una dispersión de datos similar dentro de estos dos clusters.
Posibles valores atípicos: Hay puntos individuales representados fuera de las cajas en los clusters 1, 3 y 4. Estos puntos podrían ser valores atípicos y podrían requerir una investigación adicional para entender su naturaleza y si representan errores de datos o variabilidad natural.
Tendencia central: La línea dentro de cada caja indica la mediana de cada cluster. El cluster 2 tiene la mediana más alta, lo que indica que su valor central es superior al de los otros clusters. El cluster 4 tiene la mediana más baja, lo que sugiere que es el grupo con la valoración más baja en ‘ESTRATO’.
Análisis de Correspondencia
# Verificar los cambios
# Asegúrate de que las variables son factores
tipo <- as.factor(vivienda$tipo)
zona <- as.factor(vivienda$zona)
barrio <- as.factor(vivienda$barrio)
str(vivienda)
## spc_tbl_ [8,322 × 14] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : int [1:8322] 4 4 4 5 2 2 2 2 2 2 ...
## $ piso : int [1:8322] 2 2 2 2 1 1 1 1 2 2 ...
## $ 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 : int [1:8322] 2 2 2 2 1 1 1 1 2 2 ...
## $ barrio : int [1:8322] 1 1 1 2 3 3 3 3 3 3 ...
## $ 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 ...
## $ cluster : int [1:8322] 3 3 1 1 3 3 3 3 3 2 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
tabla <- table(vivienda$zona, vivienda$estrato)
tabla # Tabla cruzada
##
## 3 4 5 6
## 1 105 14 4 1
## 2 572 407 769 172
## 3 54 84 290 770
## 4 340 8 2 1
## 5 382 1616 1688 1043
chisq.test(tabla)
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3831.8, df = 12, p-value < 2.2e-16
ac <- CA(tabla) # Gráfico
Dominio de la Dimensión 1:
Distribución de las Zonas:
Relación entre Zonas:
Las zonas Centro y Oriente están más cercanas entre sí en comparación con las otras zonas, lo que puede indicar que comparten características similares o que hay patrones de oferta de vivienda similares entre estas áreas.
Las zonas Sur y Oeste también están más cercanas entre sí en relación con la Dimensión 1, lo que podría indicar una relación o similitud entre estas zonas.
Contraste entre Zonas:
Influencia de la Dimensión 2:
Implicaciones para la Empresa Inmobiliaria:
Si estas dimensiones reflejan factores como el precio, el tipo de propiedad, o el deseo del mercado, la empresa inmobiliaria podría utilizar esta información para ajustar su enfoque de marketing y ventas en cada zona.
La empresa podría considerar desarrollar estrategias personalizadas para cada zona basándose en cómo se agrupan en el mapa de factores.
fviz_screeplot(ac, addlabels = TRUE,
ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")
Dominancia del primer factor: Al igual que en el PCA, el primer factor en un análisis de correspondencias es el que captura la mayor parte de la inercia (una medida similar a la varianza en PCA). En este caso, el primer factor explica el 70% de la inercia total, lo que indica que es la dimensión más informativa para entender las relaciones entre las categorías.
Decremento de la inercia explicada: El segundo factor explica el 27.7% de la inercia, lo cual es significativamente menor que el primer factor, pero aún puede contener información valiosa sobre las relaciones entre las categorías.
Contribución mínima del tercer factor: El tercer factor contribuye solo con un 2.4% a la inercia explicada. Este factor podría ser menos relevante para interpretar las relaciones entre las categorías y en algunos casos puede ser excluido para simplificar el modelo.
Simplificación del modelo: En el análisis de correspondencias, a menudo se seleccionan solo los primeros factores más significativos para la interpretación y la visualización. Este gráfico sugiere que, para una simplificación efectiva, se podrían considerar principalmente el primer y segundo factor, ya que explican casi el 98% de la inercia total.