En el ámbito del sector inmobiliario, la capacidad para entender y adaptarse a las complejas dinámicas del mercado, ya que este se ha destacado por ser un mercado complejo y bastante cambiante, donde numerosos factores influyen en la compra, venta y valoración de las propiedades. En este contexto, la empresa inmobiliaria de la ciudad de Cali se enfrenta al desafío de comprender a profundidad el mercado de viviendas urbanas, con el fin de tomar decisiones estratégicas más informadas y mantener su posición competitiva.
Este proyecto se propone abordar este desafío mediante un enfoque integral y multidimensional. El objetivo principal radica en extraer conocimientos significativos de una base de datos que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Para lograr este objetivo, se emplearán diversas técnicas de análisis de datos, entre las cuales se destacan:
El resultado final de este proyecto es un informe que incluirá análisis detallados de los resultados obtenidos, conclusiones clave y recomendaciones específicas para guiar las decisiones estratégicas de la empresa inmobiliaria. Se espera que este análisis de datos proporcione ventajas competitivas en el mercado, optimizando la inversión y maximizando los beneficios en un entorno altamente competitivo y en constante cambio.
El objetivo principal de este proyecto es realizar un análisis exhaustivo que permita identificar patrones, relaciones y segmentaciones relevantes dentro de la base de datos de la empresa inmobiliaria, con el fin de obtener una comprensión profunda del mercado de viviendas urbanas en la ciudad de Cali.
Se trabajará con la base de datos proporcionada por la Inmobiliaria, tenemos un total de 8.322 viviendas y 13 variables asociadas, las cuales veremos detalladamente en el desarrollo del proyecto.
Lo primero que se debe hacer para comenzar a trabajar con la base de datos es instalar las librerías que vamos a utilizar en el modelo:
Librerías
# devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
# install.packages("devtools")
library(devtools)
library(paqueteMODELOS)
library(knitr)
library(rmarkdown)
library(kableExtra)
library(psych)
library(dplyr)
library(ggplot2)
library(table1)
require(table1)
library(tidyverse)
library(DescTools)
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.2
library(mice)
library(naniar)
library(DescTools)
library(VIM)
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.2
library(cluster)
library(ca)
## Warning: package 'ca' was built under R version 4.3.2
library(fpc)
## Warning: package 'fpc' was built under R version 4.3.2
library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.3.2
library(gridExtra)
library(pander)
library(ggdendro)
## Warning: package 'ggdendro' was built under R version 4.3.2
require(raster)
## Warning: package 'raster' was built under R version 4.3.2
require(sf)
## Warning: package 'sf' was built under R version 4.3.2
Datos
Ahora procederemos a importar los datos para el modelo, los cuales se encuentran en un repositorio de GitHub. Adicionalmente, veremos una descripción estructurada de la base de datos la cual contiene información sobre las clases de cada variable, así como las primeras observaciones de cada una. Esto nos proporciona una visión general del conjunto de datos.
# devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
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")=
## .. 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>
Resumen estadístico
Con el fin de obtener una visión más precisa de la base de datos, procederemos a elaborar un resumen que abarque las 13 variables junto con estadísticas fundamentales, tales como la media, la mediana, los valores mínimos y máximos, los cuartiles, y la cantidad de valores faltantes (NA). Este resumen resulta de gran utilidad para adquirir una comprensión rápida de los datos. Además, exhibiremos las seis primeras observaciones de la base de datos para verificar la correcta carga de la misma.
resumen_BD <- summary(vivienda)
kable(resumen_BD, format = "html", table.attr = 'class = "table table-striped table-bordered"') %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Min. : 1 | Length:8322 | Length:8322 | Min. :3.000 | Min. : 58.0 | Min. : 30.0 | Min. : 1.000 | Min. : 0.000 | Min. : 0.000 | Length:8322 | Length:8322 | Min. :-76.59 | Min. :3.333 | |
| 1st Qu.:2080 | Class :character | Class :character | 1st Qu.:4.000 | 1st Qu.: 220.0 | 1st Qu.: 80.0 | 1st Qu.: 1.000 | 1st Qu.: 2.000 | 1st Qu.: 3.000 | Class :character | Class :character | 1st Qu.:-76.54 | 1st Qu.:3.381 | |
| Median :4160 | Mode :character | Mode :character | Median :5.000 | Median : 330.0 | Median : 123.0 | Median : 2.000 | Median : 3.000 | Median : 3.000 | Mode :character | Mode :character | Median :-76.53 | Median :3.416 | |
| Mean :4160 | NA | NA | Mean :4.634 | Mean : 433.9 | Mean : 174.9 | Mean : 1.835 | Mean : 3.111 | Mean : 3.605 | NA | NA | Mean :-76.53 | Mean :3.418 | |
| 3rd Qu.:6240 | NA | NA | 3rd Qu.:5.000 | 3rd Qu.: 540.0 | 3rd Qu.: 229.0 | 3rd Qu.: 2.000 | 3rd Qu.: 4.000 | 3rd Qu.: 4.000 | NA | NA | 3rd Qu.:-76.52 | 3rd Qu.:3.452 | |
| Max. :8319 | NA | NA | Max. :6.000 | Max. :1999.0 | Max. :1745.0 | Max. :10.000 | Max. :10.000 | Max. :10.000 | NA | NA | Max. :-76.46 | Max. :3.498 | |
| NA’s :3 | NA | NA | NA’s :3 | NA’s :2 | NA’s :3 | NA’s :1605 | NA’s :3 | NA’s :3 | NA | NA | NA’s :3 | NA’s :3 |
head_BD <- head(vivienda)
kable(head_BD, format = "html", table.attr = 'class = "table table-striped table-bordered"') %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1147 | Zona Oriente | NA | 3 | 250 | 70 | 1 | 3 | 6 | Casa | 20 de julio | -76.51168 | 3.43382 |
| 1169 | Zona Oriente | NA | 3 | 320 | 120 | 1 | 2 | 3 | Casa | 20 de julio | -76.51237 | 3.43369 |
| 1350 | Zona Oriente | NA | 3 | 350 | 220 | 2 | 2 | 4 | Casa | 20 de julio | -76.51537 | 3.43566 |
| 5992 | Zona Sur | 02 | 4 | 400 | 280 | 3 | 5 | 3 | Casa | 3 de julio | -76.54000 | 3.43500 |
| 1212 | Zona Norte | 01 | 5 | 260 | 90 | 1 | 2 | 3 | Apartamento | acopi | -76.51350 | 3.45891 |
| 1724 | Zona Norte | 01 | 5 | 240 | 87 | 1 | 3 | 3 | Apartamento | acopi | -76.51700 | 3.36971 |
Como se expuso anteriormente, la base de datos cuenta con 8,322 registros, para validar estos datos se deben seguir ciertos pasos.
1. Llevar la base de datos a un data frame para poder analizar y graficar los datos faltantes, tomando como tamaño de la muestra, las 8,322 observaciones, para así analizar todo el conjunto.
vivienda_df <- sample_n(vivienda, 8322)
nrow(vivienda_df)
## [1] 8322
2. Es importante visualizar los datos faltantes para observar su comportamiento
datosNA <- colSums(is.na(vivienda_df))
datosNA <- t(datosNA)
kable(datosNA, format = "html", table.attr = 'class = "table table-striped table-bordered"') %>% kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 3 | 3 | 2638 | 3 | 2 | 3 | 1605 | 3 | 3 | 3 | 3 | 3 | 3 |
Con estos dos pasos y de acuerdo con esta última tabla comprobamos que hay varios datos faltantes, especialmente en las variables “piso” y “parqueadero”, con 2,638 y 1,605 datos faltantes respectivamente.
Gráfico de patrón de datos faltantes
md.pattern(vivienda_df, 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
## 4808 1 1 1 0
## 1909 1 1 0 1
## 876 1 0 1 1
## 726 1 0 0 2
## 1 0 0 0 12
## 2 0 0 0 13
## 3 1605 2638 4275
De este gráfico podemos concluir y constatar varias cosas: 1. Se comprueban que las variables piso y parqueadero tienen un total de faltantes de 4,275 faltantes entre las dos. 2. Dos apartamentos no cuentan con ningún dato diligenciado, por lo que procederemos a eliminarlos al ser pocos registros. 3. Un apartamento solo cuenta con la variable precio diligenciada, las demás están en blanco. Este registro también se eliminará. 4. Solo 4,808 apartamentos tienen la información completa, es decir, apenas un poco más de la mitad.
viv_sinNA <- vivienda_df %>%
filter(!is.na(vivienda_df$id))
nrow(viv_sinNA)
## [1] 8319
md.pattern(viv_sinNA, rotate.names = TRUE)
## id zona estrato preciom 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
## 0 0 0 0 0 0 0 0 0 0
## latitud parqueaderos piso
## 4808 1 1 1 0
## 1909 1 1 0 1
## 876 1 0 1 1
## 726 1 0 0 2
## 0 1602 2635 4237
3. Imputación de los datos faltantes
Vamos a generar un indicador para cada variable que tenga datos faltantes, con el fin de comparar el promedio de los pisos en las viviendas donde no hay información sobre los parqueaderos, y el promedio de los parqueaderos en las viviendas donde no hay información sobre los pisos.
Para hacer esto, primero debemos convertir la variable “piso” en una variable numérica, ya que el dataframe la está tomando como un caracter.
viv_sinNA$piso <- as.numeric(viv_sinNA$piso)
piso_NA <- is.na(viv_sinNA$piso)
parq_NA <- is.na(viv_sinNA$parqueaderos)
#Para los pisos
tapply(X=viv_sinNA$piso, INDEX=parq_NA, FUN = mean, na.rm = T)
## FALSE TRUE
## 3.885607 3.141553
#Para los parqueaderos
tapply(X=viv_sinNA$parqueaderos, INDEX=piso_NA, FUN = mean, na.rm = T)
## FALSE TRUE
## 1.815100 1.885804
De acuerdo con esto, se puede inferir que los resultados entre los datos faltantes y los completos son prácticamente idénticos en ambos casos, con una diferencia mínima: 0.7 en el caso de los pisos y 0.07 en los parqueaderos. Por lo tanto, podemos avanzar con la imputación de datos.
4. Reemplazo de los valores faltantes
Se tomó la decisión de reemplazar los valores vacíos de los pisos por la mediana y de los parqueaderos por la moda por las siguientes razones:
barplot(table(viv_sinNA$parqueaderos), main = "Histograma de parqueaderos")
moda_parq <- Mode(viv_sinNA$parqueaderos, na.rm = TRUE)
viv_sinNA$parqueaderos[is.na(viv_sinNA$parqueaderos)] <- moda_parq
summary(viv_sinNA$parqueaderos)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 1.674 2.000 10.000
barplot(table(viv_sinNA$piso), main = "Histograma de pisos", col = "cyan3")
mediana_piso <- median(viv_sinNA$piso, na.rm = TRUE)
viv_sinNA$piso[is.na(viv_sinNA$piso)] <- mediana_piso
str(viv_sinNA$piso)
## num [1:8319] 1 3 3 7 3 3 3 6 2 3 ...
Con la imputación de estas dos variables, el mapa de valores faltantes queda sin ningún valor, como se puede ver en la siguiente gráfica
gg_miss_var(viv_sinNA)
El conjunto de datos está ahora preparado para su análisis, tras haberse
eliminado y corregido información que podría distorsionar el objetivo
del proyecto. Para futuros análisis, es importante considerar las
razones detrás de estos datos faltantes. Puede interpretarse que la
casilla no se completó o que el valor es cero, indicando una vivienda
sin parqueaderos o de un solo piso.
5. Ahora, se procederá con la eliminación de la variable “ID”, por las siguientes razones:
viv_sinNA <- viv_sinNA[, !names(viv_sinNA) %in% "id"]
6. Finalmente para la limpieza de los datos, identificaremos si hay alguna redundancia en nuestro conjunto de datos. Esto lo haremos a través de una matriz de correlación de los atributos numéricos.Por esto, lo primero que se debe hacer antes de graficar la matriz, es llevar los atributos numéricos a un data frame a parte.
num_cols <- viv_sinNA[sapply(viv_sinNA, is.numeric)]
matriz_cor <- cor(num_cols, use = "complete.obs")
corrplot(matriz_cor, method = "circle", type = "lower", title = "Matriz de correlación", diag = FALSE, number.cex = 0.5, number.digits = 2, addCoef.col = "gray4", mar = c(0, 0, 2, 0))
De la matriz de correlaciones se puede concluir que no hay atributos con correlaciones demasiado altas, esto debido a que ninguna correlación sobre pasa el 0.7; por lo tanto, parece no haber redundancia en los datos.
El objetivo principal del PCA es transformar un conjunto de variables correlacionadas en un conjunto de variables no correlacionadas llamadas componentes principales. Estas componentes principales son combinaciones lineales de las variables originales y están ordenadas de acuerdo a la cantidad de varianza que explican. Al visualizar la estructura de los datos en términos de estos componentes principales, podemos identificar las características clave que explican la mayor parte de la variación en los datos, lo que puede ser crucial para comprender el mercado inmobiliario y tomar decisiones estratégicas informadas.
1. Estandarizar variables numéricas evita que aquellos atributos con escalas altas afecten las estimaciones
znumvivienda = scale(num_cols)
head(znumvivienda)
## piso estrato preciom areaconst parqueaderos banios
## [1,] -1.1533052 -0.6156201 -0.3617800 0.3711775 -0.6343338 -0.07793773
## [2,] -0.2404274 -1.5872276 -0.9550893 -0.7339949 -0.6343338 -0.77811479
## [3,] -0.2404274 0.3559875 -0.5595498 -0.6640473 -0.6343338 -0.77811479
## [4,] 1.5853282 -0.6156201 -0.8333848 -0.8039425 -0.6343338 -0.77811479
## [5,] -0.2404274 -1.5872276 -0.9246631 -0.8459111 -0.6343338 -0.77811479
## [6,] -0.2404274 -0.6156201 -0.8577257 -0.7899530 -0.6343338 -0.77811479
## habitaciones longitud latitud
## [1,] -0.4147626 -0.36809141 0.005530019
## [2,] -0.4147626 -0.02265473 -0.108920613
## [3,] -0.4147626 0.40784788 -1.248736332
## [4,] -0.4147626 0.69580757 0.794957943
## [5,] -0.4147626 1.75165976 1.385504441
## [6,] -0.4147626 0.55211511 -0.929775554
2. Elección del número de componentes principales
acp_res <- prcomp(znumvivienda)
fviz_eig(acp_res, addlabels = TRUE, barfill = "lightblue1",barcolor = "lightblue2",linecolor = "lightblue4", main = "Gráfico de sedimentación")
En este caso el primer componente principal explica el 40.3% de la variabilidad contenida en la base de datos y entre los dos primeros está el 57.7% de los datos, lo cual indicaría que con solo una variable (CP1) que se obtiene mediante una combinación lineal de las variables se puede resumir un poco más de la variabilidad que contiene la base de datos.
fviz_pca_var(acp_res,
col.var = "contrib",
gradient.cols = c("red1", "yellow3", "green3"),
repel = TRUE)
fviz_contrib(acp_res, choice = "var", axes = 1, top = 10, fill = "lightblue1")
fviz_contrib(acp_res, choice = "var", axes = 2, top = 10, fill = "lightblue1")
De estos gráficos podemos concluir lo siguiente: 1. Las variables relacionadas con características físicas y de valoración de las propiedades (precio, baños, área, parqueaderos, estrato) están fuertemente asociadas entre sí y contribuyen significativamente a la variabilidad a lo largo de la dimensión 1. Es decir, las propiedades con precios más altos tienden a tener más baños, mayor área, más parqueaderos y están ubicadas en estratos más altos, lo que tiene sentido. 2. Las variables relacionadas con la ubicación geográfica de las propiedades (latitud y longitud) y el piso en el que está ubicada la propiedad tienen una asociación diferente y moderada con la dimensión 2. Esto puede indicar que la ubicación geográfica puede ser un factor importante que influye en la variabilidad del mercado inmobiliario urbano. Por ejemplo, propiedades ubicadas en ciertas áreas geográficas pueden tener características particulares o estar sujetas a ciertas dinámicas del mercado. 3. El área del inmueble y el número de los baños están altamente correlacionados, lo que nos lleva a la conclusión de que entre más metros cuadrados más baños tiene el inmueble
Un análisis de conglomerados, también conocido como análisis de clusters, tiene como objetivo identificar grupos homogéneos de observaciones dentro de un conjunto de datos, donde las observaciones dentro de cada grupo son más similares entre sí que con aquellas en otros grupos. Un análisis de conglomerados puede ser una herramienta valiosa para explorar la estructura del mercado inmobiliario urbano, identificar segmentos de mercado, comprender patrones y tendencias, personalizar estrategias de marketing y ventas, y mejorar la precisión en la valoración de propiedades. Esto puede ayudar a la empresa inmobiliaria a tomar decisiones más informadas y estratégicas para optimizar su desempeño en el mercado.
1. Elección del método de agrupamiento y número de clusters Debido a que en el gráfico Biplot no queda tan claro el número de clusters, se utilizará el método de agrupamiento K-Means usando el método del codo, un algoritmo que se usa para dividir un conjunto de datos en k grupos diferentes, donde cada observación pertenece al grupo con la media más cercana. Este algoritmo busca iterativamente minimizar la suma de las distancias al cuadrado de cada punto al centroide de su grupo asignado.
set.seed(123)
wcss <- sapply(1:10, function(k) kmeans(znumvivienda, centers = k)$tot.withinss)
## Warning: did not converge in 10 iterations
plot(1:10, wcss, type = "b", main = "Método del Codo", xlab = "K clusters", ylab = "Suma total de cuadrados")
sil_width <- function(k){
km.res <- kmeans(znumvivienda, k, nstart = 10)
ss <- silhouette(km.res$cluster, dist(znumvivienda))
mean(ss[, 3])
}
k.values <- 2:10
sil_values <- sapply(k.values, sil_width)
plot(k.values, sil_values, type = "b")
fviz_nbclust(znumvivienda, kmeans, method = "silhouette")
De acuerdo con el método del codo y el método de la silueta, el número óptimo de clusters es igual a 2, esta conclusión se basa en la observación de un cambio significativo en la variación intra-cluster y una alta cohesión entre los clusters cercanos, lo que indica una clara división del conjunto de datos en dos grupos distintos.
2. Ejecución del análisis de conglomerados
cluster_kmeans <- kmeans(znumvivienda, centers = 2)
cluster_kmeans
## K-means clustering with 2 clusters of sizes 5614, 2705
##
## Cluster means:
## piso estrato preciom areaconst parqueaderos banios
## 1 0.06730709 -0.3572285 -0.5057122 -0.4416209 -0.4081365 -0.5039806
## 2 -0.13969020 0.7413978 1.0495632 0.9165470 0.8470529 1.0459694
## habitaciones longitud latitud
## 1 -0.2982116 0.2430411 0.07905036
## 2 0.6189131 -0.5044113 -0.16406238
##
## Clustering vector:
## [1] 1 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 1 1
## [38] 1 1 2 1 2 1 1 1 1 2 1 2 1 1 2 1 2 2 2 2 1 1 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1
## [75] 1 1 2 1 1 1 2 2 1 2 1 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 1 1 2 1 1 2 2 1 1 1
## [112] 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2
## [149] 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 2
## [186] 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 1 2 1 2 1 2 1 1 1 2 1 2 2 2 1 2 1 1 2 1 1
## [223] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1
## [260] 1 1 2 1 1 1 1 1 2 2 1 1 2 1 1 1 2 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1
## [297] 2 1 1 2 2 2 1 1 2 2 1 2 1 1 1 2 1 1 2 2 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 1
## [334] 1 2 2 1 2 1 1 1 1 1 2 2 1 1 1 2 2 1 1 2 1 2 1 1 1 2 1 2 1 2 1 2 1 2 1 1 1
## [371] 2 1 1 1 1 1 1 2 2 2 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 2
## [408] 2 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 2 2 1 1 1 2 1 1 1 1
## [445] 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2 2 2 2 2 1 2 1 1 2 2 2 1 2 2 2 1 1 1 1
## [482] 1 1 1 2 2 2 2 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 2 1 1 2
## [519] 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 2
## [556] 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 1 2 1 2 1 2 2 1 1 2 2 2 1 1 2 1 2 2 1
## [593] 1 2 2 1 1 2 1 1 1 1 1 2 2 1 1 2 1 2 1 1 1 1 2 2 1 1 2 2 2 2 1 1 1 1 2 2 1
## [630] 2 2 1 1 1 1 2 1 1 1 2 2 1 1 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 2 2 1 1 2 1 1 2
## [667] 2 2 2 2 2 1 2 2 1 1 1 2 1 1 1 1 1 1 2 1 2 1 2 1 1 2 1 1 2 2 1 1 1 1 1 2 1
## [704] 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 2 1 1 1 2 2 2 1 2 2 2 1 2
## [741] 2 1 2 2 2 1 2 2 1 1 2 1 1 2 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 2 1 1 2 1 1 1 2
## [778] 2 2 1 1 2 1 2 2 1 2 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 2 2 1 1 1 1
## [815] 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 2 1 1 2 2 1 1 1 1 2 1 1 2 2 1 1 1 1 1 1 1
## [852] 2 1 2 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 2 1 2 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 2
## [889] 1 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 2 1 1 1 2
## [926] 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1
## [963] 1 1 2 2 2 2 2 1 2 1 1 1 1 1 2 1 1 2 2 1 1 2 2 2 2 1 1 1 2 1 1 1 2 1 1 2 1
## [1000] 1 1 1 1 1 1 2 1 1 2 2 1 2 2 2 1 2 1 1 2 1 2 2 2 2 2 1 1 2 2 1 2 1 2 1 1 1
## [1037] 1 2 1 2 2 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 1
## [1074] 2 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 1
## [1111] 1 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2
## [1148] 2 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 2 1 1 1 1 2 1 1 2 1 2 1 1 1 2 2 2 1
## [1185] 1 1 1 1 1 2 2 1 1 1 2 1 1 2 1 2 1 2 1 1 2 1 1 1 2 2 1 1 1 1 2 1 2 1 1 1 1
## [1222] 1 1 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 2 2 1 1 1 1 1 1 2 1 2 1 1
## [1259] 2 1 1 1 1 2 1 2 2 2 1 2 1 2 1 1 1 2 1 1 1 2 1 1 2 1 1 2 2 1 1 2 1 1 1 1 1
## [1296] 1 2 1 1 1 2 1 1 1 2 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 2 1 1 1 1 1 1
## [1333] 2 2 2 1 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 2 1 2 2 1 1 1 1 2 1 1 2
## [1370] 2 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1 2
## [1407] 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 2 1 1 1 1
## [1444] 1 1 2 1 1 2 2 1 2 2 1 1 1 1 2 1 1 2 2 1 2 1 1 1 1 1 1 1 1 2 1 1 2 1 1 2 1
## [1481] 1 2 1 1 2 1 1 2 1 1 1 2 1 1 1 1 2 2 2 1 1 2 1 2 2 1 2 2 2 1 2 2 1 2 1 1 2
## [1518] 2 1 2 1 2 2 1 1 1 1 1 1 1 1 2 1 1 1 2 1 2 2 1 1 1 2 1 2 1 1 1 1 1 2 1 2 2
## [1555] 1 1 1 2 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 2 1 2 2 1
## [1592] 2 1 2 1 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 2 1 2 2 1
## [1629] 1 2 1 1 1 2 1 1 1 1 2 2 1 1 2 2 1 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 1 1 2 1 1
## [1666] 2 2 1 2 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 2 1 1 1 2 1 2 1
## [1703] 1 2 1 1 1 2 1 2 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 2 1
## [1740] 1 1 1 1 2 2 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 2 2 2 1 1 1
## [1777] 1 2 1 1 1 1 1 2 1 2 1 1 2 1 2 1 1 1 1 2 1 1 2 1 1 2 1 2 1 1 1 1 2 1 2 2 1
## [1814] 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 1 1 2 1
## [1851] 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 2 2 1 1 2 2
## [1888] 1 2 2 1 1 1 2 1 1 1 2 2 2 1 2 1 2 1 1 2 2 1 1 2 1 2 1 2 1 1 2 1 1 1 1 2 1
## [1925] 1 1 1 1 1 2 2 1 2 1 2 1 2 1 1 1 2 2 1 1 1 2 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1
## [1962] 2 1 2 2 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 1
## [1999] 1 2 1 1 2 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 2 2 1 1 1 2 1 2 2 1 2 1 1 1 1 1 1
## [2036] 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 1
## [2073] 1 1 2 2 2 2 2 2 1 2 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 2 2 2 1 1 1 1
## [2110] 2 2 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 2 1 1 1 2 1 1
## [2147] 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 2 1
## [2184] 1 2 1 1 2 1 2 1 1 1 1 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2
## [2221] 2 1 1 1 1 1 2 2 1 1 2 2 1 2 2 1 2 2 1 1 1 1 2 1 1 1 2 2 1 1 2 1 1 2 1 1 1
## [2258] 2 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 2 2 1 1 1 2 1 1 2 2 1 2 1 2
## [2295] 1 1 2 1 2 2 2 1 2 1 2 2 2 1 2 2 2 1 2 2 1 1 1 1 1 1 1 1 2 2 1 2 1 1 2 1 1
## [2332] 1 1 1 2 2 1 1 2 1 1 2 1 1 1 1 1 1 2 2 1 2 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1
## [2369] 1 2 1 1 1 2 1 2 1 1 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 2 2
## [2406] 2 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1
## [2443] 2 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 1 1 2 2 2 2 2 2 1 1 2 1 1 1 1 1 1
## [2480] 1 1 1 1 1 2 2 1 2 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1
## [2517] 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 2 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 2 1 2
## [2554] 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 2 2
## [2591] 1 1 2 1 2 1 1 1 2 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1
## [2628] 2 1 1 1 2 2 2 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 2 2 1 2 1 1 1 2 1 1 2 1 1 2 1
## [2665] 1 1 2 2 2 2 1 1 1 1 1 1 2 1 2 2 2 2 2 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1
## [2702] 1 1 1 2 1 2 2 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1
## [2739] 2 1 1 2 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 1 1 2 2 2 2 1 1 1 1 1 1 1 2 1 2
## [2776] 2 2 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 1 2 1 1 2 1 2
## [2813] 1 1 2 1 1 2 1 2 2 2 2 1 1 1 1 1 2 2 2 1 2 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 1
## [2850] 1 2 1 1 1 1 1 1 1 1 2 1 2 2 2 1 1 1 1 2 1 1 1 2 1 1 1 2 2 2 1 1 1 2 2 1 1
## [2887] 2 2 1 2 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 2 2 1 1 2 2 1 2 1 1
## [2924] 1 1 1 2 1 1 1 1 2 2 1 1 2 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 1 1 1 1 1 1
## [2961] 2 2 1 2 1 1 2 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 2 2 1 2 1 2 1 2 2 1 1 1 2
## [2998] 1 1 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 1 1 1 2 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1
## [3035] 1 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 1 1 2 2 1 2 2 1 1 1 2 1 1 1 2 2 2 2 1 2
## [3072] 1 2 1 2 1 2 2 2 1 1 2 1 2 2 2 2 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1
## [3109] 1 1 2 1 1 2 2 1 2 1 1 2 1 2 1 2 2 1 2 2 2 2 1 2 1 1 1 2 1 2 2 1 2 2 1 1 2
## [3146] 1 2 2 2 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 2 1 1 2 2 2 2
## [3183] 2 1 1 1 2 1 1 2 1 1 1 1 1 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 1 1 1 2 2 2 2
## [3220] 1 1 1 2 1 1 2 1 2 1 1 1 1 2 2 1 2 2 2 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 2 2 2
## [3257] 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 2 2 1 1 1 2 1 2 2 1 2 1 1 1 2 2 1
## [3294] 1 2 1 1 1 2 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 2 1 1 2 2 2 2 1 1 2 1 1 2 2 1 1
## [3331] 1 2 1 1 2 1 2 1 1 1 1 2 1 1 1 2 2 2 1 2 1 1 1 2 2 1 1 1 1 1 2 1 2 2 1 1 1
## [3368] 2 1 2 1 2 1 1 2 2 2 1 2 1 1 1 2 1 2 1 1 1 1 2 2 2 1 2 1 2 1 1 1 1 1 1 1 1
## [3405] 2 1 2 1 1 1 1 2 1 2 2 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 2 1 2 1 1 2 1 1 1 2
## [3442] 2 1 1 1 1 2 2 1 1 1 2 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 2 1
## [3479] 1 1 2 1 1 1 1 2 2 2 2 1 1 1 2 1 1 2 1 1 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1
## [3516] 1 1 2 1 1 2 2 2 1 1 1 1 1 2 2 2 1 2 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1
## [3553] 1 1 1 1 2 2 1 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 1
## [3590] 2 1 2 2 2 2 1 2 2 2 1 1 2 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 2 2 1 2 2 1 1
## [3627] 2 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2 1 1 1 1 1 1 2 2 1 1 1 1 1 2 2 1 1 2 1 1 2
## [3664] 1 2 1 1 1 1 1 2 1 1 1 1 2 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1
## [3701] 1 2 1 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 2 1 2 2 1 1 2 2 1
## [3738] 1 1 2 2 1 2 2 2 1 1 1 2 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 1 2 1 2 2 2 1 2 1 2
## [3775] 1 2 2 1 1 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 2 1
## [3812] 1 1 2 2 1 2 2 1 1 1 1 2 1 1 1 2 2 2 2 1 2 2 2 1 2 2 1 1 2 1 1 2 2 1 2 2 1
## [3849] 2 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 2 2 2 1 2 1 2 1
## [3886] 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1
## [3923] 1 1 1 1 1 2 1 2 1 1 1 2 2 2 1 1 1 1 2 2 2 1 1 1 2 2 2 1 1 1 2 2 1 1 2 1 1
## [3960] 2 2 1 2 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 2
## [3997] 1 1 1 2 1 2 2 1 2 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1
## [4034] 2 2 1 2 1 1 1 1 2 2 2 1 1 1 2 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 2 1
## [4071] 1 2 1 2 1 2 1 2 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 2 2
## [4108] 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 1 1 2
## [4145] 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1
## [4182] 1 1 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1
## [4219] 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 2 2 1 2 1 1 1 1
## [4256] 2 1 1 1 1 1 1 1 2 2 1 2 2 2 1 1 2 2 2 2 2 1 1 2 1 1 1 1 1 2 1 1 1 1 2 1 2
## [4293] 2 2 1 1 1 2 1 1 2 2 2 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1
## [4330] 1 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 1 1 2 2 1 1 1 1 1 1 1 1
## [4367] 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 2 1 2 1 1 2 1 2 1
## [4404] 1 1 1 1 1 2 1 2 2 2 2 1 1 1 1 2 1 1 1 2 1 1 2 2 1 2 2 2 1 2 2 2 2 1 1 1 2
## [4441] 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 1 1 2 2 1 1 2 1 2 1 1 1 1 2 1 1 1 2
## [4478] 1 1 1 2 1 2 1 1 2 2 2 1 1 1 2 1 2 1 2 2 1 1 2 1 2 2 2 1 1 1 1 1 1 2 1 2 2
## [4515] 1 2 2 1 2 1 1 2 1 2 1 1 1 1 2 1 1 2 1 1 1 1 1 2 1 1 1 2 1 2 1 2 1 2 1 1 2
## [4552] 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1 1 1 1 1 2 2 2 1 2 1 2 2 1 1 1 1 1 2
## [4589] 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 2 1 1 2 1 2 1 2 2 1 2 1 2 1 2 1 1 2
## [4626] 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 2 2 2 1 1 2 1 1 1 2 2 1 1 1 1 1 1 2 1
## [4663] 2 2 1 1 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1 2 2 1 1 2 2 1 2 1 1 1 1 1 2
## [4700] 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 2 2 2 2 1 1 2 2 2 1 1 2
## [4737] 1 2 2 1 1 2 1 1 1 1 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1
## [4774] 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 1 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 2
## [4811] 2 1 2 1 1 2 1 2 1 1 1 1 1 1 2 2 2 1 1 1 1 1 2 2 2 1 1 1 1 1 1 2 2 2 1 2 1
## [4848] 1 1 1 2 2 1 2 2 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1
## [4885] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1
## [4922] 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 2 1 1 2 1
## [4959] 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 2 2
## [4996] 2 2 1 2 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 2 2 2
## [5033] 2 2 1 1 2 1 2 2 1 1 1 2 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 1 1 1 1 2 1 1 1 1 1
## [5070] 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 1
## [5107] 1 1 2 2 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 1 1 2 1 1 1 2 2 1 2 1 1 1 1 1 1 2 2
## [5144] 1 1 1 1 1 2 1 2 2 1 1 2 1 2 1 1 1 2 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1 2 2 1 1
## [5181] 1 2 1 2 2 1 1 2 2 1 2 1 1 1 2 1 2 2 2 2 2 2 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1
## [5218] 2 1 1 2 2 1 1 2 1 1 2 1 2 1 1 1 1 1 1 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1
## [5255] 1 1 1 1 1 1 1 2 1 1 2 2 1 1 2 1 1 1 2 1 2 1 1 2 1 2 1 1 1 1 1 2 1 2 2 1 1
## [5292] 1 1 1 1 1 2 2 2 1 1 1 1 2 1 1 2 1 2 1 2 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1
## [5329] 1 2 2 2 1 2 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 2 2 1 1 1 2 1 2 2 2 2 2 2 1 1 2
## [5366] 1 1 2 2 1 1 2 2 1 1 1 1 2 2 1 2 1 1 2 1 1 1 2 1 1 1 2 2 2 1 1 1 1 2 1 1 2
## [5403] 1 1 1 2 1 1 1 2 1 1 2 1 1 1 1 2 1 1 2 2 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
## [5440] 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1
## [5477] 1 1 1 1 1 2 2 1 1 1 2 1 1 1 1 1 2 2 1 1 2 2 1 2 1 1 2 2 1 1 1 1 2 1 1 2 1
## [5514] 2 1 2 2 1 1 2 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 1 2 2 2 1 2 2
## [5551] 1 1 1 2 1 2 1 2 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 2 1 1 1 2
## [5588] 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 2 1 1 2 1 1 1 1 2 1 1 1 1 2 2 1 2 2
## [5625] 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 2 2 1 1 2 2 1 2 1 1 1
## [5662] 1 2 1 1 2 1 2 1 1 2 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 2 1 1 1 1 1 2 1 2 2
## [5699] 1 2 1 1 1 1 2 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1 2 2 1 1 2 1 1 1 1 1
## [5736] 1 1 2 2 1 2 1 2 1 2 1 1 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 1 2 2 2 1 2 2 2
## [5773] 2 1 1 2 2 1 1 1 1 1 1 2 1 1 2 2 2 2 2 1 1 2 2 1 1 1 2 1 2 1 1 1 2 2 1 1 1
## [5810] 1 1 1 1 1 2 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1 2 1 2 1 1 2 2
## [5847] 2 1 2 1 2 1 2 1 2 1 1 1 1 2 2 1 1 2 2 2 2 1 2 1 2 1 1 2 1 2 2 1 1 1 1 1 2
## [5884] 1 2 1 1 1 1 2 1 2 1 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1
## [5921] 2 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1
## [5958] 1 1 2 1 2 2 2 1 2 1 1 1 2 1 1 1 2 2 2 2 2 1 1 1 1 2 1 1 2 1 1 1 2 1 1 1 1
## [5995] 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 1 2 2 1 1 2 1 1 1 2 2 1 1
## [6032] 1 2 1 1 1 1 1 2 1 1 2 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 2 1 2 1 2 2 2 1 2 1 1
## [6069] 1 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 2 2 2 2 1 2 2 2 2 2 2 1 1 1 2 1 1 1 1 1 1
## [6106] 1 1 1 2 1 2 2 2 1 1 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1
## [6143] 2 1 1 1 2 1 1 1 1 1 2 2 1 2 2 2 2 1 2 1 1 1 2 1 1 1 2 1 2 1 2 1 1 1 1 2 1
## [6180] 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 1 1 2 1
## [6217] 2 2 1 1 2 2 1 1 2 1 1 1 2 2 1 1 2 2 1 1 2 2 2 2 1 1 2 2 1 1 1 1 2 1 1 2 2
## [6254] 2 1 1 2 1 2 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 2 1 1 1 2 1 1 2
## [6291] 1 2 2 2 1 2 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
## [6328] 1 1 1 1 2 1 1 2 1 1 1 2 1 2 1 1 1 1 1 1 2 2 2 1 2 2 1 1 1 1 1 1 2 1 1 1 2
## [6365] 2 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 2 2 1 2 1 2 1 1 1 2 1 1 1 2 1 1 1 1 1 2 2
## [6402] 2 2 1 2 1 1 2 1 1 1 1 2 1 1 1 2 1 1 2 2 1 2 1 2 1 1 1 1 2 1 2 1 1 2 1 1 1
## [6439] 1 2 2 1 2 1 2 1 2 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 2 1 2 1 1 1 1 2 1
## [6476] 1 1 1 2 1 2 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 2
## [6513] 1 2 2 1 1 1 1 1 2 2 1 2 2 1 1 2 2 1 1 1 1 1 1 2 2 2 1 1 1 1 2 1 2 1 1 1 1
## [6550] 1 2 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 2 2 1 1 2 2 2 1 2 2 1 1 2 2 2 2 1 1
## [6587] 1 1 2 2 1 1 1 2 1 1 2 1 1 2 1 2 1 2 2 2 2 2 2 1 1 2 1 2 1 2 1 1 2 2 1 2 1
## [6624] 1 1 1 1 1 1 1 2 1 2 1 2 2 2 1 1 2 2 1 2 1 2 1 2 2 1 1 1 2 2 1 1 1 1 1 1 2
## [6661] 2 2 1 2 1 1 2 2 1 2 1 1 1 1 2 1 2 1 2 1 2 1 1 2 2 1 2 1 1 1 2 2 1 2 1 1 1
## [6698] 2 2 1 1 1 1 2 1 1 2 1 2 2 1 1 1 2 1 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1
## [6735] 2 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 2 1 2 1 2 1 1 1 2 1 1 2 1
## [6772] 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 2 2 2
## [6809] 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 2 1 2 2 1 2 1 2 1 1 2 2 1 1 2 1 2 1 2 2 1 2
## [6846] 1 1 1 1 2 1 2 1 1 2 1 2 2 1 1 2 1 1 1 1 1 1 2 1 1 2 1 2 2 1 2 1 1 1 1 1 1
## [6883] 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 1 2 1 2 1 1 1 1 1 1 2 1 1 2 2 2 1 1 2 2 1 1
## [6920] 2 1 2 1 2 1 2 1 2 1 2 1 2 2 1 1 2 1 1 2 2 1 1 1 2 2 1 1 1 1 1 1 2 1 1 2 1
## [6957] 1 1 2 1 2 1 1 1 2 1 2 1 1 2 2 1 2 1 2 2 1 1 1 2 1 1 1 1 2 2 2 1 1 1 1 2 2
## [6994] 1 2 1 1 2 1 1 1 2 2 2 1 1 2 1 1 1 1 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1
## [7031] 1 1 2 2 2 2 1 1 2 2 1 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1
## [7068] 1 2 1 2 1 1 1 1 1 1 1 2 1 1 1 2 1 2 1 1 2 2 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1
## [7105] 1 1 1 1 2 1 1 1 2 1 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
## [7142] 2 2 2 2 1 1 2 2 1 1 1 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 1 1 1 2 1 1 2 1 1 2 1
## [7179] 1 1 1 1 2 2 1 2 2 2 1 1 2 1 2 2 1 1 1 1 1 2 1 1 1 1 1 1 1 2 1 1 1 2 2 1 1
## [7216] 1 2 1 1 2 2 1 1 1 2 2 1 1 1 1 2 2 2 2 1 1 2 1 2 1 2 2 1 1 1 1 1 2 2 1 1 2
## [7253] 1 2 1 2 2 1 1 1 1 2 1 1 1 2 2 2 2 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 2 2 2 2 2
## [7290] 1 1 1 1 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 2 1 2 2 1 1 2 1 1 1 2 1 2 1 2 2 1 1
## [7327] 2 2 1 1 1 2 1 1 1 1 2 2 2 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 2 1 2 2
## [7364] 2 1 2 1 2 1 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 2 2 1 1 1 2 1 2 1 1 1 1
## [7401] 1 1 2 1 2 1 2 1 2 1 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 1
## [7438] 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 2 2 1 1 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2
## [7475] 1 1 2 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 2 1 1 1 2 2 1 2
## [7512] 2 1 2 1 1 1 2 1 1 2 2 1 2 2 1 1 2 1 1 2 1 1 2 2 1 2 1 1 1 2 1 1 1 1 2 1 1
## [7549] 1 1 1 2 1 1 1 1 2 1 2 1 2 1 1 1 2 1 2 1 2 1 1 1 1 2 2 2 1 1 1 2 1 1 1 1 2
## [7586] 1 2 1 2 1 2 2 1 1 2 2 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 2 2
## [7623] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 2 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1
## [7660] 1 2 2 2 1 2 1 1 1 2 2 1 1 1 1 1 1 2 2 1 1 2 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1
## [7697] 2 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 2 1 1 1 1 1 1 2
## [7734] 1 1 1 1 1 2 2 1 2 1 1 1 2 1 1 2 2 1 2 1 2 1 1 1 1 1 1 2 1 1 2 2 1 2 1 1 1
## [7771] 1 2 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 2 1 1 1 2 1 1 2 1 1 1 1 2 1 1
## [7808] 1 1 1 1 1 1 2 2 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 1 1 1
## [7845] 2 1 1 1 2 1 1 1 1 2 1 1 2 1 1 1 1 2 1 2 1 2 1 1 2 1 1 1 1 1 1 1 1 1 1 2 2
## [7882] 1 2 1 1 1 1 1 2 2 1 1 1 1 2 2 2 1 1 1 1 1 2 1 1 1 1 2 2 1 2 1 1 1 1 1 2 1
## [7919] 1 1 1 1 1 2 1 1 2 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 2 1 2 1 1 1 1 2 1 1 1 2
## [7956] 1 1 1 1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 2 1 1 2 2 1 2 1 1 1 1 1 1
## [7993] 2 2 1 1 1 1 1 1 2 2 1 1 2 1 2 1 1 2 2 1 2 2 2 2 2 2 1 2 2 1 1 2 1 2 2 2 2
## [8030] 1 2 1 1 2 1 1 2 1 2 2 2 2 1 1 2 1 2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1
## [8067] 1 2 2 1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 1 1 2 1 2 2 2 1 1 1 1 2 1 2 1 1 2 1 1
## [8104] 1 1 1 1 1 2 1 2 1 2 1 1 1 1 1 1 2 1 2 1 1 1 2 1 1 1 2 1 2 1 2 1 1 1 1 2 2
## [8141] 1 1 2 2 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 2 2 1
## [8178] 1 1 1 1 1 1 1 2 1 2 1 1 1 1 2 1 2 1 1 2 1 1 1 2 1 1 1 2 1 1 1 1 1 1 2 1 1
## [8215] 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 1 2 2 1
## [8252] 1 1 2 2 1 2 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 1 1 2 2 1 1 1 2 1 2 2 2 2 1 1
## [8289] 1 2 1 2 1 1 1 1 2 1 2 2 1 1 1 1 2 2 1 2 2 1 1 1 1 2 1 1 1 1 2
##
## Within cluster sum of squares by cluster:
## [1] 29301.20 25572.04
## (between_SS / total_SS = 26.7 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
3. Visualización de clusters
fviz_cluster(cluster_kmeans, data = znumvivienda)
Basándonos en los resultados obtenidos del análisis de conglomerados
utilizando tanto el método del codo como el método de la silueta, se
puede determinar que el mercado de viviendas urbanas estudiado puede ser
mejor comprendido y segmentado en dos grupos distintos de tamaños 2705 y
5614. Estos dos clusters representan segmentos claros dentro del mercado
inmobiliario, con propiedades que comparten características similares
dentro de cada grupo.
La identificación de dos clusters distintos sugiere la presencia de diferencias significativas en las características de las propiedades, así como posiblemente diferentes dinámicas y tendencias en el mercado. Esto proporciona información valiosa para la empresa inmobiliaria, ya que permite una comprensión más profunda de las necesidades y preferencias de los clientes, así como la posibilidad de adaptar estrategias de marketing y ventas de manera más efectiva.
El análisis de correspondencia es una herramienta útil para explorar relaciones entre variables categóricas, identificar patrones y tendencias en los datos, tomar decisiones estratégicas informadas y segmentar el mercado en grupos homogéneos.
En nuestro conjunto de datos tenemos 3 variables categóricas que son: la zona, el barrio y el tipo de vivienda. Sin embargo, el barrio es una variable muy compleja de analizar por la cantidad de datos únicos que hay en ella. Por esto, no se tomará como parte del análisis.
1. Crear una tabla de contingencia para estas dos variables
tipo_zona <- table(viv_sinNA$tipo, viv_sinNA$zona)
print(tipo_zona)
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## Apartamento 24 1198 1029 62 2787
## Casa 100 722 169 289 1939
Observamos una clara variación en las preferencias de tipo de propiedad entre las diferentes zonas. Por ejemplo, la Zona Sur muestra una clara preferencia por los apartamentos, con una frecuencia considerablemente mayor en comparación con otras zonas. En contraste, las zonas Centro y Oriente presentan una distribución más equilibrada entre casas y apartamentos.
La distribución geográfica de la oferta inmobiliaria parece estar influenciada por factores como la ubicación, la infraestructura y las características socioeconómicas de cada zona. Esto se refleja en las diferencias significativas en la composición de tipos de propiedad entre zonas. Por ejemplo, la Zona Sur, que puede ser más densamente poblada y tener una infraestructura urbana más desarrollada, tiende a tener una mayor proporción de apartamentos.
Para analizar a profundidad la asociación entre ambas variables, haremos una prueba Chi-cuadrado.
chisq.test(tipo_zona)
##
## Pearson's Chi-squared test
##
## data: tipo_zona
## X-squared = 690.93, df = 4, p-value < 2.2e-16
El resultado de la prueba de chi-cuadrado indica que hay una asociación significativa entre las variables “tipo” y “zona”.
El valor extremadamente bajo del valor p (p-value = 2.2e-16) indica que la asociación entre el tipo de propiedad y la zona es altamente significativa. Esto significa que la distribución de tipos de propiedad varía significativamente según la zona en la que se encuentran las propiedades.
Dado que el valor de chi-cuadrado (X-squared = 690.93) es bastante grande en comparación con el número de grados de libertad (df = 4), se rechaza la hipótesis nula de independencia entre las variables “tipo” y “zona”.
La asociación significativa entre el tipo de propiedad y la zona es importante para el análisis, ya que indica que la ubicación (zona) puede ser un factor importante a considerar al analizar el tipo de propiedad. Esto puede tener implicaciones importantes para la segmentación de mercado, las estrategias de marketing y la toma de decisiones estratégicas.
2. Convertimos las dos variables categóricas a factores
viv_sinNA$zona <- as.factor(viv_sinNA$zona)
viv_sinNA$tipo <- as.factor(viv_sinNA$tipo)
cat_cols <- viv_sinNA[sapply(viv_sinNA, is.factor)]
3. Hacenmos finalmente el análisis de correspondencia
res_AC <- MCA(cat_cols, ncp = 4, graph = FALSE)
rpAC <- fviz_screeplot(res_AC, addlabels = TRUE, ylim = c(0, 40))
varAC <- fviz_mca_var(res_AC, choice = "mca.cor",repel = TRUE, ggtheme = theme_minimal())
grid.arrange(rpAC, varAC, nrow = 1, ncol = 2)
Se puede concluir lo siguiente: Las dos primeras dimensiones explican un 45.8 % de la varianza. Aunque el porcentaje de varianza explicada puede parecer relativamente bajo, el hecho de que las dos primeras dimensiones capturen casi la mitad de la variabilidad total indica una reducción significativa en la dimensionalidad de los datos. Esto sugiere que estas dos dimensiones son representativas de las principales fuentes de variación en los datos. Aunque las dos primeras dimensiones explican una parte significativa de la varianza, es posible que aún quede una cantidad sustancial de información no capturada en dimensiones adicionales. Esto sugiere que puede haber oportunidades para realizar análisis más detallados explorando dimensiones adicionales y examinando cómo contribuyen a la variabilidad restante en los datos.
Análisis de Componentes Principales (ACP):
Se identificaron patrones significativos en la base de datos, con el primer componente principal explicando el 40.3% de la variabilidad y los dos primeros componentes principales que en conjunto explican el 57.7% de la variabilidad. Se observó una fuerte asociación entre las variables relacionadas con las características físicas y de valoración de las propiedades, así como una asociación moderada entre las variables relacionadas con la ubicación geográfica de las propiedades. Se concluyó que las propiedades con precios más altos tienden a tener más baños, mayor área, más parqueaderos y están ubicadas en estratos más altos.
Análisis de Conglomerados (Clustering): Se determinó que el mercado de viviendas urbanas puede ser segmentado en dos grupos distintos, con propiedades que comparten características similares dentro de cada grupo. Se identificaron dos clusters claros, con tamaños de 2705 y 5614, lo que indica diferencias significativas en las características de las propiedades y posiblemente diferentes dinámicas y tendencias en el mercado.
Análisis de Correspondencia: Se encontró una asociación significativa entre el tipo de propiedad y la zona, lo que sugiere que la distribución de tipos de propiedad varía significativamente según la zona en la que se encuentran las propiedades. Se concluyó que la ubicación (zona) puede ser un factor importante a considerar al analizar el tipo de propiedad, lo que tiene implicaciones importantes para la segmentación de mercado, las estrategias de marketing y la toma de decisiones estratégicas.
El análisis integral y multidimensional proporcionó una comprensión profunda del mercado de viviendas urbanas en la ciudad de Cali. Se identificaron patrones, relaciones y segmentaciones relevantes en los datos, lo que permitirá a la empresa inmobiliaria tomar decisiones estratégicas más informadas. La segmentación del mercado en dos clusters distintos sugiere la presencia de diferencias significativas en las características de las propiedades y en las dinámicas del mercado. La asociación entre el tipo de propiedad y la zona resalta la importancia de considerar la ubicación al analizar el mercado inmobiliario urbano.
Utilizar los resultados del análisis de conglomerados para adaptar estrategias de marketing y ventas específicas para cada grupo de propiedades. Considerar la ubicación como un factor clave al evaluar y valorar las propiedades, especialmente al establecer precios y estrategias de comercialización. Explorar análisis más detallados para comprender aún más las dinámicas del mercado y las preferencias de los clientes. Continuar monitoreando y actualizando la base de datos para mantenerse al tanto de los cambios en el mercado y ajustar las estrategias en consecuencia.