## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Loading required package: gridExtra
## Loading required package: knitr
## Loading required package: summarytools
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## system might not have X11 capabilities; in case of errors when using dfSummary(), set st_options(use.x11 = FALSE)
##
## Attaching package: 'dplyr'
## The following object is masked from 'package:gridExtra':
##
## combine
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/library/principal-component-methods
# Cargar la base de datos
data("vivienda")
# Limpieza inicial para el ACP
# El ACP requiere estrictamente variables numéricas y no admite valores nulos (NA)
vivienda_num <- vivienda %>%
select(preciom, areaconst, parqueaderos, banios, habitaciones) %>%
na.omit()
head(vivienda_num)# 1. Ejecutar el Análisis de Componentes Principales
res_pca <- PCA(vivienda_num, scale.unit = TRUE, graph = FALSE)
# 2. Visualizar la varianza explicada por cada dimensión
fviz_eig(res_pca, addlabels = TRUE, ylim = c(0, 100),
title = "Porcentaje de Varianza Explicada por Dimensiones")# 3. Visualizar el círculo de correlación de las variables
fviz_pca_var(res_pca, col.var = "cos2",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE,
title = "Relación de variables con los Componentes Principales")En respuesta al primer objetivo del estudio, el cual busca reducir la dimensionalidad del conjunto de datos e identificar las características clave que influyen en la variación de precios[cite: 1], se ejecutó un Análisis de Componentes Principales (ACP) sobre las variables cuantitativas de la oferta inmobiliaria.
1. Varianza Explicada y Reducción de Dimensionalidad
Al observar el gráfico del porcentaje de varianza explicada (Scree plot), se evidencia que la Dimensión 1 captura el 65.1% de la varianza total de los datos, mientras que la Dimensión 2 captura un 17.2%. De manera acumulada, la retención de información en las dos primeras dimensiones asciende al 82.3%. Este es un resultado estadísticamente robusto que justifica metodológicamente la reducción de las cinco variables originales a un plano bidimensional, garantizando que el análisis posterior (conglomerados) mantenga la mayor parte de la estructura y variabilidad de la información original sin pérdida significativa de datos.
2. Análisis de Correlación de Variables (Círculo de Correlaciones)
La representación de las variables en el círculo de correlaciones permite interpretar la naturaleza de las nuevas dimensiones creadas:
areaconst), la
cantidad de baños (banios), el número de parqueaderos y, en
consecuencia, el precio (preciom). Esta dimensión resume el
tamaño general y el nivel de comodidades de la propiedad. Un
desplazamiento hacia la derecha en este eje representa viviendas más
grandes, mejor equipadas y de mayor valor en el mercado.habitaciones se proyecta fuertemente hacia la parte
superior (positiva) del eje, mientras que los vectores de
parqueaderos y preciom se inclinan hacia el
lado negativo. Esto sugiere una segmentación entre propiedades que
priorizan una alta subdivisión interna (mayor número de habitaciones,
posiblemente orientadas a familias numerosas) en contraposición a
propiedades que sacrifican habitaciones en favor de espacios
complementarios como parqueaderos, lo cual está asociado a un mayor
precio de mercado.En conclusión, el mercado inmobiliario evaluado está fuertemente determinado por el tamaño general de la propiedad, pero presenta dinámicas diferenciadas dependiendo de si la construcción prioriza la cantidad de dormitorios o las amenidades como el estacionamiento.
# 1. Extraemos las coordenadas de los inmuebles
datos_pca <- res_pca$ind$coord[, 1:2]
# 2. Tomamos una muestra de 2000 registros para no saturar la RAM de Posit Cloud
set.seed(123)
datos_muestra <- datos_pca[sample(nrow(datos_pca), 2000), ]
# 3. Calculamos el método del codo sobre la muestra
fviz_nbclust(datos_muestra, kmeans, method = "wss", linecolor = "#2C3E50") +
labs(title = "Método del Codo para determinar K óptimo",
x = "Número de clústers k",
y = "Suma de cuadrados")# 1. Ejecutar el modelo K-means con 3 grupos (clústers)
set.seed(123) # Para reproducibilidad
modelo_kmeans <- kmeans(datos_pca, centers = 3, nstart = 25)
# 2. Unir el clúster asignado a nuestra base de datos limpia original
vivienda_num$cluster <- as.factor(modelo_kmeans$cluster)
# 3. Visualizar los segmentos creados
fviz_cluster(modelo_kmeans, data = datos_pca,
geom = "point", # Usamos solo puntos para no saturar el gráfico
ellipse.type = "convex",
palette = "jco",
ggtheme = theme_minimal(),
title = "Agrupamiento de Propiedades Inmobiliarias (K=3)")## Warning: argument title is deprecated; please use main instead.
Para dar respuesta al segundo objetivo del estudio, enfocado en entender las dinámicas de ofertas específicas, se procedió a segmentar el mercado inmobiliario agrupando las propiedades en conglomerados homogéneos. Utilizando el método del codo sobre las coordenadas de los componentes principales, se determinó que el número óptimo de segmentos es tres (K=3).
Al aplicar el algoritmo K-means y visualizar los resultados en el plano factorial, se identifican tres dinámicas de oferta claramente diferenciadas:
Esta segmentación multidimensional le permite a la empresa inmobiliaria abandonar las generalizaciones y focalizar sus estrategias comerciales en tres nichos estructurados: mercado de alto valor, mercado familiar tradicional y mercado de vivienda compacta.
# 1. Filtramos las variables categóricas
vivienda_cat <- vivienda %>%
select(zona, tipo) %>%
na.omit()
# 2. Ejecutamos el Análisis de Correspondencias Múltiples (MCA)
# El MCA maneja perfectamente variables con pocas categorías
res_mca <- MCA(vivienda_cat, graph = FALSE)
# 3. Visualizamos el resultado (Biplot Múltiple)
fviz_mca_var(res_mca, repel = TRUE,
col.var = "#2C3E50", # Color de los puntos
shape.var = 19, # Forma de los puntos
ggtheme = theme_minimal(),
title = "Análisis de Correspondencias: Zona vs. Tipo de Vivienda")En cumplimiento del tercer objetivo, el cual busca examinar la
relación entre las variables categóricas para identificar patrones de
comportamiento, se ejecutó un Análisis de Correspondencias Múltiples
(MCA) cruzando la zona de la ciudad con el
tipo de inmueble.
Al proyectar las categorías en el plano factorial, se revelan asociaciones espaciales muy marcadas en el mercado inmobiliario:
Apartamento y las
zonas Oeste y Norte (agrupadas en el cuadrante
izquierdo). Esto indica que el desarrollo urbanístico en estos sectores
está fuertemente orientado a la construcción en altura y proyectos de
alta densidad.Casa
muestra una relación directa con la Zona Centro y la
Zona Oriente. Esto sugiere que en estas áreas prevalece la
arquitectura tradicional, lotes individuales y una consolidación
urbanística más antigua que no ha migrado masivamente hacia los
edificios.Zona Sur se
ubica cerca del eje central (cero) en la primera dimensión, lo que
sugiere que es un sector de transición con un mercado inmobiliario más
mixto, donde la oferta entre casas y apartamentos está más equilibrada
que en los extremos de la ciudad.Esta visualización confirma que la estrategia comercial de la inmobiliaria no puede ser uniforme; las campañas de captación o venta de apartamentos tendrán mayor efectividad en el Norte y el Oeste, mientras que la comercialización de casas debe focalizarse en el Centro y el Oriente.
# 1. Filtramos los datos para evitar NAs en las variables a graficar
vivienda_graf <- vivienda %>%
select(zona, tipo, preciom) %>%
na.omit()
# 2. Creamos el gráfico de cajas (Boxplot)
ggplot(vivienda_graf, aes(x = zona, y = preciom, fill = tipo)) +
geom_boxplot(outlier.alpha = 0.3, outlier.color = "gray") + # Atenuamos los valores atípicos
scale_fill_manual(values = c("#2C3E50", "#E7B800")) + # Colores corporativos
theme_minimal() +
labs(title = "Distribución del Precio Inmobiliario por Zona y Tipo",
subtitle = "Perspectiva estratégica para la valoración de propiedades",
x = "Zona de la Ciudad",
y = "Precio (Millones)",
fill = "Tipo de Inmueble") +
theme(legend.position = "bottom",
plot.title = element_text(face = "bold"))# --- GRÁFICO 1: Relación Área vs Precio por Estrato ---
# Preparamos los datos, convirtiendo el estrato a factor (categoría)
vivienda_disp <- vivienda %>%
select(areaconst, preciom, estrato) %>%
na.omit() %>%
mutate(estrato = as.factor(estrato))
graf_1 <- ggplot(vivienda_disp, aes(x = areaconst, y = preciom, color = estrato)) +
geom_point(alpha = 0.5) + # Puntos semitransparentes para ver la densidad
geom_smooth(method = "lm", se = FALSE, color = "black", linetype = "dashed") +
theme_minimal() +
labs(title = "Relación entre Área Construida y Precio",
subtitle = "Impacto del estrato socioeconómico en la valorización",
x = "Área Construida (m²)",
y = "Precio (Millones)",
color = "Estrato")
# --- GRÁFICO 2: Composición del Inventario ---
vivienda_bar <- vivienda %>%
select(zona, estrato) %>%
na.omit() %>%
mutate(estrato = as.factor(estrato))
graf_2 <- ggplot(vivienda_bar, aes(x = zona, fill = estrato)) +
geom_bar(position = "dodge", color = "white") + # Barras separadas por estrato
scale_fill_brewer(palette = "YlGnBu") + # Paleta de colores gerencial
theme_minimal() +
labs(title = "Composición de la Oferta Inmobiliaria",
subtitle = "Volumen de inventario disponible por Zona y Estrato",
x = "Zona de la Ciudad",
y = "Cantidad de Propiedades",
fill = "Estrato")
# Imprimimos los gráficos
graf_1## `geom_smooth()` using formula = 'y ~ x'
La integración de la visualización de datos permite traducir los modelos estadísticos en directrices comerciales claras para la dirección de la empresa inmobiliaria:
1. Distribución y Techos de Precio por Zona Al evaluar el comportamiento de los precios frente a la ubicación y el tipo de inmueble, se identifican contrastes significativos en el mercado:
2. Valorización del Metro Cuadrado (Área vs. Precio) El gráfico de dispersión confirma la relación directamente proporcional entre el área construida y el precio, pero revela que el estrato socioeconómico es el verdadero multiplicador del valor:
3. Composición y Concentración del Inventario El análisis del volumen de propiedades disponibles expone la distribución real de la oferta: