## zona piso estrato preciom areaconst parqueaderos
## 3 2638 3 2 3 1605
## banios habitaciones tipo barrio
## 3 3 3 3
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## 'data.frame': 8322 obs. of 10 variables:
## $ zona : chr "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : num 3.77 3.77 3.77 2 1 ...
## $ estrato : num 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ barrio : chr "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## piso estrato preciom areaconst parqueaderos banios
## [1,] 0.0000000 -1.5875138 -0.5596093 -0.7341272 -0.8264234 -0.07795178
## [2,] 0.0000000 -1.5875138 -0.3465894 -0.3843261 -0.8264234 -0.77825510
## [3,] 0.0000000 -1.5875138 -0.2552951 0.3152762 0.1630750 -0.77825510
## [4,] -0.8195263 -0.6157311 -0.1031380 0.7350376 1.1525734 1.32265485
## [5,] -1.2822909 0.3560517 -0.5291779 -0.5942068 -0.8264234 -0.77825510
## [6,] -1.2822909 0.3560517 -0.5900407 -0.6151949 -0.8264234 -0.07795178
## habitaciones
## [1,] 1.6409799
## [2,] -0.4148373
## [3,] 0.2704351
## [4,] -0.4148373
## [5,] -0.4148373
## [6,] -0.4148373
Se observan algunos de los datos estandarizados.
## Standard deviations (1, .., p=7):
## [1] 1.8434505 1.1593802 0.9302424 0.7641968 0.6219475 0.4864764 0.4297700
##
## Rotation (n x k) = (7 x 7):
## PC1 PC2 PC3 PC4 PC5
## piso -0.07162969 -0.53183050 0.81715972 0.19894710 0.05030326
## estrato 0.30133537 -0.56021703 -0.22501404 -0.51864814 -0.19290153
## preciom 0.47637177 -0.23466331 -0.09118937 0.01642218 0.27180156
## areaconst 0.45566067 0.16899062 0.04918363 0.12457297 0.72176411
## parqueaderos 0.39914762 -0.10464045 -0.19683839 0.74620004 -0.45182081
## banios 0.46798667 0.08900996 0.19993121 -0.29523627 -0.27077675
## habitaciones 0.30195882 0.54846705 0.43836776 -0.17792442 -0.29660912
## PC6 PC7
## piso 0.02933207 0.03612136
## estrato 0.44334229 0.20484941
## preciom -0.16914979 -0.77905721
## areaconst 0.18723065 0.43575144
## parqueaderos 0.11172616 0.13246482
## banios -0.70006724 0.28725351
## habitaciones 0.48615163 -0.24466507
El gráfico muestra de manera esquemática la explicación de la variabilidad por parte de los atributos numéricos del dataframe.
En el gráfico pueden observarse de manera esquemática la proyección de los datos en el espacio definido por los dos primeros componentes principales. Por otra parte, se evidencia el peso de los datos y su ubicación dentro del plano bidimensional.
Se toman cuatro ejemplos de manera aleatoria con el fin de evaluar el comportamiento de las variables.
Se observa que los puntos seleccionados se encuentran dentro del grueso de los datos.
En términos generales, se aplicó PCA a un conjunto de datos de vivienda con siete atributos numéricos: piso, estrato, precio, área construida, parqueaderos, baños y habitaciones. La estimación de los componentes principales se realizó a partir de la matriz de covarianza asociada con las raíces cuadradas de los valores originales. Los resultados mostraron que el primer componente principal explica el 1.483 de la varianza, el segundo componente principal explica el 1.159, mientras el tercer componente explica el 0.930.
Las variables pecio y área construida presentaron una fuerte contribución positiva al componente principal, lo que indica que estos atributos están fuertemente correlacionados, además de contribuir de manera significativa a la variabilidad de los datos. De hecho, PC1 y PC2, juntos, explican el 68.8% de la variabilidad total del conjunto de datos.
Otro aspecto para considerar se relacionó con una alta asociación entre las variables baño y área construida. Esto sugiere que las viviendas con un área construida más grande tienden a tener más baños. En cuanto a la matriz de rotación, las variables con mayor peso para PC1 fueron el precio de la vivienda, el área construida, el número de baños y los parqueaderos. Contrario a una primera impresión, no fue tan significativo la ubicación de la vivienda y el estrato. Para PC2, las variables que presentaron mayor peso fueron el estrato, el número de habitación y el número de pisos.
Un hallazgo interesante tiene que ver con el registro 8073 el cual se relaciona con una vivienda tipo casa con 10 habitaciones, 4 baños, 1 parqueadero, 1440 metros cuadrados de área, estrato 3 y con un valor de 370 millones de pesos. Este registro es atípico, ya que las prestaciones que ofrece la vivienda no están acordes con el valor, además de ser muy diferentes a los criterios de asociación de variables del primer componente principal. Este hecho presenta información extrema de valor para una adecuada interpretación del DataFrame.
En términos generales, el Análisis de Componentes Principales acá realizado proporcionó una visión valiosa de la estructura subyacente de los datos de las viviendas, permitiendo la identificación de áreas claves de variabilidad dentro del conjunto de datos numéricos.
Para la realización del análisis de conglomerados se toma la decisión de transformar las variables categóricas en sus frecuencias correspondientes.
La tabla muestra a las variables categóricas convertidas en las frecuencias correspondientes y su respectivo proceso de estandarización. Hecho esto se procede al cálculo de las distancias euclidianas.
El gráfico muestra la agrupación por jerarquías, puede observarse (como ya se vio en el análisis de componentes principales) al relación directa que existe entre el área construida y el precio del inmueble. Por otra parte, cada punto representa un registro del dataframe, mientras su color indica a qué agrupamiento pertenece.
La mayoría de los datos se concentran entre 0 y 2 en el eje “precio” y entre 0 y 4 en el eje “área construida”. Hay algunos puntos dispersos que se extienden más allá de estas concentraciones centrales, lo que podría indicar viviendas que son atípicas en términos de las variables “precio” y “área construida”.
Otro aspecto importante para considerar tiene que ver con la gran cantidad de puntos verdes en el cuadrante inferior izquierdo de gráfico. Esto indica que estas viviendas tiene valores bajos en relación con el precio y el área construida en comparación con otros inmuebles.
En cuanto a los puntos de color rojo, se ve que representan viviendas con un alto precio en función del área construida, no obstante, mientras el precio incrementa de manera sustancial, el área no presenta una variación muy marcada.
Por último, el agrupamiento relacionado con los puntos azules representan viviendas con elevados precios y elevada área de construcción.
En cuanto al dendograma, puede verse como líneas verticales representan cada uno de los cuatro grupos elegidos para el agrupamiento, mientras las líneas horizontales representan las distancias entre cada grupos. La longitud de las líneas horizontales indica qué tan diferentes son los grupos que se están uniendo con grupos más similares unidos por líneas más cortas. Este dendograma muestra las características de los grupos acompañadas de una alta diversidad.
## Coeficiente de Silhouette promedio k=4 : 0.2688765
## Coeficiente de Silhouette promedio k=4 : 0.2688765
El coeficiente de Silhoutte promedio es k = 4 lo que valida al agrupamiento de viviendas dentro del conjunto de los datos asociados con los registros. En este caso, el coeficiente es 0.27 lo que significa la posibilidad de superposición y que la asignación de los objetos a sus grupos no es muy óptima.
En el análisis de conglomerados realizado, se transformaron las variables categóricas en sus frecuencias correspondientes y se estandarizaron. Posteriormente, se calcularon las distancias euclidianas y se procedió a la agrupación jerárquica. El gráfico resultante reveló una relación directa entre el área construida y el precio del inmueble, corroborando los hallazgos anteriores del análisis de componentes principales.
La mayoría de los datos se agruparon entre 0 y 2 en el eje del precio y entre 0 y 4 en el eje del área construida, con algunos puntos dispersos que podrían representar viviendas atípicas. Se observó una gran cantidad de puntos verdes, indicando viviendas con valores bajos de precio y área construida. Los puntos rojos representaron viviendas con un alto precio relativo al área construida, aunque el área no varió significativamente a medida que el precio aumentaba.
El dendograma mostró una alta diversidad entre los grupos, con líneas verticales que representaban los cuatro grupos elegidos y líneas horizontales que representaban las distancias entre los grupos. Los puntos azules representaron viviendas con precios y áreas de construcción elevados.
Finalmente, el coeficiente de Silhouette promedio fue de k = 4, validando la agrupación de las viviendas. Sin embargo, un coeficiente de 0.27 sugiere la posibilidad de superposición y una asignación subóptima de los objetos a sus grupos. En resumen, el análisis proporcionó una visión valiosa de las relaciones entre el precio, el área construida y otras variables categóricas en el conjunto de datos de las viviendas.
La variable categórica barrio tiene gran cantidad de registros que sólo figuran unas pocas veces. A partir de esto, se toma la decisión de no incluirla en el análisis de correspondencia ya que estos pocos registros (que componen la inmensa mayoría el dataframe) no podrían mostrar un comportamiento importante para el sector. Por esta razón, y de acuerdo con mi consideración, la variable zona puede mostrar de manera más acertada el comportamiento de determinadas regiones de la ciudad que incluyen barrios. Una vez identificado el comportamiento de las zonas de la ciudad, se podrían crear agrupamientos por barrios. Por otra parte, se decidió no tomar un subconjunto del dataset, sino trabajar con toda la información.
## estrato zona
## 8319 1 1 0
## 3 0 0 2
## 3 3 6
La gráfica muestra los datos faltantes dentro del dataframe.
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Se eliminaron los valores nulos por lo que se dará inicio al Análisis de Correspondencia.
##
## 3 4 5 6
## 1453 2129 2750 1987
La tabla muestra la cantidad de registros por estrato. En este sentido, el estrato que presenta más datos es el 5, seguido del 4, el 6 y el 3.
## zona
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1920 1198 351 4726
La zona que más registros presenta es la Sur, seguida por la Norte, Oeste, Oriente y Centro. Este hecho resulta interesante ya que muestra que el comportamiento inmobiliario se centra en una parte de la ciudad, pasando por alto los sectores populares donde el crecimiento de la población es significativo.
## estrato
## zona 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
La Tabla Cruzada muestra lo siguiente:
Zona Centro: Tiene la mayoría de sus viviendas en el estrato 3 (105 viviendas), con muy pocas en los estratos 4, 5 y 6.
Zona Norte: Tiene una distribución más amplia de estratos, con la mayoría de las viviendas en el estrato 5 (769 viviendas), seguido por el estrato 4 (407 viviendas) y el estrato 3 (572 viviendas).
Zona Oeste: La mayoría de las viviendas están en el estrato 6 (770 viviendas), con un número significativo en el estrato 5 (290 viviendas).
Zona Oriente: La mayoría de las viviendas están en el estrato 3 (340 viviendas), con muy pocas en los estratos 4, 5 y 6.
Zona Sur: Tiene una gran cantidad de viviendas en los estratos 4, 5 y 6, siendo el estrato 5 el que tiene la mayor cantidad (1685 viviendas).
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
A partir del resultado de 3830 originado por la prueba de Chi-cuadrado, se establece un valor relativamente pequeño lo que muestra la no existencia de discrepancia entre las observaciones y lo que se esperaría si las variables no estuvieran relacionadas. Se toma un valor de 12 para los grados de libertad asociado al número de categorías existentes dentro del dataframe de viviendas. El p-value indica una relación muy fuerte entre las variable. En términos generales, es muy poco probable que los resultados obtenidos se deban al azar.
La figura muestra lo siguiente:
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32215213 69.965515 69.96551
## dim 2 0.12745096 27.680002 97.64552
## dim 3 0.01084108 2.354483 100.00000
Estos resultados están mostrando la información que se conserva al proyectar los datos en un espacio de menor dimensión. En este caso, se puede ver que las primeras dos dimensiones conservan cerca del 98% de la varianza, lo que establece una buena elección para conservar la información asociadas a los registro del dataframe.
El gráfico de barra muestra como el primer componente explica el 70% de la varianza, mientras el segundo componente el 27.7%.
La Zona Sur tiene una gran cantidad de viviendas en los estratos 4, 5 y 6, siendo el estrato 5 el que tiene la mayor cantidad. Esto contrasta con la Zona Centro y la Zona Oriente, donde la mayoría de las viviendas están en el estrato 3. La Zona Norte tiene una distribución más amplia de estratos, mientras que la Zona Oeste se caracteriza por tener la mayoría de sus viviendas en el estrato 6.
En cuanto a la relación entre variables, la prueba de Chi-cuadrado muestra un valor relativamente pequeño, lo que indica que no existe una discrepancia significativa entre las observaciones y lo que se esperaría si las variables no estuvieran relacionadas. Esto sugiere una fuerte relación entre las variables de zona y estrato.
Al proyectar los datos en un espacio de menor dimensión, las primeras dos dimensiones conservaron cerca del 98% de la varianza. Esto indica que la elección de estas dos dimensiones es adecuada para conservar la información asociada a los registros del dataframe.
El estrato 6 predomina en la Zona Oeste, el estrato 4 se ubica en la Zona Sur, el estrato 5 está distribuido entre la Zona Sur y la Zona Norte, y el estrato 3 está distribuido en la Zona Centro y la Zona Oriente.
Estos hallazgos proporcionan una visión detallada de la distribución de los estratos de vivienda en diferentes zonas de la ciudad, y podrían ser útiles para informar las decisiones de planificación urbana y desarrollo inmobiliario. Sin embargo, es importante tener en cuenta que estos resultados son específicos para el conjunto de datos analizado y pueden no ser generalizables a otras ciudades o regiones, además de pasar por alto una proporción importante del sector inmobiliario ya que se centra en sectores con ingresos medio-alto y altos.
vivienda_2 = vivienda[,-c(1, 12, 13)]
datos_faltantes = colSums(is.na(vivienda_2)) datos_faltantes
piso <- as.numeric(as.factor(piso))
imputed_data = mice(vivienda_2, m = 1, method = ‘mean’) vivienda_3 = complete(imputed_data)
num_vars = c(‘piso’, ‘estrato’, ‘preciom’, ‘areaconst’, ‘parqueaderos’, ‘banios’, ‘habitaciones’)
vivienda_4 = viv_copia[num_vars] %>% scale() head(vivienda_4)
prcomp(vivienda_4)
vivienda_4 = scale(vivienda_3[num_vars]) res.pca = prcomp(vivienda_4) fviz_eig(res.pca, addlabels = TRUE)
fviz_pca_var(res.pca, col.var = “contrib”, gradient.cols = c(“#FF7F00”, “#034D94”), repel = TRUE )
plot(res.pca, type = ‘l’)
biplot(res.pca, scale = 0)
columnas = c(‘piso’, ‘estrato’, ‘preciom’, ‘areaconst’, ‘parqueaderos’, ‘banios’, ‘habitaciones’) datos = rbind(viv_copia[8073, columnas], viv_copia[6049, columnas], viv_copia[1779, columnas], viv_copia[6614, columnas]) datos = as.data.frame(datos) rownames(datos) = c(“Ejemplo 8073”,“Ejemplo 6049”,“Ejemplo 1779”,“Ejemplo 833”) datos
casos1 = rbind(res.pca\(x[8037,1:2],res.pca\)x[6049,1:2]) # CP1 rownames(casos1) = c(“8037”,“6049”) casos1 = as.data.frame(casos1) casos2 = rbind(res.pca\(x[1779,1:2], res.pca\)x[6614,1:2]) # CP2 rownames(casos2) = c(“1779”,“6614”) casos2 = as.data.frame(casos2) fviz_pca_ind(res.pca, col.ind = “#DEDEDE”, gradient.cols = c(“#00AFBB”, “#E7B800”, “#FC4E07”)) + geom_point(data = casos1, aes(x = PC1, y = PC2), color = “red”, size = 3) + geom_point(data = casos2, aes(x = PC1, y = PC2), color = “blue”, size = 3)
datos = rbind(viv_copia[8073,], viv_copia[6049,], viv_copia[1779,], viv_copia[6614,]) datos
frecuencias_zona = table(zona) zona = frecuencias_zona[zona]
frecuencias_tipo = table(tipo) tipo = frecuencias_tipo[tipo]
frecuencias_barrio = table(barrio) barrio = frecuencias_barrio[barrio]
vivienda_5 = scale(vivienda_4) vivienda_5 = as.data.frame(vivienda_5) head(vivienda_5, 10)
dist_viv = dist(vivienda_5, method = ‘euclidean’)
plot(hc_viv, cex = 0.6, main = “Dendograma de Viviendas”, las=1, ylab = “Distancia euclidiana”, xlab = “Grupos”) rect.hclust(hc_viv, k = 2, border = 2:5)
dist_viv <- dist(vivienda_5, method = “euclidean”) dendograma <- hclust(dist_viv, method = “average”)
barplot(sort(dendograma$height, decreasing = TRUE), horiz = TRUE, main = “Agregaciones (distancias euclidianas)”, col = “lightblue”, ylab = “Nodo”, xlab = “Peso”, xlim = c(0, 2.5))
set.seed(1234) vivienda_3 = sample_n(vivienda, 8322)
set = vivienda_3[, c(‘estrato’, ‘zona’)]
set <- na.omit(set) grafico <-md.pattern(set, rotate.names = TRUE)
conteo_estratos = table(vivienda_3$estrato) conteo_estratos
chisq.test(tabla)
resultados_ac = CA(tabla)
valores_prop = resultados_ac$eig ; valores_prop
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle(““)+ ylab(”Porcentaje de varianza explicado”) + xlab(“Ejes”)