Lo primero que haremos es revisar el contenido y consistencia del dataset
## preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808 1 1 1 1 1 1 1 1 1 1
## 1909 1 1 1 1 1 1 1 1 1 1
## 876 1 1 1 1 1 1 1 1 1 1
## 726 1 1 1 1 1 1 1 1 1 1
## 1 1 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0
## 2 3 3 3 3 3 3 3 3 3
## latitud parqueaderos piso
## 4808 1 1 1 0
## 1909 1 1 0 1
## 876 1 0 1 1
## 726 1 0 0 2
## 1 0 0 0 12
## 2 0 0 0 13
## 3 1605 2638 4275
faltantes <- colSums(is.na(vivienda))
faltantes
## id zona piso estrato preciom areaconst
## 3 3 2638 3 2 3
## parqueaderos banios habitaciones tipo barrio longitud
## 1605 3 3 3 3 3
## latitud
## 3
#limpiando el dataset de los registros que tienen nulos en la mayoria de atributos
Viv1 <- subset(vivienda, !is.na(id))
#en el campo Parqueaderos hay NA, podriamos transformar esto en cero para evitar errores
Viv1$parqueaderos[is.na(Viv1$parqueaderos)] <- 0
md.pattern(Viv1)
## id zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## 5684 1 1 1 1 1 1 1 1 1
## 2635 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## barrio longitud latitud piso
## 5684 1 1 1 1 0
## 2635 1 1 1 0 1
## 0 0 0 2635 2635
#Es mejor eliminar los registros que tienen mas de 2 atributos en nulo ya que no representan una gran cantidad de elementos dentro del dataset
summary(Viv1)
## id zona piso estrato
## Min. : 1 Length:8319 Length:8319 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 0.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 1.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.482 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8319 Length:8319 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
El campo parqueaderos tiene valores de 1 a 10 y valores nulos; piso tiene valores en texto que, incluso, quieren dar a entender que no hay datos. Se podrian omitir estos campos ya que la cantidad de registros que hay con valores nulos en alguno de estos dos campos es representativo frente al total, aunque se podria imputar el valor del campo parqueadero teniendo en cuenta la moda obtenida tomando al campo barrio como referencia; esto podriamos aplicarlo en otra opcion de desarrollo del ejercicio, por ahora, no tendremos en cuenta los campos parqueadero y piso, algunas variables categorias podrian normalizarse para luego tratar de hacer una codificacion.
## Rows: 8,319
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, 0, 3, 2, 2, 1, 4, 2, 2, 2, …
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "casa", "casa", "casa", "casa", "apartamento", "apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
#ver valores unicos en campos categoricos
Viv1_zona <- unique(Viv1$zona)
print(Viv1_zona)
## [1] "Zona Oriente" "Zona Sur" "Zona Norte" "Zona Oeste" "Zona Centro"
Viv1_estrato <- unique(Viv1$estrato)
print(Viv1_estrato)
## [1] 3 4 5 6
Viv1_tipo <- unique(Viv1$tipo)
print(Viv1_tipo)
## [1] "casa" "apartamento"
Viv1_piso <- unique(Viv1$piso)
print(Viv1_piso)
## [1] NA "02" "01" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12"
#Utiliza la función unique() para obtener los valores únicos en la columna 'barrio'
valores_unicos_barrio <- unique(Viv1$barrio)
num_valores_unicos_barrio <- length(valores_unicos_barrio)
print(num_valores_unicos_barrio)
## [1] 407
Hay 407 valores unicos para barrio, no podria encodificarse de manera adecuada mediante onehot. Ante esto, deberiamos seleccionar los valores numericos unicamente y codificar las variables categorias que comprenden pocos valores unicos (zona, estrato, tipo). El campo piso parece estar asociado al tipo de vivienda ‘apartamento’, pero esto no es corroborable.
#Codificación one-hot para las variables 'zona', 'estrato' y 'tipo'
Viv1_codificado <- dummy_cols(Viv1, select_columns = c("zona", "estrato", "tipo"))
head(Viv1_codificado)
## # A tibble: 6 × 24
## 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
## # ℹ 15 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # `zona_Zona Centro` <int>, `zona_Zona Norte` <int>, `zona_Zona Oeste` <int>,
## # `zona_Zona Oriente` <int>, `zona_Zona Sur` <int>, estrato_3 <int>,
## # estrato_4 <int>, estrato_5 <int>, estrato_6 <int>, tipo_apartamento <int>,
## # tipo_casa <int>
Seleccionar solo las variables numéricas relevantes para el PCA y las variables codificadas one-hot:
Viv1_numeric <- select(Viv1_codificado, -id, -barrio, -piso, -parqueaderos, -zona, -tipo, -longitud, -latitud, -estrato)
head(Viv1_numeric)
## # A tibble: 6 × 15
## preciom areaconst banios habitaciones `zona_Zona Centro` `zona_Zona Norte`
## <dbl> <dbl> <dbl> <dbl> <int> <int>
## 1 250 70 3 6 0 0
## 2 320 120 2 3 0 0
## 3 350 220 2 4 0 0
## 4 400 280 5 3 0 0
## 5 260 90 2 3 0 1
## 6 240 87 3 3 0 1
## # ℹ 9 more variables: `zona_Zona Oeste` <int>, `zona_Zona Oriente` <int>,
## # `zona_Zona Sur` <int>, estrato_3 <int>, estrato_4 <int>, estrato_5 <int>,
## # estrato_6 <int>, tipo_apartamento <int>, tipo_casa <int>
Estandariza los datos:
## preciom areaconst banios habitaciones zona_Zona Centro
## [1,] -0.5595498 -0.7339949 -0.07793773 1.6406840 -0.1230015
## [2,] -0.3465670 -0.3842568 -0.77811479 -0.4147626 -0.1230015
## [3,] -0.2552886 0.3152194 -0.77811479 0.2703863 -0.1230015
## [4,] -0.1031580 0.7349051 1.32241640 -0.4147626 -0.1230015
## [5,] -0.5291236 -0.5940997 -0.77811479 -0.4147626 -0.1230015
## [6,] -0.5899759 -0.6150839 -0.07793773 -0.4147626 -0.1230015
## zona_Zona Norte zona_Zona Oeste zona_Zona Oriente zona_Zona Sur estrato_3
## [1,] -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## [2,] -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## [3,] -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## [4,] -0.5477324 -0.4101397 -0.2098712 0.8718779 -0.4599968
## [5,] 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## [6,] 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## estrato_4 estrato_5 estrato_6 tipo_apartamento tipo_casa
## [1,] -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## [2,] -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## [3,] -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## [4,] 1.7050275 -0.7026704 -0.5601475 -1.2586312 1.2586312
## [5,] -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184
## [6,] -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184
Aplica PCA:
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.9605 1.5881 1.4172 1.2408 1.09968 1.01008 0.91720
## Proportion of Variance 0.2562 0.1681 0.1339 0.1026 0.08062 0.06802 0.05608
## Cumulative Proportion 0.2562 0.4244 0.5583 0.6609 0.74152 0.80954 0.86562
## PC8 PC9 PC10 PC11 PC12 PC13
## Standard deviation 0.81440 0.73204 0.63193 0.49345 0.41678 3.608e-15
## Proportion of Variance 0.04422 0.03573 0.02662 0.01623 0.01158 0.000e+00
## Cumulative Proportion 0.90984 0.94556 0.97219 0.98842 1.00000 1.000e+00
## PC14 PC15
## Standard deviation 2.573e-15 4.587e-16
## Proportion of Variance 0.000e+00 0.000e+00
## Cumulative Proportion 1.000e+00 1.000e+00
Mostrar la proporción de varianza explicada por cada componente
## [1] 2.562355e-01 1.681375e-01 1.338916e-01 1.026371e-01 8.061939e-02
## [6] 6.801746e-02 5.608412e-02 4.421620e-02 3.572546e-02 2.662214e-02
## [11] 1.623317e-02 1.158035e-02 8.678875e-31 4.413774e-31 1.402993e-32
Eleccion del numero de componentes principales:
En el resultado de la grafica, los tres primeros componentes explican mas del 50% de las variaciones (57,6%). El grafico muestra los dos primeros componentes principales que explican el 25,3% y el 19,7% de la varianza total de los datos, respectivamente. En conjunto, estos dos componentes principales explican el 45% de la varianza total, lo que puede ser considerado como una cantidad aceptable de variabilidad explicada.
Tomaremos los primeros dos componentes principales para analizar los resultados:
El grafico muestra los dos primeros componentes principales que explican el 25,3% y el 19,7% de la varianza total de los datos, respectivamente. En conjunto, estos dos componentes principales explican el 45% de la varianza total, lo que puede ser considerado como una cantidad aceptable de variabilidad explicada.
En el grafico de Variables - PCA se puede interpretar que las variables que tienen una fuerte relacion entre si, son aquellas asociadas al tamano y espacios con los que cuenta la vivienda (habitaciones, areaconst, banios); las casas son las que cuentan con mas influencia sobre ambos componentes principales. El vector Estrato es el que se consideraria mas importante al explicar la varianza total de los datos, al igual que el tipo de vivienda Casa y Tipo Apartamento.
pca_viv1 = dudi.pca(df = Viv1_numeric, nf = 15, scannf = FALSE)
pca_viv1$eig
## [1] 3.8435329 2.5220626 2.0083742 1.5395560 1.2092908 1.0202619 0.8412618
## [8] 0.6632429 0.5358819 0.3993321 0.2434975 0.1737053
pca_viv1$eig/15*100
## [1] 25.623553 16.813751 13.389161 10.263707 8.061939 6.801746 5.608412
## [8] 4.421620 3.572546 2.662214 1.623317 1.158035
inertia.dudi(pca_viv1,col.inertia = TRUE)
## Inertia information:
## Call: inertia.dudi(x = pca_viv1, col.inertia = TRUE)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 3.8435 3.844 25.62
## Ax2 2.5221 6.366 42.44
## Ax3 2.0084 8.374 55.83
## Ax4 1.5396 9.914 66.09
## Ax5 1.2093 11.123 74.15
## Ax6 1.0203 12.143 80.95
## Ax7 0.8413 12.984 86.56
## Ax8 0.6632 13.648 90.98
## Ax9 0.5359 14.183 94.56
## Ax10 0.3993 14.583 97.22
## Ax11 0.2435 14.826 98.84
## Ax12 0.1737 15.000 100.00
##
## Column contributions (%):
## preciom areaconst banios habitaciones
## 6.667 6.667 6.667 6.667
## zona_Zona Centro zona_Zona Norte zona_Zona Oeste zona_Zona Oriente
## 6.667 6.667 6.667 6.667
## zona_Zona Sur estrato_3 estrato_4 estrato_5
## 6.667 6.667 6.667 6.667
## estrato_6 tipo_apartamento tipo_casa
## 6.667 6.667 6.667
##
## Column absolute contributions (%):
## Axis1 Axis2 Axis3 Axis4 Axis5 Axis6
## preciom 13.953073 10.74732 5.196e-01 0.017036 0.177710 4.264e-03
## areaconst 18.714605 0.17689 4.643e-04 0.420414 0.834587 1.989e-02
## banios 17.768723 2.00330 2.052e-01 0.488748 0.265569 2.363e-02
## habitaciones 12.623967 4.11650 5.250e-02 0.051613 0.008601 1.604e-02
## zona_Zona Centro 0.084337 2.21688 1.066e+00 1.596936 0.549005 8.123e+01
## zona_Zona Norte 0.580615 3.19982 1.016e+01 15.067633 31.700714 6.196e-01
## zona_Zona Oeste 0.158413 12.95560 1.251e+01 1.345269 0.435921 6.936e-02
## zona_Zona Oriente 0.231275 8.82476 4.683e+00 6.101184 13.336119 1.758e+01
## zona_Zona Sur 0.009965 0.29178 4.032e+01 1.364537 7.064570 4.025e-04
## estrato_3 0.096700 17.14313 1.149e+01 4.697806 4.216718 3.443e-02
## estrato_4 1.900046 0.49994 1.246e+01 10.600564 29.456633 1.605e-01
## estrato_5 0.084213 0.03465 1.256e+00 51.283503 10.948629 1.848e-01
## estrato_6 4.031281 17.68334 3.354e+00 6.962515 0.005699 5.267e-02
## tipo_apartamento 14.881395 10.05304 9.607e-01 0.001121 0.499762 1.065e-03
## tipo_casa 14.881395 10.05304 9.607e-01 0.001121 0.499762 1.065e-03
## Axis7 Axis8 Axis9 Axis10 Axis11 Axis12
## preciom 1.400e+00 0.01178 5.2791 8.41952 3.855077 55.61514
## areaconst 1.969e-04 0.38807 4.3701 43.06617 8.436196 23.57246
## banios 2.477e-01 12.71436 0.5562 6.25150 48.377228 11.09782
## habitaciones 4.404e+00 32.42243 14.8798 3.12823 22.047933 6.24876
## zona_Zona Centro 3.086e-01 1.20314 8.6180 0.67258 0.003198 0.01080
## zona_Zona Norte 7.321e+00 0.73283 0.4084 0.61918 0.025546 0.03615
## zona_Zona Oeste 3.366e+01 7.03946 10.6294 0.52123 0.007630 0.16686
## zona_Zona Oriente 3.760e+00 2.47440 34.4229 1.83171 0.017150 0.01243
## zona_Zona Sur 7.471e+00 0.06037 1.7740 0.82353 0.001206 0.01166
## estrato_3 6.712e+00 0.18691 14.8998 13.49109 7.305519 0.18641
## estrato_4 1.449e+01 0.69914 2.1261 0.69896 0.581909 0.50798
## estrato_5 4.520e+00 0.18705 1.3408 0.03977 0.014828 0.10652
## estrato_6 1.548e+01 0.58302 0.4454 15.25927 9.321845 2.17260
## tipo_apartamento 1.113e-01 20.64852 0.1250 2.58862 0.002368 0.12721
## tipo_casa 1.113e-01 20.64852 0.1250 2.58862 0.002368 0.12721
##
## Signed column relative contributions:
## Axis1 Axis2 Axis3 Axis4 Axis5 Axis6
## preciom -53.6291 27.1054 -1.044e+00 0.026228 -0.214903 4.350e-03
## areaconst -71.9302 0.4461 -9.325e-04 0.647251 -1.009259 -2.029e-02
## banios -68.2947 5.0524 4.121e-01 0.752454 -0.321151 -2.411e-02
## habitaciones -48.5206 -10.3821 1.054e-01 0.079461 0.010401 -1.636e-02
## zona_Zona Centro -0.3242 -5.5911 -2.141e+00 -2.458572 0.663906 8.287e+01
## zona_Zona Norte 2.2316 -8.0701 -2.041e+01 23.197465 -38.335382 -6.322e-01
## zona_Zona Oeste -0.6089 32.6748 -2.513e+01 -2.071117 0.527156 7.076e-02
## zona_Zona Oriente -0.8889 -22.2566 -9.406e+00 -9.393115 16.127247 -1.794e+01
## zona_Zona Sur -0.0383 0.7359 8.097e+01 -2.100781 8.543120 -4.107e-04
## estrato_3 0.3717 -43.2360 -2.307e+01 -7.232535 5.099238 3.513e-02
## estrato_4 7.3029 -1.2609 2.503e+01 -16.320161 -35.621635 -1.637e-01
## estrato_5 0.3237 0.0874 2.523e+00 78.953825 13.240076 1.885e-01
## estrato_6 -15.4944 44.5985 -6.736e+00 -10.719181 0.006891 -5.374e-02
## tipo_apartamento 57.1971 25.3544 -1.929e+00 -0.001727 0.604358 -1.087e-03
## tipo_casa -57.1971 -25.3544 1.929e+00 0.001727 -0.604358 1.087e-03
## Axis7 Axis8 Axis9 Axis10 Axis11 Axis12
## preciom -1.178e+00 -0.007813 2.82896 3.36219 0.9387016 9.660644
## areaconst 1.656e-04 -0.257381 2.34184 17.19771 -2.0541929 -4.094661
## banios 2.084e-01 -8.432712 -0.29806 -2.49643 11.7797355 -1.927750
## habitaciones 3.705e+00 -21.503950 -7.97382 -1.24920 -5.3686172 1.085442
## zona_Zona Centro 2.596e-01 -0.797973 4.61822 -0.26858 -0.0007787 -0.001876
## zona_Zona Norte -6.159e+00 -0.486045 0.21884 -0.24726 -0.0062204 0.006279
## zona_Zona Oeste 2.831e+01 4.668874 -5.69611 0.20815 0.0018579 -0.028984
## zona_Zona Oriente 3.163e+00 -1.641130 18.44662 -0.73146 0.0041759 0.002159
## zona_Zona Sur -6.285e+00 -0.040037 -0.95067 0.32886 0.0002937 0.002026
## estrato_3 -5.647e+00 -0.123965 -7.98456 5.38743 1.7788759 0.032380
## estrato_4 1.219e+01 -0.463700 1.13933 0.27912 0.1416934 0.088238
## estrato_5 3.803e+00 0.124061 0.71849 -0.01588 -0.0036107 0.018503
## estrato_6 -1.303e+01 0.386683 0.23870 -6.09352 -2.2698462 -0.377392
## tipo_apartamento -9.359e-02 -13.694984 0.06698 1.03372 -0.0005766 -0.022097
## tipo_casa 9.359e-02 13.694984 -0.06698 -1.03372 0.0005766 0.022097
##
## Cumulative sum of column relative contributions (%):
## Axis1 Axis1:2 Axis1:3 Axis1:4 Axis1:5 Axis1:6 Axis1:7
## preciom 53.6291 80.7345 81.778 81.80 82.02 82.02 83.20
## areaconst 71.9302 72.3763 72.377 73.02 74.03 74.05 74.05
## banios 68.2947 73.3471 73.759 74.51 74.83 74.86 75.07
## habitaciones 48.5206 58.9027 59.008 59.09 59.10 59.11 62.82
## zona_Zona Centro 0.3242 5.9153 8.056 10.51 11.18 94.05 94.31
## zona_Zona Norte 2.2316 10.3018 30.712 53.91 92.24 92.88 99.04
## zona_Zona Oeste 0.6089 33.2837 58.413 60.48 61.01 61.08 89.40
## zona_Zona Oriente 0.8889 23.1455 32.551 41.94 58.07 76.01 79.17
## zona_Zona Sur 0.0383 0.7742 81.748 83.85 92.39 92.39 98.68
## estrato_3 0.3717 43.6077 66.679 73.91 79.01 79.05 84.69
## estrato_4 7.3029 8.5638 33.590 49.91 85.53 85.70 97.89
## estrato_5 0.3237 0.4111 2.934 81.89 95.13 95.32 99.12
## estrato_6 15.4944 60.0929 66.829 77.55 77.55 77.61 90.63
## tipo_apartamento 57.1971 82.5515 84.481 84.48 85.09 85.09 85.18
## tipo_casa 57.1971 82.5515 84.481 84.48 85.09 85.09 85.18
## Axis1:8 Axis1:9 Axis1:10 Axis1:11 Axis1:12 Axis13:12
## preciom 83.21 86.04 89.40 90.34 100 1.332e-13
## areaconst 74.31 76.65 93.85 95.91 100 -1.887e-12
## banios 83.50 83.80 86.29 98.07 100 6.206e-12
## habitaciones 84.32 92.30 93.55 98.91 100 9.170e-12
## zona_Zona Centro 95.11 99.73 100.00 100.00 100 -8.193e-12
## zona_Zona Norte 99.52 99.74 99.99 99.99 100 -1.221e-11
## zona_Zona Oeste 94.06 99.76 99.97 99.97 100 -1.270e-11
## zona_Zona Oriente 80.82 99.26 99.99 100.00 100 1.480e-11
## zona_Zona Sur 98.72 99.67 100.00 100.00 100 1.164e-11
## estrato_3 84.82 92.80 98.19 99.97 100 -2.731e-12
## estrato_4 98.35 99.49 99.77 99.91 100 -5.063e-12
## estrato_5 99.24 99.96 99.98 99.98 100 -1.532e-11
## estrato_6 91.02 91.26 97.35 99.62 100 -8.926e-12
## tipo_apartamento 98.88 98.94 99.98 99.98 100 -3.775e-13
## tipo_casa 98.88 98.94 99.98 99.98 100 -4.219e-13
En el resultado de este analisis de PCA, se puede observar que hay una contribucion mayoritaria de 6 variables para el PC1: preciom, areaconst, banios, tipo_apartamento, tpo_casa. Para el componente PC2, se resalta el aporte de variables como estrato_3, estrato_6 y zona oeste.
Como resultado del analisis de este PCA podriamos decir que:
El precio aumenta a medida que el area construida aumenta, lo que daria espacio para mayor cantidad de habitaciones y banios. Las tipologias ‘Casa’ son las que mayor area construida tienen, lo cual va de la mano con la posibilidad de aumentar los espacios dentro de la vivienda. Ahora, las viviendas de estrato 6 en su mayoria se encuentran ubicadas en la Zona Oeste y son de tipo apartamento en su mayoria. Por otro lado, las casas tienden a pertenecer en gran medida a hogares estrato 3, ubicados mayoritariamente en la zona Oriente.
Se seleccionaran 4 casos extremos para corroborar el analisis y el sentido de los ejes:
## preciom areaconst banios habitaciones zona_Zona Centro
## Vivienda 5484 1600 1600.00 6 6 0
## Vivienda 8219 140 50.00 1 2 0
## Vivienda 6602 1801 244.59 5 3 0
## Vivienda 8237 239 270.00 3 8 0
## zona_Zona Norte zona_Zona Oeste zona_Zona Oriente zona_Zona Sur
## Vivienda 5484 0 0 0 1
## Vivienda 8219 0 1 0 0
## Vivienda 6602 0 1 0 0
## Vivienda 8237 0 0 1 0
## estrato_3 estrato_4 estrato_5 estrato_6 tipo_apartamento
## Vivienda 5484 0 0 0 1 0
## Vivienda 8219 0 1 0 0 1
## Vivienda 6602 0 0 0 1 1
## Vivienda 8237 1 0 0 0 0
## tipo_casa
## Vivienda 5484 1
## Vivienda 8219 0
## Vivienda 6602 0
## Vivienda 8237 1
La vivienda 5484 tiene un precio por metro cuadrado de 1600, en cambio la vivienda 8219 tiene un precio muy inferior (140). Lo mismo ocurre con el area construida (1600m2 vs 50m2), la cantidad de banios y habitaciones tambien es contrastante y, esto, a pesar de que ambas viviendas estan dentro de la misma zona; ademas, la vivienda 5484 es estrato 6, la 8219 es estrato 4.
En la otra direccion encontramos que las viviendas 6602 y 8237 tienen area m2 similar (244.59 y 270); sin embargo, la primera es de estrato 6, ubicada en la zona oeste y la segunda es estrato 3, ubicada en la zona oriente. La diferencia en precio es considerable: mientras que la primera cuesta 1801, la segunda cuesta 239. Sin embargo, aunque la primera tiene 5 banios, la segunda tiene 5 habitaciones mas que la primera. Ademas, la primera es de tipo apartamento, la segunda es de tipo casa.
En este grafico se observa que la vivienda 183 presenta relacion con el estrato 6, mientras que la vivienda 326 presenta relacion con el estrato 3. Esto muestra el sentido en que aumentan los valores del primer componente principal.
La vivienda 5863 es de tipo Casa, mientras que la vivienda 841 es de tipo Apartamento, lo que demuestra el sentido en que aumentan los valores en el segundo componente principal.
Ahora, podriamos probar con un ejercicio de entrenamiento sin tomar en cuenta las variables categoricas; sin embargo, solo quedarian pocas variables a considerar, tales como preciom, areaconst, banios, habitaciones y realmente considero que las variables categoricas nos ayudan a obtener un mejor analisis.
Prepararemos una copia del conjunto de datos procesado para realizar el analisis de conglomerados:
## # A tibble: 6 × 15
## preciom areaconst banios habitaciones `zona_Zona Centro` `zona_Zona Norte`
## <dbl> <dbl> <dbl> <dbl> <int> <int>
## 1 250 70 3 6 0 0
## 2 320 120 2 3 0 0
## 3 350 220 2 4 0 0
## 4 400 280 5 3 0 0
## 5 260 90 2 3 0 1
## 6 240 87 3 3 0 1
## # ℹ 9 more variables: `zona_Zona Oeste` <int>, `zona_Zona Oriente` <int>,
## # `zona_Zona Sur` <int>, estrato_3 <int>, estrato_4 <int>, estrato_5 <int>,
## # estrato_6 <int>, tipo_apartamento <int>, tipo_casa <int>
## preciom areaconst banios habitaciones zona_Zona Centro
## 1 -0.5595498 -0.7339949 -0.07793773 1.6406840 -0.1230015
## 2 -0.3465670 -0.3842568 -0.77811479 -0.4147626 -0.1230015
## 3 -0.2552886 0.3152194 -0.77811479 0.2703863 -0.1230015
## 4 -0.1031580 0.7349051 1.32241640 -0.4147626 -0.1230015
## 5 -0.5291236 -0.5940997 -0.77811479 -0.4147626 -0.1230015
## 6 -0.5899759 -0.6150839 -0.07793773 -0.4147626 -0.1230015
## zona_Zona Norte zona_Zona Oeste zona_Zona Oriente zona_Zona Sur estrato_3
## 1 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 2 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 3 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 4 -0.5477324 -0.4101397 -0.2098712 0.8718779 -0.4599968
## 5 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## 6 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## estrato_4 estrato_5 estrato_6 tipo_apartamento tipo_casa
## 1 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## 2 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## 3 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312
## 4 1.7050275 -0.7026704 -0.5601475 -1.2586312 1.2586312
## 5 -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184
## 6 -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184
Procesaremos las distancias euclidianas, de Manhattan y Minkowski
#Distancias euclidianas
dist_euclidiana <- dist(Viv2_scaled, method = "euclidean")
#Distancias de Manhattan
dist_manhattan <- dist(Viv2_scaled, method = "manhattan")
#Distancias de Minkowski (con p = 3 como ejemplo)
dist_minkowski <- dist(Viv2_scaled, method = "minkowski", p = 3)
Se revisan los datos conforme a la cantidad de variables incluidas en el analisis
round(as.matrix(dist_euclidiana)[1:19,1:15], 2)
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 1 0.00 2.21 1.89 7.04 7.42 7.38 7.47 7.24 6.53 7.30 7.74 7.09 7.07 7.74 6.71
## 2 2.21 0.00 0.98 6.84 7.09 7.13 7.16 7.16 6.93 6.90 8.13 7.24 7.50 7.22 6.87
## 3 1.89 0.98 0.00 6.79 7.19 7.22 7.28 7.15 6.78 6.76 7.80 7.00 7.28 7.36 6.76
## 4 7.04 6.84 6.79 0.00 5.85 5.65 5.04 5.60 5.01 4.82 5.40 3.51 5.04 5.96 3.63
## 5 7.42 7.09 7.19 5.85 0.00 0.70 3.14 1.04 3.85 3.94 6.58 5.40 4.88 3.33 4.83
## 6 7.38 7.13 7.22 5.65 0.70 0.00 3.21 0.80 3.66 3.92 6.26 5.19 4.54 3.42 4.69
## 7 7.47 7.16 7.28 5.04 3.14 3.21 0.00 3.34 4.99 5.18 6.77 4.55 5.88 3.49 3.77
## 8 7.24 7.16 7.15 5.60 1.04 0.80 3.34 0.00 3.29 3.72 5.88 4.89 4.12 3.59 4.47
## 9 6.53 6.93 6.78 5.01 3.85 3.66 4.99 3.29 0.00 3.04 4.52 3.69 2.01 5.33 3.31
## 10 7.30 6.90 6.76 4.82 3.94 3.92 5.18 3.72 3.04 0.00 4.72 3.72 3.11 4.89 3.85
## 11 7.74 8.13 7.80 5.40 6.58 6.26 6.77 5.88 4.52 4.72 0.00 3.70 3.55 5.88 4.45
## 12 7.09 7.24 7.00 3.51 5.40 5.19 4.55 4.89 3.69 3.72 3.70 0.00 3.40 5.58 1.54
## 13 7.07 7.50 7.28 5.04 4.88 4.54 5.88 4.12 2.01 3.11 3.55 3.40 0.00 5.94 3.56
## 14 7.74 7.22 7.36 5.96 3.33 3.42 3.49 3.59 5.33 4.89 5.88 5.58 5.94 0.00 5.06
## 15 6.71 6.87 6.76 3.63 4.83 4.69 3.77 4.47 3.31 3.85 4.45 1.54 3.56 5.06 0.00
## 16 6.62 6.79 6.66 4.71 3.62 3.42 4.85 3.11 0.83 2.27 4.34 3.44 1.87 5.02 3.19
## 17 6.70 6.67 6.67 4.67 3.37 3.16 4.64 3.04 1.48 2.26 4.71 3.69 2.27 4.72 3.23
## 18 7.44 7.18 7.25 4.65 3.21 3.14 0.86 3.21 4.80 4.88 6.21 4.01 5.42 3.48 3.41
## 19 7.43 7.09 7.17 5.82 0.39 0.84 3.19 1.03 3.84 3.76 6.47 5.30 4.76 3.26 4.76
Se aplica el conglomerado tomando en cuenta la distancia euclidiana y el metodo ‘Complete’
hc_Viv2 <- hclust(dist_euclidiana, method = 'complete')
Se determina a dónde pertenece cada observación
cluster_assigments <- cutree(hc_Viv2, k = 4)
Se asignan los clusters
## preciom areaconst banios habitaciones zona_Zona Centro
## 1 -0.5595498 -0.7339949 -0.07793773 1.6406840 -0.1230015
## 2 -0.3465670 -0.3842568 -0.77811479 -0.4147626 -0.1230015
## 3 -0.2552886 0.3152194 -0.77811479 0.2703863 -0.1230015
## 4 -0.1031580 0.7349051 1.32241640 -0.4147626 -0.1230015
## 5 -0.5291236 -0.5940997 -0.77811479 -0.4147626 -0.1230015
## 6 -0.5899759 -0.6150839 -0.07793773 -0.4147626 -0.1230015
## zona_Zona Norte zona_Zona Oeste zona_Zona Oriente zona_Zona Sur estrato_3
## 1 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 2 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 3 -0.5477324 -0.4101397 4.7642550 -1.1468118 2.1736669
## 4 -0.5477324 -0.4101397 -0.2098712 0.8718779 -0.4599968
## 5 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## 6 1.8254895 -0.4101397 -0.2098712 -1.1468118 -0.4599968
## estrato_4 estrato_5 estrato_6 tipo_apartamento tipo_casa cluster
## 1 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312 1
## 2 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312 1
## 3 -0.5864303 -0.7026704 -0.5601475 -1.2586312 1.2586312 1
## 4 1.7050275 -0.7026704 -0.5601475 -1.2586312 1.2586312 1
## 5 -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184 1
## 6 -0.5864303 1.4229714 -0.5601475 0.7944184 -0.7944184 1
A partir del grafico de puntos anterior, se puede observar una gran cantidad de viviendas concentradas en el cluster 1, donde se evidencia una fuerte relacion entre esas dos variables. El cluster 3 y 4 se presentan una baja conglomeracion, lo que supondria una baja relacion entre el area y el precio. No hay una interpretacion clara para el dendograma.
Revisemos la relacion entre preciom y habitaciones:
En este caso, el cluster 2 tiene gran influencia respecto al impacto en precio de la vivienda, mientras que el cluster 1 esta mas asociado a las viviendas con un precio inferior.
Ahora, observemos el comportamiento entre preciom y estrato 6:
Revisando con el estrato 6, vemos que aquellos que hacen parte del cluster 1 no tienen una influencia tan representativa en cuanto al precio en comparacion con aquellas viviendas que estan identificadas como estrato 6.
Ahora, tomemos como base el preciom y el nu
Se tomara una muestra de la base de datos de vivienda, para luego
convertir la variable estrato en tipo factor
## id zona estrato preciom areaconst parqueaderos banios habitaciones tipo
## 2753 1 1 1 1 1 1 1 1 1
## 1247 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## barrio longitud latitud piso
## 2753 1 1 1 1 0
## 1247 1 1 1 0 1
## 0 0 0 1247 1247
## Warning in mean.default(Viv3$piso): argument is not numeric or logical:
## returning NA
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
##
## Estrato3 Estrato4 Estrato5 Estrato6
## 58 1 0 0 0
## 62 1 0 0 0
## 65 1 0 0 0
## 70 4 0 0 0
## 72 1 0 0 0
## 75 3 0 0 0
## Warning in chisq.test(TableDataCorresp): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: TableDataCorresp
## X-squared = 4059.3, df = 1233, p-value < 2.2e-16
El análisis de la prueba de chi-cuadrado revela una asociación altamente significativa entre las dos variables presentes en la tabla de contingencia. Esto implica una relación clara entre el precio de la vivienda (preciom) y el estrato socioeconómico (estrato).
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.5674619 55.91684 55.91684
## dim 2 0.2826001 27.84699 83.76382
## dim 3 0.1647699 16.23618 100.00000
De la tabla, se puede apreciar que la mayor parte de la varianza se encuentra explicada o representada en la dimensión 1 (dim 1). Con un valor propio de 56.92%, esta dimensión explica aproximadamente el 56.74% de la varianza total en los datos. La dimensión 2 (dim 2) tiene un valor propio de 28.26%, lo que corresponde a alrededor del 27.84% de la varianza total. Mientras que la dimensión 3 (dim 3) presenta un valor propio de 16.47%, explicando cerca del 16.23% de la varianza total. El porcentaje acumulado de varianza aumenta progresivamente con cada dimensión, alcanzando el 100% en la última dimensión. Esto indica que todas las dimensiones en conjunto explican la totalidad de la varianza presente en los datos.
Los resultados muestran que el primer componente resume el 55.9% y los dos primeros componentes prepresentados en el plano factorial, mientras que los dos primeros ejes resumen un 83.7% de los datos