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.
El reto principal consisten en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:
Análisis de Componentes Principales: Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y oferta del mercado.
Análisis de Conglomerados: Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.
Análisis de Correspondencia: Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.
Visualización de resultados: Presentar gráficos, mapas y otros recursos visuales para comunicar los hallazgos de manera clara y efectiva a la dirección de la empresa.
El informe final debe incluir análisis detallados de los resultados obtenidos, las conclusiones clave y las 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.
#install.packages("devtools")
library(devtools)
## Loading required package: usethis
#install.packages("paqueteMODELOS")
#devtools::install_github("dgonxalex80/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## 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>
clases <- sapply(vivienda, class)
cant.item <- nrow(vivienda)
faltantes <- colSums(is.na(vivienda))
tablaresumen <- data.frame(Clase= clases, Cant.elementos = cant.item, Faltantes = faltantes)
print(tablaresumen)
## Clase Cant.elementos Faltantes
## id numeric 8322 3
## zona character 8322 3
## piso character 8322 2638
## estrato numeric 8322 3
## preciom numeric 8322 2
## areaconst numeric 8322 3
## parqueaderos numeric 8322 1605
## banios numeric 8322 3
## habitaciones numeric 8322 3
## tipo character 8322 3
## barrio character 8322 3
## longitud numeric 8322 3
## latitud numeric 8322 3
De acuerdo con la tabla se identificaron:
8322 entidades y 13 variables, de las cuales 4 son cualitativas (tipo, zona, barrio y estrato) y 9 cuantitativas (piso, preciom, area construida, parqueadero, baños, habitaciones, longitud y latitud).
La entidad pisos tiene faltante 2638 datos, lo que corresponde a un 31.7 %. Igualmente, la entidad de numero de parqueo tiene 1605 datos faltantes, lo que corresponde a un 19.3 %.
3 elementos completamente vacios, por ende se decide eliminarlos, teniendo en cuenta no afectar la calidad de los datos
vivienda<- na.omit(vivienda)
Se elimianron la informacion faltante y se verifica nuevamente el estado de las variables, comprobando los cambios realizados
#install.packages("mice")
library(mice)
grafico<- md.pattern(vivienda, rotate.names = TRUE, )
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
De acuerdo con lo anterior se comprueba que la data ya no cuenta con datos faltantes, y quedo constituida por 4808 muestras.
Continuando con el analisis de la base de datos, se identifica la necesidad de verificar la uniformidad de los parametros
zona <- table (vivienda$zona)
print(names(zona))
## [1] "Zona Centro" "Zona Norte" "Zona Oeste" "Zona Oriente" "Zona Sur"
tipo <- table (vivienda$tipo)
print(names(tipo))
## [1] "Apartamento" "Casa"
Se realizó una revisión de datos duplicados, no encontrando ninguno.
datosduplicados<- vivienda[duplicated(vivienda),]
print(datosduplicados)
## # A tibble: 0 × 13
## # ℹ 13 variables: id <dbl>, zona <chr>, piso <chr>, estrato <dbl>,
## # preciom <dbl>, areaconst <dbl>, parqueaderos <dbl>, banios <dbl>,
## # habitaciones <dbl>, tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Se modifican los atributos de zona y tipo de character a numeric
library(magrittr)
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
#Zona
vivienda=vivienda%>% mutate(zona = replace(zona,zona == "Zona Centro", 1))
vivienda= vivienda%>% mutate(zona = replace(zona,zona == "Zona Norte", 2))
vivienda= vivienda%>% mutate(zona = replace(zona,zona == "Zona Oeste", 5))
vivienda=vivienda %>% mutate(zona = replace(zona,zona == "Zona Oriente",4))
vivienda= vivienda%>% mutate(zona = replace(zona,zona == "Zona Sur", 3))
vivienda$zona = as.numeric(vivienda$zona)
#Tipo
vivienda= vivienda %>% mutate(tipo = replace(tipo,tipo == "Casa", 1))
vivienda= vivienda %>% mutate(tipo = replace(tipo,tipo == "Apartamento", 2))
vivienda$tipo = as.numeric(vivienda$tipo)
#Piso
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "01", 1))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "02", 2))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "03", 3))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "04", 4))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "05", 5))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "06", 6))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "07", 7))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "08", 8))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "09", 9))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "10", 10))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "11", 11))
vivienda= vivienda %>% mutate(piso = replace(piso,piso == "12", 12))
vivienda$piso = as.numeric(vivienda$piso)
Se realizó una revisión estadisticas de los datos.
skimr::skim(vivienda)
| Name | vivienda |
| Number of rows | 4808 |
| Number of columns | 13 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| numeric | 12 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| barrio | 0 | 1 | 4 | 29 | 0 | 273 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| id | 0 | 1 | 4426.92 | 2306.71 | 1.00 | 2478.75 | 4473.50 | 6413.25 | 8316.00 | ▅▇▇▇▇ |
| zona | 0 | 1 | 3.13 | 0.92 | 1.00 | 3.00 | 3.00 | 3.00 | 5.00 | ▁▂▇▁▂ |
| piso | 0 | 1 | 3.89 | 2.67 | 1.00 | 2.00 | 3.00 | 5.00 | 12.00 | ▇▃▁▁▁ |
| estrato | 0 | 1 | 4.84 | 0.93 | 3.00 | 4.00 | 5.00 | 6.00 | 6.00 | ▂▅▁▇▆ |
| preciom | 0 | 1 | 457.19 | 325.62 | 58.00 | 244.50 | 350.00 | 560.00 | 1999.00 | ▇▃▁▁▁ |
| areaconst | 0 | 1 | 174.76 | 138.29 | 40.00 | 85.00 | 123.00 | 225.00 | 1500.00 | ▇▁▁▁▁ |
| parqueaderos | 0 | 1 | 1.82 | 1.10 | 1.00 | 1.00 | 2.00 | 2.00 | 10.00 | ▇▁▁▁▁ |
| banios | 0 | 1 | 3.22 | 1.35 | 0.00 | 2.00 | 3.00 | 4.00 | 10.00 | ▇▇▃▁▁ |
| habitaciones | 0 | 1 | 3.56 | 1.33 | 0.00 | 3.00 | 3.00 | 4.00 | 10.00 | ▁▇▁▁▁ |
| tipo | 0 | 1 | 1.66 | 0.47 | 1.00 | 1.00 | 2.00 | 2.00 | 2.00 | ▅▁▁▁▇ |
| longitud | 0 | 1 | -76.53 | 0.02 | -76.59 | -76.54 | -76.53 | -76.52 | -76.46 | ▁▅▇▁▁ |
| latitud | 0 | 1 | 3.41 | 0.04 | 3.33 | 3.38 | 3.41 | 3.45 | 3.50 | ▃▇▅▆▃ |
summary(vivienda)
## id zona piso estrato
## Min. : 1 Min. :1.000 Min. : 1.000 Min. :3.000
## 1st Qu.:2479 1st Qu.:3.000 1st Qu.: 2.000 1st Qu.:4.000
## Median :4474 Median :3.000 Median : 3.000 Median :5.000
## Mean :4427 Mean :3.134 Mean : 3.886 Mean :4.838
## 3rd Qu.:6413 3rd Qu.:3.000 3rd Qu.: 5.000 3rd Qu.:6.000
## Max. :8316 Max. :5.000 Max. :12.000 Max. :6.000
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 40.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 244.5 1st Qu.: 85.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 350.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 457.2 Mean : 174.8 Mean : 1.815 Mean : 3.219
## 3rd Qu.: 560.0 3rd Qu.: 225.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1500.0 Max. :10.000 Max. :10.000
## habitaciones tipo barrio longitud
## Min. : 0.000 Min. :1.000 Length:4808 Min. :-76.59
## 1st Qu.: 3.000 1st Qu.:1.000 Class :character 1st Qu.:-76.54
## Median : 3.000 Median :2.000 Mode :character Median :-76.53
## Mean : 3.564 Mean :1.662 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:2.000 3rd Qu.:-76.52
## Max. :10.000 Max. :2.000 Max. :-76.46
## latitud
## Min. :3.333
## 1st Qu.:3.378
## Median :3.408
## Mean :3.414
## 3rd Qu.:3.451
## Max. :3.498
library(corrplot)
correlation_matrix <- cor(vivienda[, c("zona", "piso", "estrato", "preciom", "areaconst", "parqueaderos", "banios", "habitaciones", "tipo","longitud", "latitud")])
corrplot(correlation_matrix, method = "color", addCoef.col = "black",number.cex = 0.7)
correlation_table <- as.table(correlation_matrix)
print(correlation_table)
## zona piso estrato preciom areaconst
## zona 1.000000000 0.093885661 0.309530044 0.284503680 0.064336994
## piso 0.093885661 1.000000000 0.101132315 -0.030604493 -0.219911071
## estrato 0.309530044 0.101132315 1.000000000 0.586985623 0.269859618
## preciom 0.284503680 -0.030604493 0.586985623 1.000000000 0.697551908
## areaconst 0.064336994 -0.219911071 0.269859618 0.697551908 1.000000000
## parqueaderos 0.119598694 -0.104675851 0.431059780 0.700317935 0.603706071
## banios 0.136756465 -0.126833787 0.408145953 0.689284618 0.680667854
## habitaciones -0.051088120 -0.229528473 -0.052188476 0.294925770 0.556431967
## tipo 0.137975070 0.458037646 0.074307410 -0.288718891 -0.583315242
## longitud -0.438982725 0.004651000 -0.371949431 -0.285662322 -0.127970465
## latitud -0.025627183 0.094646773 -0.155477129 -0.072542670 -0.035480207
## parqueaderos banios habitaciones tipo longitud
## zona 0.119598694 0.136756465 -0.051088120 0.137975070 -0.438982725
## piso -0.104675851 -0.126833787 -0.229528473 0.458037646 0.004651000
## estrato 0.431059780 0.408145953 -0.052188476 0.074307410 -0.371949431
## preciom 0.700317935 0.689284618 0.294925770 -0.288718891 -0.285662322
## areaconst 0.603706071 0.680667854 0.556431967 -0.583315242 -0.127970465
## parqueaderos 1.000000000 0.597589037 0.307834887 -0.339439729 -0.207398583
## banios 0.597589037 1.000000000 0.597496110 -0.483704563 -0.208870577
## habitaciones 0.307834887 0.597496110 1.000000000 -0.569616888 -0.015781075
## tipo -0.339439729 -0.483704563 -0.569616888 1.000000000 -0.041250455
## longitud -0.207398583 -0.208870577 -0.015781075 -0.041250455 1.000000000
## latitud -0.094647162 -0.108118170 0.007176398 0.108711136 0.156893976
## latitud
## zona -0.025627183
## piso 0.094646773
## estrato -0.155477129
## preciom -0.072542670
## areaconst -0.035480207
## parqueaderos -0.094647162
## banios -0.108118170
## habitaciones 0.007176398
## tipo 0.108711136
## longitud 0.156893976
## latitud 1.000000000
# Prueba chi-cuadrado de Pearson
t_est1 = table(vivienda$estrato,vivienda$zona)
t_est2 = table(vivienda$estrato,vivienda$tipo)
t_est3 = table(vivienda$tipo,vivienda$zona)
chisq.test(t_est1)
## Warning in chisq.test(t_est1): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: t_est1
## X-squared = 2172.8, df = 12, p-value < 2.2e-16
chisq.test(t_est2)
##
## Pearson's Chi-squared test
##
## data: t_est2
## X-squared = 64.884, df = 3, p-value = 5.312e-14
chisq.test(t_est3)
##
## Pearson's Chi-squared test
##
## data: t_est3
## X-squared = 367.47, df = 4, p-value < 2.2e-16
De acuerdo con la matriz de corelación y las pruebas de Chi-squared, no se presentan correlaciones muy altas (mayor al 85%), esto sugiere que las variables son relativamente independientes entre sí, cada variable puede proporcionar información única y valiosa sobre las características de las viviendas sin estar demasiado influenciada por otras variables.
En este paso se realizan graficas de barras y boxplot para cada una de las variables, con el fin de conocer, como se encuentran distribuidos los datos, y
par(mfrow = c(1, 2))
barplot(table(vivienda$zona), main = "Grafico de Barras de Zonas", xlab="zona",
ylab = "Frecuencia", col = "lightblue")
boxplot(vivienda$zona, main = "Diagrama de Caja de Zonas",
xlab = "Frecuencia", col = "lightblue", border = "black")
par(mfrow = c(1, 2))
barplot(table(vivienda$estrato), main = "Grafico de Barras de Estratos", xlab="estrato",
ylab = "Frecuencia", col = "lightsalmon")
boxplot(vivienda$estrato, main = "Diagrama de Caja de Estratos",
xlab = "Frecuencia", col = "lightsalmon", border = "black")
par(mfrow = c(1, 2))
hist(vivienda$preciom, main = "Histograma de Precios", xlab="preciom",
ylab = "Frecuencia", col = "gold1")
boxplot(vivienda$preciom, main = "Diagrama de Caja de Precio",
xlab = "Frecuencia", col = "gold1", border = "black")
par(mfrow = c(1, 2))
hist(vivienda$areaconst, main = "Histograma de Areas", xlab="areaconst",
ylab = "Frecuencia", col = "lightgreen")
boxplot(vivienda$areaconst, main = "Diagrama de Caja de Area",
xlab = "Frecuencia", col = "lightgreen", border = "black")
#### Baños {.underline}
par(mfrow = c(1, 2))
barplot(table(vivienda$banios), main = "Grafico de Barras de Banos", xlab="banos",
ylab = "Frecuencia", col = "plum")
boxplot(vivienda$banios, main = "Diagrama de Caja de Baños",
xlab = "Frecuencia", col = "plum", border = "black")
par(mfrow = c(1, 2))
barplot(table(vivienda$habitaciones), main = "Grafico de Barras de Habitaciones",
xlab="habitaciones", ylab = "Frecuencia", col = "mediumaquamarine")
boxplot(vivienda$habitaciones, main = "Diagrama de Caja de Habitaciones",
xlab = "Frecuencia", col = "mediumaquamarine", border = "black")
#### Tipo de vivienda {.underline}
par(mfrow = c(1, 2))
barplot(table(vivienda$tipo), main = "Grafico de Barras de Tipo de vivienda", xlab="Tipo de viviendas",
ylab = "Frecuencia", col = "plum")
boxplot(vivienda$tipo, main = "Diagrama de Caja de Tipo de vivienda",
xlab = "Frecuencia", col = "plum", border = "black")
par(mfrow = c(1, 2))
barplot(table(vivienda$piso), main = "Grafico de Barras de pisos", xlab="# pisos",
ylab = "Frecuencia", col = "gold")
boxplot(vivienda$piso, main = "Diagrama de Caja de Pisos",
xlab = "Frecuencia", col = "gold", border = "black")
par(mfrow = c(1, 2))
barplot(table(vivienda$parqueaderos), main = "Grafico de Barras de parqueaderos", xlab="# parqueaderos",
ylab = "Frecuencia", col = "green")
boxplot(vivienda$parqueaderos, main = "Diagrama de Caja de Parqueaderos",
xlab = "Frecuencia", col = "green", border = "black")
El Análisis de Componentes Principales (PCA, por sus siglas en inglés) es una técnica estadística utilizada para reducir la dimensionalidad de un conjunto de datos. El objetivo principal del PCA es tomar un conjunto de variables correlacionadas y transformarlos en un conjunto de variables no correlacionadas llamadas componentes principales.
Inicialmente se seleccionan los atributos de interes, teniendo en cuenta que el analsis de componentes principales solo se debe aplicar a variabales de tipo numerico, a estos se le debe realizar la estandarización de las variables, para evitar que las variables que tiene una escala con valores más grandes afecten las estimaciones realizadas.
vivienda2=vivienda[,c("zona", "piso", "estrato", "preciom", "areaconst", "parqueaderos", "banios", "habitaciones", "tipo","longitud", "latitud")]
vivienda2= scale(vivienda2)
head(vivienda2)
## zona piso estrato preciom areaconst parqueaderos
## [1,] -0.1461074 -0.7053307 -0.9046263 -0.1756310 0.7609789 1.0779092
## [2,] -1.2352307 -1.0793910 0.1749079 -0.6055839 -0.6129041 -0.7415001
## [3,] -1.2352307 -1.0793910 0.1749079 -0.6670057 -0.6345970 -0.7415001
## [4,] -1.2352307 -1.0793910 -0.9046263 -0.7284276 -0.8876807 0.1682046
## [5,] -1.2352307 -1.0793910 0.1749079 -0.4520293 -0.2730489 0.1682046
## [6,] -1.2352307 -0.7053307 0.1749079 -0.4213184 -0.1790463 0.1682046
## banios habitaciones tipo longitud latitud
## [1,] 1.3178809 -0.4241459 -1.3987647 -0.57661599 0.4905916
## [2,] -0.9022913 -0.4241459 0.7147679 1.05338647 1.0487875
## [3,] -0.1622339 -0.4241459 0.7147679 0.83810312 -1.0336499
## [4,] -0.9022913 -0.4241459 0.7147679 0.66956702 0.2867835
## [5,] -0.1622339 0.3272519 0.7147679 -0.02610573 -0.7243192
## [6,] 0.5778235 1.8300475 -1.3987647 1.05892232 1.5336779
Apliamos el PCA .
viviendapca=prcomp(vivienda2)
viviendapca
## Standard deviations (1, .., p=11):
## [1] 2.0092091 1.4431491 1.0590564 0.9697036 0.8597515 0.7378155 0.6742897
## [8] 0.6040525 0.5495222 0.4928787 0.4128919
##
## Rotation (n x k) = (11 x 11):
## PC1 PC2 PC3 PC4 PC5
## zona 0.11023663 0.43176833 0.13978564 0.546061343 -0.137883127
## piso -0.12545241 0.33622426 -0.50634489 -0.246631363 -0.636891938
## estrato 0.25068782 0.43727354 -0.02345335 -0.256571272 0.271629978
## preciom 0.42042712 0.19328850 -0.16943173 -0.107475126 0.145904125
## areaconst 0.42516247 -0.13291691 -0.12608825 0.006636561 0.009049884
## parqueaderos 0.38848402 0.07894640 -0.12818914 -0.207875329 0.233680000
## banios 0.43231610 -0.02753302 -0.09902287 -0.034595880 -0.200148743
## habitaciones 0.30325361 -0.33667174 -0.07035303 0.227569774 -0.492697580
## tipo -0.29917906 0.41956896 -0.17408455 -0.082414785 0.020628366
## longitud -0.16212631 -0.39061121 -0.36347090 -0.380706469 0.113404346
## latitud -0.07855104 -0.07307639 -0.69664578 0.561818097 0.359862891
## PC6 PC7 PC8 PC9 PC10
## zona -0.663834187 0.02167071 0.04957167 -0.10817014 0.05102796
## piso 0.044432689 0.22288525 -0.24417313 -0.18439800 0.05553390
## estrato 0.104113606 -0.59098656 -0.16774914 -0.25502956 0.37914730
## preciom -0.124183757 0.07606265 -0.11976343 0.32071795 -0.19033797
## areaconst -0.067069937 0.19003057 -0.35656013 0.55004804 0.26745399
## parqueaderos 0.008804215 0.53106640 0.54646780 -0.32953349 0.14946936
## banios 0.042650621 -0.31861247 0.12549384 -0.09016684 -0.73138151
## habitaciones 0.120941043 -0.31142115 0.37995773 0.04421215 0.42730580
## tipo 0.069897812 -0.15231715 0.54644239 0.59167510 -0.01897741
## longitud -0.684085434 -0.22798687 0.08997603 -0.03292999 0.04192380
## latitud 0.192894718 -0.05461877 -0.05352899 -0.11833331 -0.02883192
## PC11
## zona -0.08235161
## piso -0.00348743
## estrato -0.09353325
## preciom 0.74141460
## areaconst -0.49367619
## parqueaderos -0.13010450
## banios -0.31488432
## habitaciones 0.23383376
## tipo -0.14073222
## longitud -0.01844776
## latitud -0.01193160
Cada fila representa un componente principal y cada columna representa una variable original. Los valores en esta matriz indican la contribución de cada variable al componente principal correspondiente.
summary(viviendapca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 2.009 1.4431 1.0591 0.96970 0.8598 0.73782 0.67429
## Proportion of Variance 0.367 0.1893 0.1020 0.08548 0.0672 0.04949 0.04133
## Cumulative Proportion 0.367 0.5563 0.6583 0.74378 0.8110 0.86046 0.90179
## PC8 PC9 PC10 PC11
## Standard deviation 0.60405 0.54952 0.49288 0.4129
## Proportion of Variance 0.03317 0.02745 0.02208 0.0155
## Cumulative Proportion 0.93497 0.96242 0.98450 1.0000
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_eig(viviendapca, addlabels = TRUE, barcolor = "#66CDAA", barfill = "#66CDAA", ncp = 11)
Si la gráfica de valores propios muestra que los primeros 7 componentes principales explican el 90% de la varianza total en los datos, esto sugiere que estos componentes capturan la mayoría de la información importante de los datos originales.
A continuacion revisamos como estan compuestos estos primeros 7 componentes:
fviz_contrib(viviendapca, choice = "var", axes = 1)
fviz_contrib(viviendapca, choice = "var", axes = 2)
fviz_contrib(viviendapca, choice = "var", axes = 3)
fviz_contrib(viviendapca, choice = "var", axes = 4)
fviz_contrib(viviendapca, choice = "var", axes = 5)
fviz_contrib(viviendapca, choice = "var", axes = 6)
fviz_contrib(viviendapca, choice = "var", axes = 7)
Utilizando la función fviz_pca_var() del paquete factoextra en R para visualizar las contribuciones de las variables originales a los componentes principales obtenidos a través del análisis de componentes principales (PCA).
fviz_pca_var(viviendapca,col.var = "contrib", repel = TRUE)
Cada variable se representa como un punto en el gráfico, y la dirección y longitud del vector indican la contribución de esa variable a cada componente principal. Se identificaron que las variables que tienen mayor influencia en la estructura de los datos son: Precio, Baños, Area construida, Estrato, Habitaciones, Parqueaderos, Tipo de vivienda y se realiza un nuevo data frame.
viviendaconglo=vivienda[,c("preciom", "banios", "areaconst", "estrato", "habitaciones", "parqueaderos", "tipo")]
head(viviendaconglo)
El análisis de conglomerados, también conocido como análisis de clustering, se utiliza para agrupar observaciones similares en conjuntos o “clústeres” basados en las características de las observaciones.
Se utilizo la función fviz_nbclust() del paquete factoextra para visualizar el método de Elbow o “codo”.
fviz_nbclust(viviendaconglo, kmeans, method = "wss") + geom_vline(xintercept = 2, linetype = 2)
::: {style=“text-align: justify;”} Este método implica trazar un gráfico
de la suma de los cuadrados dentro del clúster (WSS, por sus siglas en
inglés) en función del número de clústeres y observar el punto en el que
la tasa de disminución de WSS comienza a disminuir significativamente,
formando un “codo”. Observando el gráfico y buscando el punto en el que
se produce un cambio significativo en la pendiente de la curva, en este
caso 2, el número de clústeres correspondiente al punto de codo se
considera el número óptimo de clústeres.
La función fviz_nbclust del paquete factoextra para visualizar el número óptimo de clusters utilizando el método de Silhouette. El método de Silhouette evalúa la cohesión y separación de los clusters para determinar cuál es la estructura de clustering más apropiada.
fviz_nbclust(viviendaconglo, kmeans, method = "silhouette")
## Warning: did not converge in 10 iterations
::: {style=“text-align: justify;”} El gráfico muestra diferentes medidas
de validez de clustering para un rango de números de clusters. Luego,
utilizando el método de Silhouette, determinará el número óptimo de
clusters basándose en la medida de Silhouette, que cuantifica cuán
similar es una observación a su propio cluster en comparación con otros
clusters. El número óptimo de clusters será aquel para el cual la medida
de Silhouette sea máxima, en este caso el 2.
Ambos metodos indican que el numero adecuado serian 2, por tal motivo se continua con la agrupacion usando 2 cluster.
clustering_result <- kmeans(viviendaconglo, 2)
print(clustering_result)
## K-means clustering with 2 clusters of sizes 809, 3999
##
## Cluster means:
## preciom banios areaconst estrato habitaciones parqueaderos tipo
## 1 1053.6551 4.929543 367.8579 5.720643 4.309023 3.263288 1.401731
## 2 336.5229 2.873218 135.6975 4.659415 3.413853 1.522131 1.714429
##
## Clustering vector:
## [1] 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 1 1 2 1 1 1 1 2 2
## [38] 1 2 1 1 1 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 1 1 2 1 1 1 1 2 2 1 1 1 1 1 1 1 2
## [75] 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2
## [112] 1 2 2 2 2 1 2 2 2 2 2 2 2 1 2 2 2 1 1 1 1 2 2 1 1 2 2 2 1 2 2 2 2 2 2 2 2
## [149] 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2
## [186] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2
## [223] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [260] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2
## [297] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [334] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [371] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [408] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2
## [445] 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [482] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [519] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2
## [556] 1 2 2 1 2 1 2 2 2 2 2 1 2 2 2 2 2 2 1 2 1 2 2 2 1 1 1 1 2 2 1 2 1 2 1 1 2
## [593] 1 2 1 1 1 2 1 1 1 2 2 1 1 2 1 1 1 1 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1
## [630] 2 1 2 2 2 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 2 1 1 1 2 1 2 1 2 1 2 2
## [667] 1 1 2 2 2 2 1 1 1 1 2 1 1 1 2 1 1 1 2 2 1 1 1 2 2 2 1 1 1 2 2 2 1 1 2 2 2
## [704] 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 2 2 2 1 1 1
## [741] 2 1 1 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 2 2 2 1 1 1 2 2 2 2 2 1 2
## [778] 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 2 2 1 1 2 1 1 2
## [815] 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 1 2 1 2 1 2 1 1 2 2 2 2
## [852] 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 1 1 2 1 2 2 2 2 2 1 2 2
## [889] 2 1 1 2 2 1 1 1 2 2 1 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 1
## [926] 2 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [963] 2 2 1 1 2 1 1 2 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2
## [1000] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 1 1 2 2 2 2 1 2 2 1 2 2 2 2 2 2 1 1 2
## [1037] 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 1 1 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1074] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1111] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2
## [1148] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1185] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2
## [1222] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1259] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2
## [1296] 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 2 1 2 2 2 2
## [1333] 2 1 2 2 1 2 1 1 2 2 1 1 1 1 2 2 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 1 1 1 2 2 2
## [1370] 2 2 2 2 2 2 2 1 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1407] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1444] 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 1
## [1481] 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2
## [1518] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1
## [1555] 2 2 1 2 1 2 2 2 2 2 1 1 2 1 1 1 1 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 1 2 2
## [1592] 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 1 2 2 2 2 2
## [1629] 2 2 2 1 2 2 1 2 2 1 1 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1666] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1703] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1
## [1740] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2 1 2 2 1 2 2 2 2
## [1777] 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2
## [1814] 1 1 2 2 1 1 2 1 1 1 2 2 1 2 1 1 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1851] 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [1888] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2
## [1925] 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2
## [1962] 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2
## [1999] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2036] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2073] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2110] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2147] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2184] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2221] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2258] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2295] 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2332] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2369] 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2 2
## [2406] 2 2 2 1 2 2 1 1 2 1 1 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 1 2 1 2
## [2443] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2
## [2480] 2 1 2 1 1 2 2 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2517] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2554] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2
## [2591] 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2628] 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 1 1 2 1 1 2 2
## [2665] 1 2 2 1 2 1 2 2 1 2 2 2 2 1 1 2 1 2 2 2 2 1 1 2 2 1 2 1 1 2 1 2 1 1 1 2 2
## [2702] 2 2 1 2 2 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 1 2 2 2 2 2 1 2 2 1 2 1 1 2 2 1 1
## [2739] 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2
## [2776] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2813] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [2850] 2 2 2 2 2 1 1 1 1 1 1 2 1 2 2 1 2 1 2 2 2 2 1 2 1 1 1 1 2 2 2 1 1 2 2 1 1
## [2887] 1 1 1 2 1 1 2 1 2 1 1 1 1 1 2 2 1 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 2 1 1 2 1
## [2924] 2 2 1 2 2 2 2 1 1 1 1 2 2 1 1 1 1 2 1 2 1 1 1 1 2 1 1 1 2 2 2 1 1 1 1 1 1
## [2961] 2 1 1 1 2 1 1 1 2 1 2 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2
## [2998] 1 2 1 1 1 1 2 1 1 1 1 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 1 1 2 1 1 1
## [3035] 2 1 2 1 2 2 2 2 1 1 1 2 1 2 1 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2
## [3072] 2 2 1 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 1 2 2 2
## [3109] 2 1 2 2 2 1 2 2 2 2 1 1 2 1 2 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1
## [3146] 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2
## [3183] 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2
## [3220] 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3257] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3294] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3331] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3368] 2 2 2 2 2 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 1 2 2
## [3405] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3442] 2 2 2 2 1 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2
## [3479] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3516] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2
## [3553] 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2 2 2 1 1 2 2 1 1 1 1 2 2 1 1 2 1 1 2 2
## [3590] 1 1 2 2 1 2 1 2 2 1 2 2 1 2 2 2 2 2 1 2 1 2 2 1 2 1 1 2 2 1 2 2 1 2 1 2 2
## [3627] 2 1 2 2 2 1 1 2 2 1 1 1 1 1 2 2 2 2 2 1 2 1 2 2 2 2 1 2 2 1 1 1 1 1 1 1 2
## [3664] 2 2 1 1 1 1 1 1 1 2 2 1 2 2 1 1 1 1 2 2 1 1 1 1 2 1 1 1 1 2 2 1 2 2 2 1 1
## [3701] 2 1 1 2 1 1 2 2 2 1 1 1 2 1 2 1 1 1 2 1 1 1 1 1 2 2 1 2 2 2 2 2 1 1 2 1 2
## [3738] 2 2 2 2 1 2 2 2 1 2 1 2 2 2 2 2 1 1 2 2 1 2 2 1 2 2 2 2 2 2 1 1 2 1 1 2 1
## [3775] 2 1 2 1 2 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 2 1 2 1 1 2 1 1 1
## [3812] 2 1 2 1 2 1 1 1 2 1 1 2 1 2 1 1 2 1 1 1 1 1 1 1 2 2 2 2 1 2 2 2 2 2 2 2 2
## [3849] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2
## [3886] 2 1 2 2 2 1 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3923] 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3960] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [3997] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4034] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4071] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4108] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4145] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4182] 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4219] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1
## [4256] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4293] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4330] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4367] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4404] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4441] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4478] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4515] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4552] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4589] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2
## [4626] 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4663] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4700] 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
## [4737] 2 2 2 2 1 2 2 2 2 1 2 1 2 2 2 2 2 2 2 2 2 2 1 1 2 2 2 1 1 2 2 2 2 1 2 2 1
## [4774] 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
##
## Within cluster sum of squares by cluster:
## [1] 106953571 112359730
## (between_SS / total_SS = 63.5 %)
##
## Available components:
##
## [1] "cluster" "centers" "totss" "withinss" "tot.withinss"
## [6] "betweenss" "size" "iter" "ifault"
fviz_cluster(clustering_result, data = viviendaconglo, stand = FALSE,
ellipse.type = "convex", geom = "point",
palette = "jco", main = "Visualizacion Cluster")
El tamaño de primer cluster es 3999 muestras y el segundo cluster es 809 muestras. A continuación se muestran algunos aspectos de los grupos.
viviendaclu <- data.frame(viviendaconglo, cluster = as.factor(clustering_result$cluster))
cluster_summary <- viviendaclu %>%
group_by(cluster) %>%
summarise_all(median)
print(cluster_summary)
## # A tibble: 2 × 8
## cluster preciom banios areaconst estrato habitaciones parqueaderos tipo
## <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 950 5 316. 6 4 3 1
## 2 2 310 3 107 5 3 1 2
Grupo 1: Esta conformado primeramente por apartamentos de 107 metros cuadrados con 3 habitaciones, 3 baños y 1 parqueadero. Ubicados en estrato 5, con un precio de 310 millones de pesos colombianos.
Grupo 2: Esta conformado primeramente por casas de 315.78 metros cuadrados con 4 habitaciones, 5 baños y 3 parqueaderos. Ubicados en estrato 6, con un precio de 950 millones de pesos colombianos.
El Análisis de Correspondencia es una técnica estadística utilizada para explorar y analizar la relación entre dos o más variables categóricas en un conjunto de datos.
Creamos una tabla de contingencia que cuenta las frecuencias de ocurrencia de las combinaciones de categorías de las variables
library(FactoMineR)
cat("Tabla: Zona vs Estrato vs Tipo de vivienda\n")
## Tabla: Zona vs Estrato vs Tipo de vivienda
tabla<- table(vivienda$zona, vivienda$estrato, vivienda$tipo)
tabla
## , , = 1
##
##
## 3 4 5 6
## 1 31 1 0 0
## 2 34 70 134 16
## 3 68 316 411 381
## 4 79 1 0 0
## 5 9 17 28 30
##
## , , = 2
##
##
## 3 4 5 6
## 1 2 2 0 0
## 2 107 114 348 63
## 3 79 657 784 340
## 4 15 1 1 0
## 5 10 34 153 472
library(FactoMineR)
library(factoextra)
BaseLimpia=vivienda
BaseLimpia$estratoFactor <- as.factor(BaseLimpia$estrato)
BaseLimpia$zonaFactor <- as.factor(BaseLimpia$zona)
BaseLimpia$tipoFactor <- as.factor(BaseLimpia$tipo)
acm_resultados <- MCA(BaseLimpia[ , c('estratoFactor', 'zonaFactor', 'tipoFactor')], graph = TRUE)
Esto indica que hay una asociación significativa entre las variables “Zona” y “Estrato”, es decir, no son independientes entre sí. En otras palabras, los estratos están distribuidos en las zonas de la ciudad de Cali asi: - Zona oeste se encuentra el estrato 6 y se denota una presencia en su mayoria de apatarmanetos. - Zona Sur se encuentra el estrato 4 y 5 y se denota una presencia en su mayoria de apatarmanetos. - Zona norte se encuentra el estrato 5 y se denota una presencia en su mayoria de casas. - Zona oriente y centro se encuentra el estrato 3 y se denota una presencia en su mayoria de casas