A continuación vamos a cargar los datos de una empresa inmobiliaria que está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.
## Installing package into 'C:/Users/CARLOS AREVALO/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'devtools' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\CARLOS AREVALO\AppData\Local\Temp\Rtmp8kZRDW\downloaded_packages
## Installing package into 'C:/Users/CARLOS AREVALO/AppData/Local/R/win-library/4.3'
## (as 'lib' is unspecified)
## package 'mice' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'mice'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\CARLOS
## AREVALO\AppData\Local\R\win-library\4.3\00LOCK\mice\libs\x64\mice.dll a
## C:\Users\CARLOS AREVALO\AppData\Local\R\win-library\4.3\mice\libs\x64\mice.dll:
## Permission denied
## Warning: restored 'mice'
##
## The downloaded binary packages are in
## C:\Users\CARLOS AREVALO\AppData\Local\Temp\Rtmp8kZRDW\downloaded_packages
## Skipping install of 'paqueteMETODOS' from a github remote, the SHA1 (341036c5) has not changed since last install.
## Use `force = TRUE` to force installation
## Loading required package: cubature
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: flextable
## Warning: package 'flextable' was built under R version 4.3.2
## Loading required package: ggplot2
## Loading required package: lmtest
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: psych
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
## Loading required package: summarytools
## Loading required package: randtests
## Loading required package: rapportools
##
## Attaching package: 'rapportools'
## The following objects are masked from 'package:summarytools':
##
## label, label<-
## The following object is masked from 'package:dplyr':
##
## n
## The following objects are masked from 'package:stats':
##
## IQR, median, sd, var
## The following objects are masked from 'package:base':
##
## max, mean, min, range, sum
Con esta información obtenida pasaremos a hacer un análisis de PCA.
En está sección buscaremos reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y oferta del mercado.
summary(vivienda)
## id zona piso estrato
## Min. : 1 Length:8322 Length:8322 Min. :3.000
## 1st Qu.:2080 Class :character Class :character 1st Qu.:4.000
## Median :4160 Mode :character Mode :character Median :5.000
## Mean :4160 Mean :4.634
## 3rd Qu.:6240 3rd Qu.:5.000
## Max. :8319 Max. :6.000
## NA's :3 NA's :3
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 220.0 1st Qu.: 80.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 330.0 Median : 123.0 Median : 2.000 Median : 3.000
## Mean : 433.9 Mean : 174.9 Mean : 1.835 Mean : 3.111
## 3rd Qu.: 540.0 3rd Qu.: 229.0 3rd Qu.: 2.000 3rd Qu.: 4.000
## Max. :1999.0 Max. :1745.0 Max. :10.000 Max. :10.000
## NA's :2 NA's :3 NA's :1605 NA's :3
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:8322 Length:8322 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.54
## Median : 3.000 Mode :character Mode :character Median :-76.53
## Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :-76.46
## NA's :3 NA's :3
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
## NA's :3
De lo anterior observamos que tenemos varias columnas donde solo hay 3 NA’s, si se explora veremos que son filas donde la mayoría de la informacion es faltante, tambien observamos que para parqueaderos y para “piso” tenemos varios NA’s, por lo que vamos desestimar estas variables del análisis, ya que no me aporta ninguna información valiosa para los precios. Vemos que distintos valores tenemos zona, tipo y barrio, ya que en el anterior resumen no podemos observar mucho sobre estas variables categóricas.
Pero primero eliminamos los NA’s revisados y la columna parqueaderos
vivienda <- vivienda[complete.cases(vivienda[, c("areaconst", "preciom")]), ]
vivienda <- subset(vivienda, select = -c(id, piso,parqueaderos))
summary(vivienda)
## zona estrato preciom areaconst
## Length:8319 Min. :3.000 Min. : 58.0 Min. : 30.0
## Class :character 1st Qu.:4.000 1st Qu.: 220.0 1st Qu.: 80.0
## Mode :character Median :5.000 Median : 330.0 Median : 123.0
## Mean :4.634 Mean : 433.9 Mean : 174.9
## 3rd Qu.:5.000 3rd Qu.: 540.0 3rd Qu.: 229.0
## Max. :6.000 Max. :1999.0 Max. :1745.0
## banios habitaciones tipo barrio
## Min. : 0.000 Min. : 0.000 Length:8319 Length:8319
## 1st Qu.: 2.000 1st Qu.: 3.000 Class :character Class :character
## Median : 3.000 Median : 3.000 Mode :character Mode :character
## Mean : 3.111 Mean : 3.605
## 3rd Qu.: 4.000 3rd Qu.: 4.000
## Max. :10.000 Max. :10.000
## longitud latitud
## Min. :-76.59 Min. :3.333
## 1st Qu.:-76.54 1st Qu.:3.381
## Median :-76.53 Median :3.416
## Mean :-76.53 Mean :3.418
## 3rd Qu.:-76.52 3rd Qu.:3.452
## Max. :-76.46 Max. :3.498
Ahora si procedemos a graficar a revisar las variables categóricas restantes para saber que mas tipos de datos poseemos.
# Contar valores únicos en la columna "barrio"
num_barrios <- length(unique(vivienda$barrio))
print(paste("Número de barrios únicos:", num_barrios))
## [1] "Número de barrios únicos: 436"
print("Tipos:")
## [1] "Tipos:"
print(unique(vivienda$tipo))
## [1] "Casa" "Apartamento"
print("Zona:")
## [1] "Zona:"
print(unique(vivienda$zona))
## [1] "Zona Oriente" "Zona Sur" "Zona Norte" "Zona Oeste" "Zona Centro"
Tenemos 436 barrios, y 8.319 variables, lo cual es un buen candidato para un análisis de correspondencia más adelante.
El primer a realizar es estandarizar o normalizar las variables antes de aplicar PCA, para asegurar que cada variable contribuya de manera equitativa a la varianza total y evitas que una variable con una escala más grande tenga un impacto desproporcionado en los resultados del análisis. Los métodos comunes de escalado incluyen la estandarización (restar la media y dividir por la desviación estándar) o la normalización (escalar los valores al rango [0, 1]). Ademas de esto solo se utilizara variables numéricas, ya que solo así funcionara el análisis de componentes principales, para esto transformaremos en numéricas las variables categóricas de Tipo, la variable barrio la dejaremos por fuera, igual que el de Zona, ya que con la longitud y latitud tenemos la posición de los inmuebles, y son variables numéricas, así que podemos hacer el análisis de componentes principales directamente con ellos.
vivienda4_pca <- subset(vivienda, select = -c(tipo,zona,barrio))
str(vivienda4_pca)
## spc_tbl_ [8,319 × 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ estrato : num [1:8319] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8319] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8319] 70 120 220 280 90 87 52 137 150 380 ...
## $ banios : num [1:8319] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8319] 6 3 4 3 3 3 3 4 6 3 ...
## $ longitud : num [1:8319] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8319] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=List of 3
## ..$ cols :List of 13
## .. ..$ id : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ zona : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ piso : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ estrato : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ preciom : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ areaconst : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ parqueaderos: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ banios : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ habitaciones: list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ tipo : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ barrio : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
## .. ..$ longitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## .. ..$ latitud : list()
## .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
## ..$ delim : chr ";"
## ..- attr(*, "class")= chr "col_spec"
## - attr(*, "problems")=<externalptr>
vivienda4Z= scale(vivienda4_pca) # datos estandarizados
Antes de aplicar PCA, es recomendable manejar los valores nulos en tus datos. Por lo que vamos a hacer un revision de nulos sobre estas variables.
library(mice)
## Warning: package 'mice' was built under R version 4.3.2
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
md.pattern(vivienda4Z)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## estrato preciom areaconst banios habitaciones longitud latitud
## 8319 1 1 1 1 1 1 1 0
## 0 0 0 0 0 0 0 0
La gráfica anterior nos indica que no se presentan datos faltantes, al no tener no hay necesidad de hacer un tratamiento sobre los nulos, ya sea rellenar vacíos o eliminar registros.
Tambien observamos que efectivamente tengamos los datos escalados en el dataset.
head(vivienda4Z)
## estrato preciom areaconst banios habitaciones longitud
## [1,] -1.5872276 -0.5595498 -0.7339949 -0.07793773 1.6406840 0.9728466
## [2,] -1.5872276 -0.3465670 -0.3842568 -0.77811479 -0.4147626 0.9331875
## [3,] -1.5872276 -0.2552886 0.3152194 -0.77811479 0.2703863 0.7607566
## [4,] -0.6156201 -0.1031580 0.7349051 1.32241640 -0.4147626 -0.6549016
## [5,] 0.3559875 -0.5291236 -0.5940997 -0.77811479 -0.4147626 0.8682385
## [6,] 0.3559875 -0.5899759 -0.6150839 -0.07793773 -0.4147626 0.6670691
## latitud
## [1,] 0.3793708
## [2,] 0.3763219
## [3,] 0.4225243
## [4,] 0.4070454
## [5,] 0.9678065
## [6,] -1.1242009
Ahora que vemos que todas nuestras variables están en una escala similar, y no tendremos sesgos por las magnitudes que manejan, procedemos a generar componentes principales
res.pca <- prcomp(vivienda4Z)
res.pca
## Standard deviations (1, .., p=7):
## [1] 1.7649945 1.2197986 0.9408170 0.8090903 0.6534211 0.4902176 0.4357175
##
## Rotation (n x k) = (7 x 7):
## PC1 PC2 PC3 PC4 PC5
## estrato 0.3596495 -0.46160840 0.29253122 -0.24988384 -0.47695341
## preciom 0.4947460 -0.06764679 0.25051923 -0.25237458 0.22943062
## areaconst 0.4556538 0.26756925 0.02809938 -0.12641620 0.64147176
## banios 0.4903682 0.18623745 -0.06882523 -0.01680433 -0.39400870
## habitaciones 0.2974110 0.54943309 -0.32731570 0.32355603 -0.33736244
## longitud -0.2672367 0.46217187 -0.01581921 -0.82481589 -0.17733905
## latitud -0.1338978 0.40072976 0.85950759 0.26942892 -0.08880096
## PC6 PC7
## estrato 0.501853021 0.17381740
## preciom -0.219896274 -0.72332891
## areaconst 0.292270190 0.45509101
## banios -0.652112622 0.37328490
## habitaciones 0.431734658 -0.31247031
## longitud 0.052076162 -0.01578471
## latitud -0.003114001 0.04739724
De lo anterior observamos como la variable “Longitud”y “Latitud” aportan de manera similar en las Componentes principales, dejando claro sui relacion asi mismo el estrato, se realciona bastante con ellas sobre la PC2, dejando clara la relación de la ubicación sobre el estrato, lo cual tambien nos permite prever que en el plano probablemente “longitud” y “latitud” me van a aportar más en un sentido que los demás componentes, y que los demás van a estar muy cerca uno del otro sobre el plano.
De esto se gráfica cuales serán nuestras componentes principales, esto de acuerdo al aporte de cada columna, en la siguiente gráfica veremos el aporte de cada Componente Principal.Para determinar que componente me aporta más, vamos a graficar que tanta varianza representa cada una de mis componentes principales.
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.3.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_eig(res.pca, addlabels = TRUE)
Con la anterior gráfica podemos observar que con las 5 primeras componentes principales PC1, PC2, PC3, PC4 y PC5 podemos explicar el 93.9% de los datos lo que sería suficiente para poder hacer un análisis eficiente sobre los datos y evitar. Así mismo que las variables de “preciom” y “banios” es la más que mas explican la varianza, así como la “Estrato”, “longitud” y “latitud” son las que mas me explican de la varianza de la Componen Pricipal 2 (PC2).
Con esta informacion vamos a graficar como se ven representadas el aporte de las distintas variables para cada uina de las componentes principales.
fviz_pca_var(res.pca,
col.var = "contrib", # Color by contributions to the PC
gradient.cols = c("#FF7F00", "#034D94"),
repel = TRUE # Avoid text overlapping
)
Al visualizar las variables en el plano de los componentes principales permite identificar el sentido y la caracterización de los componentes (característica capturada por los vectores propios). En la gráfica anterior se ve mas claramente cuales son las variables que mas contribuyen a la varianza, en lo que queda claro que la cantidad de baños (banios), es lo que mas aumenta la varianza en mis datos, y las variables que menos aportan son longitud y latitud, luego aportan de manera similar el resto de variables.
componentes_principales <- as.data.frame(res.pca$rotation)
componentes_principales
## PC1 PC2 PC3 PC4 PC5
## estrato 0.3596495 -0.46160840 0.29253122 -0.24988384 -0.47695341
## preciom 0.4947460 -0.06764679 0.25051923 -0.25237458 0.22943062
## areaconst 0.4556538 0.26756925 0.02809938 -0.12641620 0.64147176
## banios 0.4903682 0.18623745 -0.06882523 -0.01680433 -0.39400870
## habitaciones 0.2974110 0.54943309 -0.32731570 0.32355603 -0.33736244
## longitud -0.2672367 0.46217187 -0.01581921 -0.82481589 -0.17733905
## latitud -0.1338978 0.40072976 0.85950759 0.26942892 -0.08880096
## PC6 PC7
## estrato 0.501853021 0.17381740
## preciom -0.219896274 -0.72332891
## areaconst 0.292270190 0.45509101
## banios -0.652112622 0.37328490
## habitaciones 0.431734658 -0.31247031
## longitud 0.052076162 -0.01578471
## latitud -0.003114001 0.04739724
Debido a que los rangos de las variables son diferentes, con el fin de que estas diferencias en las dimensiones de las variables no afecte los cálculos de las distancias, vamos a utilizar la version del dataset con las variables estandarizadas (restar la media y dividir el resultado por la desviación estándar) antes de generar las cálculos de las distancias. Aunque también para graficar y ver los resultados en términos mas entendibles, se desarrolla la grafica sobre los datos sin escalar y compararemos
## estrato preciom areaconst banios habitaciones longitud
## 1 -1.5872276 -0.5595498 -0.7339949 -0.07793773 1.6406840 0.9728466
## 2 -1.5872276 -0.3465670 -0.3842568 -0.77811479 -0.4147626 0.9331875
## 3 -1.5872276 -0.2552886 0.3152194 -0.77811479 0.2703863 0.7607566
## 4 -0.6156201 -0.1031580 0.7349051 1.32241640 -0.4147626 -0.6549016
## 5 0.3559875 -0.5291236 -0.5940997 -0.77811479 -0.4147626 0.8682385
## 6 0.3559875 -0.5899759 -0.6150839 -0.07793773 -0.4147626 0.6670691
## latitud
## 1 0.3793708
## 2 0.3763219
## 3 0.4225243
## 4 0.4070454
## 5 0.9678065
## 6 -1.1242009
Para determinar el número óptimo de clusters en un conjunto de datos escalado, se puede utilizar el método del codo (Elbow Method). Se busca el punto donde la disminución en la suma de cuadrados dentro del clúster se disminuye, formando un “codo”.
## Warning: did not converge in 10 iterations
## Warning: did not converge in 10 iterations
De acuerdo a lo anterior vemos que después de 5 clusteres la ganancia no es mucho y el costo computacional es elevado, por lo que vamos dejarlo en ese numero la cantidad de grupos. Curiosamente la misma cantidad de Componentes principales obtenidas.
Para realizar los agrupamiento es necesario calcular la distancia euclidiana, o manhattan dependiendo cual se vaya a usar
Comenzamos por la euclidiana, vamos a graficar tanto con los datos escaladsos como no escalados. Primero escalados
## [1] 2.210061 1.899535 3.485135 2.978068 3.220286 2.435012 2.927299 2.406560
## [9] 4.117731 5.280191 3.227249 4.115579 4.696799 2.986353 3.500646 3.040564
## [17] 2.770498 3.427739 3.894519 2.416369
No escalados.
## [1] 86.08136 180.29143 258.09688 22.67158 20.05004 35.14257 89.98335
## [8] 106.32498 614.01385 625.02000 471.01592 527.16412 271.49586 361.39037
## [15] 214.02337 244.77133 79.71199 139.02518 151.52889 75.72979
## [1] 3.361053 3.679194 8.008123 5.562204 5.957348 4.584750 6.270867
## [8] 4.590946 9.322611 12.022755 8.002267 9.915351 9.603744 6.669400
## [15] 7.947717 7.252469 5.538112 7.297910 7.992192 4.357613
## [1] 2.210061 1.899535 3.485135 2.978068 3.220286 2.435012 2.927299 2.406560
## [9] 4.117731 5.280191 3.227249 4.115579 4.696799 2.986353 3.500646 3.040564
## [17] 2.770498 3.427739 3.894519 2.416369
## # A tibble: 8,319 × 7
## estrato preciom areaconst banios habitaciones longitud latitud
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 3 250 70 3 6 -76.5 3.43
## 2 3 320 120 2 3 -76.5 3.43
## 3 3 350 220 2 4 -76.5 3.44
## 4 4 400 280 5 3 -76.5 3.44
## 5 5 260 90 2 3 -76.5 3.46
## 6 5 240 87 3 3 -76.5 3.37
## 7 4 220 52 2 3 -76.5 3.43
## 8 5 310 137 3 4 -76.5 3.38
## 9 5 320 150 4 6 -76.5 3.48
## 10 5 780 380 3 3 -76.5 3.49
## # ℹ 8,309 more rows
Apoyándonos en el calculo de la distancia manhattan y el numero de clusters graficamos estos grupos para distinguirlos. Asi mismo graficaremos los grupos tanto sin aplicar los datos escalados, como escalados.
De lo anterior observamos que en realidad no se nota mucho la diferencia en ninguno de los dos diagramas, entre los diferentes grupos y que pareciera que hay 3 grupos predominantes cuando usamos la latitud para graficar, pero si graficamos por baños y estrato se ven mas segmentados el numero de grupos
Ahora comenzamos la parte de analisis para variables categoricas
## Warning: package 'FactoMineR' was built under R version 4.3.2
##
## Estrato3 Estrato4 Estrato5 Estrato6
## Zona Centro 105 14 4 1
## Zona Norte 572 407 769 172
## Zona Oeste 54 84 290 770
## Zona Oriente 340 8 2 1
## Zona Sur 382 1616 1685 1043
Hacemos prueba de Chi-cuadrado para ver si las variables son independientes entre si.
##
## Pearson's Chi-squared test
##
## data: tabla_zona_vs_estrato
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
Obtenemos un valor de p-value 2.2e-16, lo que nos indica que se rechaza la hipótesis de independencia de las variables, y nos indica que estas tienen algun grado de relacion.
## Warning: package 'gridExtra' was built under R version 4.3.2
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
## **Results of the Correspondence Analysis (CA)**
## The row variable has 5 categories; the column variable has 4 categories
## The chi square of independence between the two variables is equal to 3830.435 (p-value = 0 ).
## *The results are available in the following objects:
##
## name description
## 1 "$eig" "eigenvalues"
## 2 "$col" "results for the columns"
## 3 "$col$coord" "coord. for the columns"
## 4 "$col$cos2" "cos2 for the columns"
## 5 "$col$contrib" "contributions of the columns"
## 6 "$row" "results for the rows"
## 7 "$row$coord" "coord. for the rows"
## 8 "$row$cos2" "cos2 for the rows"
## 9 "$row$contrib" "contributions of the rows"
## 10 "$call" "summary called parameters"
## 11 "$call$marge.col" "weights of the columns"
## 12 "$call$marge.row" "weights of the rows"
De la grafica anterior podemos observar como el estrato 6 el mas alto, esta cerca de la Zona Oeste, mientras que los estratos 3 mas cerca de la Zona Oriente o Zona Centro, y los estratos 5 y 4 predominan cerca a la Zona Sur, y despues con la ZOna Norte. Nos indicaria cuales lugares son buenos para vender casas costosas y a buen precio, que seria Zona Oeste principalmente, y donde encontrar lugares mas economicos, ya sea Centro u Oriente.
Asi mismo nos muestra el grado que representa cada uno de los ejes.
Ahora procedemos a hacer una analisis de banios contra estrato, para ver que tanto se relacionan entre si, al ser baño una variable importante al momento de determinar el precio.
##
## Estrato3 Estrato4 Estrato5 Estrato6
## 0 15 9 13 8
## 1 359 93 35 9
## 2 623 1187 941 195
## 3 208 444 897 444
## 4 135 232 492 597
## 5 68 100 249 473
## 6 27 40 61 186
## 7 4 9 39 55
## 8 8 11 15 14
## 9 3 2 5 5
## 10 3 2 3 1
Hacemos prueba de Chi-cuadrado para ver si las variables son independientes entre si.
## Warning in chisq.test(tabla_banio_vs_estrato): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: tabla_banio_vs_estrato
## X-squared = 2883, df = 30, p-value < 2.2e-16
Obtenemos un valor de p-value 2.2e-16, lo que nos indica que se rechaza la hipótesis de independencia de las variables, y nos indica que estas tienen algun grado de relacion.
Con lo anterior vemos como tambien los estratos mas altos son los que suelen tener mas baños, y entre 5 a 7 es lo mas probable que tengan los estratos 6, y los inmuebles de estrato 5 tienen 3 baños predominantemente mientras que los estrato 4, tienen 2 baños principalmente y por ultimo el estrato 3 suele no tener un valor tan claro en cuanto a la cantidad e baños que tiene, ya que cerca a este estan los dos valores mas distantes 10, 2 y 1.
Ahora procedemos a hacer una analisis de banios contra zonas, para ver que tanto se relacionan entre si, el baño tambien puede estar relacionado con zonas mas espaciosas.
##
## Zona Oriente Zona Sur Zona Norte Zona Oeste Zona Centro
## 0 3 12 7 5 18
## 1 16 186 38 68 188
## 2 43 811 237 108 1747
## 3 26 438 315 78 1136
## 4 19 270 350 52 765
## 5 11 130 185 19 545
## 6 4 48 43 13 206
## 7 0 11 19 2 75
## 8 1 11 2 4 30
## 9 1 1 2 1 10
## 10 0 2 0 1 6
Hacemos prueba de Chi-cuadrado para ver si las variables son independientes entre si.
## Warning in chisq.test(tabla_banio_vs_zona): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: tabla_banio_vs_zona
## X-squared = 560.8, df = 40, p-value < 2.2e-16
Obtenemos un valor de p-value 2.2e-16, lo que nos indica que se rechaza la hipótesis de independencia de las variables, y nos indica que estas tienen algun grado de relacion.
Con lo anterior observamos que no hay un acercamiento demasiado marcado para algunas cantidades de baños excepto por Zona Oeste que suele tener muy pocos baños, esto nos indicaría que son lugares pequeños realmente, mientras que al sur obtengo lugares mas espaciosos al poder tener 8 o 10 baños, igual que par ala zona centro que esta muy cerca 6 y 4 baños.
Dentro del análisis PCA aprendemos sobre las variables numericdas, nos ayuda tener un entendimiento de como varian los datos, y como afectan la distribucion de mi datos sobre un plano. En esta parte logramos reducir la dimensionalidad de los datos, ya que a partir de La visualización de las componentes principales mostró que las primeras cinco componentes explican el 93.9% de la variabilidad en los datos, sin necesidad de usar las 7 variables iniciales para el estudio de esta caso, y ademas de que nos reduce la correlación entre estas variables, haciendolas linealmente independiente.
Para el negocio del análisis de PCA SE destacó la importancia de las variable “banios,” especialmente seguido por el “estrato”, ya que con estas variables podemos explicar en mayor medida el resultado del análisis.
En el análisis de conglomerados logramos ver relaciones que no eran tan claras en PCA, y ademas de encontrar un numero optimo para segmentar mis datos en distintos grupos. En este caso tenemos 5 grupos, ademas graficando estos grupos resaltamos que para el negocio lo información más valiosa para segmentar estas poblaciones son los banios y el estrato, ya que en estos se ve mas clara la distancia en cada grupo
Por ultimo para el análisis de correspondencia podemos ver como el estrato esta estrechamente relacionado con ciertas zonas de las ciudad, y como podríamos prescindir de la zona y usar mas el estrato al tener un relación tan obvia. Por otra parte, en el análisis entre estrato y cantidad de baños logramos ver como ciertas cantidades de baños si se relacionan estrechamente con ciertos estratos, pero por otro lado no se relaciona con la cantidad
Para el negocio de la parte de Correspondencia podemos denotar claramente como estratos 6 están muy ligados a la zona Oeste, sin embargo no son muy espaciosos por la cantidad de baños que suelen estar presentes sobre esta zona. Por otro lado la zona Sur parece un excelente lugar para inmuebles, son estratos altos 4 y 5, y ademas tienen una gran cantidad de baños asociados a esta zona entre 8 y 10, aunque también predominan de 3 en esta zona.