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 importan las diferentes librerias a utilizar.
devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
## stringi (1.7.12 -> 1.8.3 ) [CRAN]
## rlang (1.1.1 -> 1.1.3 ) [CRAN]
## purrr (1.0.1 -> 1.0.2 ) [CRAN]
## glue (1.6.2 -> 1.7.0 ) [CRAN]
## cli (3.6.1 -> 3.6.2 ) [CRAN]
## Rcpp (1.0.11 -> 1.0.12) [CRAN]
## digest (0.6.33 -> 0.6.34) [CRAN]
## curl (5.0.1 -> 5.2.0 ) [CRAN]
## xfun (0.39 -> 0.42 ) [CRAN]
## htmltools (0.5.5 -> 0.5.7 ) [CRAN]
## package 'stringi' successfully unpacked and MD5 sums checked
## package 'rlang' successfully unpacked and MD5 sums checked
## package 'purrr' successfully unpacked and MD5 sums checked
## package 'glue' successfully unpacked and MD5 sums checked
## package 'cli' successfully unpacked and MD5 sums checked
## package 'Rcpp' successfully unpacked and MD5 sums checked
## package 'digest' successfully unpacked and MD5 sums checked
## package 'curl' successfully unpacked and MD5 sums checked
## package 'xfun' successfully unpacked and MD5 sums checked
## package 'htmltools' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\Usuario\AppData\Local\Temp\Rtmp4EiRGL\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
##
checking for file 'C:\Users\Usuario\AppData\Local\Temp\Rtmp4EiRGL\remotes11a43eaa767c\dgonxalex80-paqueteMODELOS-796f588/DESCRIPTION' ...
✔ checking for file 'C:\Users\Usuario\AppData\Local\Temp\Rtmp4EiRGL\remotes11a43eaa767c\dgonxalex80-paqueteMODELOS-796f588/DESCRIPTION' (379ms)
##
─ preparing 'paqueteMODELOS': (4.1s)
## checking DESCRIPTION meta-information ...
✔ checking DESCRIPTION meta-information
##
─ checking for LF line-endings in source and make files and shell scripts
##
─ checking for empty or unneeded directories
##
─ building 'paqueteMODELOS_0.1.0.tar.gz'
##
##
library(paqueteMODELOS)
library(fastDummies)
library(corrplot)
Se carga el dataset de las viviendas
data(vivienda) # Cargue de los datos
str(vivienda) # Se muestra la estructura de los datos
## 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>
Se realiza un análisis exploratorio de datos para validar que variables del dataset tienen valores Nan
head(vivienda)
## # A tibble: 6 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona O… <NA> 3 250 70 1 3 6
## 2 1169 Zona O… <NA> 3 320 120 1 2 3
## 3 1350 Zona O… <NA> 3 350 220 2 2 4
## 4 5992 Zona S… 02 4 400 280 3 5 3
## 5 1212 Zona N… 01 5 260 90 1 2 3
## 6 1724 Zona N… 01 5 240 87 1 3 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Consulta de las variables que contienen valores Nan
vivienda_na <- colSums(is.na(vivienda)) %>% as.data.frame()
print(vivienda_na)
## .
## id 3
## zona 3
## piso 2638
## estrato 3
## preciom 2
## areaconst 3
## parqueaderos 1605
## banios 3
## habitaciones 3
## tipo 3
## barrio 3
## longitud 3
## latitud 3
Se realiza limpieza del dataset donde las variables categóricas se reemplazan por mayúsculas para mantener la misma relevancia en los datos
vivienda$barrio = toupper(vivienda$barrio)
vivienda$tipo = toupper(vivienda$tipo)
vivienda$zona = toupper(vivienda$zona)
Se hace asignación de la media para las variables numéricas que contienen valores Nan ya que si se eliminan pueden contener información valiosa
vivienda$estrato[is.na(vivienda$estrato)] = mean(vivienda$estrato)
vivienda$preciom[is.na(vivienda$preciom)] = mean(vivienda$preciom)
vivienda$banios[is.na(vivienda$banios)] = mean(vivienda$banios)
vivienda$habitaciones[is.na(vivienda$habitaciones)] = mean(vivienda$habitaciones)
vivienda$areaconst[is.na(vivienda$areaconst)] = mean(vivienda$areaconst)
Se eliminan las filas que contienen valores Nan
vivienda <- na.omit(vivienda)
vivienda_na <- colSums(is.na(vivienda)) %>% as.data.frame()
print(vivienda_na)
## .
## id 0
## zona 0
## piso 0
## estrato 0
## preciom 0
## areaconst 0
## parqueaderos 0
## banios 0
## habitaciones 0
## tipo 0
## barrio 0
## longitud 0
## latitud 0
Se crean variables ficticias a partir de la zona, estrato y tipo
Vivienda_transformada = dummy_cols(vivienda, select_columns = c("zona", "estrato", "tipo"))
head(Vivienda_transformada)
## # A tibble: 6 × 24
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5992 ZONA S… 02 4 400 280 3 5 3
## 2 1212 ZONA N… 01 5 260 90 1 2 3
## 3 1724 ZONA N… 01 5 240 87 1 3 3
## 4 2326 ZONA N… 01 4 220 52 2 2 3
## 5 4386 ZONA N… 01 5 310 137 2 3 4
## 6 1209 ZONA N… 02 5 320 150 2 4 6
## # ℹ 15 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # `zona_ZONA CENTRO` <int>, `zona_ZONA NORTE` <int>, `zona_ZONA OESTE` <int>,
## # `zona_ZONA ORIENTE` <int>, `zona_ZONA SUR` <int>, estrato_3 <int>,
## # estrato_4 <int>, estrato_5 <int>, estrato_6 <int>, tipo_APARTAMENTO <int>,
## # tipo_CASA <int>
Para esta actividad se eliminaran las variables parqueaderos y piso, ya que estas contienen gran cantidad de datos NAn y estos podrían afectar los cálculos
columnasEliminar <- c("piso","parqueaderos")
vivienda <- vivienda[ ,!(names(vivienda) %in% columnasEliminar)]
Se realiza eliminación de tildes al dataset
quitarTildes <- function(X) {
conversion <- function(letra) {
switch(letra,
á = "a",
é = "e",
í = "i",
ó = "o",
ú = "u",
letra)
}
X <- strsplit(X, "")[[1]]
X <- sapply(X, conversion)
return(paste(X, collapse = ""))
}
# Se corrigen las tildes de la variiable barrio
vivienda$barrio <- sapply(vivienda$barrio, quitarTildes)
vivienda$barrio <- sub('é', 'e', vivienda$barrio)
vivienda$barrio <- sub('√∫', 'u', vivienda$barrio)
Correlacionamos las variables para comprender las relaciones entre ellas y evaluar la fuerza y direcciones de las variables
columnas_numericas <- vivienda[sapply(vivienda, is.numeric)]
matrizcor <- cor(columnas_numericas)
corrplot (matrizcor, method = "number", number.cex = 0.5)
columnas = Vivienda_transformada[, c("estrato", "preciom", "areaconst","banios","habitaciones")]
library(corrplot)
matrizcor <- cor(columnas)
corrplot (matrizcor, method = "number", number.cex = 0.5)
De acuerdo a la correlación anterior de las variables, se evidencia que la mayor relación que existe es de 0.70 que pertenece a la relación entre preciom y areaconst seguido de la 0.69 de la relación entre preciom y banios, en cuanto a el areaconst y banios tiene un 0.68, las relaciones anteriores son las que tienen más impacto en el dataset por lo tanto una depende de la otra.
Distribución de precio por área construida
library(PerformanceAnalytics)
boxplot(vivienda$preciom ~ vivienda$areaconst, data = vivienda, col = c("yellow", "gray", "green","red","orange" ), ylab = "Precio", xlab = "Area Construida")
chart.Correlation(columnas, histogram = TRUE, method = "pearson")
De acuerdo al análisis de correlación podemos concluir los siguiente:
El coeficiente de Pearson o grado de asociación lineal del precio con respecto a: área construida fue de 0.70, con respecto al número de baños fue de 0.69 y el número de habitaciones concluye con el 0.29. Del cual se puede concluir que, a mayor área construida, mayor número de baños y mayor número de habitaciones mayor será su precio y se obtiene una buena rentabilidad.
Finalmente, el coeficiente de Pearson o grado de asociación lineal del número de habitaciones con respecto al número de baños es de 0.60, indicando que a mayor número de habitaciones, mayor número de baños se tendrán presentes.
A continuación, se presentará un Análisis de Componentes principales, para agrupar los inmuebles de acuerdo a ciertas similaridades que puedan presentar los datos.
Convertimos todas las variables categóricas en numéricas para poder hacer PCA
library(FactoMineR)
vivienda_escalado = scale(columnas)
head(vivienda_escalado)
## estrato preciom areaconst banios habitaciones
## [1,] -0.9046263 -0.1756310 0.7609789 1.3178809 -0.4241459
## [2,] 0.1749079 -0.6055839 -0.6129041 -0.9022913 -0.4241459
## [3,] 0.1749079 -0.6670057 -0.6345970 -0.1622339 -0.4241459
## [4,] -0.9046263 -0.7284276 -0.8876807 -0.9022913 -0.4241459
## [5,] 0.1749079 -0.4520293 -0.2730489 -0.1622339 0.3272519
## [6,] 0.1749079 -0.4213184 -0.1790463 0.5778235 1.8300475
pca = PCA(vivienda_escalado, scale.unit = FALSE)
summary(pca)
##
## Call:
## PCA(X = vivienda_escalado, scale.unit = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## Variance 2.984 1.162 0.416 0.250 0.187
## % of var. 59.694 23.254 8.317 5.002 3.734
## Cumulative % of var. 59.694 82.948 91.264 96.266 100.000
##
## Individuals (the 10 first)
## Dist Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3
## 1 | 1.829 | 0.538 0.002 0.087 | -0.662 0.008 0.131 | -0.599
## 2 | 1.329 | -1.177 0.010 0.784 | 0.405 0.003 0.093 | 0.184
## 3 | 1.041 | -0.835 0.005 0.642 | 0.326 0.002 0.098 | 0.444
## 4 | 1.769 | -1.714 0.020 0.939 | -0.338 0.002 0.036 | -0.109
## 5 | 0.666 | -0.274 0.001 0.169 | -0.148 0.000 0.050 | 0.508
## 6 | 1.981 | 0.717 0.004 0.131 | -1.167 0.024 0.347 | 1.373
## 7 | 1.850 | 1.055 0.008 0.325 | 0.427 0.003 0.053 | -1.395
## 8 | 2.384 | 1.700 0.020 0.509 | -1.508 0.041 0.400 | -0.459
## 9 | 2.937 | 2.462 0.042 0.703 | -1.038 0.019 0.125 | 0.981
## 10 | 2.029 | -0.681 0.003 0.113 | 1.846 0.061 0.828 | 0.008
## ctr cos2
## 1 0.018 0.107 |
## 2 0.002 0.019 |
## 3 0.010 0.182 |
## 4 0.001 0.004 |
## 5 0.013 0.582 |
## 6 0.094 0.481 |
## 7 0.097 0.569 |
## 8 0.011 0.037 |
## 9 0.048 0.112 |
## 10 0.000 0.000 |
##
## Variables
## Dim.1 ctr cos2 Dim.2 ctr cos2 Dim.3 ctr
## estrato | 0.542 9.831 0.293 | 0.755 48.989 0.570 | 0.297 21.262
## preciom | 0.867 25.215 0.753 | 0.300 7.735 0.090 | -0.231 12.878
## areaconst | 0.862 24.875 0.742 | -0.184 2.900 0.034 | -0.379 34.478
## banios | 0.897 26.941 0.804 | -0.096 0.790 0.009 | 0.196 9.272
## habitaciones | 0.626 13.138 0.392 | -0.678 39.586 0.460 | 0.303 22.111
## cos2
## estrato 0.088 |
## preciom 0.054 |
## areaconst 0.143 |
## banios 0.039 |
## habitaciones 0.092 |
# Se organizan las coordenadas del dataframe
zona <- as.data.frame(pca$ind$coord[, 1:2])
zona$zona <- vivienda$zona
Se vosualiza la distribucion de los componentes principales (PCA)
# Visualizar el PCA
gg <- ggplot(zona, aes(x = Dim.1, y = Dim.2, color = zona)) +
geom_point() +
scale_color_manual(values = c("ZONA NORTE" = "red", "ZONA SUR" = "green", "ZONA ORIENTE" = "brown", "ZONA OESTE" = "gray", "ZONA CENTRO" = "orange"))
# aplicar tema nimimalista
gg + theme_minimal()
Basándonos en la gráfica anterior y considerando los resultados del PCA, llegamos a la conclusión de que tanto la Dimensión 1 como la Dimensión 2 están estrechamente vinculadas a las zonas Sur y Norte de la ciudad. Además, aunque la Zona Oriente no presenta una frecuencia significativamente alta, sí ejerce una influencia importante en la Dimensión 2, lo que no debe pasarse por alto. En resumen, las zonas Sur y Norte desempeñan un papel clave, mientras que la Zona Oriente también contribuye de manera significativa a la Dimensión 2.
Generamos un gráfico con el objetivo de entender cuántos componentes principales podríamos utilizar para explicar la mayor parte de la variabilidad presente en los datos.
library(ggplot2)
library(ggsignif)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
vivipca <- (prcomp(vivienda_escalado))
fviz_eig(vivipca, addlabels = TRUE, ylim = c(0, 55))
Creamos un gráfico con el fin de descubrir qué variables tienen una influencia más significativa en cada uno de los componentes principales, PC1 y PC2.
fviz_contrib(vivipca, choice = "var", axes = 1, top = 10)
fviz_contrib(vivipca, choice = "var", axes = 2, top = 10)
fviz_contrib(vivipca, choice = "var", axes = 3, top = 10)
En la tabla que sigue, se presenta la proporción de varianza explicada por cada uno de los componentes principales derivados de un Análisis de Componentes Principales (PCA). Esta medida refleja cuánta variabilidad de los datos originales es capturada por cada componente principal, proporcionando una comprensión más clara de su relevancia en el análisis.
varianza_expl <- vivipca$sdev^2/sum(vivipca$sdev^2)
round(varianza_expl*100, 2)
## [1] 59.69 23.25 8.32 5.00 3.73
En la tabla a continuación, observamos la acumulación de porcentajes para cada variable. Esto nos brinda una visión comprensiva del impacto relativo de cada variable en el conjunto de datos.
varianza_acum <- cumsum(varianza_expl)
round(varianza_acum*100, 2)
## [1] 59.69 82.95 91.26 96.27 100.00
Gráfico que muestra la acumulación de la proporción de varianza explicada. Este visual facilita la comprensión del impacto acumulativo de los componentes principales en la explicación de la variabilidad en los datos.
ggplot(data = data.frame(varianza_acum, pc = 1:5),
aes(x = pc, y = varianza_acum, group = 1)) +
geom_point() +
geom_line() +
theme_bw() +
labs(x = "Componente principal",
y = "Prop. varianza explicada acumulada")
library(dplyr)
df2 = vivienda %>% select(estrato,preciom, areaconst,banios,habitaciones)
df2Unido = scale(df2)
df2Unido = na.omit(df2Unido)
df2Unido = as.data.frame(df2Unido)
Se genera un gráfico que visualiza la cantidad de clusters que resultan más óptimos para el análisis. Este gráfico proporciona una visión clara sobre el número ideal de grupos en el conjunto de datos.
#dist(df2Unido, method = "euclidean")
fviz_nbclust(vivienda_escalado, kmeans, method = "silhouette")
set.seed(12)
modelkmeans <- kmeans(vivienda_escalado, 2)
vivienda_escalado <- data.frame(vivienda_escalado,modelkmeans$cluster)
Ahora, se realiza un resumen que destaca las medianas asociadas a cada cluster asignado por el modelo de k-means. Este análisis proporciona una visión simplificada de las características típicas presentes en cada grupo, facilitando la interpretación de los resultados del modelo.
aggregate(vivienda,
by = list(vivienda_escalado$modelkmeans.cluster),
FUN = median)
## Group.1 id zona estrato preciom areaconst banios habitaciones tipo barrio
## 1 1 5624.5 NA 6 698 280 5 4 NA NA
## 2 2 3679.5 NA 5 280 94 2 3 NA NA
## longitud latitud
## 1 -76.53780 3.416785
## 2 -76.52795 3.405735
#Verificacion de cuantos registros quedaron en cada cluster
library(flextable)
Numcluste = table(vivienda_escalado$modelkmeans.cluster)%>%
as.data.frame()
colnames(Numcluste)=c("Cluster", "Frecuencia")
flextable(Numcluste)
Cluster | Frecuencia |
|---|---|
1 | 1,554 |
2 | 3,254 |
Ahora, se incluye la columna ‘cluster’ en el conjunto de datos para visualizar la clasificación de las variables. Esto nos permitirá observar de manera clara cómo se han asignado las observaciones a los diferentes clusters, facilitando la interpretación de los resultados.
viviendakmeans = kmeans(vivienda_escalado, centers = 2)
vivienda$cluster = viviendakmeans$cluster
vivienda$cluster = as.character(vivienda$cluster)
head(vivienda, n = 10)
## # A tibble: 10 × 12
## id zona estrato preciom areaconst banios habitaciones tipo barrio
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
## 1 5992 ZONA SUR 4 400 280 5 3 CASA 3 DE …
## 2 1212 ZONA NORTE 5 260 90 2 3 APARTA… ACOPI
## 3 1724 ZONA NORTE 5 240 87 3 3 APARTA… ACOPI
## 4 2326 ZONA NORTE 4 220 52 2 3 APARTA… ACOPI
## 5 4386 ZONA NORTE 5 310 137 3 4 APARTA… ACOPI
## 6 1209 ZONA NORTE 5 320 150 4 6 CASA ACOPI
## 7 1592 ZONA NORTE 5 780 380 3 3 CASA ACOPI
## 8 4460 ZONA NORTE 4 625 355 5 5 CASA ACOPI
## 9 6081 ZONA NORTE 5 750 237 6 6 CASA ACOPI
## 10 7497 ZONA NORTE 6 520 98 2 2 APARTA… ACOPI
## # ℹ 3 more variables: longitud <dbl>, latitud <dbl>, cluster <chr>
Visualizamos la distribución por grupos mediante un gráfico por cluster. Esta representación gráfica facilita la comprensión de cómo se distribuyen las observaciones en cada cluster, brindando una visión clara de la estructura del conjunto de datos.
fviz_cluster(list(data = vivienda_escalado[1:6],
cluster = vivienda_escalado$modelkmeans.cluster),
palette = c("#2E9FDF", "#E7B800", "#FC4E07"),
ellipse.type = "convex",repel = F,
show.clust.cent = FALSE, ggtheme = theme_minimal())
k = 4 # Número de conglomerados deseado
kmeans_model <- kmeans(df2Unido, centers = k)
head(kmeans_model)
## $cluster
## [1] 3 4 3 4 3 2 3 2 2 3 2 3 3 4 4 4 1 3 4 3 3 4 4 3 4 4 3 4 3 1 4 1 3 1 1 4 4
## [38] 1 4 1 1 1 4 4 4 3 1 3 4 3 4 3 3 3 4 3 3 1 1 4 1 1 1 3 3 4 1 1 1 3 1 1 1 3
## [75] 1 2 4 2 4 4 4 4 4 4 4 4 4 4 2 4 2 4 2 4 3 3 4 4 3 2 4 4 2 2 2 2 2 3 3 1 3
## [112] 1 1 3 3 2 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 3 3 1 3 1 3 1 3 2 2 2 4 4 4 4
## [149] 4 4 1 3 3 4 3 3 3 2 4 4 3 4 4 1 3 4 3 3 3 4 3 3 3 3 3 4 4 1 3 3 3 4 3 3 3
## [186] 4 4 4 4 4 4 4 4 4 4 3 4 2 4 2 4 4 4 4 3 3 2 4 2 2 4 1 4 4 4 4 4 4 4 4 4 4
## [223] 4 4 4 4 4 4 4 4 4 3 4 2 4 4 4 3 1 1 3 3 3 3 4 4 2 4 3 4 4 4 4 4 4 4 4 4 4
## [260] 4 4 4 4 4 4 3 4 4 4 4 2 4 4 4 4 4 3 4 4 3 4 4 3 3 2 3 4 3 4 3 4 3 4 3 2 3
## [297] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 4 4 2 4 4 4 3 4 2 2 4 2 3 2 4 4
## [334] 4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 4 2 3 4 4 2 2 2 4 2 2 3 3 4 3 4 3 4 4 4 4 4
## [371] 3 2 4 4 3 4 4 3 3 4 4 3 3 4 3 3 4 4 4 3 4 3 4 3 3 3 3 3 4 3 3 3 4 3 4 4 3
## [408] 3 4 3 3 4 3 4 4 4 2 2 2 4 4 4 4 3 3 4 3 3 2 4 3 3 4 4 3 3 3 3 2 3 3 3 4 3
## [445] 4 3 3 3 4 4 4 4 4 4 3 2 4 4 4 4 4 4 4 2 4 4 4 4 4 2 4 4 4 2 2 2 2 2 4 4 4
## [482] 4 3 4 2 2 4 4 4 4 4 4 3 3 2 2 2 2 4 4 4 3 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4
## [519] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 4 4 3 2 3 3 4 4 4 4 4 2
## [556] 1 3 4 1 3 1 4 4 3 3 3 1 3 3 3 3 3 3 1 3 1 4 3 3 1 1 1 1 3 3 1 3 1 3 1 1 3
## [593] 1 3 1 1 1 3 1 1 3 3 3 1 1 3 1 1 1 3 1 3 3 1 1 1 1 1 1 3 1 1 1 1 1 3 1 1 1
## [630] 3 1 3 3 3 1 3 3 1 1 1 1 3 3 1 1 1 1 3 1 1 1 3 1 1 2 1 1 1 3 1 3 1 3 1 3 3
## [667] 1 1 2 3 3 3 1 3 1 1 3 1 1 1 3 1 1 1 3 3 1 1 1 3 3 3 1 1 3 3 3 3 1 1 3 3 1
## [704] 1 1 1 1 3 1 1 1 1 3 1 1 3 1 1 1 3 1 1 1 1 3 1 1 1 1 1 1 1 3 1 3 3 3 1 1 1
## [741] 3 1 1 3 1 1 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 1 4 3 3 1 1 1 3 3 3 3 3 1 3
## [778] 3 3 3 2 3 3 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3 1 1 1 3 3 3 3 1 3 1 1 3
## [815] 3 3 1 3 1 3 3 3 3 3 3 3 3 4 3 3 1 3 3 3 3 3 4 3 3 3 3 1 3 1 3 3 1 3 3 3 3
## [852] 3 1 3 3 3 4 3 3 4 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 1 3 3
## [889] 3 3 3 3 3 1 1 1 3 3 1 3 3 3 3 4 3 3 3 3 3 1 3 1 3 3 3 3 3 3 3 3 4 4 3 3 3
## [926] 3 3 3 3 3 1 1 1 1 1 1 1 1 1 3 3 4 4 4 4 4 4 4 4 4 4 2 4 3 4 2 4 4 3 4 4 4
## [963] 4 3 1 1 1 1 2 2 1 1 1 1 1 1 1 3 2 3 4 4 2 4 4 2 2 3 2 2 2 2 4 4 2 2 2 4 4
## [1000] 4 4 4 4 4 4 4 4 4 4 4 2 4 3 4 3 3 1 3 3 3 3 3 3 1 4 3 1 4 3 3 3 3 3 1 1 3
## [1037] 3 4 3 3 3 3 3 3 4 3 3 1 3 3 3 3 1 4 3 3 3 3 3 3 4 2 2 2 2 4 2 4 2 3 2 3 3
## [1074] 4 3 2 4 3 2 3 3 3 3 3 4 4 4 4 4 3 3 4 4 3 4 3 2 4 2 2 2 2 4 2 4 2 3 4 3 3
## [1111] 3 3 3 4 2 4 3 3 2 3 3 4 4 2 3 2 2 2 3 2 4 3 2 3 4 4 1 1 4 4 4 3 2 4 4 4 4
## [1148] 4 4 4 4 4 4 4 2 4 4 3 2 4 4 2 4 4 4 4 4 2 2 4 4 3 4 4 2 4 3 4 4 4 4 4 4 4
## [1185] 4 3 2 2 2 4 2 4 4 2 4 4 2 2 4 4 4 4 4 4 4 4 2 2 2 4 4 2 2 2 2 4 4 2 2 4 2
## [1222] 4 4 4 4 4 3 4 3 4 4 4 3 2 4 4 4 2 4 4 4 3 4 4 2 4 4 4 4 4 4 4 4 4 4 4 3 4
## [1259] 4 3 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 2 2 2 2 4 4 4 2 4 4 2 4 4 2 4 2
## [1296] 2 2 4 3 3 3 3 3 3 2 3 2 3 4 3 3 3 4 4 2 3 3 2 1 3 2 3 3 3 2 2 3 1 3 3 4 3
## [1333] 3 1 3 4 1 3 1 2 3 3 2 2 2 1 3 3 2 4 3 3 4 3 4 1 3 3 3 2 3 3 4 1 2 1 3 3 4
## [1370] 3 1 4 3 4 4 3 1 2 3 3 1 3 3 3 4 3 3 4 3 3 3 3 1 3 3 4 4 3 3 3 3 3 3 3 4 3
## [1407] 3 3 3 3 3 4 4 4 3 3 4 3 2 4 3 4 3 3 3 3 3 4 3 3 4 4 3 4 3 3 3 3 3 3 3 3 3
## [1444] 4 3 4 3 1 3 1 4 4 3 4 4 3 3 4 4 4 2 1 1 3 3 3 1 1 1 2 1 3 3 4 4 3 3 2 1 2
## [1481] 4 2 4 3 1 3 4 4 3 4 2 2 2 4 1 2 4 4 4 2 2 2 3 2 2 2 2 4 4 1 2 4 4 4 4 4 4
## [1518] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 3 2 2 2 3 4 2 3 3 4 2 2 2 3 4 3 4 4 4 2
## [1555] 2 2 2 3 1 3 2 4 4 3 2 2 2 2 2 2 2 4 4 2 3 2 3 2 4 4 2 3 2 3 4 3 4 3 2 2 4
## [1592] 3 2 4 3 3 4 3 4 4 3 4 4 4 4 4 4 3 3 4 4 4 3 3 4 1 1 3 4 4 3 3 3 3 3 3 3 3
## [1629] 3 3 3 1 3 3 3 3 3 3 3 3 3 4 1 4 1 3 3 4 4 4 4 4 4 2 4 4 3 3 3 4 4 4 4 4 2
## [1666] 4 2 2 2 4 3 4 4 3 3 4 4 2 4 2 3 4 4 4 4 4 4 4 3 4 3 4 4 4 4 4 2 4 4 4 4 4
## [1703] 4 4 4 4 4 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 2 4 2
## [1740] 2 4 2 4 4 3 4 4 4 2 3 4 4 4 3 2 4 2 3 3 1 3 2 3 4 2 2 3 2 2 3 3 2 3 4 3 4
## [1777] 4 3 2 4 3 1 3 4 4 3 4 2 3 2 3 2 2 4 3 2 2 4 4 3 4 4 2 4 1 3 4 3 3 3 3 3 3
## [1814] 1 1 3 3 1 1 3 1 1 1 3 3 3 3 3 1 1 3 1 1 3 1 1 1 3 4 4 4 2 4 4 2 4 2 2 4 4
## [1851] 4 4 3 1 1 3 3 3 4 2 2 4 4 4 4 4 4 2 3 2 2 3 4 4 2 4 4 4 3 4 3 2 4 4 4 4 3
## [1888] 2 4 3 2 3 3 4 3 4 3 4 4 4 4 4 3 4 4 3 3 2 3 2 4 3 4 4 3 1 4 3 3 1 3 2 4 3
## [1925] 2 2 2 1 4 3 3 3 4 4 1 4 3 4 3 2 2 4 3 2 3 4 3 3 3 2 3 3 2 3 4 2 2 3 3 3 2
## [1962] 3 4 2 2 2 2 4 4 3 3 4 3 4 4 3 4 4 4 4 3 3 3 3 3 4 4 1 4 4 4 3 4 4 4 4 3 4
## [1999] 4 4 4 4 4 4 3 4 3 4 4 4 4 3 4 4 4 4 3 4 3 4 3 4 3 3 4 4 4 3 4 4 4 3 4 3 3
## [2036] 4 4 4 4 4 4 4 4 4 3 3 4 4 3 4 3 4 3 4 3 4 4 3 3 4 3 3 3 4 3 4 3 4 4 4 4 4
## [2073] 3 4 3 4 4 4 3 4 4 3 4 4 4 3 3 3 3 4 4 3 3 4 3 4 3 3 4 4 4 3 4 3 3 3 4 4 3
## [2110] 3 3 4 3 4 4 4 3 3 4 3 4 3 3 3 4 3 3 3 4 4 4 3 4 3 3 4 4 4 4 3 2 2 4 2 4 4
## [2147] 4 4 4 4 4 3 3 3 3 4 4 4 4 2 3 1 3 3 4 4 2 3 4 4 4 4 3 4 4 3 3 3 3 4 3 3 3
## [2184] 3 3 3 3 4 3 2 4 4 3 3 3 3 3 3 2 3 2 4 3 4 4 4 3 4 4 3 4 4 4 3 4 3 3 3 4 4
## [2221] 3 3 3 4 4 3 4 4 4 4 3 4 4 4 3 4 4 1 4 3 3 3 4 4 4 4 4 3 4 4 4 4 4 3 4 4 4
## [2258] 3 4 4 3 4 4 4 4 4 4 4 4 4 4 4 3 3 4 4 3 4 3 4 2 2 4 4 4 4 4 4 2 2 4 2 4 2
## [2295] 4 4 4 2 2 2 2 2 3 4 2 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 4 4 4 4 4 2 2 4 4 4 4
## [2332] 2 4 4 4 3 4 2 4 4 4 4 4 4 4 4 2 2 4 4 4 3 4 3 2 4 4 4 4 3 4 2 2 4 2 4 4 4
## [2369] 4 4 4 4 3 4 1 4 1 4 3 3 3 3 3 3 3 4 3 3 1 3 4 3 3 4 3 4 4 1 1 3 3 3 3 3 3
## [2406] 3 3 3 1 3 3 1 1 4 3 3 3 3 3 3 3 4 1 3 4 3 3 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3
## [2443] 3 3 3 3 3 3 3 3 3 3 4 3 3 3 3 4 4 3 1 1 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 4 3
## [2480] 4 3 3 3 1 3 3 1 1 3 3 3 4 4 4 4 4 1 2 4 4 4 4 4 3 4 4 4 4 4 4 3 3 3 2 3 3
## [2517] 4 4 4 3 4 4 3 3 4 3 4 4 4 4 3 3 4 3 3 3 3 3 3 3 4 4 4 4 2 4 4 4 4 4 4 4 4
## [2554] 4 4 4 4 4 4 2 2 4 4 4 4 4 2 2 4 4 4 4 4 4 4 1 3 4 1 3 3 3 3 3 4 4 4 4 4 4
## [2591] 4 4 4 4 4 4 1 2 2 4 4 2 4 4 2 2 4 2 2 3 3 4 3 4 4 3 4 4 3 3 3 3 3 4 3 3 3
## [2628] 3 3 3 3 3 3 1 4 4 3 4 4 4 2 2 4 4 2 4 4 2 4 3 4 4 1 3 3 3 1 1 1 3 1 1 3 3
## [2665] 1 3 3 1 3 1 3 3 1 3 3 3 4 1 1 4 1 3 3 4 4 1 1 3 3 1 3 1 1 3 3 4 1 1 1 3 3
## [2702] 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 1 1 3 3 4 1 3 3 3 3 3 1 3 3 3 3 1 1 3 3 1 1
## [2739] 1 4 3 1 1 1 1 1 1 1 3 4 3 3 1 4 1 3 4 4 2 2 2 3 4 2 3 3 2 3 4 3 3 3 4 2 4
## [2776] 3 3 3 2 3 4 4 3 3 4 4 4 3 2 3 4 2 4 3 3 3 3 4 4 3 3 4 3 3 3 3 3 4 4 3 3 4
## [2813] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 4 2 2 2 3 2 2 4 4 4 3 4 4 3 2 3 3
## [2850] 3 3 4 2 4 1 1 1 1 3 1 3 1 3 3 1 3 1 3 3 4 3 1 3 1 3 1 1 3 3 3 1 1 3 3 1 1
## [2887] 1 1 1 3 1 3 3 1 3 1 1 1 3 1 3 3 1 1 3 1 1 3 3 1 1 1 1 1 1 1 1 1 3 1 1 3 1
## [2924] 3 1 3 3 3 3 3 3 3 3 1 3 3 1 1 1 1 3 1 3 3 1 1 1 3 1 1 1 3 3 3 1 1 1 1 1 1
## [2961] 3 1 1 1 3 1 3 1 3 3 3 3 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 1 3
## [2998] 1 3 1 1 1 1 2 1 1 1 1 3 3 3 4 1 3 3 3 4 3 4 3 3 3 3 3 1 1 1 3 1 1 3 1 1 1
## [3035] 3 1 3 1 3 3 3 3 1 1 1 3 1 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 3 3
## [3072] 3 3 1 3 3 3 3 3 3 4 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
## [3109] 3 1 3 3 3 3 3 3 3 3 1 3 3 3 3 1 3 3 3 3 3 3 3 1 1 1 1 1 1 1 3 1 1 1 1 1 1
## [3146] 1 1 3 1 3 1 1 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3 3 4 4 2 4 4 4 3 3 2 4 4 4 4
## [3183] 4 4 2 2 3 4 3 3 2 2 2 2 3 2 3 4 3 2 3 4 2 4 4 4 4 4 2 3 2 2 4 2 4 3 3 3 4
## [3220] 4 4 4 4 3 4 3 2 3 2 4 4 4 4 4 4 4 4 4 4 4 3 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4
## [3257] 4 4 4 4 4 3 4 3 4 4 4 4 2 4 2 4 2 2 2 3 2 4 2 4 4 4 2 4 4 4 4 4 4 4 4 4 4
## [3294] 4 2 4 3 4 4 3 3 4 4 3 4 3 2 4 3 3 3 3 3 1 3 4 3 4 4 3 2 4 3 4 3 3 4 3 3 3
## [3331] 4 3 4 3 3 4 3 4 4 4 4 3 3 3 3 4 3 3 3 3 3 3 3 4 4 2 4 4 2 4 4 2 4 4 4 4 2
## [3368] 4 2 4 4 4 4 4 4 3 1 2 2 2 2 2 2 2 2 3 4 4 3 3 2 4 2 2 2 2 4 3 2 2 4 2 2 3
## [3405] 4 4 4 4 3 2 4 3 3 3 4 3 3 2 3 3 4 2 2 2 1 4 3 3 3 2 3 3 2 3 3 3 3 2 2 3 3
## [3442] 3 4 2 4 1 4 4 2 2 4 2 2 2 2 2 3 2 3 2 4 3 2 2 2 1 3 4 4 4 3 3 3 4 4 3 4 3
## [3479] 4 4 3 4 4 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 3 4 4 3 3 3 2 4 4 2 2
## [3516] 4 2 2 3 4 4 4 2 4 3 4 4 4 3 2 2 3 2 4 2 3 3 4 3 4 4 2 3 3 4 3 3 3 3 3 3 2
## [3553] 2 3 4 4 4 3 4 3 3 4 3 3 3 3 4 2 3 3 2 3 1 1 3 3 1 2 1 1 3 2 1 3 3 1 3 4 3
## [3590] 1 3 3 3 1 3 3 3 3 1 1 3 3 3 3 3 4 3 1 2 1 3 3 1 3 1 3 3 3 3 3 4 3 3 1 3 4
## [3627] 4 1 3 3 3 1 1 3 3 1 1 1 1 2 3 3 3 3 2 1 3 1 2 3 3 3 1 3 3 3 1 1 1 1 1 1 3
## [3664] 3 3 1 3 1 1 1 1 1 3 3 1 3 3 3 1 1 1 3 3 1 1 1 1 3 1 3 3 3 3 3 1 3 3 3 1 1
## [3701] 3 3 3 4 1 1 3 3 3 2 1 1 3 1 3 3 1 1 3 1 2 3 3 3 3 4 1 3 3 3 3 3 3 3 3 3 3
## [3738] 3 3 3 3 3 4 3 3 1 3 1 3 3 3 3 3 3 3 3 3 1 3 3 1 3 3 3 3 3 3 1 1 3 1 3 3 1
## [3775] 3 3 3 1 3 3 3 3 1 1 1 3 1 1 1 1 4 1 1 1 1 3 1 3 1 1 1 1 3 1 3 1 1 3 1 1 1
## [3812] 3 1 3 3 3 1 1 1 3 1 1 3 3 3 1 3 3 1 1 3 1 1 1 1 2 4 4 2 1 4 3 3 2 3 3 3 4
## [3849] 4 3 3 3 4 4 4 4 4 3 3 3 4 4 4 4 4 3 3 1 1 1 3 1 2 2 1 1 2 4 4 3 4 2 2 4 3
## [3886] 4 2 3 3 3 2 4 2 2 2 4 4 3 4 4 4 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 4
## [3923] 1 3 4 4 4 2 3 4 4 2 3 2 2 4 2 2 4 3 2 4 4 3 3 4 4 4 3 3 4 3 3 4 3 4 4 3 4
## [3960] 4 3 3 3 3 4 4 4 3 3 2 2 4 3 1 3 3 4 3 3 3 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [3997] 4 4 4 3 3 4 4 3 4 3 3 4 3 4 4 4 4 4 4 3 4 4 4 4 4 3 4 3 4 4 4 3 4 4 3 4 4
## [4034] 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 3 4 4 4 3 4 4 4 4 4 4 4 4 3
## [4071] 3 4 4 3 2 3 4 4 3 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 2 4 3 4 4 4 3 4 2
## [4108] 4 4 4 4 3 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 3 4 2 4 4 4 3 3 4 4 4 4 4
## [4145] 3 4 4 4 4 4 4 4 4 3 4 4 3 4 4 4 4 4 2 2 2 4 4 4 4 4 3 3 4 4 4 4 4 4 3 4 4
## [4182] 4 4 4 1 4 4 3 4 3 3 3 3 3 3 4 4 4 2 4 3 4 4 2 2 4 4 3 4 4 3 4 4 3 2 3 3 3
## [4219] 3 4 3 3 3 4 3 3 3 4 4 3 3 4 4 4 4 3 4 3 4 4 3 4 4 4 4 4 3 4 3 1 1 2 4 4 2
## [4256] 3 3 4 4 4 4 4 2 4 4 2 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 3 4 3 4 4 3 3
## [4293] 4 4 4 4 4 4 4 3 4 3 4 3 4 4 4 3 4 4 4 4 4 4 3 4 3 4 3 3 4 3 4 3 4 3 3 3 3
## [4330] 3 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 3 3 3 4 4 4 4 3 4 4 4 4 4 4 4 4
## [4367] 4 4 4 4 4 3 4 4 4 4 4 4 3 4 4 4 4 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3
## [4404] 4 4 3 4 4 4 3 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 3 4 4 4 4 4 4 4 4 4
## [4441] 4 4 4 4 4 3 4 3 4 4 4 3 4 4 3 4 4 3 1 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [4478] 4 3 4 4 4 3 4 4 4 4 4 4 4 3 4 3 4 4 4 4 4 4 4 4 4 3 4 3 4 4 4 3 4 4 4 4 3
## [4515] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
## [4552] 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 3 4 4 4 3 3 4 3 3 4 3 4 4
## [4589] 4 4 4 3 4 4 4 4 3 4 3 4 3 4 3 4 4 4 4 4 4 4 3 3 4 3 4 3 4 4 4 4 2 1 3 2 4
## [4626] 2 3 2 1 3 3 3 3 4 3 4 4 4 4 4 4 3 4 3 4 3 3 2 4 4 4 4 4 3 4 4 4 3 4 3 4 3
## [4663] 4 1 3 4 1 4 2 2 2 2 4 4 4 4 4 4 4 4 4 4 4 2 4 4 4 4 4 4 4 4 4 4 2 4 3 4 2
## [4700] 2 3 2 4 2 2 2 4 3 3 2 2 2 2 2 4 4 4 3 2 4 4 3 2 4 4 3 4 3 4 4 4 3 4 4 4 3
## [4737] 3 3 4 2 1 4 3 3 4 1 3 1 2 2 4 2 4 2 2 4 2 2 1 2 3 4 3 1 1 4 4 4 3 1 2 4 1
## [4774] 3 2 2 2 2 2 4 3 4 4 2 2 4 4 3 3 3 3 1 4 4 2 4 4 4 3 4 4 3 4 4 4 3 4 4
##
## $centers
## estrato preciom areaconst banios habitaciones
## 1 1.0784115 2.09898557 1.6163101 1.4250106 0.5047868
## 2 -0.6921196 0.06685837 0.9680386 0.9478522 1.9705648
## 3 0.6436945 0.02572571 -0.1600852 0.1582702 -0.1681173
## 4 -0.7031639 -0.67377821 -0.5982194 -0.8092257 -0.5114562
##
## $totss
## [1] 24035
##
## $withinss
## [1] 2628.360 2052.964 2401.264 2247.373
##
## $tot.withinss
## [1] 9329.961
##
## $betweenss
## [1] 14705.04
plot(df2Unido[, c("preciom", "areaconst")], col = kmeans_model$cluster)
points(kmeans_model$centers[, c("preciom", "areaconst")], col = 1:k, pch = 8, cex = 2)
df3 = scale(df2, center = TRUE, scale = TRUE)
df3 = na.omit(df3)
df3 = as.data.frame(df3)
fviz_nbclust(df3, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2)
Se crea un diagrama de cajas para cada cluster. Este tipo de visualización nos permite entender de manera sencilla la distribución y variabilidad de las variables en cada grupo, ayudándonos a identificar patrones y comparar las características entre clusters.
df2Unido %>%
ggplot(aes(x = factor(kmeans_model$cluster), y = preciom, fill = factor(kmeans_model$cluster))) + geom_boxplot() + geom_point() + xlab("Cluster") + labs(fill="Cluster")
La representación gráfica del conglomerado de área versus precio revela una alta concentración de viviendas en el cluster 1, con una marcada relación entre estas dos variables. En el cluster 2, la relación persiste, aunque la distribución es más uniforme. Por otro lado, los clusters 3 y 4 muestran una baja concentración, indicando que la relación entre el área y el precio no es tan pronunciada, sugiriendo que otras variables podrían estar influyendo en la relación. Además, esta visualización destaca algunos valores atípicos en los clusters 2 y 3. Este análisis proporciona una comprensión más detallada de las dinámicas de área y precio en diferentes tipos de viviendas.
set.seed(12)
# Se estrae una muestra de 4000 del dataset de vivienda
vivienda = sample_n(vivienda, 4000)
Verificamos que no haya valores NaN en el conjunto de datos. Este paso es crucial para asegurar la integridad de nuestros análisis, ya que la presencia de valores faltantes podría distorsionar los resultados
library(mice)
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
md.pattern(vivienda, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona estrato preciom areaconst banios habitaciones tipo barrio longitud
## 4000 1 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0 0
## latitud cluster
## 4000 1 1 0
## 0 0 0
vivienda = na.omit(vivienda)
graficoFaltantes = md.pattern(vivienda, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Vivienda_trasnformada = dummy_cols(vivienda, select_columns = c("zona", "estrato", "tipo"))
# PrecioM vs estrato
tablaDataCorrespondecia = table(vivienda$preciom, vivienda$estrato)
colnames(tablaDataCorrespondecia) = c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
head(tablaDataCorrespondecia)
##
## Estrato3 Estrato4 Estrato5 Estrato6
## 58 1 0 0 0
## 75 1 0 0 0
## 78 2 0 0 0
## 85 2 0 0 0
## 88 1 0 0 0
## 89 1 0 0 0
chisq.test(tablaDataCorrespondecia)
##
## Pearson's Chi-squared test
##
## data: tablaDataCorrespondecia
## X-squared = 4062.5, df = 1236, p-value < 2.2e-16
Factor de mapeo
resultados = CA(tablaDataCorrespondecia)
valores_prop <-resultados$eig ; valores_prop
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.5552949 54.67546 54.67546
## dim 2 0.2949806 29.04438 83.71984
## dim 3 0.1653445 16.28016 100.00000
#Grado de representatividad del proceso con la varianza acumulada
fviz_screeplot(resultados, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")
Para concluir, el análisis de componentes principales (PCA) nos ayuda a identificar patrones y reducimos la dimensionalidad del conjunto de datos de viviendas, destacado de la mejor forma cual o cuales son las variables más impactantes para el proceso. En el análisis de conglomerados se agrupan las observaciones para identificar patrones y estructuras en los datos facilitando la segmentación y comprensión de los diferentes grupos; por otra parte, el análisis de correspondencia se explora la asociación entre las variables revelando patrones de relación e identificando información valiosa sobre la estructura de los datos.