Problema

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.

Retos

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Desarrollo

1. Importar la base de datos

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

2.Revisión y limpieza de la base de datos

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)
Data summary
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.

3. Analisis unidimensional de datos

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

Zona

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")

Estrato

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")

Precio

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")

Area

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")

Habitaciones

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")

Pisos

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")

Parqueaderos

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")

4. Analisis multidimensional de datos

1. Análisis de Componentes Principales.

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)

2. Análisis de Conglomerados.

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.

  1. Seleccionamos el numero optimo de clusters, para lo cual se utilizaran 2 metodos:
Metodó 1: WSS.

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.

Metodó 2: Silhouette.

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.

  1. Se utilizo la función kmeans() para realizar el clustering, especificando el número de clusters y Se utilizo la función fviz_cluster() del paquete factoextra para visualizar los clusters resultantes. :::
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.

3. Análisis de Correspondencia.

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

5. Conclusiones

  • Se observó una fuerte asociación entre el área construida con los precios de las viviendas, esto sugiere que los compradores están dispuestos a pagar más por viviendas más grandes y con un mayor número de habitaciones.
  • El estrato de la vivienda tiene una relacion significativa con los precios. Es posible que las viviendas ubicadas en estratos más altos se perciban como más deseables y, por lo tanto, tengan precios más altos en el mercado.
  • Es posible que los apartamentos tiendan a tener una mayor oferta debido a la densidad de construcción en áreas urbanas, mientras que las casas unifamiliares pueden ser más escasas y, por lo tanto, más caras.
  • La presencia de parqueaderos (comodidades) también puede influir en los precios. Las viviendas con más parqueaderos tienden a tener precios más altos.
  • La ubicación tienen un impacto significativo en los precios de las viviendas.Las viviendas ubicadas en zonas sur y oeste tienden a tener estratos superiores. Por otro lado, en zonas del norte, oriente y centro predominan estratos medios.