En este documento se plantea realizar un análisis holístico de las viviendas y residencias ubicadas en la ciudad de Cali, este análisis busca identificar patrones particulares en los datos entregados por la empresa y así poder tomar mejores decisiones respecto a la compra y venta de las mismas. El documento plantea inicialmente 3 secciones, una donde se realizará una limpieza y preprocesamiento de los datos, seguida por un análisis de componentes principales (PCA), ´posteriormente se llevará a cabo un análisis de conglomerados con el fin de identificar patrones en los datos para finalizar con un análisis de correspondencia para identificar posibles relaciones entre variables categóricas.
La sección de limpieza de datos permite hacer una purificación de la información con el fin de obtener los resultados más precisos y un análisis mucho más acertado. En total el dataset inicial cuenta con 8322 filas que estan constituidas por 13 columnas, a continuación se presenta un pequeño resumen de aquellas variables que constituyen el dataset.
| Nombre | Tipo de variable | Descripción |
|---|---|---|
| id | Numérica | Identificador de cada registro |
| zona | Caractér | Indica la zona en la que se ubica el predio en la ciudad de Cali |
| piso | Caractér | Representa el piso en que se ubica el apartamento |
| estrato | Caractér | Muestra el estrato socioeconónomico del predio |
| preciom | Numérica | Representa el precio en millones de pesos del inmueble |
| areaconst | Numérica | Representa el área del inmueble en metros cuadrados |
| parquea | Caractér | Indica el número de parqueaderos que tiene el predio |
| banios | Caractér | Expone el número de baños en el inmueble |
| habitac | Caractér | Indica el número de habitaciones del inmueble |
| tipo | Caractér | Indica el tipo de inmueble, ya sea Casa o Apartamento |
| barrio | Caractér | Muestra el barrio donde se ubica el predio |
| longitud | Numérica | Representa la longitud geográfica del predio |
| latitud | Numérica | Representa la latitud geográfica del predio |
En esta etapa se pretende que los datos de cada una de las columnas evaluadas tenga concordancia con el resto de valores, de esta manera,por ejemplo, aquellos datos que estan en mayúscula puedan convertirse en minúncula para tener una data estandarizada. En este caso se puede ver que ninguno de los atributos presenta datos mal escritos o repetidos además de los barrios que poseen una serie de nombres que pueden pertenecer al mismo barrio pero están mal escritos.
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1920 1198 351 4726
##
## Apartamento Casa
## 5100 3219
##
## 3 4 5 6
## 1453 2129 2750 1987
##
## 01 02 03 04 05 06 07 08 09 10 11 12
## 860 1450 1097 607 567 245 204 211 146 130 84 83
##
## 0 1 2 3 4 5 6 7 8 9 10
## 66 59 926 4097 1729 679 318 173 138 83 51
Con base en lo anterior se realiza la normalización de algunos barrios donde se encontraron errores en su escritura.
Además durante el proceso se decidió cambiar el nombre de las variables con el fin de que estos sean mas descriptivos, además, a pesar de que algunas de las variables son numéricas como el estrato, baños, y habitaciones, para este estudio se tomaran como variables cualitativas con las que después se realizarán analisis categóricos.
Durante la depuración de la información, se debe realizar la identificación y posterior desarrollo de datos faltantes. Inicialmente se identificaron las siguientes cantidades de datos faltantes que se ven identificados en el diagrama a continucación:
## id Zona Piso Estrato Precio_Mill_COP
## 3 3 2638 3 2
## Area_m2 Parqueadero Banos Habitaciones Tipo
## 3 1605 3 3 3
## Barrio Longitud Latitud
## 96 3 3
Teniendo en cuenta la cantidad de datos faltantes existentes en el dataset, se puede apreciar que la mayoría de estos se encuentran en las variables “Piso” y “Parqueadero”. A pesar de que son variables que pueden ser importantes al momento de definir si un predio tiene mayor o menor valor, se decidió descartar las columnas debido a la inmensa cantidad de datos faltantes en piso y parqueadero del valor de 2,638 y 1,605 respectivamente, lo cual afectaría el dataset en una gran cantidad de datos representativos si se decide eliminar todos los registros con datos faltantes.Los demás registros que les hacia falta datos, en este caso un total de 96 que non tenian el barrio, se optó por eliminar dichos registros ya que esto no afectaría de manera significativa la base de datos.
## id Zona Estrato Precio_Mill_COP Area_m2
## 0 0 0 0 0
## Banos Habitaciones Tipo Barrio Longitud
## 0 0 0 0 0
## Latitud
## 0
Inicialmente se realizará un proceso en que se volverá numéricas las variables categóricas. Particularmente se le realizará one hot encoding, proceso en que se realiza una matriz donde por cada registro se va a catalogar de manera binaria si pertenece a la etiqueta del atributo, por ejemplo para el tipo de apartamento se agregará 2 columnas, una con apartamento y otra con casa, de esta manera si el registro es un apartamento pondrá 1 en esta columna y 0 en la de casa.
#install.packages("fastDummies")
library(fastDummies)
## Thank you for using fastDummies!
## To acknowledge our work, please cite the package:
## Kaplan, J. & Schlegel, B. (2023). fastDummies: Fast Creation of Dummy (Binary) Columns and Rows from Categorical Variables. Version 1.7.1. URL: https://github.com/jacobkap/fastDummies, https://jacobkap.github.io/fastDummies/.
#Codificación one-hot para las variables 'Zona', 'Estrato' y 'Tipo'
data_codificado = dummy_cols(data_Depurada, select_columns = c("Zona", "Estrato", "Tipo"))
head(data_codificado)
## # A tibble: 6 × 22
## id Zona Estrato Precio_Mill_COP Area_m2 Banos Habitaciones Tipo Barrio
## <dbl> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr>
## 1 1147 Zona Or… 3 250 70 3 6 Casa 20 de…
## 2 1169 Zona Or… 3 320 120 2 3 Casa 20 de…
## 3 1350 Zona Or… 3 350 220 2 4 Casa 20 de…
## 4 5992 Zona Sur 4 400 280 5 3 Casa 3 de …
## 5 1212 Zona No… 5 260 90 2 3 Apar… acopi
## 6 1724 Zona No… 5 240 87 3 3 Apar… acopi
## # ℹ 13 more variables: 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>
Se eliminan aquellas variables que no se buscan análizar en el proceso de PCA como las variables categóricas que no está codificadas.
#Selecciona solo las variables numéricas relevantes para el PCA y las variables codificadas one-hot
data_numerico = select(data_codificado, -id, -Barrio, -Zona, -Tipo, -Longitud, -Latitud, -Estrato)
head(data_numerico)
## # A tibble: 6 × 15
## Precio_Mill_COP Area_m2 Banos Habitaciones `Zona_Zona Centro`
## <dbl> <dbl> <chr> <chr> <int>
## 1 250 70 3 6 0
## 2 320 120 2 3 0
## 3 350 220 2 4 0
## 4 400 280 5 3 0
## 5 260 90 2 3 0
## 6 240 87 3 3 0
## # ℹ 10 more variables: `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>
Se realiza un proceso de cambio de tipo de dato con el fin de que el programa pueda reconocer los baños y las habitaciones como numéricos siendo estos en el dataset original strings.
data_numerico$Banos = as.integer(data_numerico$Banos)
data_numerico$Habitaciones = as.integer(data_numerico$Habitaciones)
str(data_numerico)
## tibble [8,226 × 15] (S3: tbl_df/tbl/data.frame)
## $ Precio_Mill_COP : num [1:8226] 250 320 350 400 260 240 220 310 320 780 ...
## $ Area_m2 : num [1:8226] 70 120 220 280 90 87 52 137 150 380 ...
## $ Banos : int [1:8226] 3 2 2 5 2 3 2 3 4 3 ...
## $ Habitaciones : int [1:8226] 6 3 4 3 3 3 3 4 6 3 ...
## $ Zona_Zona Centro : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Zona_Zona Norte : int [1:8226] 0 0 0 0 1 1 1 1 1 1 ...
## $ Zona_Zona Oeste : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Zona_Zona Oriente: int [1:8226] 1 1 1 0 0 0 0 0 0 0 ...
## $ Zona_Zona Sur : int [1:8226] 0 0 0 1 0 0 0 0 0 0 ...
## $ Estrato_3 : int [1:8226] 1 1 1 0 0 0 0 0 0 0 ...
## $ Estrato_4 : int [1:8226] 0 0 0 1 0 0 1 0 0 0 ...
## $ Estrato_5 : int [1:8226] 0 0 0 0 1 1 0 1 1 1 ...
## $ Estrato_6 : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Tipo_Apartamento : int [1:8226] 0 0 0 0 1 1 1 1 0 0 ...
## $ Tipo_Casa : int [1:8226] 1 1 1 1 0 0 0 0 1 1 ...
## - 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>
## - attr(*, "na.action")= 'omit' Named int [1:96] 311 312 313 314 315 433 434 1866 3133 3134 ...
## ..- attr(*, "names")= chr [1:96] "311" "312" "313" "314" ...
## - attr(*, ".internal.selfref")=<externalptr>
Igualmente, se realiza un proceso de escalado, esto para evitar que la dispersión y rangos de los datos puedan afectar al análisis de las componentes, por esta razón se realiza un esclado numérico.
## Precio_Mill_COP Area_m2 Banos Habitaciones Zona_Zona Centro
## [1,] -0.5579213 -0.7339603 -0.0779430 1.6459789 -0.1237053
## [2,] -0.3449187 -0.3831278 -0.7786633 -0.4153998 -0.1237053
## [3,] -0.2536319 0.3185373 -0.7786633 0.2717264 -0.1237053
## [4,] -0.1014871 0.7395363 1.3234976 -0.4153998 -0.1237053
## [5,] -0.5274923 -0.5936273 -0.7786633 -0.4153998 -0.1237053
## [6,] -0.5883502 -0.6146772 -0.0779430 -0.4153998 -0.1237053
## Zona_Zona Norte Zona_Zona Oeste Zona_Zona Oriente Zona_Zona Sur Estrato_3
## [1,] -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## [2,] -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## [3,] -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## [4,] -0.5425662 -0.4108253 -0.2088982 0.8663106 -0.4565485
## [5,] 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## [6,] 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## Estrato_4 Estrato_5 Estrato_6 Tipo_Apartamento Tipo_Casa
## [1,] -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## [2,] -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## [3,] -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## [4,] 1.6948546 -0.7059037 -0.5568155 -1.2550946 1.2550946
## [5,] -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558
## [6,] -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558
Una vez se tiene lista la base de datos con la información a usar, se procede a realizar el PCA, en este caso particular, se observa que los 3 primeros componentes ya explican más de la mitad de los datos, el primer componente cuanta con 25.7%, el segundo 16.8% y el tercer componente el 13.4%, en total se estaría hablando del 55.4% en estos 3 componentes, y 42.5% de las variaciones explicadas en los 2 primeros componentes.
#Aplica PCA
pca_data = prcomp(data_escalado, scale. = FALSE)
#Muestra el resumen del PCA
summary(pca_data)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6 PC7
## Standard deviation 1.9617 1.5893 1.4187 1.2420 1.09803 1.01006 0.91308
## Proportion of Variance 0.2566 0.1684 0.1342 0.1028 0.08038 0.06802 0.05558
## Cumulative Proportion 0.2566 0.4249 0.5591 0.6620 0.74233 0.81035 0.86593
## PC8 PC9 PC10 PC11 PC12 PC13 PC14
## Standard deviation 0.81522 0.73035 0.63056 0.4914 0.4172 3.152e-15 2.06e-15
## Proportion of Variance 0.04431 0.03556 0.02651 0.0161 0.0116 0.000e+00 0.00e+00
## Cumulative Proportion 0.91023 0.94580 0.97230 0.9884 1.0000 1.000e+00 1.00e+00
## PC15
## Standard deviation 9.845e-16
## Proportion of Variance 0.000e+00
## Cumulative Proportion 1.000e+00
# Muestra la proporción de varianza explicada por cada componente
prop_varianza_explicada = pca_data$sdev^2 / sum(pca_data$sdev^2)
prop_varianza_explicada
## [1] 2.565622e-01 1.683822e-01 1.341713e-01 1.028387e-01 8.037825e-02
## [6] 6.801500e-02 5.558088e-02 4.430601e-02 3.556062e-02 2.650706e-02
## [11] 1.609582e-02 1.160197e-02 6.623925e-31 2.828498e-31 6.461500e-32
#Eleccion del numero de componentes principales
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
##
## Attaching package: 'FactoMineR'
## The following object is masked from 'package:ade4':
##
## reconst
fviz_eig(pca_data, addlabels=TRUE)
La gráfica a continuación muestra el análisis de los 2 primeros componentes, acá se análizan cada uno de los atributos que aglomeran los 2 componentes examinados, uno de 25.7% y el siguiente con 16.8% de la viariación total de los datos para un total de 42.5%. En este gráfico los atributos con colores rojos tiene más influencia en el dataset y en los datos, también se puede apreciar que variables estan asociadas difecta o inversamente dependiendo de la dirección de la flecha.
En esta gráfica se puede ver que el tipo de casa y apartamento son contrarios lo cual es normal ya que son variables complementarias, también se aprecia que la zona Oeste y la Zona Sur estan directamente relacionados con el estrato 6, caso contrario con los estratos 4 y 3. también se puede ver que el numero de habitaciones esta relacionado con el tipo casa, indicando que generalmente las casas tiene un mayor número de habitaciones que los apartamentos. El precio y el área también son variables estrechamente relacionadas indicando que a medida que una aumenta la otra también, además por su color rojo intenso indica que son las variables con mayor contribución al análisis de componentes.
fviz_pca_var(pca_data,
col.var = "contrib",
gradient.cols = c( "#33CCFF", "#FF3300"),
repel = TRUE
)
En este análisis se puede ver cual es el aporte de cada variable, se peude ver que en la componente 1 los pricipales atributos son: el Area en M2, el PRecio del predio, el número de baños y las habitaciones y el tipo de predio, posteriormente para la Componente 2 se observa que la Zona Oeste y el estrato 6 y estrato 3 son los atributos más representativos
pca_data_vivienda = dudi.pca(df = data_numerico, nf = 15, scannf = FALSE)
pca_data_vivienda$eig
## [1] 3.8484328 2.5257324 2.0125693 1.5425811 1.2056737 1.0202250 0.8337132
## [8] 0.6645902 0.5334092 0.3976060 0.2414374 0.1740296
pca_data_vivienda$eig/15*100
## [1] 25.656219 16.838216 13.417129 10.283874 8.037825 6.801500 5.558088
## [8] 4.430601 3.556062 2.650706 1.609582 1.160197
inertia.dudi(pca_data_vivienda,col.inertia = TRUE)
## Inertia information:
## Call: inertia.dudi(x = pca_data_vivienda, col.inertia = TRUE)
##
## Decomposition of total inertia:
## inertia cum cum(%)
## Ax1 3.8484 3.848 25.66
## Ax2 2.5257 6.374 42.49
## Ax3 2.0126 8.387 55.91
## Ax4 1.5426 9.929 66.20
## Ax5 1.2057 11.135 74.23
## Ax6 1.0202 12.155 81.03
## Ax7 0.8337 12.989 86.59
## Ax8 0.6646 13.654 91.02
## Ax9 0.5334 14.187 94.58
## Ax10 0.3976 14.585 97.23
## Ax11 0.2414 14.826 98.84
## Ax12 0.1740 15.000 100.00
##
## Column contributions (%):
## Precio_Mill_COP Area_m2 Banos 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
## Precio_Mill_COP 14.03526 10.44256 0.638655 2.957e-02 0.20994 3.378e-03
## Area_m2 18.67297 0.15157 0.001535 4.274e-01 0.88181 2.133e-02
## Banos 17.81493 1.91192 0.170015 5.280e-01 0.30774 2.344e-02
## Habitaciones 12.49669 4.13260 0.063864 5.284e-02 0.00727 1.210e-02
## Zona_Zona Centro 0.08326 2.26527 1.053688 1.623e+00 0.59196 8.106e+01
## Zona_Zona Norte 0.69779 3.75303 9.436618 1.459e+01 31.50836 6.427e-01
## Zona_Zona Oeste 0.16436 12.66371 13.487867 1.160e+00 0.21949 4.959e-02
## Zona_Zona Oriente 0.21483 8.78739 4.505819 6.046e+00 14.04885 1.773e+01
## Zona_Zona Sur 0.02594 0.46631 39.965112 1.350e+00 7.37792 5.398e-05
## Estrato_3 0.09775 17.33588 11.261712 4.595e+00 4.31793 3.910e-02
## Estrato_4 1.89214 0.42605 12.471844 1.133e+01 29.13860 1.818e-01
## Estrato_5 0.09150 0.03057 1.280857 5.157e+01 10.31918 1.845e-01
## Estrato_6 4.11898 17.46602 3.639625 6.705e+00 0.02257 4.536e-02
## Tipo_Apartamento 14.79680 10.08356 1.011395 1.721e-04 0.52419 1.046e-04
## Tipo_Casa 14.79680 10.08356 1.011395 1.721e-04 0.52419 1.046e-04
## Axis7 Axis8 Axis9 Axis10 Axis11 Axis12
## Precio_Mill_COP 1.468e+00 0.01247 5.7607 7.78539 3.689526 55.92488
## Area_m2 1.032e-04 0.36875 5.1269 42.61324 8.342653 23.39179
## Banos 3.256e-01 12.67869 0.4409 6.29290 48.498123 11.00768
## Habitaciones 5.064e+00 32.86495 14.3746 2.88051 21.959907 6.09078
## Zona_Zona Centro 4.059e-01 0.95075 8.6792 0.78918 0.004057 0.01134
## Zona_Zona Norte 7.794e+00 0.91545 0.5274 0.73342 0.042793 0.03057
## Zona_Zona Oeste 3.261e+01 7.26300 10.9040 0.68203 0.015278 0.15705
## Zona_Zona Oriente 4.063e+00 1.88711 33.8247 2.18155 0.010209 0.01110
## Zona_Zona Sur 7.094e+00 0.09491 1.8155 0.91190 0.003874 0.01369
## Estrato_3 6.726e+00 0.35092 14.2011 14.06970 7.429698 0.20531
## Estrato_4 1.402e+01 0.54597 2.2951 0.62169 0.566958 0.51888
## Estrato_5 4.695e+00 0.28418 1.2608 0.04071 0.013502 0.10823
## Estrato_6 1.562e+01 0.48505 0.2972 15.38467 9.420810 2.27741
## Tipo_Apartamento 5.546e-02 20.64890 0.2459 2.50656 0.001306 0.12564
## Tipo_Casa 5.546e-02 20.64890 0.2459 2.50656 0.001306 0.12564
##
## Signed column relative contributions:
## Axis1 Axis2 Axis3 Axis4 Axis5 Axis6
## Precio_Mill_COP -54.01376 26.3751 -1.28534 4.562e-02 -0.253114 3.447e-03
## Area_m2 -71.86165 0.3828 -0.00309 6.593e-01 -1.063180 -2.176e-02
## Banos -68.55957 4.8290 0.34217 8.145e-01 -0.371035 -2.392e-02
## Habitaciones -48.09267 -10.4378 0.12853 8.150e-02 0.008766 -1.234e-02
## Zona_Zona Centro -0.32041 -5.7215 -2.12062 -2.503e+00 0.713715 8.270e+01
## Zona_Zona Norte 2.68541 -9.4792 -18.99185 2.250e+01 -37.988806 -6.557e-01
## Zona_Zona Oeste -0.63254 31.9852 -27.14527 -1.789e+00 0.264631 5.059e-02
## Zona_Zona Oriente -0.82676 -22.1946 -9.06827 -9.326e+00 16.938329 -1.809e+01
## Zona_Zona Sur -0.09984 1.1778 80.43256 -2.083e+00 8.895367 5.507e-05
## Estrato_3 0.37620 -43.7858 -22.66498 -7.088e+00 5.206009 3.989e-02
## Estrato_4 7.28177 -1.0761 25.10045 -1.747e+01 -35.131640 -1.854e-01
## Estrato_5 0.35213 0.0772 2.57781 7.955e+01 12.441567 1.883e-01
## Estrato_6 -15.85162 44.1145 -7.32500 -1.034e+01 0.027213 -4.627e-02
## Tipo_Apartamento 56.94447 25.4684 -2.03550 -2.655e-04 0.632000 -1.068e-04
## Tipo_Casa -56.94447 -25.4684 2.03550 2.655e-04 -0.632000 1.068e-04
## Axis7 Axis8 Axis9 Axis10 Axis11 Axis12
## Precio_Mill_COP -1.224e+00 -0.00829 3.0728 -3.09552 0.8907895 9.732585
## Area_m2 8.607e-05 -0.24506 2.7347 -16.94328 -2.0142283 -4.070864
## Banos 2.715e-01 -8.42614 -0.2352 2.50209 11.7092594 -1.915661
## Habitaciones 4.222e+00 -21.84172 -7.6675 1.14531 -5.3019423 1.059976
## Zona_Zona Centro 3.384e-01 -0.63186 4.6295 0.31378 -0.0009795 -0.001973
## Zona_Zona Norte -6.498e+00 -0.60840 0.2813 0.29161 -0.0103319 0.005319
## Zona_Zona Oeste 2.719e+01 4.82692 -5.8163 -0.27118 0.0036886 -0.027331
## Zona_Zona Oriente 3.387e+00 -1.25416 18.0424 0.86740 0.0024649 0.001932
## Zona_Zona Sur -5.914e+00 -0.06308 -0.9684 -0.36258 0.0009352 0.002382
## Estrato_3 -5.607e+00 -0.23322 -7.5750 -5.59420 1.7938067 0.035731
## Estrato_4 1.169e+01 -0.36285 1.2242 -0.24719 0.1368849 0.090300
## Estrato_5 3.914e+00 0.18886 0.6725 0.01619 -0.0032599 0.018836
## Estrato_6 -1.302e+01 0.32236 0.1585 6.11704 -2.2745357 -0.396337
## Tipo_Apartamento -4.624e-02 -13.72306 0.1312 -0.99662 -0.0003153 -0.021866
## Tipo_Casa 4.624e-02 13.72306 -0.1312 0.99662 0.0003153 0.021866
##
## Cumulative sum of column relative contributions (%):
## Axis1 Axis1:2 Axis1:3 Axis1:4 Axis1:5 Axis1:6 Axis1:7
## Precio_Mill_COP 54.01376 80.3889 81.674 81.72 81.97 81.98 83.20
## Area_m2 71.86165 72.2445 72.248 72.91 73.97 73.99 73.99
## Banos 68.55957 73.3886 73.731 74.55 74.92 74.94 75.21
## Habitaciones 48.09267 58.5305 58.659 58.74 58.75 58.76 62.98
## Zona_Zona Centro 0.32041 6.0419 8.162 10.67 11.38 94.08 94.42
## Zona_Zona Norte 2.68541 12.1646 31.156 53.66 91.65 92.30 98.80
## Zona_Zona Oeste 0.63254 32.6177 59.763 61.55 61.82 61.87 89.05
## Zona_Zona Oriente 0.82676 23.0213 32.090 41.42 58.35 76.44 79.83
## Zona_Zona Sur 0.09984 1.2776 81.710 83.79 92.69 92.69 98.60
## Estrato_3 0.37620 44.1620 66.827 73.91 79.12 79.16 84.77
## Estrato_4 7.28177 8.3579 33.458 50.93 86.06 86.25 97.94
## Estrato_5 0.35213 0.4293 3.007 82.56 95.00 95.19 99.10
## Estrato_6 15.85162 59.9661 67.291 77.63 77.66 77.71 90.73
## Tipo_Apartamento 56.94447 82.4129 84.448 84.45 85.08 85.08 85.13
## Tipo_Casa 56.94447 82.4129 84.448 84.45 85.08 85.08 85.13
## Axis1:8 Axis1:9 Axis1:10 Axis1:11 Axis1:12 Axis13:12
## Precio_Mill_COP 83.21 86.28 89.38 90.27 100 1.121e-12
## Area_m2 74.24 76.97 93.91 95.93 100 6.106e-13
## Banos 83.64 83.87 86.38 98.08 100 3.109e-12
## Habitaciones 84.83 92.49 93.64 98.94 100 4.652e-12
## Zona_Zona Centro 95.05 99.68 100.00 100.00 100 8.193e-12
## Zona_Zona Norte 99.41 99.69 99.98 99.99 100 6.561e-12
## Zona_Zona Oeste 93.88 99.70 99.97 99.97 100 -1.386e-11
## Zona_Zona Oriente 81.09 99.13 100.00 100.00 100 5.995e-12
## Zona_Zona Sur 98.67 99.63 100.00 100.00 100 5.984e-12
## Estrato_3 85.00 92.58 98.17 99.96 100 -1.017e-11
## Estrato_4 98.30 99.53 99.77 99.91 100 -1.268e-11
## Estrato_5 99.29 99.96 99.98 99.98 100 -1.088e-11
## Estrato_6 91.05 91.21 97.33 99.60 100 1.289e-11
## Tipo_Apartamento 98.85 98.98 99.98 99.98 100 -3.708e-12
## Tipo_Casa 98.85 98.98 99.98 99.98 100 -3.730e-12
De este gráfico donde se expone el PCA permitiendo ver nuevas relaciones entre los datos, en este caso, que la zona Oriente y la zona centro son en su mayoría casas, también que las casas con mayor precio ene strato 6 se encuentran en la zona oeste, En la zona norte se concentra la mayor cantidad de estratos intermedios tipo 3 y 4. Esto además de lo análizado en secciones anteriores.
En el siguiente gráfico se puede apreciar la ubicación en el plano de 2 dimensiones donde se representan las dos principales componentes y la forma en que los registros se complementan con estas componentes. inicialmente vemos que el registro Vivienda 5392 y la Vivienda 3322 tienen precios similares de 1600 y 1800 millones respectivamente, sin embargo estas son contitutivamente diferenets ya que la segunda tiene muchos más metros cuadrados que la primera, adicionalmente la segunda es un apartamento y la otra es una casa ubicados en dos sectores diferentes de la ciudad, particularmente se observa que los predios ubicados en la zona oeste presentan precios mucho ams altos que las demás zonas, y si es apartamento esto contituye un aspecto fundamental para subir el precio, independientemente de si tiene mas o menos baños y habitaciones ya que en este caso un predio con mayor area y número de habitaciones y baños es más barato que uno con menos pero en un mejor sector.
Por otro lado se analizaron la Vivienda 8113 y Vivienda 6276 las cuales están en secrtores opuestos de la segunda dimensión, se peude apreciar que a pesar de sus similitudes en numeros de baños y habitaciones la vivienda 1 presenta un mayor valor poor ser estrato 6 y estar ubicada en la zona oeste que como ya vimos es la zona mas prestigiosa, lo cual es el factor determinante en este caso ya que ambos son apartamentos y su área es relativamente similar.
## Precio_Mill_COP Area_m2 Banos Habitaciones Zona_Zona Centro
## Vivienda 8113 500 138 2 2 0
## Vivienda 5392 1600 1600 6 6 0
## Vivienda 3322 1800 235 3 2 0
## Vivienda 6276 180 100 2 2 1
## Zona_Zona Norte Zona_Zona Oeste Zona_Zona Oriente Zona_Zona Sur
## Vivienda 8113 0 1 0 0
## Vivienda 5392 0 0 0 1
## Vivienda 3322 0 1 0 0
## Vivienda 6276 0 0 0 0
## Estrato_3 Estrato_4 Estrato_5 Estrato_6 Tipo_Apartamento
## Vivienda 8113 0 0 0 1 1
## Vivienda 5392 0 0 0 1 0
## Vivienda 3322 0 0 0 1 1
## Vivienda 6276 1 0 0 0 1
## Tipo_Casa
## Vivienda 8113 0
## Vivienda 5392 1
## Vivienda 3322 0
## Vivienda 6276 0
Análizando los valores extremos en el plano cartesiano, se puede ver como a medida que en el primer componente, indica que entre más a la derecha se observan mayor cantidad de habitaciones y baños, por ende una mayor área del predio, también se puede ver que los de la derecha inferior pueden pertenecer al tipo casa. y estar en otras zonas diferentes a la oeste.también es relevante observar que los estratos 6 se encuentran en la parte superior, mientas que un estrato 3 esta por debajo del eje y del plano analizado, adicionalmente se comprueba que la zona oeste se encuentra en la parte superior y otras zonas estan en la sección inferior ratificando los sentidos de la gráfica.
En esta sección se busca realizar un análisis de posible patrones existentes entre los datos a partir del análisis de las distancias existenets entre los datos, particularmente veremos la distancia euclideana y el método k - means para determinar grupos y clusters entre los datos. Inicialmente se codifican los respectivos atributos tal como se hizo en la sección de PCA y el tipo de dato de naños y habitaciones se dejan como enteros.
#se incluyen vaiables categoricas codificadas
data_numerico_2 = select(data_codificado, -id, -Barrio, -Zona, -Tipo, -Longitud, -Latitud, -Estrato)
data_numerico_2$Banos = as.integer(data_numerico$Banos)
data_numerico_2$Habitaciones = as.integer(data_numerico$Habitaciones)
str(data_numerico_2)
## tibble [8,226 × 15] (S3: tbl_df/tbl/data.frame)
## $ Precio_Mill_COP : num [1:8226] 250 320 350 400 260 240 220 310 320 780 ...
## $ Area_m2 : num [1:8226] 70 120 220 280 90 87 52 137 150 380 ...
## $ Banos : int [1:8226] 3 2 2 5 2 3 2 3 4 3 ...
## $ Habitaciones : int [1:8226] 6 3 4 3 3 3 3 4 6 3 ...
## $ Zona_Zona Centro : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Zona_Zona Norte : int [1:8226] 0 0 0 0 1 1 1 1 1 1 ...
## $ Zona_Zona Oeste : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Zona_Zona Oriente: int [1:8226] 1 1 1 0 0 0 0 0 0 0 ...
## $ Zona_Zona Sur : int [1:8226] 0 0 0 1 0 0 0 0 0 0 ...
## $ Estrato_3 : int [1:8226] 1 1 1 0 0 0 0 0 0 0 ...
## $ Estrato_4 : int [1:8226] 0 0 0 1 0 0 1 0 0 0 ...
## $ Estrato_5 : int [1:8226] 0 0 0 0 1 1 0 1 1 1 ...
## $ Estrato_6 : int [1:8226] 0 0 0 0 0 0 0 0 0 0 ...
## $ Tipo_Apartamento : int [1:8226] 0 0 0 0 1 1 1 1 0 0 ...
## $ Tipo_Casa : int [1:8226] 1 1 1 1 0 0 0 0 1 1 ...
## - 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>
## - attr(*, "na.action")= 'omit' Named int [1:96] 311 312 313 314 315 433 434 1866 3133 3134 ...
## ..- attr(*, "names")= chr [1:96] "311" "312" "313" "314" ...
## - attr(*, ".internal.selfref")=<externalptr>
Se realiza un estandarizado y escalado de datos para evitar distorsión en el análisis causado por los rangos de los datos.
#Estandariza los datos
data_escalado_2 = scale(data_numerico_2)
data_escalado_2 = as.data.frame(data_escalado_2)
head(data_escalado_2)
## Precio_Mill_COP Area_m2 Banos Habitaciones Zona_Zona Centro
## 1 -0.5579213 -0.7339603 -0.0779430 1.6459789 -0.1237053
## 2 -0.3449187 -0.3831278 -0.7786633 -0.4153998 -0.1237053
## 3 -0.2536319 0.3185373 -0.7786633 0.2717264 -0.1237053
## 4 -0.1014871 0.7395363 1.3234976 -0.4153998 -0.1237053
## 5 -0.5274923 -0.5936273 -0.7786633 -0.4153998 -0.1237053
## 6 -0.5883502 -0.6146772 -0.0779430 -0.4153998 -0.1237053
## Zona_Zona Norte Zona_Zona Oeste Zona_Zona Oriente Zona_Zona Sur Estrato_3
## 1 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 2 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 3 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 4 -0.5425662 -0.4108253 -0.2088982 0.8663106 -0.4565485
## 5 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## 6 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## Estrato_4 Estrato_5 Estrato_6 Tipo_Apartamento Tipo_Casa
## 1 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## 2 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## 3 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946
## 4 1.6948546 -0.7059037 -0.5568155 -1.2550946 1.2550946
## 5 -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558
## 6 -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558
A continuación se puede apreciar la matriz de distancias euclideandas entre cada uno de los datos, en este caso está acotada a una matriz 20 x 20 para minimizar su extensión pero esta matriz calcula todas las sitancias que serán análizadas posteriormente.
#Distancias euclidianas
dist_euclidiana = dist(data_escalado_2, method = "euclidean")
round(as.matrix(dist_euclidiana)[1:20,1:20], 2)
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 1 0.00 2.22 1.89 7.06 7.44 7.41 7.49 7.26 6.56 7.33 7.76 7.11 7.09 7.77 6.74
## 2 2.22 0.00 0.99 6.86 7.12 7.15 7.18 7.18 6.96 6.92 8.16 7.26 7.53 7.24 6.89
## 3 1.89 0.99 0.00 6.81 7.21 7.25 7.30 7.17 6.80 6.79 7.83 7.03 7.31 7.38 6.79
## 4 7.06 6.86 6.81 0.00 5.86 5.65 5.05 5.61 5.01 4.83 5.41 3.52 5.05 5.97 3.64
## 5 7.44 7.12 7.21 5.86 0.00 0.70 3.13 1.05 3.85 3.94 6.59 5.40 4.88 3.34 4.83
## 6 7.41 7.15 7.25 5.65 0.70 0.00 3.21 0.80 3.66 3.92 6.27 5.19 4.54 3.43 4.69
## 7 7.49 7.18 7.30 5.05 3.13 3.21 0.00 3.33 4.99 5.18 6.78 4.56 5.88 3.49 3.77
## 8 7.26 7.18 7.17 5.61 1.05 0.80 3.33 0.00 3.29 3.72 5.89 4.88 4.12 3.59 4.46
## 9 6.56 6.96 6.80 5.01 3.85 3.66 4.99 3.29 0.00 3.05 4.52 3.69 2.01 5.34 3.31
## 10 7.33 6.92 6.79 4.83 3.94 3.92 5.18 3.72 3.05 0.00 4.73 3.72 3.11 4.90 3.85
## 11 7.76 8.16 7.83 5.41 6.59 6.27 6.78 5.89 4.52 4.73 0.00 3.71 3.56 5.89 4.46
## 12 7.11 7.26 7.03 3.52 5.40 5.19 4.56 4.88 3.69 3.72 3.71 0.00 3.39 5.59 1.54
## 13 7.09 7.53 7.31 5.05 4.88 4.54 5.88 4.12 2.01 3.11 3.56 3.39 0.00 5.94 3.56
## 14 7.77 7.24 7.38 5.97 3.34 3.43 3.49 3.59 5.34 4.90 5.89 5.59 5.94 0.00 5.06
## 15 6.74 6.89 6.79 3.64 4.83 4.69 3.77 4.46 3.31 3.85 4.46 1.54 3.56 5.06 0.00
## 16 6.65 6.81 6.68 4.71 3.62 3.42 4.84 3.11 0.83 2.27 4.35 3.43 1.87 5.03 3.18
## 17 6.72 6.70 6.69 4.67 3.37 3.16 4.63 3.04 1.49 2.26 4.72 3.69 2.28 4.73 3.22
## 18 7.46 7.20 7.27 4.66 3.20 3.13 0.86 3.20 4.79 4.87 6.21 4.02 5.42 3.48 3.41
## 19 7.45 7.12 7.19 5.82 0.39 0.84 3.18 1.04 3.84 3.76 6.48 5.30 4.76 3.27 4.75
## 20 6.99 6.38 6.59 6.50 3.58 3.77 3.65 4.02 5.73 5.66 7.60 6.32 6.74 3.84 5.68
## 16 17 18 19 20
## 1 6.65 6.72 7.46 7.45 6.99
## 2 6.81 6.70 7.20 7.12 6.38
## 3 6.68 6.69 7.27 7.19 6.59
## 4 4.71 4.67 4.66 5.82 6.50
## 5 3.62 3.37 3.20 0.39 3.58
## 6 3.42 3.16 3.13 0.84 3.77
## 7 4.84 4.63 0.86 3.18 3.65
## 8 3.11 3.04 3.20 1.04 4.02
## 9 0.83 1.49 4.79 3.84 5.73
## 10 2.27 2.26 4.87 3.76 5.66
## 11 4.35 4.72 6.21 6.48 7.60
## 12 3.43 3.69 4.02 5.30 6.32
## 13 1.87 2.28 5.42 4.76 6.74
## 14 5.03 4.73 3.48 3.27 3.84
## 15 3.18 3.22 3.41 4.75 5.68
## 16 0.00 0.92 4.59 3.57 5.54
## 17 0.92 0.00 4.40 3.31 5.28
## 18 4.59 4.40 0.00 3.20 3.91
## 19 3.57 3.31 3.20 0.00 3.66
## 20 5.54 5.28 3.91 3.66 0.00
Se asignan valores a cada dato teniendo en cuenta su distancia calculada previamente, a continuación se ve una nueva columna llamada “Cluster” donde se especifica a que clasificación pertenece cada registro evaluado.
#cluster jerarquico usando método complete complete
hc_data_Vivienda_2 = hclust(dist_euclidiana, method = 'complete')
# se determina a dónde pertenece cada observación con un k = 3
cluster_assigments = cutree(hc_data_Vivienda_2, k = 3)
# se asignan los clusters a cada uno de los datos
assigned_cluster_Vivienda_scales = data_escalado_2 %>% mutate(cluster = as.factor(cluster_assigments))
head(assigned_cluster_Vivienda_scales)
## Precio_Mill_COP Area_m2 Banos Habitaciones Zona_Zona Centro
## 1 -0.5579213 -0.7339603 -0.0779430 1.6459789 -0.1237053
## 2 -0.3449187 -0.3831278 -0.7786633 -0.4153998 -0.1237053
## 3 -0.2536319 0.3185373 -0.7786633 0.2717264 -0.1237053
## 4 -0.1014871 0.7395363 1.3234976 -0.4153998 -0.1237053
## 5 -0.5274923 -0.5936273 -0.7786633 -0.4153998 -0.1237053
## 6 -0.5883502 -0.6146772 -0.0779430 -0.4153998 -0.1237053
## Zona_Zona Norte Zona_Zona Oeste Zona_Zona Oriente Zona_Zona Sur Estrato_3
## 1 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 2 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 3 -0.5425662 -0.4108253 4.7864397 -1.1541801 2.1900815
## 4 -0.5425662 -0.4108253 -0.2088982 0.8663106 -0.4565485
## 5 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## 6 1.8428691 -0.4108253 -0.2088982 -1.1541801 -0.4565485
## Estrato_4 Estrato_5 Estrato_6 Tipo_Apartamento Tipo_Casa cluster
## 1 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946 1
## 2 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946 1
## 3 -0.5899494 -0.7059037 -0.5568155 -1.2550946 1.2550946 1
## 4 1.6948546 -0.7059037 -0.5568155 -1.2550946 1.2550946 1
## 5 -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558 1
## 6 -0.5899494 1.4164516 -0.5568155 0.7966558 -0.7966558 1
Una vez involucrado cada uno de los registros con un cluster respectivo se decidió gacer un diagrama de dispersión donde se pudiera observar como se dividen los clusters en cada variable, en este caso si se compara el precio con el área, se denota que el cluster 1 y 2 presentan una gran cantidad de datos unidos y conglomeradoslo que indica que los valores son muy similares en estos clusters, el cluster 3 tiene datos muy dispersos que se asume que no está muy relacionados entre sí.
# gráfico de puntos variables preciom y areaconst
ggplot(assigned_cluster_Vivienda_scales, aes(x = Precio_Mill_COP, y = Area_m2, color = cluster)) +
geom_point(size = 4) +
geom_text(aes(label = cluster), vjust = -.8) +
theme_classic()
Se realizó un dendograma que permitiera ver la jerarquía de agrupamiento de los clusters sin embargo se hace muy complejo de análizar.
#Dendograma
plot(hc_data_Vivienda_2, cex = 0.6, main = "Dendograma clusters", las=1,
ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_data_Vivienda_2, k = 3, border = 2:5)
Tambien es importante apreciar que el cluster 1 es el que tiene más cantidad de datos, y están dispersos por toda la gráfica, mientras que el cluster 3 no tienen relacióna aprente entr sí, el cluster 2 también presentan un grado de dispersión sin embargo se aglomera hacia la parte superior izquierda del grafico indicando que está mas relacionado con grandes números de habitaciones.
# gráfico de puntos variables preciom y habitaciones
ggplot(assigned_cluster_Vivienda_scales, aes(x = Precio_Mill_COP, y = Habitaciones, color = cluster)) +
geom_point(size = 4) +
geom_text(aes(label = cluster), vjust = -.8) +
theme_classic()
En comparación con cada uno de los estratos se puede ver que no posee una influencia tan significativa y apreciable, ya que s edivide en dos grandes grupos representan una dispersión a la hora de análizar lso clusters y no se puede identificar de manera ideonea, por lo tanto el estrato no es muy diciente.
# gráfico de puntos variables preciom y estrato_6
ggplot(assigned_cluster_Vivienda_scales, aes(x = Precio_Mill_COP, y = Estrato_5, color = cluster)) +
geom_point(size = 4) +
geom_text(aes(label = cluster), vjust = -.8) +
theme_classic()
Al igual que con las habitaciones, se presenta un agrupamiento de los tipo 1, los tipo dos son los que tienen una mayor cantidad de baños al igual que de habitacione lo cual tiene mucho sentido indicando areas mas grandes, y finalmente los tipo 3 asociados en la parte derecha del gráfico pero en menores cantidades.
# gráfico de puntos variables preciom y habitaciones
ggplot(assigned_cluster_Vivienda_scales, aes(x = Precio_Mill_COP, y = Banos, color = cluster)) +
geom_point(size = 4) +
geom_text(aes(label = cluster), vjust = -.8) +
theme_classic()
En función de análizar las variables categóricas presentes en la base de datos, se decide hacer un análisi de correspondencia para determinar relaciones aparentres entre los atributos, en este caso se sugiere realizar un análisis entre las variables de Barrio y Tipo de vivienda, sin embargo se puede apreciar que este análisis se describe mediante una sola dimensión, esto quiere decir que a pesar de que la hiptesis niega el hecho de que sean independientes, las variables son explicadas en su totalidad en una dimensión.
chisq.test(tabla_Barrio_Tipo)
## Warning in chisq.test(tabla_Barrio_Tipo): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: tabla_Barrio_Tipo
## X-squared = 2407.2, df = 391, p-value < 2.2e-16
library(FactoMineR)
library(factoextra)
library(gridExtra)
Barrio_Tipo_ac = CA(tabla_Barrio_Tipo)
valores_prop = Barrio_Tipo_ac$eig ; valores_prop
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.292639 100 100
Una situación similar ocurre al análizar la zona con el tipo de vivienda, donde todas las varianzas se explican mediante una sola dimensión.
tabla_Zona_Tipo = table(data_Depurada$Zona, data_Depurada$Tipo)
colnames(tabla_Zona_Tipo) = c("Apartamento", "Casa" )
tabla_Zona_Tipo
##
## Apartamento Casa
## Zona Centro 24 100
## Zona Norte 1164 707
## Zona Oeste 1020 168
## Zona Oriente 61 283
## Zona Sur 2763 1936
chisq.test(tabla_Zona_Tipo)
##
## Pearson's Chi-squared test
##
## data: tabla_Zona_Tipo
## X-squared = 681.39, df = 4, p-value < 2.2e-16
Zona_Tipo_ac = CA(tabla_Zona_Tipo)
valores_prop = Zona_Tipo_ac$eig ; valores_prop
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.08283365 100 100
Sin embargo, entre las variables sugeridas, cuando se analiza el barrio y la zona, se ve una relacion entre estas que se resalta en la siguiente gráfica, en este caso se puede ver que zonas está relacionadas con el barrio donde por ejemplo que suele ser la más costosa tiene barrios como San Antonio, Tejares, San Cayetano entre otros, mientras que la Zona Sur tiene barrios como Junín. Tamien se ve que la distribución de las dimensiones es uniforme en todas, lo que no permite diferenciar cual puede ser mas importante que otra, al igual que se puede análizar que la mitad de los datos están en las 2 primeras componentes, y el 75% en las 3 primeras dimsensiones pudiendo descartar la última.
chisq.test(tabla_Zona_Barrio)
## Warning in chisq.test(tabla_Zona_Barrio): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: tabla_Zona_Barrio
## X-squared = 29132, df = 1564, p-value < 2.2e-16
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.9633287 27.20119 27.20119
## dim 2 0.9378838 26.48271 53.68390
## dim 3 0.9007076 25.43298 79.11689
## dim 4 0.7395744 20.88311 100.00000
Finalmente, se quiso análizar como podrian estar relacionadas las cantidades de habitaciones con las diferenets zonas, en este caso en la siguiente gráfica se puede ver que la Zona oeste y la Zona norte suelen tener menos cantidad de habitaciones lo que tambien peude indicar menor área y que son en su mayoría apartamentos, También se ve que la Zona norte y Centro tienen la mayor cantidad de habitaciones y esto puede estar relacionado con el hecho de que en esta szonas se pueden ver más casas que apartamentos. También es importante apreciar que el 85% de las cariaciones se explican mediante la primera dimensión.
##
## 0 1 10 2 3 4 5 6 7 8 9
## Zona Centro 3 3 4 12 28 19 20 11 9 8 7
## Zona Norte 29 15 13 211 995 331 140 59 37 29 12
## Zona Oeste 8 16 4 170 616 272 63 22 6 5 6
## Zona Oriente 6 2 6 31 88 52 33 39 31 30 26
## Zona Sur 19 21 24 483 2334 1044 413 183 84 64 30
## Warning in chisq.test(tabla_Zona_Hab): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: tabla_Zona_Hab
## X-squared = 711.36, df = 40, p-value < 2.2e-16
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.073626018 85.139247 85.13925
## dim 2 0.006885952 7.962739 93.10199
## dim 3 0.003802864 4.397535 97.49952
## dim 4 0.002162344 2.500480 100.00000
La base de datos inicial se presentaban datos normalizados en la mayoría de atributos, sin embargo existia una gran cantidad de datos faltantes en parqueadero y piso, por esta razón no se tienen como variables de análisis en las secciones de este documento.
El análisis PCA permitio ver que los elementos más importantes en este data set suministrado por la empresa son: el Area en M2, el Precio del predio, el número de baños y las habitaciones y el tipo de predio, posteriormente para la Componente 2 se observa que la Zona Oeste y el estrato 6 y estrato 3 son los atributos más representativos. Teniendo en cuenta esto es importante mencionar que el análisis de componentes se pudo ver que la Zonas oeste esta ampliamente relacionada con las viviendas tipo apartamento y estrato 6, si la finalidad de la empresa es vender esti tipo de predios se recomienda inclinarse por esta zona ya que presenta una mayor demanda y precios más altos.
Tambien se pudo destacar que es más importante la zona y el tipo de predio para definir el precio que variables como el número de habitaciones y baños, esto debido a que se observó que si un predio tiene 2 habitaciones pero se ubica en la Zona Oeste, tiene un mayor precio que un predio en la Zona sur con el mismo estrato pero con más habitaciones y área total. Tambien es importante determinar si es apartamento porque tienen más valor. esto e simportante para wur la empresa defina su nicho de mercado predilecto y el presupuesto de los tipos de viviendas.
También mediante la sagrupaciones se pudo ver una gran relación entre el área del predio y el precio, y como ya se mencionó anteriormente el área no es el único parametro para determinar el precio, si existe la tendencia de a mayor área mayor precio.
El barrio hace parte de las variables importante dependiendo de la Zopna, aquellos atributos que representan a la zona se ven en los diferentes precios, esto teniendo en cuenta la existencia de barrios ams costosos que otros.
El precio del rpecio también esta relacionado estrechamente con el estrato socieconómico en que se encuentra, encontrando que las Zonas Sur y Oeste cuentan con estratos 5 y 6 mientras que la Zona oriente y norte presenta estratos 3. Se recomienta tener en cuenta esto ya que se identifica que las variables con más importancia dentro del análisis son los estrato 6 y estrato 3.
A pesar de que el numero de habitaciones y baños no es el factor más importante, cabe destacar que las zonas con mayor número de habitaciones se encuentran en la zona centro y Oriente, mientras que las zonas mas costosas tienen menores cantidades de habitaciones, por lo tanto si el cliente define que busca lugares con precios no tan altos y con poca cantidad de habitaciones y baños, se recomienda sugerir un predio en la Zona Sur o Zona Norte.