1. Cargue y limpieza de la base datos

#devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
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>

Analisís General: de acuerdo al cargue de la base de datos, encontramos 8322 registros, de los cuales podemos evidenciar lo siguente:

Las caracteristicas de cada variable:

a) tipo cualitativa o caracter: zona, piso, tipo y barrio.
b) tipo numerica o cuantitativa: id, estrato, preciom, areaconst, parqueaderos, banios, habitaciones.

Eliminar variables de un dataframe

borrar <- c("barrio","longitud","latitud")
vivienda2 <- vivienda[ , !(names(vivienda) %in% borrar)]
head(vivienda2, n=9)
## # A tibble: 9 × 10
##      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
## 7  2326 Zona N… 01          4     220        52            2      2            3
## 8  4386 Zona N… 01          5     310       137            2      3            4
## 9  1209 Zona N… 02          5     320       150            2      4            6
## # ℹ 1 more variable: tipo <chr>
Se procede a eliminar las columnas barrio, longitud y latitud al no ser relevantes para el presente estudio.

Se observa la cantidad de datos faltantes

library(mice)
md.pattern(vivienda2)

##      preciom id zona estrato areaconst banios habitaciones tipo parqueaderos
## 4808       1  1    1       1         1      1            1    1            1
## 1909       1  1    1       1         1      1            1    1            1
## 876        1  1    1       1         1      1            1    1            0
## 726        1  1    1       1         1      1            1    1            0
## 1          1  0    0       0         0      0            0    0            0
## 2          0  0    0       0         0      0            0    0            0
##            2  3    3       3         3      3            3    3         1605
##      piso     
## 4808    1    0
## 1909    0    1
## 876     1    1
## 726     0    2
## 1       0    9
## 2       0   10
##      2638 4266
Se puede evidenciar que para la variable piso faltan 2638 datos, para la variable parqueaderos 1605 datos, mientras que para las demas variables faltan alrededor de 2 o 3 datos.

id, eliminar los registros con N/A que no tengan id

vivienda2<-vivienda2[c(1:8319),]
md.pattern(vivienda2)

##      id zona estrato preciom areaconst banios habitaciones tipo parqueaderos
## 4808  1    1       1       1         1      1            1    1            1
## 1909  1    1       1       1         1      1            1    1            1
## 876   1    1       1       1         1      1            1    1            0
## 726   1    1       1       1         1      1            1    1            0
##       0    0       0       0         0      0            0    0         1602
##      piso     
## 4808    1    0
## 1909    0    1
## 876     1    1
## 726     0    2
##      2635 4237
Dentro de la variable id hay tres registros sin datos y cuando se observan los demas datos de estos registros, la mayoria estan vacias, por lo cual se procede a eliminar los registros con id vacios.
Con estos registros eliminados se puede observar que ya se pudo arreglar los datos faltantes de las demas variables

analisis de variable piso

# Calcular la tabla de frecuencia
tabla_frecuencia <- table(vivienda2$piso)
# Encontrar el valor o los valores con la frecuencia máxima (moda)
moda <- names(tabla_frecuencia[tabla_frecuencia == max(tabla_frecuencia)])
# Imprimir la moda
cat("La moda es:", moda, "\n")
## La moda es: 02
#Reemplazar moda 02 para los N/A en variable piso
vivienda2$piso[is.na(vivienda2$piso)]<-"02"

analisis de variable por parqueadero

# Calcular la tabla de frecuencia
tabla_frecuencia <- table(vivienda2$parqueaderos)
# Encontrar el valor o los valores con la frecuencia máxima (moda)
moda <- names(tabla_frecuencia[tabla_frecuencia == max(tabla_frecuencia)])
# Imprimir la moda
cat("La moda es:", moda, "\n")
## La moda es: 1
#Reemplazar moda 02 para los N/A en variable piso
vivienda2$parqueaderos[is.na(vivienda2$parqueaderos)]<-1
Se procede a realizar imputación de los datos para las variables piso y parqueaderos, donde se calculo ,la moda de estas variables y para la variable piso se encontro que la moda es 2 y para parqueaderos la moda es 1.
se procede a multiplicar la variable preciom por un millon para tener los valores en pesos.
vivienda2$preciom<-vivienda2$preciom*1000000
la variable piso se vuelve numerica para poder realizar analisis de componentes principales y k-medias
vivienda2$piso <- as.numeric(vivienda2$piso)
Al validar nuevamente la cantidad de datos faltantes, se puede observar que ya todas las variables estan completas
md.pattern(vivienda2)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 8319  1    1    1       1       1         1            1      1            1
##       0    0    0       0       0         0            0      0            0
##      tipo  
## 8319    1 0
##         0 0

Eliminar columnas de un dataframe (solo numericas)

borrar <- c("id","zona","estrato", "tipo")
viviendacategoricas <- vivienda2[ , !(names(vivienda2) %in% borrar)]
head(viviendacategoricas, n=9)
## # A tibble: 9 × 6
##    piso   preciom areaconst parqueaderos banios habitaciones
##   <dbl>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1     2 250000000        70            1      3            6
## 2     2 320000000       120            1      2            3
## 3     2 350000000       220            2      2            4
## 4     2 400000000       280            3      5            3
## 5     1 260000000        90            1      2            3
## 6     1 240000000        87            1      3            3
## 7     1 220000000        52            2      2            3
## 8     1 310000000       137            2      3            4
## 9     2 320000000       150            2      4            6
Se procede a dejar una base de solo variables numericas para poder realizar PCA y k-means
viviendaescalados= scale(viviendacategoricas)
se realiza la estandarización de las variables antes de proceder a realizar el proceso de estimación de los componentes. principales y k-means.
prcomp(viviendaescalados)
## Standard deviations (1, .., p=6):
## [1] 1.7876260 1.0425150 0.8950690 0.6316520 0.5701043 0.4386390
## 
## Rotation (n x k) = (6 x 6):
##                     PC1          PC2          PC3         PC4        PC5
## piso          0.1017998 -0.800271394  0.574890748  0.02933253 -0.1311150
## preciom      -0.4700094 -0.288185116 -0.251236150  0.34105599  0.2366324
## areaconst    -0.4831504  0.060931000 -0.003161386  0.54350252 -0.5640787
## parqueaderos -0.4171612 -0.304374739 -0.382312384 -0.70538969 -0.2792254
## banios       -0.4863201  0.003284964  0.230949296 -0.04288848  0.6971766
## habitaciones -0.3532180  0.424438070  0.637864165 -0.29666713 -0.2112042
##                      PC6
## piso         -0.02552613
## preciom       0.67868021
## areaconst    -0.38634625
## parqueaderos -0.10783500
## banios       -0.47143371
## habitaciones  0.39446169

2. Cargue de librerias para realizar los correspondientes analisis

library(FactoMineR)
library(tidyverse) # everything
library(readxl) # reading in excel sheets
library(factoextra) # easy PCA plotting
library(glue) # easy pasting

Cantidad de PCA

res.pca <- prcomp(viviendaescalados)
fviz_eig(res.pca, addlabels = TRUE)

De acuerdo al grafico podemos observar que con dos componentes obtenemos el 71.4% de la variabilidad de los datos, por lo cual se trabajara solo con las dos primeras componentes.

fviz_pca_var(res.pca,
             col.var = "contrib", # Color by contributions to the PC
             gradient.cols = c("#FF7F00",  "#034D94"),
             repel = TRUE     # Avoid text overlapping
)

Mediante el grafico podemos observar que la cantidad de baños, area construida y cantidad de habitacionestienen mas representatividad en una componente, mientras que el precio y la cantidad de parqueaderos tiene más representantividad en la otra.

2.1 Analisis Por Conglomerados

Metodo el codo para seleccionar cantidad de grupos de acuerdo a las distancias cuadradas

set.seed(123)
wss <- function(k) {
  kmeans(viviendaescalados, k, nstart = 10)$tot.withinss
}
k.values <- 1:10
wss_values <- map_dbl(k.values, wss)
plot(k.values, wss_values, type = "b", pch = 19, frame = FALSE, 
     xlab = "Número de Clústeres K", 
     ylab = "Suma de las Distancias Cuadradas Dentro de los Clústeres (WSS)")

De acuerdo a la grafica, se pueden seleccionar 4 grupos o clusters ya que despues de 5 grupos la diferencia de la suma de las distancias cuadradadas no es tan significativa.

2.2 Analisis Por K-means

set.seed(0)
modelo_kmeans <- kmeans(viviendaescalados, 4) # Ajuste
vivienda_3_est <- data.frame(viviendaescalados,
                             modelo_kmeans$cluster) # Cluster
aggregate(viviendacategoricas,
          by = list(vivienda_3_est$modelo_kmeans.cluster),
          FUN = median) # Medianas  
##   Group.1 piso preciom areaconst parqueaderos banios habitaciones
## 1       1    2 2.3e+08        86            1      2            3
## 2       2    2 4.8e+08       228            2      4            4
## 3       3    8 3.3e+08       100            1      3            3
## 4       4    2 1.1e+09       370            4      5            4
fviz_cluster(list(data = vivienda_3_est[,1:6], 
                  cluster = vivienda_3_est$modelo_kmeans.cluster),
             palette = c("#2E9FDF",  "#E7B800", "#FC4E07","#00AFBB"),
             ellipse.type = "convex",repel = F, 
             show.clust.cent = FALSE, ggtheme = theme_minimal())

por medio de la grafica se puede observar que por medio de la metodologia k-means se puede identificar plenamente los 4 grupos que dentro del grafico es la leyenda cluster.

grupos<- data.frame(viviendacategoricas,
                    modelo_kmeans$cluster) # Cluster

Cluster1<-grupos%>%filter(grupos$modelo_kmeans.cluster==1)
Cluster2<-grupos%>%filter(grupos$modelo_kmeans.cluster==2)
Cluster3<-grupos%>%filter(grupos$modelo_kmeans.cluster==3)
Cluster4<-grupos%>%filter(grupos$modelo_kmeans.cluster==4)

Cluster Numero Uno

options(scipen = 100, digits = 4)

summary(Cluster1)
##       piso         preciom             areaconst    parqueaderos 
##  Min.   :1.00   Min.   :  58000000   Min.   : 30   Min.   :1.00  
##  1st Qu.:2.00   1st Qu.: 155000000   1st Qu.: 64   1st Qu.:1.00  
##  Median :2.00   Median : 230000000   Median : 86   Median :1.00  
##  Mean   :2.57   Mean   : 250277132   Mean   : 98   Mean   :1.21  
##  3rd Qu.:3.00   3rd Qu.: 315000000   3rd Qu.:114   3rd Qu.:1.00  
##  Max.   :6.00   Max.   :1500000000   Max.   :660   Max.   :4.00  
##      banios      habitaciones modelo_kmeans.cluster
##  Min.   :0.00   Min.   :0.0   Min.   :1            
##  1st Qu.:2.00   1st Qu.:3.0   1st Qu.:1            
##  Median :2.00   Median :3.0   Median :1            
##  Mean   :2.19   Mean   :2.9   Mean   :1            
##  3rd Qu.:3.00   3rd Qu.:3.0   3rd Qu.:1            
##  Max.   :4.00   Max.   :7.0   Max.   :1
Para el grupo o cluster 1 se puede evidenciar que en promedio el piso seleccionado es el 3, el precio esta alrededor de los 250.277.132 millones, con un area construida de 98 metros, con alrededor de un parqueadero en promedio tienen 2 baños y tienen alrededor de 3 habitaciones.

Cluster Numero Dos

summary(Cluster2)
##       piso         preciom             areaconst    parqueaderos 
##  Min.   :1.00   Min.   : 127000000   Min.   : 61   Min.   :1.00  
##  1st Qu.:2.00   1st Qu.: 370000000   1st Qu.:170   1st Qu.:1.00  
##  Median :2.00   Median : 480000000   Median :228   Median :2.00  
##  Mean   :2.27   Mean   : 518061690   Mean   :247   Mean   :1.75  
##  3rd Qu.:3.00   3rd Qu.: 650000000   3rd Qu.:300   3rd Qu.:2.00  
##  Max.   :8.00   Max.   :1350000000   Max.   :932   Max.   :4.00  
##      banios       habitaciones   modelo_kmeans.cluster
##  Min.   : 0.00   Min.   : 0.00   Min.   :2            
##  1st Qu.: 4.00   1st Qu.: 4.00   1st Qu.:2            
##  Median : 4.00   Median : 4.00   Median :2            
##  Mean   : 4.16   Mean   : 4.84   Mean   :2            
##  3rd Qu.: 5.00   3rd Qu.: 6.00   3rd Qu.:2            
##  Max.   :10.00   Max.   :10.00   Max.   :2

Para el grupo o cluster 2 se puede evidenciar que en promedio el piso seleccionado es el 2,el precio esta alrededor de los 518.061.690 millones, con un area construida de 247 metros, con alrededor de 2 parqueaderos en promedio tienen 4 baños y tienen alrededor de 5 habitaciones.

Cluster Numero Tres

summary(Cluster3)
##       piso          preciom             areaconst    parqueaderos 
##  Min.   : 5.00   Min.   : 125000000   Min.   : 45   Min.   :1.00  
##  1st Qu.: 6.00   1st Qu.: 240000000   1st Qu.: 77   1st Qu.:1.00  
##  Median : 8.00   Median : 330000000   Median :100   Median :1.00  
##  Mean   : 8.12   Mean   : 394567820   Mean   :114   Mean   :1.54  
##  3rd Qu.:10.00   3rd Qu.: 460000000   3rd Qu.:135   3rd Qu.:2.00  
##  Max.   :12.00   Max.   :1500000000   Max.   :660   Max.   :4.00  
##      banios       habitaciones  modelo_kmeans.cluster
##  Min.   : 0.00   Min.   :0.00   Min.   :3            
##  1st Qu.: 2.00   1st Qu.:3.00   1st Qu.:3            
##  Median : 3.00   Median :3.00   Median :3            
##  Mean   : 2.79   Mean   :2.95   Mean   :3            
##  3rd Qu.: 3.00   3rd Qu.:3.00   3rd Qu.:3            
##  Max.   :10.00   Max.   :6.00   Max.   :3

Para el grupo o cluster 3 se puede evidenciar que en promedio el piso seleccionado es el 8, el precio esta alrededor de los 394.567.820 millones, con un area construida de 114 metros, con alrededor de 2 parqueaderos en promedio tienen 3 baños y tienen alrededor de 3 habitaciones.

Cluster Numero Cuatro

summary(Cluster4)
##       piso          preciom             areaconst     parqueaderos  
##  Min.   : 1.00   Min.   : 190000000   Min.   :  50   Min.   : 1.00  
##  1st Qu.: 2.00   1st Qu.: 850000000   1st Qu.: 290   1st Qu.: 3.00  
##  Median : 2.00   Median :1100000000   Median : 370   Median : 4.00  
##  Mean   : 2.67   Mean   :1125209040   Mean   : 425   Mean   : 3.83  
##  3rd Qu.: 3.00   3rd Qu.:1398000000   3rd Qu.: 500   3rd Qu.: 4.00  
##  Max.   :12.00   Max.   :1999000000   Max.   :1745   Max.   :10.00  
##      banios       habitaciones   modelo_kmeans.cluster
##  Min.   : 0.00   Min.   : 0.00   Min.   :4            
##  1st Qu.: 4.00   1st Qu.: 4.00   1st Qu.:4            
##  Median : 5.00   Median : 4.00   Median :4            
##  Mean   : 5.17   Mean   : 4.54   Mean   :4            
##  3rd Qu.: 6.00   3rd Qu.: 5.00   3rd Qu.:4            
##  Max.   :10.00   Max.   :10.00   Max.   :4

Para el grupo o cluster 4 se puede evidenciar que en promedio el piso seleccionado es el 3,el precio esta alrededor de los 1125.209.040 millones, con un area construida de 425 metros, con alrededor de 4 parqueaderos en promedio tienen 5 baños y tienen alrededor de 5 habitaciones.

2.3 Analisis Por Correspondencia

Eliminar columnas de un dataframe (solo numericas)
borrar <- c("id","piso","preciom", "areaconst","parqueaderos","banios","habitaciones")
viviendacualitativas <- vivienda2[ , !(names(vivienda2) %in% borrar)]
head(viviendacualitativas, n=9)
## # A tibble: 9 × 3
##   zona         estrato tipo       
##   <chr>          <dbl> <chr>      
## 1 Zona Oriente       3 Casa       
## 2 Zona Oriente       3 Casa       
## 3 Zona Oriente       3 Casa       
## 4 Zona Sur           4 Casa       
## 5 Zona Norte         5 Apartamento
## 6 Zona Norte         5 Apartamento
## 7 Zona Norte         4 Apartamento
## 8 Zona Norte         5 Apartamento
## 9 Zona Norte         5 Casa
Se procede a obtener una base solo con las variables cualitativas o de caracter.
library(factoextra)
viviendacualitativas$estrato <- as.factor(viviendacualitativas$estrato)
viviendacualitativas$zona <- as.factor(viviendacualitativas$zona)
viviendacualitativas$tipo <- as.factor(viviendacualitativas$tipo)
tail(viviendacualitativas, n=9)
## # A tibble: 9 × 3
##   zona     estrato tipo       
##   <fct>    <fct>   <fct>      
## 1 Zona Sur 4       Apartamento
## 2 Zona Sur 5       Casa       
## 3 Zona Sur 3       Casa       
## 4 Zona Sur 6       Apartamento
## 5 Zona Sur 6       Casa       
## 6 Zona Sur 3       Casa       
## 7 Zona Sur 6       Casa       
## 8 Zona Sur 6       Apartamento
## 9 Zona Sur 5       Casa
Analisis para zona y estrato
tabla <- table(viviendacualitativas$zona, viviendacualitativas$estrato)
colnames(tabla) <- c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
tabla
##               
##                Estrato3 Estrato4 Estrato5 Estrato6
##   Zona Centro       105       14        4        1
##   Zona Norte        572      407      769      172
##   Zona Oeste         54       84      290      770
##   Zona Oriente      340        8        2        1
##   Zona Sur          382     1616     1685     1043
Sep procede a realizar una pureba chi cuadrado
chisq.test(tabla)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 3830, df = 12, p-value <0.0000000000000002

Donde el p.valor es menor a 0.05

resultados_ac <- CA(tabla)

De acuerdo a la imagen, podemos evidenciar que, El estrato 6 se encuentra ubicado en la Zona Oeste los estratos 4 y 5 están ubicados principalmente en la Zona Sur y Norte, el estrato 3 está presente en las Zonas Oriente y Centro.

valores_prop <-resultados_ac$eig ; valores_prop
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1    0.32215                 69.966                             69.97
## dim 2    0.12745                 27.680                             97.65
## dim 3    0.01084                  2.354                            100.00
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
  ylab("Porcentaje de varianza explicado") + xlab("Ejes")

#### De acuerdo a la tabla y la imagen, podemos observar que con la primer componente podemos obtener alrededor del 70% de la variabilidad, por lo cual, solo con esta componente es suficente realizar este proceso.

2.3 Corespondencia seleccionada

afcm <- MCA(viviendacualitativas, graph = FALSE)        
afcm
## **Results of the Multiple Correspondence Analysis (MCA)**
## The analysis was performed on 8319 individuals, described by 3 variables
## *The results are available in the following objects:
## 
##    name              description                       
## 1  "$eig"            "eigenvalues"                     
## 2  "$var"            "results for the variables"       
## 3  "$var$coord"      "coord. of the categories"        
## 4  "$var$cos2"       "cos2 for the categories"         
## 5  "$var$contrib"    "contributions of the categories" 
## 6  "$var$v.test"     "v-test for the categories"       
## 7  "$var$eta2"       "coord. of variables"             
## 8  "$ind"            "results for the individuals"     
## 9  "$ind$coord"      "coord. for the individuals"      
## 10 "$ind$cos2"       "cos2 for the individuals"        
## 11 "$ind$contrib"    "contributions of the individuals"
## 12 "$call"           "intermediate results"            
## 13 "$call$marge.col" "weights of columns"              
## 14 "$call$marge.li"  "weights of rows"
eig.val<-get_eigenvalue(afcm)
eig.val
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1     0.5621           21.078                       21.08
## Dim.2     0.4531           16.992                       38.07
## Dim.3     0.3796           14.237                       52.31
## Dim.4     0.3334           12.504                       64.81
## Dim.5     0.3233           12.124                       76.94
## Dim.6     0.2718           10.192                       87.13
## Dim.7     0.2014            7.551                       94.68
## Dim.8     0.1419            5.322                      100.00
fviz_screeplot(afcm, addlabels = TRUE)

Con este grafico y con la tabla podemos observar que con 5 componentes o dimensiones podemos seleccionar5 dimensiones, ya que con estos tendriamos el 76.94% de la variabilidad de los datos.

fviz_mca_biplot(afcm,ggtheme = theme_minimal())

fviz_mca_var(afcm, axes = c(1, 2), col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             repel = TRUE, # Avoid text overlapping
             ggtheme = theme_minimal())

se puede observar que para los estratos 4,5 y 6 se estan contruyendo mas apartamentos en las zonas Oeste y Sur, mientras que en el estrato 3 se ven mas casas y estas estan ubicadas en la zona norte, oriente y centro.

3. Conclusiones

1. Para el PCA se pudo concluir que con solo dos componentes se puede realizar el estudio, obteniendo el 71.8% de la variabilidad de los datos. Ademas con el grafico podemos observar que la cantidad de baños, area construida y cantidad de habitaciones tienen mas representatividad en una componente,mientras que el precio y la cantidad de parqueaderos tiene más representantividad en la otra.

2. Para el k-means, se pudo establecer por medio de la metodologia de codo que es suficiente con 4 grupos poder establecer o clasificar los datos y por medio el k-means se pudo lograr clasificar estos grupos con gran eficiencia.

3. Para el analisis de correspondencia, se realizo una simple y una multiple, donde se pudo evidenciar en la simple que de acuerdo a la imagen, podemos evidenciar que, El estrato 6 se encuentra ubicado en la Zona Oeste los estratos 4 y 5 están ubicados principalmente en la Zona Sur y Norte,el estrato 3 está presente en las Zonas Oriente y Centro.

4, Y para el multiple se pudo evidenciar por medio del grafico y con la tabla podemos observar que con 5 componentes o dimensiones podemos seleccionar 5 dimensiones, ya que con estos tendriamos el 76.94% de la variabilidad de los datos y para las primeras dos dimensiones se puede observar que para los estratos 4,5 y 6 se estan contruyendo mas apartamentos en las zonas Oeste y Sur, mientras que en el estrato 3 se ven mas casas y estas estan ubicadas en la zona norte, oriente y centro.