El propósito general del problema es poder realizar un análisis holístico de datos de viviendas de tipo urbano de una empresa inmobiliaria, para poder analizar a profundidad el mercado a partír de identificar patrones, relaciones y clasificaciones que permitan mejorar la toma de desiciones en la valoración, compra y venta de un inmueble. Para esto se pone a disposición distintos análsis:

ACP

Un aspecto importante para analizar cualquier tipo de información es poder identificar características desde diversas visualizaciones gráficas y tabulares, apoyado de diversas estadísticas de tipo descriptivo. Por tal motivo se establece el presente apartado que busca identificar las caractrerísticas que a simple vista son dificil observar.

library(paqueteMODELOS)
data(vivienda)
dim(vivienda)
## [1] 8322   13

La base de datos consta de 8322 registros de viviendas caracterizadas en 13 variables:

  • ID: Número único que identifica cada vivienda en la base de datos. Se utiliza para un seguimiento preciso de las propiedades y para evitar duplicados en el registro.

  • Zona: Indica la ubicación de la vivienda, como “Zona Centro”, “Zona Norte”, “Zona Oeste”, “Zona Oriente”, “Zona Sur”. Ayuda a los clientes a tener una idea general de la dirección en la que se encuentra la propiedad.

  • Piso: El piso en el que se encuentra la vivienda. Representa la altura relativa de la propiedad en un edificio. Puede ser útil para aquellos que prefieren ciertas alturas o tienen restricciones de movilidad.

  • Estrato: Clasificación socioeconómica de la zona en la que se encuentra la vivienda. Puede influir en el valor de la propiedad y en los costos asociados, como los servicios públicos.

  • Precio: Precio de la vivienda en moneda local. Es uno de los aspectos más críticos para los compradores y vendedores, ya que determina la inversión requerida.

  • Áreaconst: La superficie construida de la vivienda en metros cuadrados. Ayuda a los compradores a entender el espacio disponible y a comparar con sus necesidades.

  • Parqueaderos: Número de espacios de estacionamiento disponibles con la vivienda. Esto es importante para aquellos que tienen vehículos y requieren estacionamiento seguro.

  • Baños: Cantidad de baños completos en la vivienda. Ayuda a los compradores a evaluar la comodidad y la funcionalidad de la propiedad.

  • Habitaciones: Número de habitaciones disponibles en la vivienda. Influye en la capacidad de alojar a una familia y a las visitas.

  • Tipo: Clasificación del tipo de vivienda, como “apartamento”, “casa”. Define el estilo y la disposición básica de la propiedad.

  • Barrio: Nombre del barrio o vecindario en el que se encuentra la vivienda. Puede afectar el atractivo de la propiedad en función de la seguridad, comodidades y ambiente circundante.

  • Longitud y Latitud: Coordenadas geográficas que indican la ubicación exacta de la vivienda en el mapa. Pueden ser útiles para visualizar la propiedad en un sistema de información geográfica (SIG) y para mostrar su proximidad a lugares de interés.

Veamos algunos registros del conjunto de datos:

head(vivienda, 3)
##     id         zona piso estrato preciom areaconst parqueaderos banios
## 1 1147 Zona Oriente <NA>       3     250        70            1      3
## 2 1169 Zona Oriente <NA>       3     320       120            1      2
## 3 1350 Zona Oriente <NA>       3     350       220            2      2
##   habitaciones tipo      barrio  longitud latitud
## 1            6 Casa 20 de julio -76.51168 3.43382
## 2            3 Casa 20 de julio -76.51237 3.43369
## 3            4 Casa 20 de julio -76.51537 3.43566
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

En la anterior salida, se observan los 3 primeros datos de 8322 que está compuesto el conjunto de datos, se logra visualizar como está estructurada la información. Ahora bien, observese la siguiente salida que muestra algunas caracterísitas descriptivas más importantes. Existen variables de tipo categórico como es el caso de zona, piso, tipo, barrio, las demás son de tipo numérico y entero.

library(mice)
colSums(is.na(vivienda))
##           id         zona         piso      estrato      preciom    areaconst 
##            3            3         2638            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##         1605            3            3            3            3            3 
##      latitud 
##            3

Se observa que todas las variables tienen valores faltantes, específicamente piso y parqueadero tienen la mayor proporcion con 2638 y 1605 respectivamente

library(visdat) # visualización de datos
library(naniar)
vis_miss(vivienda ,sort_miss = TRUE)

La anterior gráfica permite visualizar los datos faltantes según la proporción de forma descendiente, permite identificar como se encuentra la informración y da miras a tomar desiciones en referencia a que procedimiento realizar para imputar.

Tratamiento de valores faltantes

Existen multitud de procedimientos para aplicar cuando tenemos valores perdidos. Aunque básicamente existen dos aproximaciones posibles:

    1. Eliminar muestras o variables que tienen datos faltantes.df %>% drop_na()
    1. Imputar los valores perdidos, es decir, sustituirlos por estimaciones. Como puede ser por algunos valores específicos df %>% replace_na(list(x = 2, y = 7)) o por medidas estadísticas como la media, mediana, la media recortada, etc df %>% replace_na(as.list(colMeans(.,na.rm = TRUE))).

Como primera medida se quitarán las observaciones que tienen valores faltantes y se realizará el ACP correspondiente:

filas_sin_nulos <- vivienda[complete.cases(vivienda), ]
dim(filas_sin_nulos)
## [1] 4808   13

Realizando el proceso de quitar los registros donde existen valoes nulos, se disminuye el conjunto de datos a 4808

table(vivienda$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##          124         1920         1198          351         4726
table(vivienda$piso)
## 
##   01   02   03   04   05   06   07   08   09   10   11   12 
##  860 1450 1097  607  567  245  204  211  146  130   84   83
table(vivienda$tipo)
## 
## Apartamento        Casa 
##        5100        3219
table(vivienda$parqueaderos)
## 
##    1    2    3    4    5    6    7    8    9   10 
## 3155 2475  520  384   68   68   18   17    4    8

De la anterior información se puede afirmar que:

  • La “zona sur” es la que tiene mayor número de viviendas, es donde las perosnas tienden a vender tener su vivienda, seguido de la “zona norte” y el menor número de viviendas se encuentran en la “zona centro”.

  • El número máximo de pisos donde se encuentran las viviendas es el 12.

  • Los parqueaderos por vivienda es muy razonable, se logra observar que las viviendas tienden a tener uno o dos parqueaderos.

delete <- c("piso","parqueaderos","barrio")
vivienda2 <- vivienda[ ,!(names(vivienda) %in% delete)]
dim(vivienda2)
## [1] 8322   10
#eliminando datos faltantes
vivienda2 <- vivienda2[complete.cases(vivienda2),]
sum(is.na(vivienda2)) # Conteo de valores faltantes
## [1] 0
library(dplyr)

vivienda2 <- vivienda2 %>%
  mutate(zona = case_when(
    zona == "Zona Centro"   ~ 1,
    zona == "Zona Norte"    ~ 2,
    zona == "Zona Oeste"    ~ 3,
    zona == "Zona Oriente"  ~ 4,
    zona == "Zona Sur"      ~ 5,
    TRUE                    ~ as.numeric(zona)
  ))

vivienda2 <- vivienda2 %>%
  mutate(tipo = case_when(
    tipo == "Casa"   ~ 1,
    tipo == "Apartamento"    ~ 2,
    TRUE                    ~ as.numeric(tipo)
  ))
unique(vivienda2$zona)
## [1] 4 5 2 3 1
unique(vivienda2$tipo)
## [1] 1 2

Se procede a cambiar los indices del dataframe para poder identificar a tales viviendas por medio del campo id:

rownames(vivienda2) <- vivienda2$id
vivienda2 <-data.frame(vivienda2, row.names =vivienda2$id )
vivienda2 <- vivienda2[,2:8]
#vivienda2 <- vivienda2[,2:10]
head(vivienda2, n=5)
##      zona estrato preciom areaconst banios habitaciones tipo
## 1147    4       3     250        70      3            6    1
## 1169    4       3     320       120      2            3    1
## 1350    4       3     350       220      2            4    1
## 5992    5       4     400       280      5            3    1
## 1212    2       5     260        90      2            3    2
library(psych)
corPlot(vivienda2,diag = FALSE, cex = 1)

#{r warning=FALSE, message=FALSE} #library(PerformanceAnalytics) #chart.Correlation(vivienda2, histogram = TRUE, method = "pearson") #

ACP

Para hacer el análisis de componentes principales, se usará FactoMineR el cual es un paquete en R diseñado para el análisis exploratorio de datos multivariados utilizando técnicas de análisis factorial, análisis de correspondencia y análisis de correspondencia múltiple. Este paquete es útil para la visualización y el análisis de datos multidimensionales, lo que puede ser especialmente útil en el campo de la minería de datos y la estadística.

El paquete FactoMineR proporciona funciones para realizar análisis de componentes principales (PCA), análisis de correspondencia (CA), análisis de correspondencia múltiple (MCA) y otras técnicas relacionadas. También incluye funciones para la visualización de resultados utilizando gráficos como biplots, gráficos de dispersión, mapas de calor, etc.

library(FactoMineR)
library(factoextra)
pca2 <- PCA(X = vivienda2, scale.unit = TRUE, graph = FALSE)
print(pca2)
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 8319 individuals, described by 7 variables
## *The results are available in the following objects:
## 
##    name               description                          
## 1  "$eig"             "eigenvalues"                        
## 2  "$var"             "results for the variables"          
## 3  "$var$coord"       "coord. for the variables"           
## 4  "$var$cor"         "correlations variables - dimensions"
## 5  "$var$cos2"        "cos2 for the variables"             
## 6  "$var$contrib"     "contributions of the variables"     
## 7  "$ind"             "results for the individuals"        
## 8  "$ind$coord"       "coord. for the individuals"         
## 9  "$ind$cos2"        "cos2 for the individuals"           
## 10 "$ind$contrib"     "contributions of the individuals"   
## 11 "$call"            "summary statistics"                 
## 12 "$call$centre"     "mean of the variables"              
## 13 "$call$ecart.type" "standard error of the variables"    
## 14 "$call$row.w"      "weights for the individuals"        
## 15 "$call$col.w"      "weights for the variables"

El código que he proporcionado anteriormente realiza la cargan de dos paquetes en tu entorno de trabajo de R. El primero es el paquete FactoMineR, que proporciona herramientas para el análisis multivariado, y el segundo es el paquete factoextra, que es útil para visualizar los resultados de los análisis.

Seguidamente, se ejecutar la función PCA(): la cual realiza el análisis de componentes principales (PCA) en los datos contenidos en el objeto vivienda2. La función PCA toma varios argumentos:

  • X = vivienda2: Aquí, vivienda2 es el conjunto de datos sobre el que deseas realizar el PCA.

  • scale.unit = TRUE: Indica que las variables en vivienda2 deben ser escaladas utilizando la desviación estándar antes de realizar el PCA. Esto es útil para asegurarse de que las diferencias en las escalas de las variables no dominen el análisis.

  • graph = FALSE: Indica que no deseas generar gráficos de visualización en este paso del análisis. Si se estableciera en TRUE, se generarían gráficos relacionados con el PCA.

summary(pca2)                  # Ayudas a la interpretación
## 
## Call:
## PCA(X = vivienda2, scale.unit = TRUE, graph = FALSE) 
## 
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
## Variance               3.227   1.478   1.004   0.515   0.348   0.242   0.186
## % of var.             46.104  21.113  14.346   7.357   4.968   3.451   2.661
## Cumulative % of var.  46.104  67.217  81.563  88.920  93.888  97.339 100.000
## 
## Individuals (the 10 first)
##                  Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
## 1147         |  2.767 |  0.013  0.000  0.000 | -2.527  0.052  0.834 |  0.372
## 1169         |  2.270 | -0.833  0.003  0.134 | -1.609  0.021  0.502 |  0.225
## 1350         |  2.225 | -0.197  0.000  0.008 | -1.914  0.030  0.740 |  0.180
## 5992         |  2.258 |  1.125  0.005  0.248 | -0.751  0.005  0.111 |  0.864
## 1212         |  2.063 | -1.316  0.006  0.407 |  0.455  0.002  0.049 | -1.400
## 1724         |  1.936 | -1.010  0.004  0.272 |  0.471  0.002  0.059 | -1.382
## 2326         |  2.244 | -1.740  0.011  0.601 | -0.221  0.000  0.010 | -1.363
## 4386         |  1.771 | -0.489  0.001  0.076 |  0.227  0.000  0.016 | -1.412
## 1209         |  2.651 |  1.135  0.005  0.183 | -1.303  0.014  0.241 | -1.173
## 1592         |  2.673 |  1.432  0.008  0.287 | -0.034  0.000  0.000 | -1.578
##                 ctr   cos2  
## 1147          0.002  0.018 |
## 1169          0.001  0.010 |
## 1350          0.000  0.007 |
## 5992          0.009  0.146 |
## 1212          0.023  0.461 |
## 1724          0.023  0.510 |
## 2326          0.022  0.369 |
## 4386          0.024  0.636 |
## 1209          0.016  0.196 |
## 1592          0.030  0.349 |
## 
## Variables
##                 Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
## zona         |  0.083  0.216  0.007 |  0.123  1.016  0.015 |  0.985 96.654
## estrato      |  0.445  6.139  0.198 |  0.810 44.429  0.657 |  0.002  0.000
## preciom      |  0.807 20.177  0.651 |  0.429 12.435  0.184 | -0.127  1.596
## areaconst    |  0.869 23.426  0.756 | -0.066  0.291  0.004 | -0.086  0.739
## banios       |  0.882 24.096  0.778 |  0.063  0.266  0.004 |  0.012  0.013
## habitaciones |  0.670 13.929  0.450 | -0.531 19.102  0.282 |  0.040  0.160
## tipo         | -0.623 12.017  0.388 |  0.576 22.461  0.332 | -0.092  0.837
##                cos2  
## zona          0.971 |
## estrato       0.000 |
## preciom       0.016 |
## areaconst     0.007 |
## banios        0.000 |
## habitaciones  0.002 |
## tipo          0.008 |
pca2$var                       # Ayudas a la interpretación
## $coord
##                    Dim.1       Dim.2        Dim.3       Dim.4       Dim.5
## zona          0.08342232  0.12252556  0.985208818 -0.02492109  0.08099948
## estrato       0.44509088  0.81032663  0.001584575  0.05603392 -0.28701718
## preciom       0.80694201  0.42868983 -0.126608041 -0.13686117  0.15986871
## areaconst     0.86949682 -0.06562988 -0.086144447 -0.24838375  0.31983202
## banios        0.88184782  0.06271516  0.011597189  0.27378888 -0.10519538
## habitaciones  0.67047121 -0.53133556  0.040043298  0.45306291  0.03187107
## tipo         -0.62276495  0.57616160 -0.091686519  0.38804218  0.34476643
## 
## $cor
##                    Dim.1       Dim.2        Dim.3       Dim.4       Dim.5
## zona          0.08342232  0.12252556  0.985208818 -0.02492109  0.08099948
## estrato       0.44509088  0.81032663  0.001584575  0.05603392 -0.28701718
## preciom       0.80694201  0.42868983 -0.126608041 -0.13686117  0.15986871
## areaconst     0.86949682 -0.06562988 -0.086144447 -0.24838375  0.31983202
## banios        0.88184782  0.06271516  0.011597189  0.27378888 -0.10519538
## habitaciones  0.67047121 -0.53133556  0.040043298  0.45306291  0.03187107
## tipo         -0.62276495  0.57616160 -0.091686519  0.38804218  0.34476643
## 
## $cos2
##                    Dim.1       Dim.2        Dim.3        Dim.4       Dim.5
## zona         0.006959283 0.015012514 9.706364e-01 0.0006210605 0.006560915
## estrato      0.198105893 0.656629245 2.510877e-06 0.0031398006 0.082378860
## preciom      0.651155406 0.183774967 1.602960e-02 0.0187309790 0.025558005
## areaconst    0.756024712 0.004307281 7.420866e-03 0.0616944890 0.102292519
## banios       0.777655582 0.003933191 1.344948e-04 0.0749603495 0.011066069
## habitaciones 0.449531647 0.282317472 1.603466e-03 0.2052659981 0.001015765
## tipo         0.387836184 0.331962187 8.406418e-03 0.1505767325 0.118863891
## 
## $contrib
##                 Dim.1      Dim.2        Dim.3      Dim.4     Dim.5
## zona          0.21564  1.0157750 9.665443e+01  0.1205967  1.886752
## estrato       6.13850 44.4287753 2.500291e-04  0.6096826 23.690056
## preciom      20.17667 12.4345614 1.596202e+00  3.6371581  7.349830
## areaconst    23.42615  0.2914388 7.389580e-01 11.9797588 29.416716
## banios       24.09640  0.2661271 1.339278e-02 14.5557070  3.182319
## habitaciones 13.92917 19.1021336 1.596706e-01 39.8582950  0.292108
## tipo         12.01747 22.4611888 8.370977e-01 29.2388018 34.182220

Al usar la función summary(pca2)en el objeto PCA que contiene los resultados del PCA previamente calculado. Se proporciona un resumen de los resultados, incluyendo información relevante sobre los valores propios, la varianza explicada por cada componente y otras estadísticas importantes. Esto puede ayudar sin lugar a dudas a comprender cómo se distribuye la varianza en los componentes principales y qué contribución hace cada componente a la varianza total.

La linea de código pca2\(\$\)var accede al componente var del objeto pca2. El componente var contiene información detallada sobre las variables originales en relación con los componentes principales. Puede incluir información como las coordenadas de las variables en el espacio de componentes principales, las contribuciones de las variables a cada componente y las correlaciones entre las variables y los componentes.

Considerando lo anterior y adicionalmente que el objetivo del ACP es capturar la mayor cantidad posible de información en un espacio de dimensiones reducidas. Los componentes principales se eligen de tal manera que el primer componente principal explique la mayor varianza posible en los datos, el segundo componente principal explique la mayor varianza no capturada por el primero, y así sucesivamente. Esta anotación da entrada a algo muy importante en estadística multivariada que relaciona la varianza explicada y los valores propios. Los valores propios son numéricamente iguales a las varianzas explicadas por los componentes principales. Es decir, el primer valor propio es igual a la varianza explicada por el primer componente principal, el segundo valor propio es igual a la varianza explicada por el segundo componente principal y así sucesivamente. En este orden de ideas se graficará cada uno de los valores propios asociados al conjunto de datos a analizar.

 pca2$eig
##        eigenvalue percentage of variance cumulative percentage of variance
## comp 1  3.2272687              46.103839                          46.10384
## comp 2  1.4779369              21.113384                          67.21722
## comp 3  1.0042338              14.346197                          81.56342
## comp 4  0.5149894               7.356992                          88.92041
## comp 5  0.3477360               4.967657                          93.88807
## comp 6  0.2415417               3.450596                          97.33866
## comp 7  0.1862935               2.661336                         100.00000
#Varaianza explicada por cada componente principal
fviz_screeplot(pca2, addlabels = TRUE, ylim = c(0, 100))

Considerando las ayudas a la interpretación y la gráfica anterior y la salida de la varianza acumulada se tiene que:

  • El primer componente principal explica el 46% de la variabilidad contenida en la base de datos de vivienda, así mismo los dos componentes en conjunto (CP1 y CP2) logran explicar el 67% lo cual es bueno en términos de análsis. y al tomar los tres componentes (CP1 , CP2 y CP3) se logra explicar la variabilidad de los datos en un 81%. Por tal motivo se toman los primeros tres componentes para analizar la informacion de viviendas.

Para seguir con la metodología, se usará la función fviz_pca_ind() la cual genera un gráfico de dispersión en un plano factorial utilizando los resultados del análisis de componentes principales. Cada punto en el gráfico representa una observación (individuo) y está ubicado en función de sus coordenadas en los dos componentes principales especificados. El color y el tamaño de los puntos también están definidos en la función. Observemos el plano factorial de los componentes 1 y 2:

fviz_pca_ind(pca2, geom.ind = "point", 
             col.ind = "#00825a", 
             axes = c(1, 2), 
             pointsize = 1.5)  # Plano factorial

Este tipo de gráfico ayuda a visualizar cómo se agrupan o dispersan las observaciones en función de las relaciones capturadas por los dos primeros componentes principales. No obstante, no se evidencia ninguna característica en los datos por el moemento dado que se presenta un contexto donde los datos tienen dispersión, esto puede deberse a indicios de ruido en los datos o de la presencia de valores atípicos que están afectando la estructura general del análisis. Adicionalmente es posible que la dispersión alta podría indicar que los individuos en el conjunto de datos son muy heterogéneos y no se pueden agrupar fácilmente en categorías distintas. Para poder caracterizar un poco mejor la información y los componentes Observemos que sucede con el plano factorial compuesto por la componente 1 y 3 (CP1 y CP3):

fviz_pca_ind(pca2, geom.ind = "point", 
             col.ind = "#00825a", 
             axes = c(1, 3), 
             pointsize = 1.5)  # Plano factorial

Este plano factoria ya muestra indicios de agrupamientos entre los individuos. Se logran identificar grupos de datos, lo que da indicios de la existencia de características significativas, es decír se están caracterizando diversos segmentos de la población con características similares.

Observemos el plano factorial compuesto por las componente 1 y 3 (CP2 y CP3):

fviz_pca_ind(pca2, geom.ind = "point", 
             col.ind = "#00825a", 
             axes = c(2, 3), 
             pointsize = 1.5)  # Plano factorial

Como sucede en el plano factorial 1-3, en esta gráfica se logra observar grupos de observaciones. Analicemos ahora que variables son las que más contribuyen en la explicacion de cada factor:

library(gridExtra)
library(factoextra)

# Generar los gráficos usando fviz_contrib
plot1 <- fviz_contrib(pca2, choice = "var", axes = 1, top = 10)
plot2 <- fviz_contrib(pca2, choice = "var", axes = 2, top = 10)
plot3 <- fviz_contrib(pca2, choice = "var", axes = 3, top = 10)

# Combinar los gráficos usando grid.arrange
grid.arrange(plot1, plot2, plot3, ncol = 2)

Con rspecto a las gráficas de contribuciones anteriores:

  • Las variables banios, areaconst y preciom son las que mejor explican el compotente q (CP1).
  • Las variables estrato, tipo y habitaciones son las varaiables que explican mejor el componente 2.
  • Las variable zona es la encargada de caracterizar o explicar el componente 3.
library(gridExtra)
library(factoextra)

#biplot 
#g1 <- fviz_pca_var(pca2,
#             col.var = "contrib", # Color by contributions to the PC
#             gradient.cols = c("#FF7F00",  "#034D94"),
#             repel = TRUE,axes = c(1,2)     # Avoid text overlapping
#)
g2 <- fviz_pca_var(pca2,
             col.var = "contrib", # Color by contributions to the PC
             gradient.cols = c("#FF7F00",  "#034D94"),
             repel = TRUE,axes = c(1,3)     # Avoid text overlapping
)
g3 <- fviz_pca_var(pca2,
             col.var = "contrib", # Color by contributions to the PC
             gradient.cols = c("#FF7F00",  "#034D94"),
             repel = TRUE,axes = c(2,3)     # Avoid text overlapping
)

grid.arrange( g2, g3, ncol = 2)

library(gridExtra)
library(factoextra)

#biplot 
#g1 <- fviz_pca_biplot(pca2,axes = c(1,2))
g2 <- fviz_pca_biplot(pca2,axes = c(1,3))
g3 <- fviz_pca_biplot(pca2,axes = c(2,3))

grid.arrange( g2, g3, ncol = 2)

Características destacables

Considerando la anteriores gráficas, especialmente el circulo de correlaciones y el biplot de los planos facatoriales (CP1 y CP3) y (CP2 y CP3) que se donde se evidencia visualmente mayor relación. Se puede hacer un análisis mucho más característico de los datos:

  • En el plano factorial (CP1 y CP3), se logra observar que la contribución de la variable zona muy significativa en CP1 igualmente con tipo, lo cual puede dar indicios en que la tendencia del conjunto de individuos a agruparse está determinada por estas dos variables sumamente importantes.

  • En referencia al plano factorial (CP2 y CP3), las variables estrato y zona son las que permiten caracterizar la información a más detalle. Al observar el biplot generado por el análisis de componentes principales (PCA) en estos componentes, podemos notar que las flechas correspondientes a las variables estrato y zona tienen una orientación pronunciada en ciertas direcciones. Esto sugiere que estas variables tienen una fuerte influencia en la variabilidad capturada por los componentes principales 2 y 3.

En el caso de estrato, su flecha apunta en una dirección que indica una relación positiva con el componente principal 2 y una relación negativa con el componente principal 3. Esto indica que los valores más altos de estrato están asociados con valores más altos en el componente 2 y valores más bajos en el componente 3. Esto podría indicar que diferentes estratos tienen un impacto significativo en ciertos patrones identificados en el análisis.

Análisis de Conglomerados

el contexto de viviendas, el análisis por conglomerados puede ser aún más beneficioso para comprender la diversidad y complejidad de los datos. Aquí hay un resumen de por qué iniciar un análisis por conglomerados en este caso:

Diversidad de Características:

Las viviendas son influidas por múltiples factores, como ubicación, tamaño, precio y características. Al considerar varias variables, el análisis por conglomerados puede ayudar a identificar grupos de viviendas con características similares en múltiples dimensiones.

Segmentación Detallada del Mercado:

Al agrupar viviendas en función de múltiples variables, podrás identificar segmentos más detallados en el mercado inmobiliario. Cada grupo podría tener necesidades y preferencias específicas, lo que permitiría desarrollar estrategias de marketing y ofertas personalizadas para cada segmento.

veamos algunas medidas descriptivas del conjunto de datos:

summary(vivienda2)
##       zona          estrato         preciom         areaconst     
##  Min.   :1.000   Min.   :3.000   Min.   :  58.0   Min.   :  30.0  
##  1st Qu.:3.000   1st Qu.:4.000   1st Qu.: 220.0   1st Qu.:  80.0  
##  Median :5.000   Median :5.000   Median : 330.0   Median : 123.0  
##  Mean   :3.918   Mean   :4.634   Mean   : 433.9   Mean   : 174.9  
##  3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.: 540.0   3rd Qu.: 229.0  
##  Max.   :5.000   Max.   :6.000   Max.   :1999.0   Max.   :1745.0  
##      banios        habitaciones         tipo      
##  Min.   : 0.000   Min.   : 0.000   Min.   :1.000  
##  1st Qu.: 2.000   1st Qu.: 3.000   1st Qu.:1.000  
##  Median : 3.000   Median : 3.000   Median :2.000  
##  Mean   : 3.111   Mean   : 3.605   Mean   :1.613  
##  3rd Qu.: 4.000   3rd Qu.: 4.000   3rd Qu.:2.000  
##  Max.   :10.000   Max.   :10.000   Max.   :2.000

Estandarizando y calculando distancias Euclidias

datos <- scale(vivienda2)
head(datos, n=10)
##             zona    estrato    preciom  areaconst      banios habitaciones
## 1147  0.06192582 -1.5872276 -0.5595498 -0.7339949 -0.07793773    1.6406840
## 1169  0.06192582 -1.5872276 -0.3465670 -0.3842568 -0.77811479   -0.4147626
## 1350  0.06192582 -1.5872276 -0.2552886  0.3152194 -0.77811479    0.2703863
## 5992  0.81508501 -0.6156201 -0.1031580  0.7349051  1.32241640   -0.4147626
## 1212 -1.44439256  0.3559875 -0.5291236 -0.5940997 -0.77811479   -0.4147626
## 1724 -1.44439256  0.3559875 -0.5899759 -0.6150839 -0.07793773   -0.4147626
## 2326 -1.44439256 -0.6156201 -0.6508281 -0.8599006 -0.77811479   -0.4147626
## 4386 -1.44439256  0.3559875 -0.3769931 -0.2653459 -0.07793773    0.2703863
## 1209 -1.44439256  0.3559875 -0.3465670 -0.1744140  0.62223934    1.6406840
## 1592 -1.44439256  0.3559875  1.0530344  1.4343813 -0.07793773   -0.4147626
##            tipo
## 1147 -1.2586312
## 1169 -1.2586312
## 1350 -1.2586312
## 5992 -1.2586312
## 1212  0.7944184
## 1724  0.7944184
## 2326  0.7944184
## 4386  0.7944184
## 1209 -1.2586312
## 1592 -1.2586312

En el análisis por conglomerados, es común realizar la estandarización de los datos antes de aplicar algoritmos de agrupamiento como el clustering. El proceso de estandarización (también conocido como normalización) tiene varios propósitos y beneficios en este contexto:

  • Homogeneidad de Escalas:
  • Mitigación del Efecto de Variables con Mayor Variabilidad:
  • Evitar Influencias Anómalas:

Al usar scale(vivienda2), estás estandarizando los datos en el marco de trabajo de R. Esto significa que cada variable en el conjunto de datos se centra en cero y se ajusta para tener una desviación estándar de uno. Esto garantiza que todas las variables tengan una influencia igual en el proceso de agrupamiento y mejora la calidad de los resultados al eliminar los efectos de la escala y la variabilidad de las variables originales.

En este siguiente fragmento de código se está calculando una matriz de distancias euclídeas basada en los datos estandarizados previamente. La matriz de distancias euclídeas es una herramienta fundamental en el análisis de conglomerados, ya que captura las distancias entre todas las pares posibles de observaciones en tu conjunto de datos. Cada valor en la matriz representa la distancia euclídea entre dos observaciones, lo que indica cuánto difieren en términos de las variables consideradas.

# Matriz de distancias euclídeas
mat_dist <- dist(x = datos, method = "euclidean")
  • mat_dist: Esta es la variable que almacena la matriz de distancias euclídeas entre todas las observaciones en tu conjunto de datos. Cada celda en esta matriz contiene la distancia euclídea entre una par de observaciones.

  • dist(x = datos, method = “euclidean”): Has utilizado la función dist de R para calcular las distancias euclídeas. Los parámetros que has proporcionado son:

    • x: Los datos estandarizados (datos) en los que deseas calcular las distancias.
    • method: El método de distancia que has elegido es “euclidean”, lo que significa que se está utilizando la distancia euclídea para calcular las distancias entre las observaciones.
  • Importancia de la Matriz de Distancias: Esta matriz de distancias será utilizada en algoritmos de agrupamiento, como el k-means o jerárquico, para agrupar las observaciones en clústeres basados en su similitud.

Es importante determinar que similitud usar para la construcción de los cluster:

# Dendrogramas con linkage complete y average
hc_euclidea_complete <- hclust(d = mat_dist, method = "complete")
hc_euclidea_average  <- hclust(d = mat_dist, method = "average")
hc_euclidea_single   <- hclust(d = mat_dist, method = "single")

En el análisis de conglomerados (clustering), el término “enlace” o “linkage” se refiere a la estrategia utilizada para calcular la distancia entre clústeres en un análisis de agrupamiento jerárquico. El enlace determina cómo se combina la información de las distancias entre las observaciones individuales en cada clúster para calcular la distancia entre clústeres completos.

Existen varios métodos de enlace comunes que se utilizan en el análisis de conglomerados jerárquicos, y cada uno tiene su propia forma de calcular la distancia entre clústeres. Los métodos de enlace más conocidos incluyen:

  • Enlace Simple (Single Linkage): Calcula la distancia entre dos clústeres como la distancia más corta entre las observaciones de un clúster y las observaciones del otro clúster. Puede ser afectado por valores atípicos (outliers) y puede generar clústeres alargados.

  • Enlace Completo (Complete Linkage): Calcula la distancia entre dos clústeres como la distancia más larga entre las observaciones de un clúster y las observaciones del otro clúster. Puede ser sensible a la influencia de valores extremos y tiende a generar clústeres más compactos.

  • Enlace Promedio (Average Linkage): Calcula la distancia entre dos clústeres como el promedio de todas las distancias entre las observaciones de un clúster y las observaciones del otro clúster. Puede producir resultados más equilibrados que los enfoques de enlace simple o completo.

  • Enlace de Centroides (Centroid Linkage): Calcula la distancia entre dos clústeres como la distancia entre sus centroides (puntos medios). Puede generar clústeres de formas irregulares y es sensible a la presencia de valores atípicos.

En téminos de un mejor agrupamiento, se procede a usar Linkage que tenga más coeficiente de correlación de entre las distancias (observemos el siguiente codigo)

cor(x = mat_dist, cophenetic(hc_euclidea_complete))     #coeficiente de correlación entre las distancias (cophenetic) del dendrograma
## [1] 0.6705584
cor(x = mat_dist, cophenetic(hc_euclidea_average))
## [1] 0.7789875
cor(x = mat_dist, cophenetic(hc_euclidea_single))
## [1] 0.5501144

Según los resultados anteriores, el linkage average consigue representar ligeramente mejor la similitud entre observaciones.

Adicionalment, es importante considerar el coeficiente de Silhouette, el cual es una medida que se utiliza para evaluar la calidad de los agrupamientos (clústeres) generados en un análisis de conglomerados y para ayudar a determinar el número óptimo de clústeres. Esta medida considera tanto la distancia entre los puntos dentro del mismo clúster como la distancia promedio a los puntos de los clústeres vecinos más cercanos. Un coeficiente de silueta alto indica que los puntos están bien agrupados y separados, mientras que un coeficiente bajo sugiere que los puntos podrían estar más cerca de los puntos de otros clústeres.Realicemos el calculo:

library(tidyverse)
library(cluster)

# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_euclidea_average, k = 4)

# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(datos))
sil_avg <- mean(sil[,3])

# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=4 : ", sil_avg)
## Coeficiente de Silhouette promedio k=4 :  0.4087912

Considerando el resultado anterior, se especifica que el numero optimo de clusters para agrupar el conjunto de datos de viviendas es de 4.Por consiguiente, se genera el siguiente código el cual está relacionado con la visualización y análisis del dendrograma obtenido a partir del análisis de agrupamiento jerárquico utilizando el método de enlace promedio (average linkage), en el se pueden observar los agrupamientos.

plot(hc_euclidea_average, cex = 0.6, main = "Dendograma", las=1,
     ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_euclidea_average, k = 4, border = 2:5)

Las siguientes lineas de codigo realiza una asignación de clústeres a las observaciones basada en el dendrograma resultante del análisis de agrupamiento jerárquico con el método de enlace promedio.

grp <- cutree(hc_euclidea_average, k = 4)
head(grp, n=200)
## 1147 1169 1350 5992 1212 1724 2326 4386 1209 1592 4057 4460 6081 7497 7824 7987 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3495 5424 6271 6857 3817  509 2323 5098 6043 6412 1770  141  238  243  504  565 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
##  567  589  604  816  827  838  965  966  967  968 1003 1182 1204 1276 1353 1391 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 1489 1490 1492 1611 1612 1667 1722 1723 1744 1838 1840 1899 1904 1932 1968 2013 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 2014 2017 2026 2027 2247 2289 2347 2357 2416 2425 2535 2635 2644 2685 2689 2690 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 2728 2730 2741 2811 2855 2875 2908 3082 3109 3182 3185 3273 3297 3299 3300 3418 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 3446 3447 3479 3559 3602 3619 3783 3793 3805 4003 4010 4055 4095 4118 4230 4231 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 4329 4412 4415 4468 4476 4509 4510 4511 4512 4513 4539 4688 4718 4845 5319 5412 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 5418 5599 5605 5616 5632 5780 5834 5884 5944 5965 5970 5976 6028 6033 6155 6385 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 6388 6471 6798 6806 6807 6872 7012 7026 7245 7320 7471 7719 7815 7877 8068 8117 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 8123 8278 1894  698 2768 6999 8037 8055 8058 8079 8109 8179 8197 8223 8239 8240 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 8105 8225 8255 8258 6928 7369 7510 7586 8224 8253 8254 8264 8284 5097 7511 7847 
##    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1    1 
## 7862 8053 8054 8142 8200 8235 6961 7617 
##    1    1    1    1    1    1    1    1
table(grp)
## grp
##    1    2    3    4 
## 8250   62    4    3

Características destacables

El análisis por conglomerados ha agrupado las observaciones en cuatro clústeres distintos: el clúster 1 contiene 8250 observaciones, el clúster 2 contiene 62 observaciones, el clúster 3 contiene 4 observaciones y el clúster 4 contiene 3 observaciones. Estos resultados nos brindan una visión inicial sobre cómo las observaciones se han agrupado en función de sus similitudes en las características consideradas en el análisis.

Es notable que el clúster 1 es el más grande, sugiriendo que una gran proporción de observaciones comparten características similares que los hacen pertenecer a este grupo. Sin embargo, la presencia de clústeres más pequeños (clústeres 3 y 4) podría indicar la existencia de subgrupos o categorías más específicas dentro de los datos.

Para mejorar la confiabilidad de los resultados y explorar más a fondo la estructura de los datos, podría ser beneficioso volver a entrenar el algoritmo de agrupamiento utilizando diferentes tipos de distancias o métricas. Diferentes distancias pueden resaltar diferentes aspectos de las similitudes entre observaciones. Por ejemplo, si los resultados actuales se basan en la distancia euclidiana, podríamos considerar otras métricas como la distancia de Manhattan o la distancia de correlación, que pueden capturar relaciones y patrones distintos en los datos. La elección de la distancia adecuada depende de las características y la naturaleza de los datos, y probar varias opciones podría llevar a una segmentación más precisa y revelar relaciones más sutiles entre las observaciones. Reentrenar el algoritmo con diferentes métricas también permite una validación más sólida de los grupos identificados, lo que en última instancia puede llevar a insights más ricos y decisiones más informadas.

Análisis de Correspondencias Simples

Recordemos que una tabla de contingencia también se conoce como una tabla de frecuencias cruzadas. Su propósito es resumir y presentar de manera conjunta la distribución de dos o más variables categóricas. Además, permite organizar y visualizar cómo se distribuyen los valores de una variable en función de los valores de otra variable. En esta ocasión, emplearemos dos variables categóricas del conjunto de datos; específicamente, tomaremos en cuenta las variables “zona” y “habitaciones”.

library ( FactoClass )
delete <- c("piso","parqueaderos","barrio")
vivienda_ <- vivienda[ ,!(names(vivienda) %in% delete)]
vivienda_$habitaciones <- as.character(vivienda_$habitaciones)
vivienda_
## # A tibble: 8,322 × 10
##       id zona       estrato preciom areaconst banios habitaciones tipo  longitud
##    <dbl> <chr>        <dbl>   <dbl>     <dbl>  <dbl> <chr>        <chr>    <dbl>
##  1  1147 Zona Orie…       3     250        70      3 6            Casa     -76.5
##  2  1169 Zona Orie…       3     320       120      2 3            Casa     -76.5
##  3  1350 Zona Orie…       3     350       220      2 4            Casa     -76.5
##  4  5992 Zona Sur         4     400       280      5 3            Casa     -76.5
##  5  1212 Zona Norte       5     260        90      2 3            Apar…    -76.5
##  6  1724 Zona Norte       5     240        87      3 3            Apar…    -76.5
##  7  2326 Zona Norte       4     220        52      2 3            Apar…    -76.5
##  8  4386 Zona Norte       5     310       137      3 4            Apar…    -76.5
##  9  1209 Zona Norte       5     320       150      4 6            Casa     -76.5
## 10  1592 Zona Norte       5     780       380      3 3            Casa     -76.5
## # ℹ 8,312 more rows
## # ℹ 1 more variable: latitud <dbl>

En cuanto al “análisis de correspondencias simples”, esta es una técnica estadística utilizada para analizar la relación entre dos variables categóricas y representar gráficamente sus asociaciones en un espacio bidimensional. Un análisis de correspondencias simples (ACS) es una variante del análisis de correspondencias múltiples (ACM) que se enfoca en dos variables específicas.

En resumen, al cargar el paquete “FactoClass” y llevar a cabo un análisis de correspondencias simples, se está utilizando una herramienta estadística para explorar y visualizar las relaciones entre dos variables categóricas en un espacio de dimensiones reducidas. Esto puede ayudar a descubrir patrones, asociaciones y tendencias en los datos categóricos que se esté analizando.

Para iniciar, se remplazan los nombres de la variabel categórica zona por unso mas cortos, todo esto para realizar mejor las representaciones visuales.

vivienda_ <- vivienda_ %>%
  mutate(zona = case_when(
    zona == "Zona Centro"   ~ "Centro",
    zona == "Zona Norte"    ~ "Norte",
    zona == "Zona Oeste"    ~ "Oeste",
    zona == "Zona Oriente"  ~ "Oriente",
    zona == "Zona Sur"      ~ "Sur",
    TRUE                    ~ as.character(zona)
  ))

tc <- table(vivienda_$habitaciones,vivienda_$zona)
tc
##     
##      Centro Norte Oeste Oriente  Sur
##   0       3    29     8       6   20
##   1       3    17    16       2   21
##   10      4    13     4       6   24
##   2      12   220   173      31  490
##   3      28  1008   622      89 2350
##   4      19   342   272      52 1044
##   5      20   146    64      34  415
##   6      11    60    22      42  183
##   7       9    42     6      31   85
##   8       8    29     5      32   64
##   9       7    14     6      26   30

Gráfica de perfiles: Se observa en la siguiente gráfica de perfiles las zonas de las viviendas con respecto al núero de habitaciones diferenciadas por diferente colores.

marron <-c(" burlywood "," coral "," chocolate "," brown ")
mycolors <-c("#FA4002", "#3B0B39",  "#8A0829", "#F1090C",  "#F4A405","#FFFF00", marron )
par (mai =c(0 ,1 ,0 ,0))  
plotct( table(vivienda_[,c(7,2)]),"row",col= mycolors )

Al analizar la tabla de contingencia con la grafica de perfiles, se puede destacar lo siguiente:

  • En la tabla de contingencia, podemos observar que en la zona “Norte”, el valor más alto de la variable “Número de Habitaciones” es 1008. Esto significa que hay 1008 viviendas en la zona “Norte” que tienen 3 habitaciones. Este valor alto sugiere que la distribución de habitaciones en esa zona tiende a tener un enfoque hacia viviendas con 3 habitaciones.

  • Por otro lado, en la zona “Oeste”, el valor más bajo de la variable “Número de Habitaciones” es 5. Esto indica que solo hay 5 viviendas en la zona “Oeste” que tienen 5 habitaciones. Este valor bajo sugiere que en comparación con otras zonas, la zona “Oeste” tiene una proporción relativamente pequeña de viviendas con 5 habitaciones.

  • Notese que en todas las zonas es muy comun tener tres habitaciones seguido de 4. no obstante la zona “oriental” es un poco diferente a las demás puesto que la proporcion de habitaciones es mucho menor que en otras zonas.

tab <- data.frame(tc)    # Oriente no activa
tab <- reshape(tab, idvar = "Var1", timevar = "Var2", direction = "wide")
colnames(tab) <- c("Var1", "Centro", "Norte", "Oeste" ,"Oriente" ,"Sur")
# Convertir la columna en el índice
rownames(tab) <- tab$Var1
tab$Var1 <- NULL
tab_6 <- tab[-6,]

En la salida anterior no se consideró el registro de numero de habitaciones 4, todo lo anterior para poder hacer un análisis más detallado en relación a los propósitos del curso. Vease nuevamente la gráfica de perfiles sin el perfil de habitacion 4

plotct( tab,"row",col= mycolors )

Considerando que la gráfica de varianza acumulada muestra la proporción acumulativa de la varianza total explicada por los componentes principales en orden descendente. Por lo general, en un gráfico de acumulación de varianza, el eje horizontal representa el número de componentes principales (o ejes), mientras que el eje vertical muestra la proporción acumulativa de la varianza explicada. En esta gráfica no se muestra gran informacion en referencia al porcentaje de verianza explicada en cada componente.

plotct( tab_6,"row",col= mycolors )

acs<-dudi.coa (tab_6 , scannf =FALSE ,nf =3);acs
## Duality diagramm
## class: coa dudi
## $call: dudi.coa(df = tab_6, scannf = FALSE, nf = 3)
## 
## $nf: 3 axis-components saved
## $rank: 4
## eigen values: 0.08663 0.007713 0.003129 0.002074
##   vector length mode    content       
## 1 $cw    5      numeric column weights
## 2 $lw    10     numeric row weights   
## 3 $eig   4      numeric eigen values  
## 
##   data.frame nrow ncol content             
## 1 $tab       10   5    modified array      
## 2 $li        10   3    row coordinates     
## 3 $l1        10   3    row normed scores   
## 4 $co        5    3    column coordinates  
## 5 $c1        5    3    column normed scores
## other elements: N
barplot(acs$eig ) # histograma valores propios

Considerando lo anterior, se muestra la siguiente línea de codigo que especifica la varianza explicada en cada una de las componentes anteriormente mensionadas.

valp <-t(inertia.dudi(acs)$tot.inertia);valp # valores propios
##                 Ax1          Ax2          Ax3          Ax4
## inertia  0.08663278  0.007712567  0.003128946 2.073711e-03
## cum      0.08663278  0.094345347  0.097474293 9.954800e-02
## cum(%)  87.02613473 94.773720219 97.916873069 1.000000e+02

Se logra observar que los dos primeros factores explican el 94% de la varianza explicada en los datos, por lo cual, es buena idea realizar el plano factorial (CP1 y cp2) para poder analizar la informacion a más detalle.

library(gridExtra)
library(factoextra)
G1<-fviz_contrib(acs, choice = "col", axes = 1)
G2<-fviz_contrib(acs, choice = "col", axes = 2)
grid.arrange( G1, G2, ncol = 2)

La gráfica de contribuciones permite conoce cuales son las variables que mejor representa cada factor, como lo es la zona “Oriente” característica en el CP1, no obstante en el componente 2 los niveles de factor que más influyen en la explicacion del componente es la zona “Oeste” y la zona “Sur”.

Observese la seguiente gráfica que representa el plao factorial objeto del analisis:

library(ade4)
plot(acs , cframe =1 ) # primer plano

Analizando la información que el plano nos muestra podemos afirmar que:

  • las viviendas con 9, 8 y 7 habitaciones tienden a establecerse en las zonas centro y oriente de las ciudades, aspectos característicos a la hora de comprar vivienda en el país.

  • Adicionalmente, se puede decir que el factor 2, está caracterizado en su mayor parte por las zonas “Oeste” y “Sur”, aquellas viviendas que tienen 2 y 3 habitaciones son características de estas zonas.

Observemos ahora como es una vivienda con 4 habitaciones, en el conjunto de datos (variable ilustrativa):

library(ade4)
plot(acs , cframe =1 ) # primer plano
Fchoco <- suprow(acs , tab[6 ,])$lisup # proyección de habitacion 4 como ilustrativa
points(Fchoco, col=" brown ",cex =1.1, pch = 19)
text( Fchoco, "4", col=" brown ", cex =0.8, pos =2.6)

La información anterior muestra que efectivamente este tipo de viviendas se ubican especialmente en el factor 2 lo cual indica que hace parte de viviendas con ubicaciones al sur de la ciudad y oriente

Características destacables

Basándonos en la información que has proporcionado sobre el análisis de correspondencias simples, podemos llegar a las siguientes conclusiones:

Relación entre Habitaciones y Ubicación:

  • Existe una relación significativa entre la cantidad de habitaciones en una vivienda y su ubicación geográfica.

  • Las viviendas con un mayor número de habitaciones, específicamente con 7, 8 y 9 habitaciones, están más cerca del componente 1 del análisis de correspondencias. Este componente se caracteriza por la influencia de las zonas “Oriente” y “Centro”.

  • Las viviendas con habitaciones más pequeñas tienden a estar más cerca del componente 2, que es explicado principalmente por las zonas “Sur” y “Oeste”.

Patrones de Distribución de Habitaciones:

  • Las viviendas con 7, 8 y 9 habitaciones parecen tener una asociación más fuerte con las zonas “Oriente” y “Centro”. Esto podría indicar que en estas áreas geográficas, las viviendas más grandes son más comunes o preferidas.

Tendencias en la Zona Sur y Oeste:

  • Las viviendas con habitaciones más pequeñas, que se encuentran más cerca del componente 2, se asocian en mayor medida con las zonas “Sur” y “Oeste”. Esto podría sugerir que en las zonas “Sur” y “Oeste”, las viviendas tienden a tener menos habitaciones en promedio.

Relevancia para la Planificación Urbana:

  • Estas conclusiones pueden ser útiles para la planificación urbana y el desarrollo inmobiliario. Por ejemplo, en las zonas “Oriente” y “Centro”, podría haber una demanda más alta de viviendas con un mayor número de habitaciones debido a su asociación con el componente 1.

  • En las zonas “Sur” y “Oeste”, los desarrolladores y urbanistas podrían considerar la necesidad de viviendas con menos habitaciones, ya que están asociadas con el componente 2.

Recomendaciones a la empresa constructora:

El análisis de datos realizado a través del uso de técnicas de agrupamiento y componentes principales en el contexto de la empresa inmobiliaria ha proporcionado valiosas perspectivas que pueden orientar las decisiones estratégicas y maximizar la competitividad en un mercado en constante evolución. Algunas conclusiones clave son:

  • Segmentación de Mercado Fundamentada: La aplicación del análisis por conglomerados ha permitido identificar patrones de similitud entre las viviendas, lo que ha llevado a la identificación de clústeres con características compartidas. Esto ofrece una base sólida para una segmentación de mercado más efectiva, posibilitando la adaptación de estrategias específicas para satisfacer las necesidades y deseos únicos de cada grupo de clientes.

  • Diferenciación de Propiedades: El análisis de componentes principales (PCA) ha demostrado que ciertas variables, como “zona”, “tipo” y “estrato”, tienen una influencia significativa en la variabilidad de los datos. Estas variables pueden ser utilizadas para diferenciar las propiedades y personalizar las ofertas, permitiendo que la empresa inmobiliaria se destaque en un mercado saturado.

Algunas recomendaciones Estratégicas:

Basado en los hallazgos del análisis de datos, las siguientes recomendaciones específicas pueden orientar las decisiones estratégicas de la empresa inmobiliaria:

  • Desarrollo de Estrategias por Segmento: Aprovechar los clústeres identificados para crear estrategias de marketing y ventas adaptadas a las necesidades y preferencias de cada grupo. Esto permitirá a la empresa alcanzar a sus clientes de manera más efectiva y construir relaciones duraderas.

  • Optimización de Características Clave: Dado que ciertas variables, como “zona”, “estrato” y “tipo”, tienen una influencia significativa en la percepción de valor de una propiedad, la empresa debería considerar invertir en la mejora y optimización de estas características para atraer a un público más amplio.

  • Exploración de Nuevas Métricas: Dado que diferentes métricas de distancia pueden revelar patrones diferentes en los datos, se recomienda reentrenar los algoritmos de agrupamiento con otras métricas, como la distancia de correlación o la distancia de Manhattan. Esto podría proporcionar una comprensión más completa de las relaciones entre las viviendas y refinar aún más la segmentación del mercado.

  • Innovación Basada en Datos: Utilizar los insights obtenidos para la creación de nuevos productos o servicios que se alineen con las preferencias y necesidades identificadas en los datos. Esto permitiría a la empresa inmobiliaria mantenerse a la vanguardia de la innovación en un mercado en constante cambio.

En última instancia, este análisis de datos tiene el potencial de brindar a la empresa inmobiliaria una ventaja competitiva crucial, permitiendo una toma de decisiones informada y una estrategia más sólida. Al comprender más profundamente a su mercado y a su base de clientes, la empresa estará mejor equipada para capitalizar oportunidades y enfrentar desafíos en el entorno dinámico del mercado inmobiliario.