#Modelos descriptivos de análisis multivariado

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

# Cargamos la base de datos para su posterior procesamiento analítico
library(readr)
vivienda <- read_csv("C:/Users/PC/Downloads/vivienda.csv")
## Rows: 8322 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (3): zona, tipo, barrio
## dbl (10): id, piso, estrato, preciom, areaconst, parquea, banios, habitac, l...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(vivienda)
#CARGAMOS LIBRERIAS 
# LIBRERÍAS A UTILIZAR

# Cargamos las librerías necesarias
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(FactoMineR)
library(zoo)
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
# EXPLORACIÓN INICIAL

# Mostramos las primeras filas de la base de datos
head(vivienda, 10)
# Mostramos la estructura de la base de datos
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id       : num [1:8322] 8312 8311 8307 8296 8297 ...
##  $ zona     : chr [1:8322] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : num [1:8322] 4 1 NA 2 NA NA 2 NA NA 2 ...
##  $ estrato  : num [1:8322] 6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : num [1:8322] 1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num [1:8322] 318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num [1:8322] 2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num [1:8322] 4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num [1:8322] 2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr [1:8322] "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr [1:8322] "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num [1:8322] -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num [1:8322] 3454 3454 3455 3417 3408 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_double(),
##   ..   zona = col_character(),
##   ..   piso = col_double(),
##   ..   estrato = col_double(),
##   ..   preciom = col_double(),
##   ..   areaconst = col_double(),
##   ..   parquea = col_double(),
##   ..   banios = col_double(),
##   ..   habitac = col_double(),
##   ..   tipo = col_character(),
##   ..   barrio = col_character(),
##   ..   longitud = col_double(),
##   ..   latitud = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
# IMPUTACIÓN DE VALORES NULOS

# Lista de nombres de columnas numéricas para imputar
columnas_numericas <- c("longitud", "latitud")

# Iteramos sobre las columnas numéricas y realizamos la imputación con la mediana
for (col in columnas_numericas) {
  vivienda[[col]] <- na.aggregate(vivienda[[col]], FUN = median)
}

# ELIMINACIÓN DE COLUMNAS

# Eliminamos las columnas de longitud, latitud, piso, parqueaderos y barrio del dataframe vivienda
columnas_a_eliminar <- c("piso", "parqueaderos", "barrio")
vivienda <- vivienda[, !(names(vivienda) %in% columnas_a_eliminar)]

# CREACIÓN DE UN DATAFRAME CON TIPOS ESPECÍFICOS

# Nombres y tipos de las columnas
nombres <- c("id", "zona", "estrato", "preciom", "areaconst", "banios", "habitac", "tipo")
tipos <- c("double", "character", "integer", "double", "double", "integer", "integer", "character")

# Creación del dataframe con tipos específicos
df <- data.frame(matrix(ncol = length(nombres), nrow = 0))
colnames(df) <- nombres
for (i in 1:length(nombres)) {
  df[, i] <- as(df[, i], tipos[i])
}
print(df)
## [1] id        zona      estrato   preciom   areaconst banios    habitac  
## [8] tipo     
## <0 rows> (or 0-length row.names)
# ANÁLISIS EXPLORATORIO

# Mostramos la estructura de los datos
str(vivienda)
## tibble [8,322 × 11] (S3: tbl_df/tbl/data.frame)
##  $ id       : num [1:8322] 8312 8311 8307 8296 8297 ...
##  $ zona     : chr [1:8322] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ estrato  : num [1:8322] 6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : num [1:8322] 1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num [1:8322] 318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num [1:8322] 2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num [1:8322] 4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num [1:8322] 2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr [1:8322] "Apartamento" "Casa" "Casa" "Casa" ...
##  $ longitud : num [1:8322] -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num [1:8322] 3454 3454 3455 3417 3408 ...
# Resumen estadístico de las variables
summary(vivienda)
##        id           zona              estrato         preciom      
##  Min.   :   1   Length:8322        Min.   :3.000   Min.   :  58.0  
##  1st Qu.:2080   Class :character   1st Qu.:4.000   1st Qu.: 220.0  
##  Median :4160   Mode  :character   Median :5.000   Median : 330.0  
##  Mean   :4160                      Mean   :4.634   Mean   : 433.9  
##  3rd Qu.:6240                      3rd Qu.:5.000   3rd Qu.: 540.0  
##  Max.   :8319                      Max.   :6.000   Max.   :1999.0  
##  NA's   :3                         NA's   :3       NA's   :2       
##    areaconst         parquea           banios          habitac      
##  Min.   :  30.0   Min.   : 1.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 3.000  
##  Median : 123.0   Median : 2.000   Median : 3.000   Median : 3.000  
##  Mean   : 174.9   Mean   : 1.835   Mean   : 3.111   Mean   : 3.605  
##  3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000   3rd Qu.: 4.000  
##  Max.   :1745.0   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##  NA's   :3        NA's   :1605     NA's   :3        NA's   :3       
##      tipo              longitud            latitud        
##  Length:8322        Min.   :-76576.00   Min.   :   3.333  
##  Class :character   1st Qu.:-76506.75   1st Qu.:   3.390  
##  Mode  :character   Median :   -76.54   Median :   3.449  
##                     Mean   :-21858.21   Mean   : 970.951  
##                     3rd Qu.:   -76.52   3rd Qu.:3367.000  
##                     Max.   :   -76.46   Max.   :3497.000  
## 
# LIMPIEZA DE DATOS


# Imputación de valores nulos en variables seleccionadas
vars_imputacion <- c("preciom", "areaconst", "parquea", "banios", "habitac", "piso", "estrato", "tipo")
for (var in vars_imputacion) {
  vivienda[[var]][is.na(vivienda[[var]])] <- median(vivienda[[var]], na.rm = TRUE)
}

# Eliminación de filas con valores NA utilizando na.omit()
vivienda <- na.omit(vivienda)

# RESULTADOS FINALES

# Mostramos el dataframe limpio
head(vivienda) 
#creamos graficas 

# CREAMOS HISTOGRAMA PARA LAS VARIABLES MAS REPRESENTATIVAS 

# Histograma de la variable 'estrato'
ggplot(data = vivienda, aes(x = estrato)) +
  geom_histogram(binwidth = 1, fill = "blue", color = "black") +
  labs(title = "Histograma de Estrato", x = "Estrato", y = "Frecuencia")

# Histograma de la variable 'preciom'
ggplot(data = vivienda, aes(x = preciom)) +
  geom_histogram(binwidth = 100, fill = "green", color = "black") +
  labs(title = "Histograma de Precio", x = "Precio", y = "Frecuencia")

# Histograma de la variable 'areaconst'
ggplot(data = vivienda, aes(x = areaconst)) +
  geom_histogram(binwidth = 50, fill = "orange", color = "black") +
  labs(title = "Histograma de Área", x = "Área", y = "Frecuencia")

# Histograma de la variable 'banios'
ggplot(data = vivienda, aes(x = banios)) +
  geom_histogram(binwidth = 1, fill = "purple", color = "black") +
  labs(title = "Histograma de Baños", x = "Baños", y = "Frecuencia")

# Histograma de la variable 'habitac'
ggplot(data = vivienda, aes(x = habitac)) +
  geom_histogram(binwidth = 1, fill = "red", color = "black") +
  labs(title = "Histograma de Habitaciones", x = "Habitaciones", y = "Frecuencia")

#CREAMOS BOXPLOT 

# Boxplot de la variable 'estrato'
ggplot(data = vivienda, aes(y = estrato)) +
  geom_boxplot(fill = "blue") +
  labs(title = "Boxplot de Estrato", y = "Estrato")

# Boxplot de la variable 'preciom'
ggplot(data = vivienda, aes(y = preciom)) +
  geom_boxplot(fill = "green") +
  labs(title = "Boxplot de Precio", y = "Precio")

# Boxplot de la variable 'areaconst'
ggplot(data = vivienda, aes(y = areaconst)) +
  geom_boxplot(fill = "orange") +
  labs(title = "Boxplot de Área", y = "Área")

# Boxplot de la variable 'banios'
ggplot(data = vivienda, aes(y = banios)) +
  geom_boxplot(fill = "purple") +
  labs(title = "Boxplot de Baños", y = "Baños")

# Boxplot de la variable 'habitac'
ggplot(data = vivienda, aes(y = habitac)) +
  geom_boxplot(fill = "red") +
  labs(title = "Boxplot de Habitaciones", y = "Habitaciones")

#En el análisis de los datos, encontramos valores faltantes en algunas observaciones. También identificamos nueve características numéricas y tres características de texto. Esta clasificación es importante para determinar las metodologías adecuadas. Abordar los datos faltantes y considerar la naturaleza de las características es esencial para garantizar resultados sólidos y decisiones informadas.En el proceso de análisis, también hemos observado la presencia de numerosos valores atípicos en las representaciones gráficas mediante diagramas de caja (boxplot). Estos valores extremos pueden tener un impacto en la interpretación de los resultados y la precisión de los modelos estadísticos. Es fundamental tener en cuenta estos datos atípicos y evaluar su posible efecto en el análisis subsiguiente.

#siguiendo con la metodologia se procede a calcular y visualizar las relaciones de correlación entre variables numéricas clave, como “estrato”, “preciom”, “areaconst”, “banios” y “habitac”, con La función corrplot() la cual se emplea para generar un gráfico de matriz de correlación, mejorando su apariencia a través de ajustes visuales como el tamaño de las etiquetas y los colores. Este análisis puede proporcionar información esencial sobre las interacciones entre las variables, lo que es útil para entender patrones y relaciones en los datos.

library(psych)
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(ggplot2)
library(stats)
# Cargar el paquete necesario para visualizar la matriz de correlación
library(corrplot)
## 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

#1. Entre “preciom” (precio de la vivienda) y “estrato” (nivel socioeconómico), la correlación es positiva (0.6). Esto indica que a medida que el estrato aumenta, el precio de la vivienda tiende a ser más alto. #2. La correlación positiva entre “areaconst” (área construida) y “preciom” es de 0.7. Esto sugiere que un aumento en el área construida se relaciona con un incremento en el precio de la vivienda. #3. La correlación positiva entre “banios” (cantidad de baños) y “preciom” también es de 0.7. Esto implica que las viviendas con más baños tienden a tener precios más elevados. #4. Entre “banios” y “areaconst”, la correlación es de 0.6, indicando que viviendas con un área más grande tienden a tener más baños. #5. La relación positiva entre “habitaciones” y “areaconst” es de 0.5. Esto significa que viviendas con un área mayor suelen tener más habitaciones tienen áreas considerablemente mayores que los apartamentos (identificados como 2). #6. Entre “habitaciones” y “banios”, la correlación positiva es de 0.6. Esto indica que las viviendas con más habitaciones tienden a tener más baños.

##Retos: El reto principal consisten en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:

#ANALISIS DE COMPONENTES PRINCIPALES 

# Instalar y cargar la librería necesario

library(factoextra)
library(ggplot2)

# Crear el subconjunto vivienda_1
vivienda_1 <- vivienda[1:8319, c("id", "estrato", "preciom", "areaconst", "banios", "habitac")]

#Seleccionar las columnas numéricas para el análisis
columnas_numericas <- c("id","estrato", "preciom", "areaconst", "banios", "habitac")

# Seleccionar las columnas numéricas del dataframe
vivienda_numericas <- vivienda[columnas_numericas]

# Realizar el análisis de componentes principales (ACP)
acp_result <- PCA(vivienda_numericas, graph = FALSE)


# Verificar si hay valores faltantes o infinitos en las columnas numéricas
columnas_numericas <- c("id", "estrato", "preciom", "areaconst", "banios", "habitac")

# Verificar valores faltantes
valores_faltantes <- apply(vivienda[columnas_numericas], 2, function(x) any(is.na(x)))

# Seleccionar las columnas numéricas relevantes
columnas_numericas <- c("id,","estrato", "preciom", "areaconst", "banios", "habitac")

# Verificamos las columnas presentes en vivienda1
print(colnames(vivienda))
##  [1] "id"        "zona"      "estrato"   "preciom"   "areaconst" "parquea"  
##  [7] "banios"    "habitac"   "tipo"      "longitud"  "latitud"
columnas_numericas <- c("id", "estrato", "preciom", "areaconst", "banios", "habitac")
vivienda_numericas <- vivienda[columnas_numericas]

# Estandarizar los datos
vivienda_estandarizada <- scale(vivienda[columnas_numericas])

# Realizar el ACP
acp <- prcomp(vivienda_estandarizada, scale = TRUE)
print(acp)
## Standard deviations (1, .., p=6):
## [1] 1.7607850 1.1725230 0.8125027 0.6579074 0.4905303 0.4372679
## 
## Rotation (n x k) = (6 x 6):
##                  PC1        PC2          PC3        PC4        PC5         PC6
## id        -0.2748370 -0.4819361  0.805286329  0.2027029  0.0458410 -0.02293989
## estrato   -0.3525138 -0.5351302 -0.296829502 -0.4755185 -0.5006552 -0.15648771
## preciom   -0.4986171 -0.1411152 -0.308889455  0.2468821  0.2241100  0.72448519
## areaconst -0.4626722  0.2493870 -0.163217874  0.6289282 -0.2970022 -0.46188690
## banios    -0.4935765  0.1840580 -0.004760154 -0.4018463  0.6510429 -0.37033077
## habitac   -0.3064252  0.6044737  0.375939817 -0.3388388 -0.4300587  0.31562981
# Generar el gráfico "scree plot"
screeplot(acp, type = "l", npcs = 6, main = "Scree Plot: Varianza Explicada por Componentes Principales")

# Crear el gráfico de varianza explicada de cada componente
fviz_screeplot(acp, addlabels = TRUE, ylim = c(0, 100))

# Visualizamos individuos en el espacio de las componentes principales
fviz_pca_ind(acp, col.ind = "cos2", col.var = "contrib",
             repel = TRUE,
             geom.ind = "point", pointsize = 2,
             title = "Individuos en el Espacio de Componentes Principales")

# Crear el gráfico de contribución de variables a las componentes principales
fviz_pca_var(acp, col.var = "contrib",
             gradient.cols = c("#FF7F00", "#034D94"),
             repel = TRUE)

#El Análisis de Componentes Principales (ACP) ha brindado una perspicaz visión en nuestra investigación, revelando las complejidades inherentes de los datos y desentrañando las principales fuentes de variabilidad. Al explorar los resultados detallados, donde las proporciones acumuladas de varianza explicada por cada componente principal son [0.5167273, 0.7458623, 0.8558891, 0.9280295, 0.9681328, 1.0000000], se pone de manifiesto una comprensión esencial de las contribuciones de cada componente a la variabilidad total. En particular, la primera componente principal, que explica el 51.67% de la variabilidad total, y la segunda componente principal, con una contribución del 22.93%, conjuntamente representan un significativo 74.59% de la variabilidad observada. Estos resultados subrayan la habilidad del ACP para discernir patrones y descomponer relaciones subyacentes que dan forma a las disparidades presentes en los datos. #Esta evaluación resalta la prominencia y relevancia de ciertas variables en las dos primeras componentes principales. Concretamente, “preciom”, “areaconst” y “banios” surgen como los principales contribuyentes en la primera componente, capturando aspectos cruciales de variabilidad vinculados al precio, área construida y cantidad de baños en las viviendas. Simultáneamente, la segunda componente principal se relaciona en gran medida con las variables “estrato” y “habitac”, subrayando su importancia en esta dimensión subyacente. Es fundamental reconocer que esta disposición intrínseca de las variables en las componentes principales brinda un enfoque estratégico para abordar futuros análisis y modelización. En contextos como la selección de modelos de regresión, las dos primeras componentes pueden actuar como predictores clave. En contraposición, la inclusión de las cinco variables originales en un modelo de regresión múltiple proporciona una visión más integral. La elección entre estos enfoques requiere un equilibrio entre la precisión predictiva y la complejidad del modelo. En resumen, el ACP emerge como una herramienta metodológica fundamental que expande nuestro enfoque analítico, fomentando decisiones fundamentadas en el marco del análisis estadístico avanzado y la modelización predictiva. Además, los resultados obtenidos del gráfico de proporción acumulada de varianza explicada a través del Scree Plot, que muestra porcentajes de 50%, 19.6%, 11.5%, 8.2%, 5%, 3.3% y 2.5%, indican la contribución relativa de cada componente principal en la explicación de la variabilidad total. Estos porcentajes sugieren que las dos primeras componentes principales abarcan aproximadamente el 69.6% de la variabilidad total, lo que respalda la importancia de concentrarse en estas primeras dimensiones al interpretar la información escondida en los datos.


#Análisis de Conglomerados

# Cargar las librerías necesarias
library(cluster)
library(factoextra)

# Preparación de Datos y Objetivo del Análisis

# Objetivo: Agrupar propiedades residenciales en segmentos homogéneos para entender dinámicas y demandas específicas.

# Crear un subconjunto de datos con variables relevantes
vivienda_subset <- vivienda[1:8319, c("estrato", "preciom", "areaconst", "banios", "habitac")]

# Estandarizar las variables para el análisis
vivienda_estandarizada <- scale(vivienda_subset)

# Selección de Número de Clusters


# Método del Codo para encontrar el número óptimo de clusters
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")

# Análisis de Conglomerados


# Aplicar el método K-means con el número de clusters elegido
num_clusters_elegido <- 3
kmeans_result <- kmeans(vivienda_estandarizada, centers = num_clusters_elegido)

# Agregar etiquetas de cluster al dataframe original
vivienda$cluster <- as.factor(kmeans_result$cluster)

# Visualizar los resultados del clustering
fviz_cluster(kmeans_result, data = vivienda_estandarizada, geom = "point", palette = "jco")

# Análisis Jerárquico de Conglomerados (AHC)


# Calculamos la matriz de distancias usando dist()
dist_matrix <- dist(vivienda_estandarizada)

# Realizamos análisis jerárquico de conglomerados (AHC) con método Ward
modelo_hclust <- hclust(dist_matrix, method = "ward.D2")

# Graficamos el dendrograma
plot(modelo_hclust, hang = -1, main = "Dendrograma de Análisis Jerárquico")

#El análisis de conglomerados desempeña un papel esencial en la resolución del desafío planteado por la empresa inmobiliaria líder. Al explorar a fondo la base de datos detallada de propiedades residenciales, hemos logrado identificar agrupamientos significativos y patrones clave que previamente estaban ocultos. Estos agrupamientos permiten comprender mejor las dinámicas del mercado de viviendas urbanas, un aspecto vital para la toma de decisiones estratégicas más informadas. Al aplicar el Análisis de Conglomerados, hemos logrado segmentar las propiedades en grupos que comparten similitudes en términos de características como estrato, precio y habitación. Este enfoque nos ha permitido identificar relaciones subyacentes entre estas variables y, a su vez, comprender cómo diferentes grupos de propiedades pueden influir en las decisiones estratégicas de la empresa. Nuestra capacidad para detectar datos atípicos en ciertos grupos también es fundamental. Esto destaca la importancia de comprender las propiedades que pueden tener un impacto significativo en el mercado y cómo pueden afectar las estrategias de compra, venta y valoración. En última instancia, este análisis holístico y estructurado proporciona a la empresa inmobiliaria una visión clara y fundamentada del mercado de viviendas urbanas. Al identificar patrones, relaciones y segmentaciones relevantes, estamos en una posición sólida para mejorar la toma de decisiones en todas las áreas, desde la identificación de oportunidades hasta la evaluación de riesgos. En conjunto, este análisis respalda la misión de la empresa de tomar decisiones estratégicas más acertadas y proactivas en el competitivo mercado inmobiliario.

###analisis de correcpondencia

# Cargamos las librerías necesarias

library(dplyr)
library(mice)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(FactoMineR)
library(factoextra)


# Cargar el conjunto de datos y seleccionar las columnas relevantes
vivienda <- read_csv("C:/Users/PC/Downloads/vivienda.csv")
## Rows: 8322 Columns: 13
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (3): zona, tipo, barrio
## dbl (10): id, piso, estrato, preciom, areaconst, parquea, banios, habitac, l...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Seleccionar una muestra aleatoria de 4000 observaciones
set.seed(1234)
vivienda_24 <- sample_n(vivienda, 4000)

# Crear una tabla de contingencia para las variables categóricas
tabla <- table(vivienda_24$zona, vivienda_24$estrato)

# Mostrar la tabla cruzada
print(tabla)
##               
##                  3   4   5   6
##   Zona Centro   46   8   2   1
##   Zona Norte   279 194 382  86
##   Zona Oeste    26  41 126 358
##   Zona Oriente 178   3   1   0
##   Zona Sur     186 798 781 503
# Realizar el Análisis de Correspondencia (CA)
resultados_ac <- CA(tabla)

print(resultados_ac)
## **Results of the Correspondence Analysis (CA)**
## The row variable has  5  categories; the column variable has 4 categories
## The chi square of independence between the two variables is equal to 1868.871 (p-value =  0 ).
## *The results are available in the following objects:
## 
##    name              description                   
## 1  "$eig"            "eigenvalues"                 
## 2  "$col"            "results for the columns"     
## 3  "$col$coord"      "coord. for the columns"      
## 4  "$col$cos2"       "cos2 for the columns"        
## 5  "$col$contrib"    "contributions of the columns"
## 6  "$row"            "results for the rows"        
## 7  "$row$coord"      "coord. for the rows"         
## 8  "$row$cos2"       "cos2 for the rows"           
## 9  "$row$contrib"    "contributions of the rows"   
## 10 "$call"           "summary called parameters"   
## 11 "$call$marge.col" "weights of the columns"      
## 12 "$call$marge.row" "weights of the rows"
# Obtener los valores propios
valores_prop <- resultados_ac$eig

# Graficar el Scree Plot
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80)) +
  ggtitle("Scree Plot del Análisis de Correspondencia") +
  ylab("Porcentaje de Varianza Explicado") +
  xlab("Ejes")

#La visualización gráfica resultante nos brinda una perspectiva valiosa de las relaciones entre las variables estrato y zona en el mercado inmobiliario. Podemos identificar patrones significativos: los inmuebles del estrato 6 están predominantemente ubicados en la Zona Oeste, mientras que los estratos 4 y 5 se concentran principalmente en las Zonas Sur y Norte. Por otro lado, el estrato 3 muestra una distribución equitativa en las Zonas Oriente y Centro. Esta relación entre estrato y zona tiene el potencial de proporcionar insights clave para la empresa inmobiliaria, permitiendo una segmentación más precisa del mercado y una mejor comprensión de las preferencias de los compradores en diferentes áreas geográficas.

#En el análisis estadístico, se ha determinado que la primera componente del análisis de correspondencia explica aproximadamente el 69.6 % de la varianza total de los datos, seguida por la segunda componente con el 27.3 %, y la tercera con un 3.1 %. Estos resultados revelan que las dos primeras componentes son altamente significativas y capturan la gran mayoría de la variabilidad en los datos. La alta proporción de varianza explicada por estas dos componentes subraya la importancia de la relación entre estrato y zona en la segmentación del mercado inmobiliario.

#Este enfoque estadístico refuerza la validez de las tendencias que se han identificado visualmente y establece un fundamento sólido para guiar las decisiones estratégicas en el ámbito inmobiliario.