## 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>
## [1] 8322
Se valida el numero de datos faltantes (NA) por cada atributo, se puede observar que los campos parqueaderos y piso son los que mƔs datos NA tienen,tambiƩn se evidencian que existen tres registros que no tienen datos completos
## 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
se decide eliminar las columnas piso y parqueaderos, por la gran cantidad de datos faltantes que se presentan.
Se puede observar que en su gran mayorĆa los (3) registros NA hacen falta para todos los campos
## ID Columna
## 1 8320 id
## 2 8321 id
## 3 8322 id
## 4 8320 zona
## 5 8321 zona
## 6 8322 zona
Se imprime los registros de las filas 8320, 8321 y 8322 con datos NA
## # A tibble: 3 Ć 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 NA <NA> <NA> NA NA NA NA NA NA
## 2 NA <NA> <NA> NA NA NA NA NA NA
## 3 NA <NA> <NA> NA 330 NA NA NA NA
## # ā¹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Se realiza una copia del data set y se decide eliminar las columnas parqueaderos, barrio y piso del dataset
## [1] "id" "zona" "piso" "estrato" "preciom"
## [6] "areaconst" "parqueaderos" "banios" "habitaciones" "tipo"
## [11] "barrio" "longitud" "latitud"
## [1] "Se eliminan las columnas id, piso, parqueaderos y barrio"
## [1] "zona" "estrato" "preciom" "areaconst" "banios"
## [6] "habitaciones" "tipo" "longitud" "latitud"
Se define eliminar los registros número 8320, 8321 y 8322 debido a que no contienen información relevante
## # A tibble: 8,319 Ć 9
## zona estrato preciom areaconst banios habitaciones tipo longitud latitud
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 Zona Or⦠3 250 70 3 6 Casa -76.5 3.43
## 2 Zona Or⦠3 320 120 2 3 Casa -76.5 3.43
## 3 Zona Or⦠3 350 220 2 4 Casa -76.5 3.44
## 4 Zona Sur 4 400 280 5 3 Casa -76.5 3.44
## 5 Zona No⦠5 260 90 2 3 Apar⦠-76.5 3.46
## 6 Zona No⦠5 240 87 3 3 Apar⦠-76.5 3.37
## 7 Zona No⦠4 220 52 2 3 Apar⦠-76.5 3.43
## 8 Zona No⦠5 310 137 3 4 Apar⦠-76.5 3.38
## 9 Zona No⦠5 320 150 4 6 Casa -76.5 3.48
## 10 Zona No⦠5 780 380 3 3 Casa -76.5 3.49
## # ā¹ 8,309 more rows
Se vuelve a revisar la cantidad de datos faltantes por cada columna
## zona estrato preciom areaconst banios habitaciones
## 0 0 0 0 0 0
## tipo longitud latitud
## 0 0 0
Se mira la cantidad de datos que existen por cada una de las zonas y verificación de NA en el atributo
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1920 1198 351 4726
## [1] "Valores NA: 0"
Se realiza el tratamiento de los datos categóricos de la siguiente manera: 1= Zona centro, 2 = Zona Norte, 3 = Zona Oeste, 4 = Zona Oriente y 5 = Zona Sur
##
## 1 2 3 4 5
## 124 1920 1198 351 4726
Se realiza la validación del tratamiento de las variables categóricas
##
## 3 4 5 6
## 1453 2129 2750 1987
## [1] "Valores NA: 0"
Se evalúa el tipo de vivienda, para posteriormente hacer el tratamiento de asignar valores numéricos
##
## Apartamento Casa
## 5100 3219
## [1] "Valores NA: 0"
Se asigna el valor 1 = Apartamento y 2 = Casa a la variable tipo de vivienda, se imprime el consolidado de valores por cada tipo, para verificar que se mantengan al valor anterior
##
## 1 2
## 5100 3219
Se imprime la inforamción de cada variable del dataset para verificar que las acciones se realizaron de manera correcta
## spc_tbl_ [8,319 Ć 9] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ zona : num [1:8319] 4 4 4 5 2 2 2 2 2 2 ...
## $ estrato : num [1:8319] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8319] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8319] 70 120 220 280 90 87 52 137 150 380 ...
## $ banios : num [1:8319] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8319] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : num [1:8319] 2 2 2 2 1 1 1 1 2 2 ...
## $ longitud : num [1:8319] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8319] 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 el escalado de los datos numƩricos, para que todos estƩn en le mismo rango.
## zona estrato preciom areaconst banios habitaciones
## [1,] 0.06192582 -1.5872276 -0.5595498 -0.7339949 -0.07793773 1.6406840
## [2,] 0.06192582 -1.5872276 -0.3465670 -0.3842568 -0.77811479 -0.4147626
## [3,] 0.06192582 -1.5872276 -0.2552886 0.3152194 -0.77811479 0.2703863
## [4,] 0.81508501 -0.6156201 -0.1031580 0.7349051 1.32241640 -0.4147626
## [5,] -1.44439256 0.3559875 -0.5291236 -0.5940997 -0.77811479 -0.4147626
## [6,] -1.44439256 0.3559875 -0.5899759 -0.6150839 -0.07793773 -0.4147626
## tipo longitud latitud
## [1,] 1.2586312 0.9728466 0.3793708
## [2,] 1.2586312 0.9331875 0.3763219
## [3,] 1.2586312 0.7607566 0.4225243
## [4,] 1.2586312 -0.6549016 0.4070454
## [5,] -0.7944184 0.8682385 0.9678065
## [6,] -0.7944184 0.6670691 -1.1242009
Se realiza la validación grÔfica de datos NA
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## zona estrato preciom areaconst banios habitaciones tipo longitud latitud
## 8319 1 1 1 1 1 1 1 1 1 0
## 0 0 0 0 0 0 0 0 0 0
Al buscar la correlación entre las variables se puede observar que las variables que mÔs se encuentran correlacionadas corresponde a zona con latitud, con un 0,73 pero no es suficiente par determinar eliminar una de las dos.
## zona estrato preciom areaconst banios
## zona 1.000000000 0.11097057 0.0160982 0.007948296 0.07754447
## estrato 0.110970570 1.00000000 0.6098066 0.274323323 0.42032178
## preciom 0.016098198 0.60980664 1.0000000 0.687351963 0.66914558
## areaconst 0.007948296 0.27432332 0.6873520 1.000000000 0.64841648
## banios 0.077544475 0.42032178 0.6691456 0.648416477 1.00000000
## habitaciones 0.021593137 -0.07137615 0.2640912 0.516912916 0.58990641
## tipo 0.054034190 -0.11453194 0.2564593 0.547249986 0.43561976
## longitud -0.167422502 -0.44414040 -0.3435882 -0.173742834 -0.24956975
## latitud -0.739099266 -0.22749944 -0.1156676 -0.051887809 -0.13003729
## habitaciones tipo longitud latitud
## zona 0.021593137 0.05403419 -0.167422502 -0.73909927
## estrato -0.071376147 -0.11453194 -0.444140396 -0.22749944
## preciom 0.264091206 0.25645935 -0.343588223 -0.11566757
## areaconst 0.516912916 0.54724999 -0.173742834 -0.05188781
## banios 0.589906412 0.43561976 -0.249569746 -0.13003729
## habitaciones 1.000000000 0.54678569 -0.008002016 0.02125096
## tipo 0.546785694 1.00000000 0.073830687 -0.05408973
## longitud -0.008002016 0.07383069 1.000000000 0.23606961
## latitud 0.021250965 -0.05408973 0.236069614 1.00000000
En el siguiente grÔfico se puede observar la correlación entre
variables con semaforización entre la correlación, se puede evidenciar
que el valor mÔs alto de correlación se encuentra entre los datos
latitud y zona
## AnÔlisis de Componentes Principales Se aplica la función prComp para
realizar el anƔlisis de componentes principales a la matriz de
información y se imprime la deviación estÔndar de cada una de las
variables por cada componente y la matriz con los pesos de que tiene
cada variables por cada componente principal
## Standard deviations (1, .., p=9):
## [1] 1.8347462 1.4002295 1.2191142 0.8123222 0.7105738 0.5897252 0.5000643
## [8] 0.4877765 0.4315969
##
## Rotation (n x k) = (9 x 9):
## PC1 PC2 PC3 PC4 PC5
## zona -0.1039128 0.46160974 0.529879527 -0.06085689 -0.08127881
## estrato -0.2881892 0.36083340 -0.413960783 -0.27239017 -0.15563926
## preciom -0.4503065 0.06302816 -0.284707150 -0.28225695 0.12111328
## areaconst -0.4563141 -0.17950165 -0.008166894 -0.13665127 0.32229223
## banios -0.4758968 -0.07822991 -0.029021949 -0.01432887 -0.40706722
## habitaciones -0.3303414 -0.34041186 0.272546761 0.34278802 -0.55496085
## tipo -0.3032353 -0.33119340 0.364806191 0.01769321 0.55895396
## longitud 0.2165372 -0.36405755 0.250848152 -0.83123667 -0.25188242
## latitud 0.1439009 -0.50625605 -0.442274728 0.12157748 -0.03270963
## PC6 PC7 PC8 PC9
## zona 0.16445169 0.605774385 0.30069031 0.024795871
## estrato -0.48517221 0.324612088 -0.39915405 -0.129898782
## preciom 0.26799466 -0.087280869 0.19590413 0.707133973
## areaconst 0.54470506 0.102417051 -0.27075343 -0.506402790
## banios -0.18645511 -0.280263670 0.59107261 -0.371444342
## habitaciones 0.05079719 0.112360741 -0.42932256 0.275144131
## tipo -0.57498497 0.087267050 0.04496676 0.110850842
## longitud -0.01760455 0.008833188 -0.05324314 0.005197961
## latitud 0.02784482 0.640851745 0.31628152 -0.006253762
Se hace uso de la función fviz_eig de la libreria āfactoextraā para visualizar los valores propios (eigenvalues) resultantes de un anĆ”lisis de componentes principales PCA, el resultado nos muestra que en los tres primeros componentes podemos obtener un 75,5% de los datos, en este caso se ve la importancia de poder obtener los tres primeros componentes principales
### AnƔlisis de las componentes principales Se realiza un anƔlisis de
las componentes principales, se indica con la proporción acumulativa que
con los tres primeros componentes obtenemos un 75% de la variabilidad de
los datos.
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.835 1.4002 1.2191 0.81232 0.7106 0.58973 0.50006
## Proportion of Variance 0.374 0.2178 0.1651 0.07332 0.0561 0.03864 0.02778
## Cumulative Proportion 0.374 0.5919 0.7570 0.83034 0.8864 0.92508 0.95287
## PC8 PC9
## Standard deviation 0.48778 0.4316
## Proportion of Variance 0.02644 0.0207
## Cumulative Proportion 0.97930 1.0000
En la grƔfica de las variables en el plano de los componentes principales se puede evidenciar que que las variables destacadas en el primer componente principal corresponden a banio, area construido y precio, en el segundo y tercer componente principal las variables que resaltan son zona y latitud,
PAra el anƔlisis de congolomerados se toma las siguientes variables del dataset: Zona, estrato, preciom, areaconst, banios, habitaciones y tipo,se crea un nuevo data frame con estas variables, estos datos se encuentran estandarizados en la variable vivienda_scaled
## zona estrato preciom areaconst banios habitaciones
## 1 0.06192582 -1.5872276 -0.5595498 -0.7339949 -0.07793773 1.6406840
## 2 0.06192582 -1.5872276 -0.3465670 -0.3842568 -0.77811479 -0.4147626
## 3 0.06192582 -1.5872276 -0.2552886 0.3152194 -0.77811479 0.2703863
## 4 0.81508501 -0.6156201 -0.1031580 0.7349051 1.32241640 -0.4147626
## 5 -1.44439256 0.3559875 -0.5291236 -0.5940997 -0.77811479 -0.4147626
## 6 -1.44439256 0.3559875 -0.5899759 -0.6150839 -0.07793773 -0.4147626
Para determinar el número de cluster, se usa el método del codo para
determinar que el nĆŗmero de clusters en 2 agrupaciones, se hace uso del
algoritmo kmeans para el anƔlisis del clustes y se usa el mƩtodo de suma
de cuadrados wss dentro del cluster (Within-cluster sum of squares, wss)
### Visualización de resultados Se aplica el método no jerÔrquico de
agrupamiento Kmeans con dos agrupaciones y 200 iteraciones,
posteriormente se grafica las dos agrupaciones
### Validación de resultados Se calcula el coeficiente de silueta para
evaluar la calidad de los clusters obtenidos mediante el algoritmo
Kmeans, en este caso el coeficiente de Silhouette promedio con k=2 es de
0.35, al estar el valor cercano a cero, podemos inducir que la
observaciones estĆ”n cerca del lĆmite entre clusters, por otro lado el
promedio de todos los coeficientes de siluta individuales es cercano a
1.12, lo que sugiere que en promedio la observaciones estƔn
relativamente bien observadas a sus clusters
## Coeficiente de Silhouette promedio k=2 : 0.3453832
## [1] 1.115128
Para realizar el anÔlisis de correspondencia, se realiza una copia del dataframe a un nuevo dataset eligiendo las variables tipo, zona y barrio, se procede a realizar la estandarización de la columna barrio, para ello se procede a pasar a minúscula los valores y se determina la frecuencia para determinar las acciones a realizar
## Freq % Valid % Valid Cum. % Total % Total Cum.
## 20 de julio 3 0.03606203 0.03606203 0.03604903 0.03604903
## 3 de julio 1 0.01202068 0.04808270 0.01201634 0.04806537
## acopi 158 1.89926674 1.94734944 1.89858207 1.94664744
## agua blanca 1 0.01202068 1.95937012 0.01201634 1.95866378
## aguablanca 2 0.02404135 1.98341147 0.02403268 1.98269647
## aguacatal 109 1.31025364 3.29366510 1.30978130 3.29247777
Se observan datos que hacen referencia al mismo barrio pero que se encuentran escritos con alguna variación, por lo tanto se cambian algunos caracteres extraños que se presentan en el contenido de la variable asà como realizar algunos ajustes sobre los nombres de algunos barrios.
## Freq % Valid % Valid Cum. % Total % Total Cum.
## 20 de julio 3 0.03606203 0.03606203 0.03604903 0.03604903
## 3 de julio 1 0.01202068 0.04808270 0.01201634 0.04806537
## acopi 158 1.89926674 1.94734944 1.89858207 1.94664744
## agua blanca 3 0.03606203 1.98341147 0.03604903 1.98269647
## aguacatal 109 1.31025364 3.29366510 1.30978130 3.29247777
## alameda 16 0.19233081 3.48599591 0.19226148 3.48473925
Este anƔlisis se realiza entre las dos variables tipo y zona, se analiza la cantidad de tipos de vivienda y la cantidad que existe por cada zona
##
## Apartamento Casa
## 5100 3219
##
## Apartamento Casa
## Zona Centro 24 100
## Zona Norte 1198 722
## Zona Oeste 1029 169
## Zona Oriente 62 289
## Zona Sur 2787 1939
Se realiza la prueba chi-cuadrado entre las variables tipo, zona y barrio, en el resultado se puede observar que probabilidad observada, p-value es menor que 2.2e-16, lo que indica que hay una asociación significativa entre las variables categóricas zona, tipo y barrio.
## Warning in chisq.test(contingency_table): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: contingency_table
## X-squared = 3280503, df = 3235702, p-value < 2.2e-16
Se realiza la grƔfica del resultado del anƔlisis de correspondencia
entre las tres variables.
## AnƔlisis de correspondencia entre variables zona y tipo Se
seleccionan las variables zona y tipo para realizar anƔlisis de
correspondencia y se grafica los resultados del anƔlisis
## AnƔlisis de correspondencia entre variables zona y barrio Se
seleccionan las variables zona y barrio para realizar anƔlisis de
correspondencia y se grafica los resultados de dicho anƔlisis