Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.
Se realiza cargue de la base de datos de forma local no funciono el cargue desde el enlace
ruta <- "E:/FABIAN/1-javeriana_cali/Semestre 2/2_estadistica/vivienda.csv"
# Cargar el archivo CSV
vivienda <- read.csv(ruta)
head(vivienda)#nstall.packages("knitr")
#nstall.packages("kableExtra")
library(knitr)
info_columnas <- data.frame(
ID = seq_along(colnames(vivienda)),
Tipo_Formato = sapply(vivienda, class),
Cantidad_Diferentes = sapply(vivienda, function(col) length(unique(col))),
Cantidad_NA = sapply(vivienda, function(col) sum(is.na(col))),
Cantidad_Null = sapply(vivienda, function(col) sum(is.null(col)))
)
#Imprimir información de las columnas
#rint(info_columnas)
kable(info_columnas, format = "markdown")| ID | Tipo_Formato | Cantidad_Diferentes | Cantidad_NA | Cantidad_Null | |
|---|---|---|---|---|---|
| id | 1 | integer | 8320 | 3 | 0 |
| zona | 2 | character | 6 | 3 | 0 |
| piso | 3 | integer | 13 | 2638 | 0 |
| estrato | 4 | integer | 5 | 3 | 0 |
| preciom | 5 | integer | 540 | 2 | 0 |
| areaconst | 6 | numeric | 653 | 3 | 0 |
| parquea | 7 | integer | 11 | 1605 | 0 |
| banios | 8 | integer | 12 | 3 | 0 |
| habitac | 9 | integer | 12 | 3 | 0 |
| tipo | 10 | character | 7 | 3 | 0 |
| barrio | 11 | character | 437 | 3 | 0 |
| longitud | 12 | numeric | 2929 | 3 | 0 |
| latitud | 13 | numeric | 3680 | 3 | 0 |
## [1] 8322
RESULTADOS : Características de las variables y datos faltantes:
Se identifica que el dataframe cuenta con información de 8,322 viviendas medidas en 12 variables: zona, piso, estrato, preciom, areaconst, parqueaderos, banios, habitaciones, tipo, barrio, longitud y latitud.
En en analisis de datos faltantes en varias columnas identifica la presencia de registros con marca de NA en la columnas Piso con 2638 registros y parqueaderos en 1605 registros
Se identifica que el dataframe tiene en comun 3 filas los cuales NA en la en todas las columnas con excepcion en precio
# Filtrar registros donde todas las columnas seleccionadas tienen valores nulos
vivienda_filtrada <- subset(vivienda, is.na(areaconst))
# Mostrar los registros filtrados
print(vivienda_filtrada)## id zona piso estrato preciom areaconst parquea banios habitac tipo barrio
## 8320 NA <NA> NA NA NA NA NA NA NA <NA> <NA>
## 8321 NA <NA> NA NA NA NA NA NA NA <NA> <NA>
## 8322 NA <NA> NA NA 330 NA NA NA NA <NA> <NA>
## longitud latitud
## 8320 NA NA
## 8321 NA NA
## 8322 NA NA
# Eliminar las columnas "piso" y "parquea" utilizando subset()
vivienda <- subset(vivienda, select = -c(piso, parquea))
# Eliminar los registros con valores NA utilizando na.omit()
vivienda <- na.omit(vivienda)
library(knitr)
info_columnas <- data.frame(
ID = seq_along(colnames(vivienda)),
Tipo_Formato = sapply(vivienda, class),
Cantidad_Diferentes = sapply(vivienda, function(col) length(unique(col))),
Cantidad_NA = sapply(vivienda, function(col) sum(is.na(col))),
Cantidad_Null = sapply(vivienda, function(col) sum(is.null(col)))
)
#Imprimir información de las columnas
#rint(info_columnas)
kable(info_columnas, format = "markdown")| ID | Tipo_Formato | Cantidad_Diferentes | Cantidad_NA | Cantidad_Null | |
|---|---|---|---|---|---|
| id | 1 | integer | 8319 | 0 | 0 |
| zona | 2 | character | 5 | 0 | 0 |
| estrato | 3 | integer | 4 | 0 | 0 |
| preciom | 4 | integer | 539 | 0 | 0 |
| areaconst | 5 | numeric | 652 | 0 | 0 |
| banios | 6 | integer | 11 | 0 | 0 |
| habitac | 7 | integer | 11 | 0 | 0 |
| tipo | 8 | character | 6 | 0 | 0 |
| barrio | 9 | character | 436 | 0 | 0 |
| longitud | 10 | numeric | 2928 | 0 | 0 |
| latitud | 11 | numeric | 3679 | 0 | 0 |
## [1] 8319
## 'data.frame': 8319 obs. of 11 variables:
## $ id : int 8312 8311 8307 8296 8297 8298 8299 8300 8286 8287 ...
## $ zona : chr "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
## $ estrato : int 6 6 5 3 5 5 6 5 5 5 ...
## $ preciom : int 1300 480 1200 220 330 1350 305 480 275 285 ...
## $ areaconst: num 318 300 800 150 112 390 125 280 74 120 ...
## $ banios : int 4 4 7 2 4 10 3 4 2 4 ...
## $ habitac : int 2 4 5 4 3 10 3 4 3 3 ...
## $ tipo : chr "Apartamento" "Casa" "Casa" "Casa" ...
## $ barrio : chr "arboleda" "normandía" "miraflores" "el guabal" ...
## $ longitud : num -76576 -76571 -76568 -76565 -76565 ...
## $ latitud : num 3454 3454 3455 3417 3408 ...
## - attr(*, "na.action")= 'omit' Named int [1:3] 8320 8321 8322
## ..- attr(*, "names")= chr [1:3] "8320" "8321" "8322"
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## id zona estrato preciom areaconst banios habitac tipo barrio longitud
## 8319 1 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0 0
## latitud
## 8319 1 0
## 0 0
RESULTADOS : Características de las variables y datos faltantes:
Nos e identifica la presncia de datos en null o faltantes
Se identifica que el dataframe cuenta con información de 8,322 viviendas medidas en 12 variables: zona, piso, estrato, preciom, areaconst, parqueaderos, banios, habitaciones, tipo, barrio, longitud y latitud.
En en analisis de datos faltantes en varias columnas identifica la presencia de registros con marca de NA en la columnas Piso con 2638 registros y parqueaderos en 1605 registros
Se identifica que el dataframe tiene en comun 3 filas los cuales NA en la en todas las columnas con excepcion en precio
# Simulación de datos (puedes cargar tus propios datos)
# vivienda <- ...
# Dividir el espacio del gráfico en 2 filas y 3 columnas
par(mfrow = c(1, 2))
# Generar histogramas con colores diferentes
variables <- c("estrato", "preciom", "areaconst", "banios", "habitac")
colors <- rainbow(length(variables)) # Colores del arcoíris
# Diccionario de renombramiento
nombres_renombrados <- c("estrato"="ESTRATO","preciom" = "PRECIO", "areaconst" = "AREA_CONSTRUIDA",
"banios" = "BAnOS", "habitac" = "HABITACIONES")
for (i in 1:length(variables)) {
variable_actual <- variables[i]
# Obtener el nuevo nombre de la variable si existe en el diccionario
nuevo_nombre <- ifelse(variable_actual %in% names(nombres_renombrados), nombres_renombrados[variable_actual], variable_actual)
hist(x = vivienda[[variable_actual]],
main = toupper(nuevo_nombre), # Convertir a mayúsculas y usar como título
xlab = nuevo_nombre, ylab = "Frecuencia", # Renombrar encabezados de ejes
col = colors[i])
}Las variables mas adecuadas para relizar el analisis son : “estrato”, “preciom”, “areaconst”, “banios”, “habitac” las variables numericas como latitud y longitud son de ubicacion no darian un resultado ajustado ala medicion.
## corrplot 0.92 loaded
# Seleccionar las variables numéricas para calcular la matriz de correlación
columnas_numericas <- c("estrato", "preciom", "areaconst", "banios", "habitac")
# Calcular la matriz de correlación
correlacion <- round(cor(vivienda[columnas_numericas]), 1)
# Configurar parámetros para mejorar la visualización
corrplot(correlacion, method = "color", tl.cex = 0.6, tl.col = "blacK",
cl.lim = c(-1, 1), cl.colors = c("lightblue", "white", "lightcoral3"),
addCoef.col = "black", number.cex = 0.6, diag = FALSE)## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "cl.lim" is not a graphical parameter
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "cl.colors" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "cl.lim" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "cl.colors" is not a graphical parameter
## Warning in title(title, ...): "cl.lim" is not a graphical parameter
## Warning in title(title, ...): "cl.colors" is not a graphical parameter
LAs correalacionanes con valores positivos mas acertados son :
-Área construida y Precio: Existe una correlación positiva de 0.7 entre el área construida y el precio de la vivienda. Esto sugiere que a medida que aumenta el tamaño del área construida, el precio de la vivienda también tiende a aumentar. En otras palabras, las viviendas más grandes tienden a tener un precio más alto.
-Baños y Precio: Hay una correlación positiva de 0.7 entre la cantidad de baños en una vivienda y su precio. Esta relación indica que a medida que aumenta el número de baños en una vivienda, es más probable que su precio sea mayor. Las viviendas con más baños tienden a tener un valor más alto.
-Baños y Área Construida: Se observa una correlación positiva de 0.6 entre la cantidad de baños y el área construida de una vivienda. Esto sugiere que las viviendas más grandes tienden a tener más baños. El tamaño del área construida está relacionado con la cantidad de baños en la vivienda.
-Precio y Estrato: Existe una correlación positiva de 0.6 entre el precio de la vivienda y su estrato. Esta relación implica que a medida que el estrato de la vivienda es más alto, es más probable que su precio sea mayor. Los estratos más altos tienden a tener viviendas con precios más elevados.
-Habitaciones y Baños: Se observa una correlación positiva de 0.6 entre la cantidad de habitaciones en una vivienda y el número de baños. Esto sugiere que las viviendas con más habitaciones también tienden a tener más baños. A medida que aumenta el número de habitaciones, es probable que aumente la cantidad de baños.
-Habitaciones y Área Construida: Hay una correlación positiva de 0.5 entre la cantidad de habitaciones en una vivienda y el área construida. Esto implica que las viviendas más grandes tienden a tener más habitaciones. El tamaño del área construida está relacionado con la cantidad de habitaciones en la vivienda.
#
# Dividir el espacio del gráfico en 1 fila y 3 columnas
par(mfrow = c(1, 1))
# Generar gráficos de barras ordenados por frecuencia
variables_categoricas <- c("zona", "tipo", "barrio")
nombres_renombrados <- c("barrio" = "BARRIOS", "tipo" = "TIPO DE VIVIENDA", "zona" = "ZONA DE LA CIUDAD")
colors <- rainbow(length(variables_categoricas)) # Colores del arcoíris
for (i in 1:length(variables_categoricas)) {
variable_actual <- variables_categoricas[i]
# Calcular la frecuencia de cada categoría
frecuencias <- table(vivienda[[variable_actual]])
# Ordenar las categorías por frecuencia de mayor a menor
categorias_ordenadas <- names(sort(frecuencias, decreasing = TRUE))
# Generar gráfico de barras ordenado con tamaño de fuente más pequeño en los nombres del eje x
barplot(frecuencias[categorias_ordenadas],
main = nombres_renombrados[variable_actual],
col = colors[i],
xlab = nombres_renombrados[variable_actual],
names.arg = categorias_ordenadas, # Usar nombres ordenados en el eje x
cex.names = 0.7) # Tamaño de fuente más pequeño para los nombres del eje x
}RESULTADOS
En el análisis de un estudio, los histogramas nos permiten visualizar la distribución de los datos y la frecuencia de los valores en cada gráfica. Al examinar la asimetría de los datos durante la ejecución de un control de calidad estadístico se evidencia que la información correspondiente a cada variables representa resultados asimétricos y en valores atípicos.
Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y preferencias del mercado.
3.2.1 Elección del número de componentes principales
## estrato preciom areaconst banios habitac
## 1.059298e+00 1.080207e+05 2.043874e+04 2.039784e+00 2.130248e+00
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(ggplot2)
library(ggrepel) # Asegúrate de cargar el paquete ggrepel
# Supongamos que "vivienda_FN" es tu dataframe
# Realizar el análisis de componentes principales (PCA)
pca <- prcomp(vivienda_FN, scale = TRUE)
# Crear el gráfico de dispersión de individuos
plot <- fviz_pca_ind(pca,
geom.ind = "point",
col.ind = "#53868B",
axes = c(1, 2),
pointsize = 1.5,
col.var = "blue",
label = "var")
# Agregar etiquetas a cada punto en el gráfico utilizando ggrepel
plot_with_labels <- plot +
geom_text_repel(aes(label = rownames(pca$x)))
# Mostrar el gráfico resultante
print(plot_with_labels)## Warning: ggrepel: 8296 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps
colores <- function(vec){
col <- rainbow(length(unique(vec)))
return(col[as.numeric(as.factor(vec))])
}
plot(pca$x[,1:2], col = colores(vivienda$zona),
pch = 19,
xlab = "Z1",
ylab = "Z2")
En este caso el primer componente principal explica el 58.7% de la
variabilidad contenida en la base de datos y entre los dos primeros es
del 82,5%, lo cual indicaría que con solo una variable (CP1) que se
obtiene mediante una combinación lineal de las variables se puede
resumir gran parte de la variabilidad que contiene la base de datos.
La representación gráfica de las variables en el plano de los
componentes principales ofrece la oportunidad de discernir la dirección
y la naturaleza de los componentes fundamentales, aspectos que son
capturados por los vectores propios de la matriz de covarianza (Σ). En
el contexto de este análisis, el primer componente principal se halla
predominantemente relacionado con las variables “estrato” y “precio”,
siendo estas las principales contribuyentes a su orientación. Por otro
lado, el segundo componente principal parece estar influenciado en gran
medida por la variable “habitación y area construida”.
Para explicar el sentido de los ejes, se escogen cuatro casos extremos conformados por los siguientes clientes
#library(factoextra)
library(ggrepel)
biplot(pca, scale = 0.5, col = c("#458B74", "#00008B"), main = "Biplot de PCA")RESULTADOS Análisis de Componentes Principales (PCA)
los principales componentes de analisis son “estrato”, “preciom”, “areaconst”, “banios”, “habitac”
Se identifica que estrato y precio, formando un grupo que presenta un mayor efecto sobre el primer componente
Se identificamientras habitación presenta un mayor efecto sobre el segundo componente y la cercania de las variables de area construida y baños.
El primer componente explica el 58.7% de la varianza observada de los datos
Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas y demandas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.
library(cluster)
#library(factoextra)
vivienda_subset <- vivienda[1:8319, c("estrato", "preciom", "areaconst", "banios", "habitac")]
vivienda_estandarizada <- scale(vivienda_subset)
num_clusters <- 2:10
wss <- numeric(length(num_clusters))
for (k in num_clusters) {
kmeans_result <- kmeans(vivienda_estandarizada, centers = k)
wss[k - num_clusters[1] + 1] <- kmeans_result$tot.withinss
}
# Graficar el método del codo
plot(num_clusters, wss, type = "b", pch = 19, frame = FALSE,
xlab = "Número de Clusters", ylab = "Suma de Cuadrados Dentro de los Clusters",
main = "Método del Codo para Selección de Clusters")vivienda_AC <- vivienda[1:8319,3:7]
vivienda_AC_est <- scale(vivienda_AC)
vivienda_AC_est <- as.data.frame(vivienda_AC_est)
head(vivienda_AC_est,10)Las distancias correspondientes a los valores estandarizados serán:
Distribución de los individuos por distancias
Analisis de primera relacion mas coincidente preciom y areaconst
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ lubridate 1.9.2 ✔ tibble 3.2.1
## ✔ purrr 1.0.1 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks mice::filter(), stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# distancia euclidiana
dist_emp <- dist(vivienda_AC_est, method = 'euclidean')
# Cluster jerarquico con el método complete
hc_emp <- hclust(dist_emp, method = 'complete')
# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_emp, k = 4)
# asignamos los clusters
assigned_cluster <- vivienda_AC_est %>% mutate(cluster = as.factor(cluster_assigments))
# gráfico de puntos
ggplot(assigned_cluster, aes(x = preciom, y = areaconst, color = cluster)) +
geom_point(size = 4) +
geom_text(aes(label = cluster), vjust = -.8) + # Agregar etiquetas del clúster
theme_classic()
Distribución de los individuos por distancias
plot(hc_emp, cex = 0.6, main = "Dendograma de Vivienda preciom y areaconst ", las=1,
ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_emp, k = 2, border = 2:5)Analisis del segunda relacion mas coincidente Baños y Precio
#install.packages("tidyverse")
#library(tidyverse)
# distancia euclidiana
dist_emp1 <- dist(vivienda_AC_est, method = 'euclidean')
# Cluster jerarquico con el método complete
hc_emp1 <- hclust(dist_emp1, method = 'complete')
# Determinamos a dónde pertenece cada observación
cluster_assigments1 <- cutree(hc_emp1, k = 4)
# asignamos los clusters
assigned_cluster1 <- vivienda_AC_est %>% mutate(cluster1 = as.factor(cluster_assigments1))
# gráfico de puntos
ggplot(assigned_cluster1, aes(x = preciom , y = banios, color = cluster1)) +
geom_point(size = 4) +
geom_text(aes(label = cluster1), vjust = -.8) + # Agregar etiquetas del clúster
theme_classic()plot(hc_emp1, cex = 0.6, main = "Dendograma de Vivienda", las=1,
ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_emp1, k = 2, border = 2:5)Por último se mide el indice de Silhouette promedio con el fin de valorar la mejor alternativa para la elección del número de conglomerado identificando una relacion en los 3 perimeros clusters.
library(tidyverse)
library(cluster)
# distancia euclidiana
dist_emp <- dist(vivienda_AC_est, method = 'euclidean')
# Cluster jerarquico con el método complete
hc_emp <- hclust(dist_emp, method = 'complete')
# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_emp, k = 2)
# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(vivienda_AC_est))
sil_avg <- mean(sil[,3])
# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=2 : ", sil_avg)## Coeficiente de Silhouette promedio k=2 : 0.6630623
# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_emp, k = 3)
# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(vivienda_AC_est))
sil_avg <- mean(sil[,3])
# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=3 : ", sil_avg)## Coeficiente de Silhouette promedio k=3 : 0.4823289
# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_emp, k = 4)
# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(vivienda_AC_est))
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.3144261
Aplicar el método K-means con el número de clusters elegido = 2
num_clusters_elegido <- 2
kmeans_result <- kmeans(vivienda_AC_est, centers = num_clusters_elegido)
vivienda$cluster <- as.factor(kmeans_result$cluster)
fviz_cluster(kmeans_result, data = vivienda_AC_est, geom = "point", palette = "jco")Estos resultados indican una mejor agrupación cuando se eligen k=2 conglomerados. (valores más cercanos a 1 indican un agrupamiento más coherente) e identifica una fuerte precencdia en los 2 primeros cluster con un numero total de 10 y se identica los clusters 1 y 2 están situados en los extremos del plano.
library(cluster)
clusterIris <- kmeans(vivienda_AC_est, center=2, nstart = 20)
vivienda_AC_est %>%
ggplot(aes(x = factor(clusterIris$cluster), y = preciom, fill = factor(clusterIris$cluster))) + geom_boxplot() + geom_point() + xlab("Cluster") + labs(fill="Cluster")num_clusters_elegido3 <- 3
kmeans_result3 <- kmeans(vivienda_AC_est, centers = num_clusters_elegido3)
vivienda$cluster3 <- as.factor(kmeans_result3$cluster)
fviz_cluster(kmeans_result3, data = vivienda_AC_est, geom = "point", palette = "jco")clusterIris3 <- kmeans(vivienda_AC_est, center=3, nstart = 20)
vivienda_AC_est %>%
ggplot(aes(x = factor(clusterIris3$cluster), y = preciom, fill = factor(clusterIris3$cluster))) + geom_boxplot() + geom_point() + xlab("Cluster") + labs(fill="Cluster")
Se identifica la gran cercania en relacion de los 2 perimeros cluster
los cuales estan mas cercanos al 0
RESULTADOS Análisis de Conglomerados ((Clustering))
Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio) y las variables numéricas (precio, área construida, número de parqueaderos, baños, habitaciones) para identificar patrones de comportamiento del mercado inmobiliario
#install.packages(FactoMineR)
library(FactoMineR)
tabla <- table(vivienda33$zona, vivienda33$estrato)
tabla##
## 3 4 5 6
## Zona Centro 105 14 4 1
## Zona Norte 572 407 769 172
## Zona Oeste 54 84 290 770
## Zona Oriente 340 8 2 1
## Zona Sur 382 1616 1685 1043
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.
Finalmente se procede a realizar el análisis de correspondencia que consistes en estimar las coordenadas para cada uno de los niveles de ambas variables y representarlas en un plano cartesiano
Se puede eidentiicar de acueros a cada :
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32215213 69.965515 69.96551
## dim 2 0.12745096 27.680002 97.64552
## dim 3 0.01084108 2.354483 100.00000
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")Indica que el primer componente tiene el 70 % del total de la varianza y la segunda componente explica el 27.7 % del total de la varianza, por tanto, las 2 primeras componentes en conjunto explican el 97.7 % de la varianza total de los datos.
generar_colores_aleatorios <- function(n) {
hsv(h = runif(n), s = 0.9, v = 0.9)
}
# Asignar colores aleatorios a las zonas
colores_aleatorios <- generar_colores_aleatorios(length(unique(vivienda33$zona)))
ggplot(vivienda33, aes(x = zona, y = preciom, fill = zona)) +
geom_boxplot() +
scale_fill_manual(values = colores_aleatorios) + # Asigna colores aleatorios
labs(title = "Distribución Precio por Zona") +
theme_minimal() # Personaliza el tema del gráficolibrary(ggplot2)
# Definir una paleta de colores para las zonas
paleta_colores <- c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00", "#FFFF33")
# Crear el gráfico de cajas multivariado
ggplot(vivienda33, aes(x = zona, y = preciom, fill = factor(estrato))) +
geom_boxplot(alpha = 0.7) +
scale_fill_manual(values = paleta_colores) +
labs(title = "Distribución de Precios por Zona y Estrato",
x = "Zona",
y = "Precio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas en el eje Xdimension_descriptions <- dimdesc(resultados_ac)
# Imprimir la descripción de las variables para cada dimensión
print(dimension_descriptions)## $`Dim 1`
## $`Dim 1`$row
## coord
## Zona Oeste -0.5690714
## Zona Sur -0.2090141
## Zona Norte 0.3898305
## Zona Centro 1.7245923
## Zona Oriente 2.0148839
##
## $`Dim 1`$col
## coord
## 6 -0.5190649
## 4 -0.1544575
## 5 -0.1323066
## 3 1.1865554
##
##
## $`Dim 2`
## $`Dim 2`$row
## coord
## Zona Sur -0.1880737
## Zona Norte -0.1471227
## Zona Centro 0.3637090
## Zona Oriente 0.5374546
## Zona Oeste 0.7826088
##
## $`Dim 2`$col
## coord
## 4 -0.3798066
## 5 -0.2042818
## 3 0.2066347
## 6 0.5385722
RESULTADOS Análisis de Conglomerados ((Clustering))
La representación gráfica resultante ofrece una perspectiva de las interacciones entre las variables “estrato” y “zona” en el sector inmobiliario. Esta visualización permite identificar patrones y orienta la segmentacion de las viviendas
Análisis de Componentes Principales: Esta técnica te ayuda a reducir la dimensionalidad de tus datos mientras mantienes la mayor parte de la variabilidad. Puede ser útil para visualizar patrones en datos de alta dimensión .se logra identifiCar regfistro no utiles y fue necesario eliminar los regsitros para relaizar un analisis mas preciso minimanzo el error
Se logra identificar que los componentes de “estrato”, “preciom”, “areaconst”, “banios”, “habitac” son los adecuados para la medicion y la estrecha relacion en las variables de estrato y precio, formando un grupo que presenta un mayor efecto sobre el primer componente con un total de 58.7% de la varianza observada de los datos.
Análisis de Conglomerados:Apoyo el analisis en la agrupacion de las observaciones similares juntas estableciendo la medicon presento 10 cluster de los cuales Se identifica gran relacion en los cluster 1,2 3 con unos Coeficiente de Silhouettek=2 : 0.6630623– k=3 : 0.4823289 — k=4 : 0.3144261. Estableciento una gran medicion en el cluter 2 , el cual es el mas cercano a 1 .
Análisis de Correspondencia: Se logra identificar que las variables (“estrato” y “zona”) tienen las mas grandes y posibles relaciones lineales y la decision a tomar depende en gran dedida de estas 2 diemnciones.