Para comenzar el análisis, primero realizamos una exploración de la base de datos con las siguientes actividades:
#Base de datos
data("vivienda")
# Contar la cantidad de registros
cantidad_registros = nrow(vivienda)
# Imprimir el resultado
cat("La base de datos tiene", cantidad_registros, "registros.\n")
## La base de datos tiene 8322 registros.
#contar la cantidad de variables
cantidad_variables = ncol(vivienda)
# Imprimir el resultado
cat("La base de datos tiene", cantidad_variables, "variables.\n")
## La base de datos tiene 13 variables.
# Se obtiene los encabezados de las variables y su tipo de dato
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=
## .. cols(
## .. id = col_double(),
## .. zona = col_character(),
## .. piso = col_character(),
## .. estrato = col_double(),
## .. preciom = col_double(),
## .. areaconst = col_double(),
## .. parqueaderos = col_double(),
## .. banios = col_double(),
## .. habitaciones = col_double(),
## .. tipo = col_character(),
## .. barrio = col_character(),
## .. longitud = col_double(),
## .. latitud = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
summarytools::descr(vivienda)
## Non-numerical variable(s) ignored: zona, piso, tipo, barrio
## Descriptive Statistics
## vivienda
## N: 8322
##
## areaconst banios estrato habitaciones id latitud longitud
## ----------------- ----------- --------- --------- -------------- --------- --------- ----------
## Mean 174.93 3.11 4.63 3.61 4160.00 3.42 -76.53
## Std.Dev 142.96 1.43 1.03 1.46 2401.63 0.04 0.02
## Min 30.00 0.00 3.00 0.00 1.00 3.33 -76.59
## Q1 80.00 2.00 4.00 3.00 2080.00 3.38 -76.54
## Median 123.00 3.00 5.00 3.00 4160.00 3.42 -76.53
## Q3 229.00 4.00 5.00 4.00 6240.00 3.45 -76.52
## Max 1745.00 10.00 6.00 10.00 8319.00 3.50 -76.46
## MAD 84.51 1.48 1.48 1.48 3083.81 0.05 0.02
## IQR 149.00 2.00 1.00 1.00 4159.00 0.07 0.02
## CV 0.82 0.46 0.22 0.40 0.58 0.01 0.00
## Skewness 2.69 0.93 -0.18 1.63 0.00 0.03 0.65
## SE.Skewness 0.03 0.03 0.03 0.03 0.03 0.03 0.03
## Kurtosis 12.91 1.13 -1.11 3.98 -1.20 -1.15 0.58
## N.Valid 8319.00 8319.00 8319.00 8319.00 8319.00 8319.00 8319.00
## Pct.Valid 99.96 99.96 99.96 99.96 99.96 99.96 99.96
##
## Table: Table continues below
##
##
##
## parqueaderos preciom
## ----------------- -------------- ---------
## Mean 1.84 433.89
## Std.Dev 1.12 328.65
## Min 1.00 58.00
## Q1 1.00 220.00
## Median 2.00 330.00
## Q3 2.00 540.00
## Max 10.00 1999.00
## MAD 1.48 207.56
## IQR 1.00 320.00
## CV 0.61 0.76
## Skewness 2.33 1.85
## SE.Skewness 0.03 0.03
## Kurtosis 8.31 3.67
## N.Valid 6717.00 8320.00
## Pct.Valid 80.71 99.98
#verificar datos faltantes graficamente
md.pattern(vivienda, plot = TRUE, rotate.names = TRUE)
## preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808 1 1 1 1 1 1 1 1 1 1
## 1909 1 1 1 1 1 1 1 1 1 1
## 876 1 1 1 1 1 1 1 1 1 1
## 726 1 1 1 1 1 1 1 1 1 1
## 1 1 0 0 0 0 0 0 0 0 0
## 2 0 0 0 0 0 0 0 0 0 0
## 2 3 3 3 3 3 3 3 3 3
## latitud parqueaderos piso
## 4808 1 1 1 0
## 1909 1 1 0 1
## 876 1 0 1 1
## 726 1 0 0 2
## 1 0 0 0 12
## 2 0 0 0 13
## 3 1605 2638 4275
La base de datos vivienda contiene 13 variables con 8322 registros cada una, entre las variables tenemos variables cualitativas de tipo nominal como la zona de ubicación, el tipo de vivienda, el nombre del barrio, y variables cuantitativas de tipo discreto como estrato, número de habitaciones, número de baños, número de parqueadero y numero de piso, también tenemos tipo continuas como el precio, el área construida y la ubicación geográfica en latitud y longitud. Además, se tiene dos variables (piso y parqueaderos) cuyos valores faltantes superan el 19% de los faltantes en cada una de ellas (1605 y 2638), a lo anterior se suma que se tiene un total de 3 registros faltantes por cada variable en la base de datos.
El resumen de estadísticos muestra medidas de tendencia central como la media y la mediana, donde la mediana se encuentra por debajo de la media en variables como precio en millones y área construida (variables de interés para analizar), también se observa la presencia de datos atípicos en casi todas las variables numéricas exceptuando el estrato, la longitud y latitud, pues sus máximos se encuentra muy por encima de los límites del 3Q más 1.5 veces el IQR. También se presentan medidas de dispersión como la desviación estándar comparada con la media, donde los resultados son altos para cada una de las variables, esto indica que los valores están alejados de la media y puede haber una alta variabilidad de estos.
Teniendo un panorama más claro de la base de datos, se procede con las actividades de limpieza, imputación y estandarización de los datos para realizar los análisis multivariados#tabla de frecuencia absoluta de atributo piso
frecuencia_abs = table(vivienda_ordenada$piso)
par(mfrow = c(1, 2))
#grafico de barras de frecuencia absoluta de piso
barplot(frecuencia_abs, beside = TRUE, legend = TRUE,
main = "Frecuencia abs. de la variable Piso",
xlab = "Categorías",
ylab = "Frecuencia absoluta")
#grafico de cajas de parqueadero
boxplot(vivienda_ordenada$parqueaderos,
main = "Diagrama de Cajas de Parqueaderos", ylab = "Parqueaderos")
Al observar las gráficas, se ve que en el caso de la variable piso, lo más conveniente es realizar la imputación con la moda, que para este caso es 2, y para la variable parqueadero debido a la distribución de sus datos se escoge la mediana (2) para su imputación
Se realiza la imputación de los datos faltantes para los atributos piso y parqueadero.#verificacion de imputacion de datos
md.pattern(vivienda_ordenada, plot = TRUE, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## 8319 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0
## tipo barrio longitud latitud
## 8319 1 1 1 1 0
## 0 0 0 0 0
# Verificar los cambios
str(vivienda_ordenada)
## tibble [8,319 × 13] (S3: tbl_df/tbl/data.frame)
## $ id : num [1:8319] 5298 5107 5117 4508 4654 ...
## $ zona : chr [1:8319] "Zona Centro" "Zona Centro" "Zona Centro" "Zona Centro" ...
## $ piso : num [1:8319] 1 2 2 3 3 3 5 2 2 2 ...
## $ estrato : num [1:8319] 3 4 3 4 3 3 3 4 3 3 ...
## $ preciom : num [1:8319] 650 400 380 610 100 295 120 1100 245 420 ...
## $ areaconst : num [1:8319] 240 460 290 750 70 200 84 217 210 235 ...
## $ parqueaderos: num [1:8319] 2 2 2 2 2 1 1 1 2 2 ...
## $ banios : num [1:8319] 4 5 4 8 2 5 2 3 1 0 ...
## $ habitaciones: num [1:8319] 4 7 8 10 3 9 3 1 5 0 ...
## $ tipo : chr [1:8319] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8319] "alameda" "alameda" "alameda" "alameda" ...
## $ longitud : num [1:8319] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8319] 3.44 3.44 3.44 3.45 3.45 ...
#realizar la estandarizacion de los datos a trabajar
viviendaz = scale(vivienda_final)
head(viviendaz)
## piso preciom areaconst parqueaderos banios habitaciones
## [1,] -0.95545795 0.6574949 0.4551146 0.1313764 0.6222393 0.2703863
## [2,] -0.52312427 -0.1031580 1.9939622 0.1313764 1.3224164 2.3258329
## [3,] -0.52312427 -0.1640103 0.8048527 0.1313764 0.6222393 3.0109818
## [4,] -0.09079059 0.5357904 4.0224431 0.1313764 3.4229476 4.3812795
## [5,] -0.09079059 -1.0159415 -0.7339949 0.1313764 -0.7781148 -0.4147626
## [6,] -0.09079059 -0.4226322 0.1753241 -0.8559050 1.3224164 3.6961306
#obtenemos las dimensiones con PCA y elegimos el numero de componentes principales
res.pca = prcomp(viviendaz)
fviz_eig(res.pca, addlabels = TRUE) +
ggtitle("Valores propios del PCA")
En el gráfico de valores propios que se generó de nuestro PCA, obtenemos 6 dimensiones con un porcentaje diferente de varianza explicada de los datos.
En conjunto, los tres primeros componentes cubren una cantidad considerable de la información en los datos, haciendo que sean suficientes para el análisis posterior.
Ahora generamos un gráfico de contribución de variables a la dimensión para observar que variable le aporta más varianza al componente 1,2 y 3.
par(mfrow = c(1, 3))
#contribucion de las variables en la dimension 1 y 2
fviz_contrib(res.pca, choice="var", axes= 1)
fviz_contrib(res.pca, choice ="var", axes = 2)
fviz_contrib(res.pca, choice ="var", axes = 3)
Como se observa en los gráficos de contribución de las variables a cada dimensión:
-Dimensión 1 (PC1): Las variables que más contribuyen son el área construida, los baños, y el precio en millones. Esto sugiere que estas características son las más relevantes para describir la variación principal en los datos, posiblemente relacionadas con el tamaño y valor de las propiedades. - Dimensión 2 (PC2): La variable piso es la que más contribuye, lo que podría estar relacionado con la distribución de las propiedades en diferentes niveles o pisos en el contexto del conjunto de datos. - Dimensión 3 (PC3): Las variables habitaciones, piso, y parqueaderos son las más influyentes. Esto podría indicar que esta dimensión captura información adicional relacionada con la distribución interna de las propiedades, como el número de habitaciones y la disponibilidad de parqueaderos.#VARIABLES -PCA
fviz_pca_var(res.pca, col.var ="contrib",
gradient.cols=c("#FF7F00", "#034D94"),
repel=TRUE)
Análisis de la gráfica de variables: En los gráficos generados por el análisis de componentes principales (PCA), se observa que todas las variables están bien representadas en el plano, lo que se evidencia por la longitud de sus vectores, los cuales son largos y están alejados del origen. Esto indica que las variables están capturadas adecuadamente por las dos dimensiones principales visualizadas.
Las variables área construida y baños muestran una fuerte correlación positiva, lo que sugiere que a medida que aumenta el área construida de una vivienda, es probable que también aumente el número de baños. De manera similar, precio en millones y parqueaderos están positivamente correlacionados, indicando que las viviendas más caras tienden a tener más parqueaderos.
La variable piso aparece en una dirección diferente, formando un ángulo cercano a 90 grados con las otras variables, lo que indica que piso es independiente o no está correlacionada con las demás variables. Esto significa que su variación no está directamente relacionada con el área construida, baños, precio o parqueaderos.
En términos de contribución, área construida, precio en millones y baños tienen una gran contribución a la Dimensión 1 (PC1), sugiriendo que esta dimensión captura principalmente la variabilidad relacionada con el tamaño y valor de las propiedades. Por otro lado, piso es la variable que más contribuye a la Dimensión 2 (PC2), implicando que esta dimensión captura una característica diferente del conjunto de datos, posiblemente relacionada con la distribución vertical o el nivel de las viviendas.
Este análisis confirma que las principales características que influyen en la oferta de viviendas de la empresa están capturadas en la Dimensión 1, enfocándose en el tamaño y valor de las propiedades, mientras que piso destaca en la Dimensión 2 como una característica independiente y específica.#individuos -PCA
fviz_pca_ind(res.pca, geom.ind = "point",
col.ind = "#fc4e07",
axes = c(1,2),
pointsize = 1.5)
#graficar los individuos + variables
fviz_pca_biplot(res.pca,
col.var = "#034a94",
col.ind = "#dedede")
Análisis del gráfico Biplot (Variables - Individuos - Dimensiones): Al relacionar estos individuos con las variables originales a través del biplot, se observa que un gran número de viviendas tiene características que contribuyen más a la Dimensión 1. Estas características incluyen precio en millones, número de parqueaderos, área construida, y número de baños, confirmando que estas variables son los principales determinantes de la variabilidad entre las viviendas en la Dimensión 1.
Por otro lado, hay un grupo distinto de individuos que se agrupa más con la variable piso en la Dimensión 2. Esto podría indicar que estas viviendas son en su mayoría apartamentos, donde el número de piso es una característica más relevante.
En general, los individuos forman un conjunto compacto en el espacio de las dos dimensiones, sin una distinción clara o separación entre las Dimensiones 1 y 2. Esto sugiere que, aunque existen diferencias en las características, la variabilidad capturada por ambas dimensiones es significativa, y los individuos no se segmentan en grupos claramente diferenciados.
El análisis de componentes principales (PCA) realizado sobre los datos de las viviendas ha permitido reducir la dimensionalidad del conjunto de datos, identificando las principales características que explican la variabilidad entre las viviendas. La identificación de área construida, número de baños, y precio en millones como los principales factores en la Dimensión 1 puede direccionar las estrategias de marketing y evaluación de precios en el mercado inmobiliario.
La independencia de la variable piso sugiere que esta característica podría ser útil para el segmento del mercado inmobiliario de apartamentos, especialmente en la venta o alquiler de ellos, donde el número de piso es un factor relevante.par(mfrow = c(1, 2))
#calculamos los clauster que creemos tener
k2 = kmeans(df_viviendaz, centers = 2, nstart = 100)
fviz_cluster(k2, data = df_viviendaz)
k3 = kmeans(df_viviendaz, centers = 3, nstart = 100)
fviz_cluster(k3, data = df_viviendaz)
k4 = kmeans(df_viviendaz, centers = 4, nstart = 100)
fviz_cluster(k4, data = df_viviendaz)
k5 = kmeans(df_viviendaz, centers = 5, nstart = 100)
fviz_cluster(k5, data = df_viviendaz)
En las gráficas anteriores se tiene diferentes formas en que los individuos se agrupan en 2, 3, 4 y 5 clústeres:
Clustering con 2 Grupos: La gráfica con 2 clústeres muestra una clara división entre los dos grupos principales en la base de datos. Indicando que los datos podrían estar naturalmente agrupados en dos grandes categorías. La separación es clara y puede ser una buena elección de clustering si buscamos una clasificación muy general de la oferta de viviendas.
Clustering con 3 Grupos: Al aumentar el número de clústeres a 3, se observa que el segundo clúster no se define claramente, esto sugiere que 3 clústeres no es un número óptimo para esta base de datos, porque no tenemos más claridad de clustering respecto a 2 clústeres.
Clustering con 4 Grupos: Al dividir los individuos en 4 clústeres, se empieza a observar una forma más consistente y definida de cada grupo, aunque la separación entre ellos sigue sin ser completamente clara por la cantidad de individuos que tiene la base y sus características similares. La división en 4 clústeres puede proporcionar información más detallada de los datos en comparación con 2 clustering, esta podría ser una opción más apropiada para la base de datos.
Clustering con 5 Grupos: Con 5 clústeres, el segundo clúster sigue mostrando una división no muy clara respecto a los demás, lo que pueden indicar una posible superposición o falta de una estructura bien definida en este grupo. Aumentar el número de clústeres a 5 no parece mejorar la diferenciación entre los grupos.
Con lo observado en la graficas anteriores, se utilizó la función nbclust para determinar el número óptimo de clusters de manera más objetiva. Este método evalúa varias métricas de validación interna para sugerir el mejor número de clusters. La función nbclust indicó que el número óptimo de clusters era 4, basado en la mayoría de los criterios evaluados.#install.packages("NbClust")
#library(NbClust)
#utilizamos la funcion nbclust para hacer un concenso de mayoria
res.nbclust = NbClust(df_viviendaz, distance = "euclidean", min.nc=2, max.nc=9,
method="complete", index="all")
best_nc = as.numeric(res.nbclust$Best.nc[1,])
nc_counts = table(best_nc)
nc_df = as.data.frame(nc_counts)
names(nc_df) = c("clusters", "frequency")
#graficamos los resultados de los cluster optimos segun nbclus
ggplot(nc_df, aes(x=clusters, y=frequency))+
geom_bar(stat = 'identity', fill='skyblue')+
theme_minimal()+ ggtitle("Numero optimo de cluster de NbClust")
El análisis de las gráficas y la evaluación objetiva con NbClust que sugiere 4 clústeres como la mejor opción de segmentación de la base vivienda seguida por 2 clústeres, coloca a 4 clústeres como la segmentación que ofrece una división más equilibrada y con variación significativa, aunque la separación en 2 clústeres es buena, esta opción podría ser demasiado simple para capturar todas las variaciones significativas en los datos.
Se gráfica los diferentes clustering versus a las variables originales, para realizar una mejor caracterización de los clústeres obtenidos.#graficas de los cluster con respecto a cada variable
#con 4 cluster
par(mfrow = c(1, 2))
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=areaconst, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=preciom, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
Análisis de Clustering basado en Área Construida y Precio:
Al analizar los cuatro clusters en relación con las variables de área construida y precio en millones de pesos, las cuales aportan significativamente a la dimensión 1, se pueden observar las siguientes diferencias:
Clúster 1: Más del 50% de las viviendas tienen áreas construidas superiores a 250 metros cuadrados, y sus precios superan los 800 millones de pesos. Esto demuestra una relación directa entre estas variables y el clúster 1, donde predominan las viviendas de mayor tamaño y valor.
Clúster 2 y Clúster 3: Ambos clusters agrupan viviendas con áreas menores a 125 metros cuadrados. Sin embargo, se diferencian en sus precios promedio. El clúster 2 tiene un precio promedio de 300 millones de pesos, mientras que el clúster 3 maneja un promedio de 250 millones de pesos, lo que indica que estos clusters agrupan viviendas con estructuras y acabados más sencillos.
Clúster 4: Este clúster maneja viviendas con un rango de precios que oscila entre 400 y 700 millones de pesos, y áreas construidas de 200 a 300 metros cuadrados. Estas viviendas probablemente cuentan con un valor añadido, ya sea en la distribución interna de sus espacios o en su ubicación vertical.par(mfrow = c(1, 2))
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=estrato, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=piso, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
Análisis de Clustering basado en Ubicación:
Desde la perspectiva de ubicación, considerando el estrato y la ubicación vertical (piso), se observan las siguientes características:
Clúster 1: Agrupa principalmente viviendas de estrato 5 en adelante, ubicadas en pisos 2 y 3.
Clúster 2: Agrupa viviendas en estratos 4 a 6, mayoritariamente ubicadas entre los pisos 7 y 10.
Clúster 3: Agrupa viviendas en estratos 4 a 5, predominantemente ubicadas en pisos 2 y 3.
Clúster 4: Agrupa viviendas en estratos 4 a 6, con una marcada preferencia por ubicarse en el piso 2.par(mfrow = c(1, 2))
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=habitaciones, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=banios, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
vivienda_ordenada %>%
ggplot(aes(x=factor(k4$cluster), y=parqueaderos, fill = factor(k4$cluster)))+
geom_boxplot()+geom_point()+xlab("Clusters")+labs(fill="Cluster")
Análisis de Clustering basado en la Distribución de Espacios:
Desde la perspectiva de la distribución de espacios en la vivienda:
Clúster 1: Agrupa viviendas con 3 a 5 habitaciones, 3 a 6 baños (cada habitación con su baño), y de 3 a 4 parqueaderos.
Clústeres 2 y 3: No presentan diferencias significativas en su distribución habitacional, ambos agrupan viviendas con 3 habitaciones, 2 a 3 baños, y 1 a 2 parqueaderos.
Clúster 4: Agrupa viviendas con 4 parqueaderos, 3 a 5 baños, y 3 a 6 habitaciones en su mayoría.
El análisis de conglomerados es una técnica que nos permite agrupar individuos de la base de datos cuyas características entre si sean similares pero a la vez diferentes entre los grupos o segmentaciones. La diferenciación de estos cuatro clusters en la base de datos llamada vivienda respecto a las variables originales permite enfocar las estrategias de marketing de la empresa según el presupuesto y las expectativas del cliente en cuanto a la ubicación y distribución interna de la vivienda:
Clúster 1: Adecuado para clientes con un presupuesto superior a 500 millones de pesos, que buscan viviendas de lujo en estratos altos y ubicadas en pisos bajos.
Clúster 2: Orientado a clientes conservadores en presupuesto, que prefieren apartamentos en pisos altos, pero en estratos elevados.
Clúster 3: Ideal para clientes con un presupuesto más limitado, que se sienten cómodos viviendo en estratos 4 y 5.
Clúster 4: La opción ideal para quienes prefieren casas de hasta dos pisos y cuentan con un presupuesto moderado.str(vivienda2410)
## tibble [8,319 × 3] (S3: tbl_df/tbl/data.frame)
## $ zona : chr [1:8319] "Zona Centro" "Zona Centro" "Zona Centro" "Zona Centro" ...
## $ estrato: Ord.factor w/ 4 levels "3"<"4"<"5"<"6": 1 2 1 2 1 1 1 2 1 1 ...
## $ tipo : chr [1:8319] "Casa" "Casa" "Casa" "Casa" ...
Como se observa la variable zona se maneja en cinco clases (Sur, Oeste, Oriente, Centro, Norte), el estrato en cuatro clases (3, 4, 5, 7)y el tipo en dos clases(Casa, Apartamento).
#aplicacion del analisis de MCA
ACM_vivi = MCA(vivienda2410, graph = FALSE)
summary(ACM_vivi, nb.dec=3, ncp=2)
##
## Call:
## MCA(X = vivienda2410, graph = FALSE)
##
##
## Eigenvalues
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## Variance 0.562 0.453 0.380 0.333 0.323 0.272 0.201
## % of var. 21.078 16.992 14.237 12.504 12.124 10.192 7.551
## Cumulative % of var. 21.078 38.070 52.307 64.811 76.936 87.127 94.678
## Dim.8
## Variance 0.142
## % of var. 5.322
## Cumulative % of var. 100.000
##
## Individuals (the 10 first)
## Dim.1 ctr cos2 Dim.2 ctr cos2
## 1 | 2.256 0.109 0.211 | 0.744 0.015 0.023 |
## 2 | 1.403 0.042 0.084 | -0.002 0.000 0.000 |
## 3 | 2.256 0.109 0.211 | 0.744 0.015 0.023 |
## 4 | 1.403 0.042 0.084 | -0.002 0.000 0.000 |
## 5 | 1.790 0.069 0.135 | 0.815 0.018 0.028 |
## 6 | 2.256 0.109 0.211 | 0.744 0.015 0.023 |
## 7 | 1.790 0.069 0.135 | 0.815 0.018 0.028 |
## 8 | 1.403 0.042 0.084 | -0.002 0.000 0.000 |
## 9 | 2.256 0.109 0.211 | 0.744 0.015 0.023 |
## 10 | 2.256 0.109 0.211 | 0.744 0.015 0.023 |
##
## Categories (the 10 first)
## Dim.1 ctr cos2 v.test Dim.2 ctr cos2
## Zona Centro | 2.712 6.500 0.111 30.423 | 0.978 1.049 0.014
## Zona Norte | 0.449 2.763 0.061 22.448 | -0.251 1.066 0.019
## Zona Oeste | -1.067 9.727 0.192 -39.923 | 1.761 32.849 0.522
## Zona Oriente | 3.083 23.782 0.419 59.014 | 1.421 6.267 0.089
## Zona Sur | -0.212 1.516 0.059 -22.190 | -0.476 9.461 0.298
## 3 | 1.720 30.646 0.626 72.168 | 0.612 4.816 0.079
## 4 | -0.199 0.600 0.014 -10.636 | -0.894 15.033 0.275
## 5 | -0.206 0.830 0.021 -13.188 | -0.471 5.394 0.110
## 6 | -0.760 8.181 0.181 -38.827 | 1.162 23.706 0.423
## Apartamento | -0.406 5.980 0.261 -46.558 | 0.056 0.139 0.005
## v.test
## Zona Centro 10.972 |
## Zona Norte -12.516 |
## Zona Oeste 65.872 |
## Zona Oriente 27.200 |
## Zona Sur -49.767 |
## 3 25.688 |
## 4 -47.795 |
## 5 -30.184 |
## 6 59.344 |
## Apartamento 6.380 |
##
## Categorical variables (eta2)
## Dim.1 Dim.2
## zona | 0.747 0.689 |
## estrato | 0.679 0.665 |
## tipo | 0.261 0.005 |
Al aplicar el análisis de correspondencias múltiples (MCA) a la base de datos “vivienda2410”, se generaron 8 dimensiones, cada una de las cuales contribuye de manera diferente a la varianza explicada del conjunto de datos.
El resumen del análisis MCA proporciona información importante sobre la contribución de cada dimensión a la varianza total. En este caso las primeras tres dimensiones son las más relevantes, ya que explican el 52% de la varianza.
Además, el resumen muestra el aporte de cada categoría de las variables a las diferentes dimensiones. Esto indica qué categorías son más influyentes en la formación de cada dimensión, que para vivienda es la zona centro, la zona oriente y estrato 3 en la dimension1.#grafico del porcentaje explicado de varianza
fviz_screeplot(ACM_vivi, addlabels = TRUE, ylim= c(0,30))
En el gráfico de varianza explicada por dimensión, se observan las 8 dimensiones generadas a partir del análisis de correspondencias múltiples (MCA). Cada una de estas dimensiones contribuye de manera similar a la explicación de la variabilidad en los datos, con la primera dimensión explicando el 21.1% de la varianza y la segunda dimensión un 17%. Al sumar las varianzas hasta la sexta dimensión, se alcanza un 87.1% de la varianza total explicada, lo que indica que estas primeras seis dimensiones capturan la mayor parte de la información contenida en las variables categóricas.
Sin embargo, aunque se ha logrado explicar una gran parte de la varianza, el número de dimensiones necesarias para hacerlo es relativamente alto (seis dimensiones). Esto podría llevar a pensar de que, en lugar de reducir la dimensionalidad para simplificar el análisis, el MCA ha aumentado la complejidad al generar más dimensiones de las que originalmente existían en términos de variables categóricas.
Este aumento en la dimensionalidad puede no ser muy eficiente para la interpretación, ya que el objetivo es la reducción de dimensionalidad de los datos. En este caso, trabajar con seis dimensiones podría complicar la interpretación y el uso práctico de los resultados. Por lo tanto, este análisis se enfocara en las primeras dos o tres dimensiones que explican una parte significativa de la varianza.#grafico de dimension por dimension
fviz_mca_var(ACM_vivi, axes=c(1,2))
Al analizar las relaciones entre las variables categóricas y las dimensiones 1 y 2 se observa lo siguiente:
Dimensión 1: Esta dimensión parece estar fuertemente relacionada con la categoría “zona norte” y el tipo de vivienda (casa o apartamento). La contribución más significativa proviene de la “zona norte”, lo que sugiere que las viviendas ubicadas en esta zona son un factor clave para diferenciar los datos en esta dimensión. Además, aunque en menor medida, el “estrato 3” y las “zonas centro y oriente” también influyen en la varianza explicada por la Dimensión 1.
Dimensión 2: La Dimensión 2 está fuertemente influenciada por las categorías “zona sur” y los “estratos 4 y 5”. Estas categorías tienen una alta contribución a la varianza en esta dimensión, lo que indica que las viviendas en la zona sur y en estos estratos socioeconómicos son cruciales para la diferenciación en la Dimensión 2. Además, las “zona oeste” y “estrato 6” también contribuyen, aunque en menor medida.#grafico de dimension por dimension
fviz_mca_var(ACM_vivi, axes = c(1,3))
Cuando se comparan las variables categóricas en relación con las dimensiones 1 y 3 se observa:
Dimensión 3: La Dimensión 3 está principalmente explicada por las categorías “zona sur” y “zona norte”, así como por los “estratos 4 y 5”. Esto sugiere que esta dimensión captura una diferenciación adicional basada en la ubicación (zona) y el estrato, específicamente en estas áreas.
Relación con la Dimensión 1: Se confirma que las “zonas centro y oriente” siguen contribuyendo a la varianza en la Dimensión 1, y ahora es más evidente que la “zona oeste”, el tipo “apartamento” y el “estrato 3” tienen una influencia considerable en esta dimensión.
Se obtienen y analizan las tres dimensiones con mas varianza explicada, resumiendolas asi:
Dimensión 1: Las viviendas ubicadas en la “zona norte” y “zona oeste”, asociadas principalmente con el “estrato 3” y el tipo “apartamento”, son las que más contribuyen a la varianza en esta dimensión. Esta dimensión parece capturar diferencias basadas en la ubicación geográfica, particularmente en las zonas mencionadas.
Dimensión 2: En esta dimensión, predominan las viviendas ubicadas en la “zona sur” y pertenecientes a los “estratos 4 y 5”. Estas categorías diferencian claramente la Dimensión 2 en el contexto de la base de datos “vivienda”.
Dimensión 3: Esta dimensión está influenciada por las ubicaciones en las “zonas sur y norte” y los “estratos 4 y 5”, sugiriendo una relación adicional entre el tipo de vivienda y su ubicación geográfica en estos estratos.
Ademas el análisis de correspondencias múltiples (MCA) reveló un aumento significativo en la dimensionalidad en comparación con las tres variables categóricas originales. Este incremento en el número de dimensiones dificulta la interpretación de la información para identificar patrones claros.En conclusión, los análisis realizados proporcionan un marco robusto para entender las dinámicas del mercado inmobiliario y optimizar la oferta para satisfacer las diversas necesidades de los clientes.
Cada cluster identificado ofrece oportunidades para crear productos inmobiliarios diferenciados que se ajusten a las necesidades y preferencias de cada segmento de mercado. Desde viviendas de lujo para clientes de alto poder adquisitivo hasta opciones más económicas pero funcionales para quienes buscan accesibilidad y comodidad.
Los análisis realizados permiten segmentar el mercado de manera precisa, lo que facilita la creación de estrategias de marketing dirigidas a cada grupo específico. Por ejemplo, campañas de marketing digital segmentadas por ubicación geográfica y estrato socioeconómico pueden ser altamente efectivas.
Las diferencias identificadas en el análisis permiten optimizar el portafolio de productos inmobiliarios, asegurando que cada segmento del mercado esté bien atendido con ofertas que se alineen con sus preferencias y capacidad financiera.