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.

1. Limpieza de datos

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

1.1. Normalización de los datos

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.

1.2. Análisis de datos faltantes

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

2. Análisis de componentes principales (PCA)

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.

3. Análisis de conglomerados

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()

4. Análisis de correspondencia

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

5. Conclusiones