A continuación se realizará un análisis asociado con la base de datos “Viviendas” a partir de tres aspectos básicos:


  1. Análisis de Componentes Principales.
  2. Análisis de Conglomerados.
  3. Análisis de Correspondencia.


VISUALIZACIÓN DE LOS DATOS

vivienda
Se observa que el dataset tiene un total de 13 variables y 8322 registros. Por otra parte, 4 variables son de tipo categórico y 9 de tipo numérico.

La gráfica muestra la existencia de una gran cantidad de datos faltantes que representan el 51% del total del dataset. Esto hace que sea necesario establecer acciones de reemplazo e imputación de datos.

PREPARACIÓN DE LOS DATOS

Se eliminan las variables que pueden ser explicadas a través de otras o no presentar relevancia dentro del proceso de evaluación. Por esta razón, se toma la decisión de eliminar 3 variables relacionadas con el Id, la Longitud y la Latitud. Esta decisión se sustenta en que la Longitud y la Latitud pueden comprenderse más fácilmente a partir del barrio y la zona de ubicación, mientras el Id no representa mayor relevancia para la comprensión de la información.

En la gráfica puede observarse que las variables Id, Longitud y Latitud fueron eliminadas, disminuyendo la dimensionalidad del DataFrame de 13 atributos a 10.


##         zona         piso      estrato      preciom    areaconst parqueaderos 
##            3         2638            3            2            3         1605 
##       banios habitaciones         tipo       barrio 
##            3            3            3            3


De acuerdo con la tabla, Las variables que presentan mayor número de datos faltantes son piso y parqueaderos, por lo que se desarrollará una estrategia de imputación consistente en reemplazar los valores nulos por la media para el atributo parqueaderos. En cuanto a la variable piso se observa algo particular. Este atributo debe ser numérico ya que en la base de datos el piso se relaciona con los niveles de la vivienda, no obstante, existe caracteres dentro de la tipografía de digitación de los NA que originan dificultades en el reconocimiento del tipo correcto. Por esta razón, la variable se convirtió en numérica, imputando los valores nulos a través de la media. En cuento a los atributos categóricos, se imputarán a través de la moda.
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

Llegados a este punto, se imputaron los valores nulos a través de técnicas de sustitución para variables numéricas y categóricas. De acuerdo con la gráfica, se observa que el DataSet se encuentra limpio y con la información lista para usarse en lo establecido dentro del ejercicio de la Evaluación de la Oferta inmobiliaria.

ANÁLISIS DE COMPONENTES PRINCIPALES


## '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" ...
De acuerdo con la estructura del DataFrame se observan 10 Atributos de los cuales tres son de tipo categórico y siete de tipo numérico. Por esta razón, se procederá a crear un vector asociado con los siete atributos numéricos con el fin de iniciar el proceso del análisis de componentes principales. Después de esto, se procedió a estandarizar los datos con el objetivo de evitar desequilibrios dentro de las clases.


##            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
Se observa la estimación de los componentes principales a partir de la matriz de covarianza asociada con las raíces cuadradas de los valores originales. De acuerdo con la tabla, PC1 explica el 1.843 de la varianza, PC2 el 1.159 y PC3 el 0.930. De acuerdo con la matriz, se evidencia que los atributos precio y área construido tienen una fuerte contribución positiva con PC1.


En este gráfico se observa la contribución de los atributos para explicar la variabilidad contenida en los datos. En este caso, el primer componente explica el 48.5 y el segundo el 19.2. PC1 y PC2 explican el 68.8% de la variabilidad. Por otro lado, y de acuerdo con la imagen, PC1+PC2+PC3 explican el 80% del comportamiento de los datos.


A partir del del gráfico de análisis de componentes, puede verse que los atributos baños y área construida presentan una alta asociación. Por otra parte, y a partir de la matriz de rotación, se puede inferir que los atributos con mayor peso para PC1 son el precio de la vivienda, el área construida, el número de baños y los parqueaderos. En cuanto a PC2, los atributos que presentan mayor peso son el estrato, el número de habitaciones y el número de pisos.


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.



CONCLUSIÓN

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.

ANÁLISIS DE CONGLOMERADOS

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.


ELECCIÓN DEL NÚMERO DE CONGLOMERADOS


## 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.


CONCLUSIÓN

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.


ANÁLISIS DE CORRESPONDENCIAS

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:

  • El estrato 6 predomina en la Zona Oeste.
  • El estrato 4 se ubica en la Zona Sur.
  • El estrato 5 está distribuido ente la Zona Sur y la Zona Norte.
  • El estrato 3 está distribuido en la Zona Centro y la Zona Oriente


GRADO DE REPRESENTATIVIDAD

##       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%.


CONCLUSIÓN

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.


ANEXOS

LIBRERÍAS UTILIZADAS:

  • library(“paqueteMODELOS”)
  • library(“devtools”)
  • library(“mice”)
  • library(“tidyverse”)
  • library(“factoextra”)
  • library(“factoextra”)
  • library(“cluster”)
  • library(“FactoMineR”)
  • library(“FactoMineR”)
  • library(“factoextra”)
  • library(“gridExtra”)
  • library(“carData”)
  • library(“ggplot2”)

CÓDIGOS UTILIZADOS

LIMPIEZA DEL DATASET:

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

ANÁLISIS DE COMPONENTES PRINCIPALES:

  • 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

ANÁLISIS DE CONGLOMERADOS:

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

ANÁLISIS DE CORRESPONDENCIA:

  • 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”)