En este documento se presentan los procedimientos, métodos y resultados de la evaluación de la oferta inmobiliaria urbana de una gran ciudad, se busca comprender en profundidad el mercado de unidades residenciales urbanas para que los directivos de una empresa inmobiliaria puedan tomar decisiones estratégicas informadas. Se dispone de una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Los directivos de la empresa inmobiliaria necesitan realizar un análisis holístico de estos datos donde se identifique patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.
Este informe consta de las siguientes partes: se inicia con una etapa de entendimiento de los datos donde se explora el dataset dispolnible para conocer su tamaño y el tipo de variables que contiene; después se procede a una etapa de preparación de los datos para intentar solventar algunas falencias identificadas en el entendimiento como faltantes, datos atípicos y estandarización de valores y variables; se continua con un Análisis de Componentes Principales (ACP) con el objetivo de reducir la dimensionalidad del conjunto de datos; también se realiza un Análisis de Conglomerados que busca agrupar las propiedades residenciales en segmentos homogéneos; por último, se realiza un Análisis de Correspondencia para examinar la relación existente entre las variables categóricas del conjunto de datos. En todo el dcumento se incluyen gráficas, tablas y otros recursos visuales para presentar los hallazgos y las conclusiones de manera clara y efectiva a los directivos de la empresa y a los tomadores de decisiones interesados en el mercado inmobiliario.
Se inicia explorando el conjunto de datos para conocer su tamaño y el tipo de variables que contiene, determinar si las variables tienen los registros completos y si hay presencia de datos atípicos; es importante familiarizarse con el tipo de datos; también se realizan tablas y gráficos para resumir las principales variables con medidas estadísticas básicas. Se destaca que en esta parte no se realiza ninguna modificación sobre el conjunto de datos.
Se cargan los paquetes y librerías necesarias.
#install.packages("devtools")
Se cargan los datos de interés.
## Rows: 8,322
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
El conjunto de datos está compuesto por 13 variables y 8.322 registros. Las variables zona, piso, tipo de vivienda y barrio son de tipo categórico; las variables id, estrato, preciom, areaconst, parqueaderos, banios, habitaciones, longitud y latitud son de tipo numérico.
Por no aportar ningún valor a este estudio se elimina la variable id del conjunto de datos, quedando 12 variables para el análisis.
data <- data[, -1]
En muy importante conocer los faltantes en el conjunto de datos disponible:
data %>%
summarise_all(funs(sum(is.na(.)))) %>%
t()
## [,1]
## zona 3
## piso 2638
## estrato 3
## preciom 2
## areaconst 3
## parqueaderos 1605
## banios 3
## habitaciones 3
## tipo 3
## barrio 3
## longitud 3
## latitud 3
Como se observa, los registros están completos a excepción de las variables piso, con 2.638 y parqueaderos, con 1.605 datos faltantes.
Aunque son variables de tipo numérico, los ceros reportados en habitaciones y banios necesitan alguna transformación, no es coherente que un inmueble no cuente por lo menos con una habitación o con un baño.
Tabla de Frecuencias para la Variable HABITACIONES
table(data$habitaciones, useNA="always")
##
## 0 1 2 3 4 5 6 7 8 9 10 <NA>
## 66 59 926 4097 1729 679 318 173 138 83 51 3
Tabla de Frecuencias para la Variable BANIOS
table(data$banios, useNA="always")
##
## 0 1 2 3 4 5 6 7 8 9 10 <NA>
## 45 496 2946 1993 1456 890 314 107 48 15 9 3
Tabla de Frecuencias para la Variable ZONA
table(data$zona, useNA="always")
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur <NA>
## 124 1920 1198 351 4726 3
Tabla de Frecuencias para la Variable PISO
table(data$piso, useNA="always")
##
## 01 02 03 04 05 06 07 08 09 10 11 12 <NA>
## 860 1450 1097 607 567 245 204 211 146 130 84 83 2638
Tabla de Frecuencias para la Variable TIPO DE VIVIENDA
table(data$tipo, useNA="always")
##
## Apartamento Casa <NA>
## 5100 3219 3
Tabla de Frecuencias para la Variable BARRIO
barrio <- table(data$barrio, useNA="always")
¿Cuántos barrios hay en el conjunto de datos?
length(barrio)
## [1] 437
De las cuatro variables de tipo categórico zona, piso y tipo de vivienda están bien definidas, se podría realizar un proceso de imputación basado en la moda de las variables zona y tipo de vivienda. La variable barrio no se encuentra bien definida y hay 437 valores diferentes inluyendo el NA, hay varios valores únicos que son parecidos, por esta razón es muy complejo utilizar el barrio para apoyar el análisis.
Aunque las variables estrato y parqueaderos son de tipo numérico, inicialmente conviene resumirlas en una tabla de frecuencias:
Tabla de Frecuencias para la Variable ESTRATO
table(data$estrato, useNA="always")
##
## 3 4 5 6 <NA>
## 1453 2129 2750 1987 3
Tabla de Frecuencias para la Varible PARQUEADEROS
table(data$parqueaderos, useNA="always")
##
## 1 2 3 4 5 6 7 8 9 10 <NA>
## 3155 2475 520 384 68 68 18 17 4 8 1605
Estadísticas de la variable PRECIOM
summary(data$preciom)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 58.0 220.0 330.0 433.9 540.0 1999.0 2
breaks=c(0, 500, 1000, 1500, 2000)
preciom2=cut(data$preciom, breaks)
summarytools::freq(preciom2)
## Frequencies
## preciom2
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## --------------------- ------ --------- -------------- --------- --------------
## (0,500] 6062 72.861 72.861 72.843 72.843
## (500,1e+03] 1705 20.493 93.353 20.488 93.331
## (1e+03,1.5e+03] 421 5.060 98.413 5.059 98.390
## (1.5e+03,2e+03] 132 1.587 100.000 1.586 99.976
## <NA> 2 0.024 100.000
## Total 8322 100.000 100.000 100.000 100.000
Estadísticas de la variable AREACONS
summary(data$areaconst)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 30.0 80.0 123.0 174.9 229.0 1745.0 3
breaks=c(0, 300, 600, 900, 1200, 1500, 1800)
area=cut(data$areaconst, breaks)
summarytools::freq(area)
## Frequencies
## area
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------------------- ------ --------- -------------- --------- --------------
## (0,300] 7150 85.948 85.948 85.917 85.917
## (300,600] 1039 12.489 98.437 12.485 98.402
## (600,900] 97 1.166 99.603 1.166 99.567
## (900,1.2e+03] 25 0.301 99.904 0.300 99.868
## (1.2e+03,1.5e+03] 5 0.060 99.964 0.060 99.928
## (1.5e+03,1.8e+03] 3 0.036 100.000 0.036 99.964
## <NA> 3 0.036 100.000
## Total 8322 100.000 100.000 100.000 100.000
Se realiza para solventar algunas falencias identificadas en el entendimiento de los datos, como faltantes, atípicos y estandarización de algunos registros y variables.
Dado que la presencia de datos faltantes en las variables piso y parqueaderos es notablemente alta, con el 31,7% y el 19,3% respectivamente, no se ve conveniente realizar algún proceso de imputación para completar los registros porque se alterarían las observaciones y las conclusiones a las que se pueda llegar no serían confiables. Entonces, para no eliminar una proporción importante de los registros del conjunto de datos se decide eliminar el total de las columnas piso y prqueaderos y por no estar lo suficientemente estandarizada tambien se elimina la columna barrio.
Elimininar columnas incompletas y no estandarizadas
data1 <- data[, -c(2, 6, 10)]
head(data1)
## # A tibble: 6 × 9
## zona estrato preciom areaconst banios habitaciones tipo longitud latitud
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 Zona Ori… 3 250 70 3 6 Casa -76.5 3.43
## 2 Zona Ori… 3 320 120 2 3 Casa -76.5 3.43
## 3 Zona Ori… 3 350 220 2 4 Casa -76.5 3.44
## 4 Zona Sur 4 400 280 5 3 Casa -76.5 3.44
## 5 Zona Nor… 5 260 90 2 3 Apar… -76.5 3.46
## 6 Zona Nor… 5 240 87 3 3 Apar… -76.5 3.37
Verificar datos faltantes en el conjunto data1
data1 <- na.omit(data1)
data1 %>%
summarise_all(funs(sum(is.na(.)))) %>%
t()
## [,1]
## zona 0
## estrato 0
## preciom 0
## areaconst 0
## banios 0
## habitaciones 0
## tipo 0
## longitud 0
## latitud 0
dim(data1)
## [1] 8319 9
Al eliminar las columnas piso, parqueaderos y barrio y los pocos registros faltantes (3 en cada una) de las otras variables, queda por ajustar los registros con cero baños que se cambian por la moda de la distribución y se interpreta que los registros con cero habitaciones son apartaesetudios tipo loft (un solo ambiente). De esta forma, el tamaño del conjunto de datos es de 9 variables por 8.319 registros.
Cambiar los registros con cero baños por la moda (2 baños)
data1$banios[data1$banios == 0] <- 2
summary(data1)
## 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 longitud
## Min. : 1.000 Min. : 0.000 Length:8319 Min. :-76.59
## 1st Qu.: 2.000 1st Qu.: 3.000 Class :character 1st Qu.:-76.54
## Median : 3.000 Median : 3.000 Mode :character Median :-76.53
## Mean : 3.122 Mean : 3.605 Mean :-76.53
## 3rd Qu.: 4.000 3rd Qu.: 4.000 3rd Qu.:-76.52
## Max. :10.000 Max. :10.000 Max. :-76.46
## latitud
## Min. :3.333
## 1st Qu.:3.381
## Median :3.416
## Mean :3.418
## 3rd Qu.:3.452
## Max. :3.498
En esta parte se busca reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables numéricas en componentes principales para identificar características clave que influyan en la variación de precios y oferta del mercado.
Preparar el conjunto de datos con solo las variables numéricas y las de interés
Por ser de tipo categórico se eliminan las variables zona y tipo, y por no aportar al análisis también se eliminan las variables talitud y longitud.
dataPCA <- data1[, -c(1, 7, 8, 9)]
head(dataPCA)
## # A tibble: 6 × 5
## estrato preciom areaconst banios habitaciones
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 3 250 70 3 6
## 2 3 320 120 2 3
## 3 3 350 220 2 4
## 4 4 400 280 5 3
## 5 5 260 90 2 3
## 6 5 240 87 3 3
Estimación de los componentes principales
Con el fin de evitar que las variables que tienen una escala con valores más grandes afecten las estimaciones realizadas (sesgos), prcomp centra cada variable como paso previo al proceso de estimación de los componentes principales.
vivienda_PCA <- prcomp(dataPCA, scale=TRUE)
names(vivienda_PCA)
## [1] "sdev" "rotation" "center" "scale" "x"
Las medias, previa la normalización de las variables (en la escala original) son:
vivienda_PCA$center
## estrato preciom areaconst banios habitaciones
## 4.633610 433.904436 174.934938 3.122130 3.605361
Las desviaciones, previa la normalización de las variables (en la escala original) son:
vivienda_PCA$scale
## estrato preciom areaconst banios habitaciones
## 1.029222 328.665025 142.964126 1.412083 1.459537
El elemento rotation almacenado en el objeto vivienda_PCA contiene el valor de las cargas para cada componente (eigenvector).
vivienda_PCA$rotation
## PC1 PC2 PC3 PC4 PC5
## estrato 0.3294370 -0.6743334 0.4372443 -0.4595551 0.1853975
## preciom 0.5070293 -0.2777198 -0.2987254 0.1901997 -0.7351056
## areaconst 0.4947207 0.1684491 -0.6444239 -0.3216029 0.4562518
## banios 0.5206248 0.1038611 0.3384971 0.6882647 0.3603806
## habitaciones 0.3443745 0.6549686 0.4355665 -0.4189230 -0.2953094
En la siguiente matriz se calcula el valor de las componentes principales para cada observación (principal component scores) multiplicando los datos por los vectores de carga:
head(vivienda_PCA$x)
## PC1 PC2 PC3 PC4 PC5
## [1,] -0.6497408 2.1676916 0.6315001 0.11219953 -0.73350473
## [2,] -1.4452657 0.7476504 -0.7925013 0.41389497 -0.37872036
## [3,] -0.8169917 1.2888777 -0.9720997 -0.08072210 -0.32901318
## [4,] 0.6579840 0.4340404 -0.4424545 1.11599091 0.89873768
## [5,] -1.0014740 -0.5473727 0.2469204 -0.44635566 0.02000406
## [6,] -0.6740165 -0.4604560 0.5183360 0.03622974 0.31037478
El tamaño de la matriz resultante es igual a la de entrada, o sea, 8.319 registros por 5 variables.
dim(vivienda_PCA$x)
## [1] 8319 5
Elección del número de compotentes principales
¿Cuántos componentes elegir?
Si el objetivo es reducir la dimensión de los datos, se debe decidir cuántos componentes principales seleccionar. El plnateamiento más frecuente es utilizar una regla ad hoc para seleccionar los componentes que explican la mayor parte de la viarianza. Se puede hacer esto a través de un diagrama de barras. Opcionalmente, se puede seleccionar los componentes superiores de manera que la varianza acumulada exceda un umbral, por ejmplo el 80%. Además, se puede inspeccionar las cargas para determinar si el compoente tiene una interpretación intuitiva.
P. Bruce, A. Bruce, P. Gedeck. Estadística práctica para ciencia de datos con R y Python. Pág. 285.
Entonces, el objetivo principal del ACP es poder ver si los dos o tres primeros componentes explican la mayor parte de la variación de las variables iniciales. Si es así, se pueden considerar estos dos componentes, reduciendo la dimensión de los datos a \(R^2\) y considerar su representación gráfica en el plano cartesiano.
fviz_eig(vivienda_PCA, addlabels = TRUE)
En este caso el primer componente principal explica el 58,9% de la variabilidad contenida en el conjunto de datos de entrada y entre los dos primeros se supera el 80% (82,6%), lo cual indicaría que con solo una variable (CP1) que se obtiene mediante una combinación lineal de las variables se puede resumir gran parte de la variabilidad que contiene la base de datos.
Gráfico de correlaciones de variables
fviz_pca_var(vivienda_PCA, col.var = "black")
El gráfico anterior muestra las relaciones entre todas las variables y permite identificar el sentido y la caracterización de los componentes, en el caso de las viviendas es de esperar que el área de un inmueble tenga una correlación directa fuerte con el número de baños y de habitaciones que tenga, es decir, a mayor número de habitaciones y de baños se espera una mayor área de la vivienda; de la misma forma, el precio de un inmuble dependerá en buena medida del estrato socioeconómico donde se ubique.
Representación gráfica de los dos primeros componentes
fviz_pca_biplot(vivienda_PCA, repel = TRUE, habillage = data1$tipo, col.var = "#034A94", col.ind = c("#DEDEDE", "#034A94"))
La representación gráfica de los dos primeros componetes principales permite observar la relación existente entre las variables.
En este caso el primer componente principal explica el 58,9% de la variabilidad contenida en el conjunto de datos de entrada y entre los dos primeros se supera el 80% (82,6%), lo cual indicaría que con solo una variable (CP1) que se obtiene mediante una combinación lineal de las variables disponibles se puede resumir gran parte de la variabilidad que contiene la base de datos.
En este caso, es de esperar que el área de un inmueble tenga una correlación directa fuerte con el número de baños y de habitaciones que incluya, es decir, a mayor número de habitaciones y de baños se espera una mayor área de la vivienda; de la misma forma, el precio de un inmuble dependerá en buena medida del estrato socioeconómico donde se ubique.
Este análsis se realiza para agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.
Para este punto se utiliza las variables estrato, preciom y areaconst.
conglo <- data1[, c(2, 3, 4)]
head(conglo)
## # A tibble: 6 × 3
## estrato preciom areaconst
## <dbl> <dbl> <dbl>
## 1 3 250 70
## 2 3 320 120
## 3 3 350 220
## 4 4 400 280
## 5 5 260 90
## 6 5 240 87
Dado que los rangos de las variables de interés son diferentes y con el fin de que estas diferencias en las dimensiones de las variables no afecten los cálculos de las distancias se estandariza las variables.
conglo_z <- scale(conglo)
conglo_z <- as.data.frame(conglo_z)
head(conglo_z)
## estrato preciom areaconst
## 1 -1.5872276 -0.5595498 -0.7339949
## 2 -1.5872276 -0.3465670 -0.3842568
## 3 -1.5872276 -0.2552886 0.3152194
## 4 -0.6156201 -0.1031580 0.7349051
## 5 0.3559875 -0.5291236 -0.5940997
## 6 0.3559875 -0.5899759 -0.6150839
Distancias euclidianas corresppondientes a los valores estandarizados
dist_conglo <- dist(conglo_z, method = "euclidean")
Cluster jerárquico con el método comlete
hc_conglo <- hclust(dist_conglo, method = "complete")
Determinar a qué cluster pertence cada observación
clu_assigments <- cutree(hc_conglo, k=3)
Asignación de los clusters
asignacion <- conglo_z %>% mutate(cluster = as.factor(clu_assigments))
Graficar los puntos
ggplot(asignacion, aes(x = preciom, y = areaconst, color = cluster)) +
geom_point(size = 3) +
geom_text(aes(label = cluster), vjust = -0.8) +
theme_classic()
Graficar el dendograma
plot(hc_conglo, cex = 0.6, main = "Dendograma de Inmuebles", las = 1,
ylab = "Distancia Euclidiana", xlab = "Grupos")
rect.hclust(hc_conglo, k = 2, border = 2:5)
Clasificar los inmuebles
dendograma <- hclust(dist_conglo, method = "average")
grupo = cutree(dendograma, k = 3)
table(grupo)
## grupo
## 1 2 3
## 8226 86 7
Definir el número de conglomerados
barplot(sort(dendograma$height, decreasing = TRUE), horiz = TRUE,
main = "Agregaciones (distancias euclidianas)",
col = "blue", ylab = "Nodo", xlab = "Peso", xlim = c(0, 5))
*Calcular el coeficiente de Silhouette**
library(cluster)
sil <- silhouette(clu_assigments, dist(conglo_z))
prom_sil <- mean(sil[,3])
cat("Promedio del Coeficiente de Silhouette para k=3: ", prom_sil)
## Promedio del Coeficiente de Silhouette para k=3: 0.5096536
Al tener en cuenta las variables estrato, preciom y areaconst se esperaría observar unas agrupaciones más definidas, porque el precio de un inmueble está muy relacionada con su área y con su ubicación, pero esto no se logra en los resultados de este Análisis de Conglomerados, realizando varios grupos k, los resultados no mejoran y se observa que los datos se concentran en un solo grupo. Entonces, para el conjunto de datos, teniendo en cuenta los registros de casas y apartamentos con las 3 variables mencionadas, no fue posible formar estadísticamente agrupaciones acordes a la realidad.
Para poder realizar un análisis gráfico con esta técnica, es necesario que las variables que se use tengan más de 2 categorías, por tal razón no se puede utilizar directamente la variable tipo. Entonces, para examinar e identificar patrones de comportamiento en el mercado inmobiliario se utilizan las variables estrato y zona.
De esta forma, se toman los 8.319 registros del conjunto de datos preparado para el punto de Análisis de Componentes Princiales, a su vez, dicho conjunto de datos se tomó de la base de datos de vivienda contenida en el paqueteMET.
correspondencia <- data1[, c(1, 2)]
head(correspondencia)
## # A tibble: 6 × 2
## zona estrato
## <chr> <dbl>
## 1 Zona Oriente 3
## 2 Zona Oriente 3
## 3 Zona Oriente 3
## 4 Zona Sur 4
## 5 Zona Norte 5
## 6 Zona Norte 5
Transformar la variable estrato de categórica a numérica
correspondencia$estrato <- as.factor(correspondencia$estrato)
glimpse(correspondencia)
## Rows: 8,319
## Columns: 2
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur", "Z…
## $ estrato <fct> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, 3, 3,…
Verificar datos faltantes en el conjunto correspondencia
correspondencia %>%
summarise_all(funs(sum(is.na(.)))) %>%
t()
## [,1]
## zona 0
## estrato 0
Acortar los nombres de los valores de las variables
En la variable zona se deja solo la ubicación y en la variable tipo se cambia el valor Apartamento por Apto.
correspondencia$zona[correspondencia$zona=="Zona Centro"] <- "Centro"
correspondencia$zona[correspondencia$zona=="Zona Norte"] <- "Norte"
correspondencia$zona[correspondencia$zona=="Zona Oeste"] <- "Oeste"
correspondencia$zona[correspondencia$zona=="Zona Oriente"] <- "Oriente"
correspondencia$zona[correspondencia$zona=="Zona Sur"] <- "Sur"
head(correspondencia)
## # A tibble: 6 × 2
## zona estrato
## <chr> <fct>
## 1 Oriente 3
## 2 Oriente 3
## 3 Oriente 3
## 4 Sur 4
## 5 Norte 5
## 6 Norte 5
Se construye una tabla de referencia cruzada con las variables de interés para este análisis:
tabla <- table(correspondencia$zona, correspondencia$estrato)
colnames(tabla) <- c("E3", "E4", "E5", "E6")
tabla
##
## E3 E4 E5 E6
## Centro 105 14 4 1
## Norte 572 407 769 172
## Oeste 54 84 290 770
## Oriente 340 8 2 1
## Sur 382 1616 1685 1043
Hipótesis de independencia entre las variables Apto y Casa
chisq.test(tabla)
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
Por el resultado obtenido (p-value = 0.0000) se rechaza la hipótesis nula indicando que existe algún tipo de relación entre las dos variables.
Análisis de correspondencia
Ahora se preocede a realizar el análisis de correspondecia que consiste en estimar las coordenadas para cada uno de los niveles de las dos variables y representarlas en un plano cartesiano.
ac <- CA(tabla)
A través de los resultados y los gráficos del Análisis de Correspondencia es posible establecer las siguientes relaciones:
-El estrato 3 se encuentra ubicado en la Zona Oriente y en la Zona Centro. -Los estratos 4 y 5 se encuentran ubicados mayoritariamente en la Zona Sur y en la Zona Norte. -El estrato 6 se encuentra ubicado en la Zona Oeste.
También es conveniente revisar los resultados numéricos del Análisis de Correspondencia:
summary(ac)
##
## Call:
## CA(X = tabla)
##
## The chi square of independence between the two variables is equal to 3830.435 (p-value = 0 ).
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3
## Variance 0.322 0.127 0.011
## % of var. 69.966 27.680 2.354
## Cumulative % of var. 69.966 97.646 100.000
##
## Rows
## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
## Centro | 47.079 | 1.725 13.761 0.942 | 0.364 1.547 0.042 |
## Norte | 46.762 | 0.390 10.887 0.750 | -0.147 3.920 0.107 |
## Oeste | 135.034 | -0.569 14.476 0.345 | 0.783 69.204 0.653 |
## Oriente | 184.564 | 2.015 53.171 0.928 | 0.537 9.563 0.066 |
## Sur | 47.004 | -0.209 7.704 0.528 | -0.188 15.767 0.428 |
## Dim.3 ctr cos2
## Centro 0.228 7.148 0.016 |
## Norte -0.170 61.735 0.143 |
## Oeste -0.037 1.820 0.001 |
## Oriente 0.160 10.006 0.006 |
## Sur 0.061 19.291 0.044 |
##
## Columns
## Iner*1000 Dim.1 ctr cos2 Dim.2 ctr cos2
## E3 | 253.402 | 1.187 76.333 0.970 | 0.207 5.851 0.029 |
## E4 | 47.744 | -0.154 1.895 0.128 | -0.380 28.966 0.773 |
## E5 | 25.471 | -0.132 1.796 0.227 | -0.204 10.824 0.542 |
## E6 | 133.827 | -0.519 19.976 0.481 | 0.539 54.359 0.518 |
## Dim.3 ctr cos2
## E3 0.015 0.350 0.000 |
## E4 0.136 43.547 0.099 |
## E5 -0.133 54.323 0.231 |
## E6 0.028 1.780 0.001 |
Dado que la tabla de referencia cruzada con las variables utilizadas para este Análisis de Correspondencia es de cinco categorías en las filas (Centro, Norte, Oeste, Oriente y Sur) y de cuatro categorías en las columenas (Estrato 3, Estrato 4, Estrato 5 y Estrato 6) el número de dimensiones resultante corresponde al menor número de filas y columnas, o sea, 3 dimensiones. Como se observa en la primera tabla del resumen estadístico anterior, la primera dimensión explica el 69.9% de la variablidad y entre la primera y la segunda el 97,6% y, se concluye que con las dos primeras dimensiones es suficiente para explicar las afinidades.
En el resumen estadístico del Análisis de Correspondencia para cada atributo (fila y columna) se presentan las inercias de cada nivel del atributo, y para cada dimensión su coordenada y dos medidas más: la contribución a esa coordenada concreta y la medida de calidad cos2 (coseno cuadrado, coordenadas cuadradas).