library(paqueteMODELOS)
data(vivienda)
vivienda$barrio <- gsub("á", "a", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("Ã", "i", vivienda$barrio)
vivienda$barrio <- gsub("ó", "o", vivienda$barrio)
vivienda$barrio <- gsub("ú", "u", vivienda$barrio)
vivienda$barrio <- gsub("é", "e", vivienda$barrio)
vivienda$barrio <- gsub("√∫", "u", vivienda$barrio)
vivienda$barrio <- gsub("\\^\\[", "", vivienda$barrio)
vivienda$barrio <- gsub("ñ", "gn", vivienda$barrio)
Se realiza la limpieza de los datos eliminando los caracteres que generaban error en la generacion del documento PDF con Rmarkdown
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
se realiza la revision de la estructura de los datos a traves de la funcion str() lo que nos permite visualizar las caracteristicas de la Data y determinar el tipo de operaciones y modificaciones necesarias para el analisis.
Se realiza la verificacion de los datos faltantes a traves de la funcion md.pattern dela libreria mice evidenciando que los datos con mayor desviacion son:
Para ajustar estos datos se debe implementar alguna tecnica de imputacion debido a que los datos faltantes corresponden a mas de un 30% de los datos lo que resulta inconveniente para el analisis, NOTA: la eleiminacion de estos datos no se recomienda.
## <style>body { font-size: 9px; }</style>
## Length Class Mode
## 8322 character character
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 1.000 2.000 1.835 2.000 10.000 1605
## 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 : num [1:8322] NA NA NA 2 1 1 1 1 2 2 ...
## $ 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>
A traves de una visualizacion grafica de las variables parqueaderos y piso se identifica que sus valores tienden a concentrarse al rededor de la mediana, siendo este valor una opcion adecuada para la correccion de los faltantes en el Data Frame.
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
En este paso se realiza la verificacion de la imputacion realizada en el paso anterior a traves de la funcion md.pattern en las vaiables parqueaderos y piso, evidenciando que el proceso fue exitoso, adicionalmente se realiza la eliminacion de los faltantes en el resto de las variables los cuales no alcanzan el 1% de los datos totales.
## piso estrato preciom areaconst parqueaderos banios
## [1,] -0.6772734 -0.6578315 -0.07388895 0.8208022 1.1413446 1.37212934
## [2,] -1.0597114 0.3408636 -0.51100887 -0.5699215 -0.8326103 -0.77917165
## [3,] -1.0597114 0.3408636 -0.57345457 -0.5918803 -0.8326103 -0.06207132
## [4,] -1.0597114 -0.6578315 -0.63590027 -0.8480663 0.1543672 -0.77917165
## [5,] -1.0597114 0.3408636 -0.35489461 -0.2259004 0.1543672 -0.06207132
## [6,] -0.6772734 0.3408636 -0.32367176 -0.1307456 0.1543672 0.65502901
## habitaciones
## [1,] -0.3961809
## [2,] -0.3961809
## [3,] -0.3961809
## [4,] -0.3961809
## [5,] 0.3182519
## [6,] 1.7471176
## Standard deviations (1, .., p=7):
## [1] 1.8699555 1.1702201 0.8959166 0.7584549 0.5898464 0.4826117 0.4184473
##
## Rotation (n x k) = (7 x 7):
## PC1 PC2 PC3 PC4 PC5
## piso 0.08897705 0.58494458 -0.76296982 -0.24450640 0.05944531
## estrato -0.29181828 0.56060634 0.24666932 0.52184370 -0.23262665
## preciom -0.46993068 0.23710770 0.09633391 -0.01824488 0.31331925
## areaconst -0.45949089 -0.16377192 -0.05649717 -0.07743996 0.70061727
## parqueaderos -0.39560468 0.08271122 0.24185428 -0.75606986 -0.42035232
## banios -0.46727406 -0.04657713 -0.21330158 0.24907637 -0.27838804
## habitaciones -0.31640220 -0.50150623 -0.49047741 0.16698887 -0.31483584
## PC6 PC7
## piso -0.04194667 -0.0521855
## estrato -0.41963948 -0.1928304
## preciom 0.15004714 0.7698369
## areaconst -0.20080406 -0.4708197
## parqueaderos -0.12436362 -0.1198261
## banios 0.72365159 -0.2660402
## habitaciones -0.46922152 0.2462465
La estandarizacion de la data permite que todas las variables se encuentren en una misma escala para su interpretacion y analisis, para esta estandarizacion se utiliza la funcion scale sobre las variables de la columna 2 a la columna 11 y definiendo que dentro de estas solo se consideren las de tipo numerico para el proceso, se visualizan una muestra de 6 observaciones utilizando la funcion head y se procede a realizar la generacion de componentes principales con la funcion prcomp obteniendo 7 PC donde:
El PC1 explica: 46.9% preciom, 46.7% banios, 45.9% areaconst y 39.5% parqueaderos
El PC2 explica: 58.49% piso, 56% estrato y 50.1% habitaciones
El PC3 explica: 76.29% piso y 49% habitaciones
En esta seccion del analisis se evaluan el comportamiento de los
componentes principales a traves de los valores propios (eigenvalues)
los cuales representan la varianza explicada de cada componente
principal, teniendo clara esta representacion de varianza se determina
cuales componentes principales utilizariamos para el analisis, dicho
esto y teniendo en cuenta que los componentes principales 1, 2 y 3
representan mas del 70% de la informacion estos serian
los que se tendrian en cuenta para el analisis de contribuciones.
En el analisis de contribuciones se puede evidenciar que las variables que contribuyen en mayor proporcion a los componentes principales 1 y 2 son:
Mayor contribucion en PC1: preciom, areaconst y banios
Mayor contribucion en PC2: estrato y habitaciones
Al observar la grafica de dispersion se puede asociar que los componentes principales del caso2 contibuyen en mayor proporcion con la Dim1 de la poblacion total a diferencia de los compponentes principales del caso1 que se relacionan en mayor proporcion con la Dim2 de la poblacion total.
Al realizar el analisis agrupado por zona se puede interpretar que las variables precio y estrato tienen mayor relacion con los componentes principales de de la poblacion de viviendas en la Zona Oeste y que la mayor proporcion de viviendas de toda las observaciones corresponde a la Zona Sur, sin embargo la variable estrato esta mayor mente relacionada con la Dim2.
## 1 2 3 4 5
## 2 1.45780186
## 3 1.49841172 0.06619407
## 4 1.76095958 0.30489730 0.26368676
## 5 1.08376680 0.37778592 0.42627428 0.68268188
## 6 0.98378589 0.47746274 0.52443938 0.78232702 0.10014639
Para realizar un analisis mas detallado se genera un data frame agrupado por las variables preciom y areaconst y se toma una muestra con la funcion head, se realiza el calculo de las distancias euclidianas entre las variables del nuevo DF aplicando la fucion dist, evidenciando que las parejas de observaciones (3,2), (4,3) y (6,5) son significativamente similares, lo que sugiere que el precio de las viviendas esta directamente relacionado con el area contruida, caso contrario al de las parejas (2,1), (3,1), (4,1) y (5,1) las cuales presentan diferencias grandes, lo que sugiere que el precio no esta directamente relacionado con el area contruida es posible que este relacionado con otra variable como la la Zona o el barrio por ejemplo.
##
## Call:
## hclust(d = dist_viv, method = "complete")
##
## Cluster method : complete
## Distance : euclidean
## Number of objects: 6
## Coeficiente de Silhouette promedio k=4 : 0.5138083
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 5000 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## tipo barrio longitud latitud
## 5000 1 1 1 1 0
## 0 0 0 0 0
##
## 3 4 5 6
## Zona Centro 54 6 0 0
## Zona Norte 277 198 451 67
## Zona Oeste 34 54 162 455
## Zona Oriente 180 6 2 0
## Zona Sur 231 1071 1108 644
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.31595996 67.29432 67.29432
## dim 2 0.13690106 29.15769 96.45201
## dim 3 0.01665851 3.54799 100.00000