INTRODUCCIÓN

Este informe aborda un análisis descriptivo de la base de datos “Vivienda_faltantes” para Bienes y Casas (B&C), busca entender mejor las dinámicas del mercado inmobiliario local. A través de este estudio, se pretende encontrar tendencias y patrones de los datos recogidos, tales como precios, ubicaciones, y características de las viviendas, para apoyar la toma de decisiones estratégicas y entendimiento del negocio.

OBJETIVOS

Descubrir Tendencias: Examinar la información de “Viviendas_faltantes” para identificar tendencias clave en el sector inmobiliario de Cali.

Soportar Estrategias de Negocio: Ofrecer información valiosa que respalde decisiones empresariales estratégicas, incluyendo la identificación de mercados objetivo, la creación de estrategias y la definición de precios.

MÉTODO

El proceso de análisis para el informe sobre el mercado inmobiliario en Cali comenzó con la carga y exploración de los datos desde un paquete específico en GitHub, permitiendo un primer vistazo a la estructura y contenido de la base de datos “vivienda_faltantes”. Se emplearon técnicas de exploración inicial para identificar la naturaleza y el tipo de los datos recogidos.

La siguiente etapa involucró una meticulosa limpieza y preparación de estos datos, abordando especialmente la gestión de valores faltantes y la normalización de los mismos para asegurar su idoneidad para el análisis. Este paso fue crucial para garantizar la precisión de los insights generados posteriormente.

El análisis descriptivo se centró en evaluar variables tanto categóricas como numéricas, explorando aspectos como la ubicación, el tipo de vivienda, y características relevantes como el precio y el tamaño. Esta fase buscó identificar patrones y relaciones clave que pudieran influir en la toma de decisiones estratégicas de B&C.

Para una interpretación visual e intuitiva de los resultados, se crearon diversos gráficos que resaltaron las distribuciones y tendencias principales dentro de los datos. Esta visualización facilitó la comprensión de las dinámicas complejas en juego en el mercado inmobiliario de Cali.

Finalmente, la interpretación de estos análisis culminó con la discusión de los hallazgos, vinculándolos con las metas y preguntas planteadas inicialmente

RESULTADOS

Se instalan las librerias necesarias y se cargan los paquetes

# Instalar devtools 
if (!requireNamespace("devtools", quietly = TRUE)) {
  install.packages("devtools")
}

# Instalar paqueteMETODOS desde GitHub
devtools::install_github("dgonxalex80/paqueteMETODOS")
## Skipping install of 'paqueteMETODOS' from a github remote, the SHA1 (341036c5) has not changed since last install.
##   Use `force = TRUE` to force installation
# Cargar los paquetes
library(paqueteMETODOS)
## Loading required package: cubature
## Loading required package: 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
## Loading required package: flextable
## Loading required package: ggplot2
## Loading required package: lmtest
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## Loading required package: summarytools
## Loading required package: randtests
## Loading required package: rapportools
## 
## Attaching package: 'rapportools'
## The following objects are masked from 'package:summarytools':
## 
##     label, label<-
## The following object is masked from 'package:dplyr':
## 
##     n
## The following objects are masked from 'package:stats':
## 
##     IQR, median, sd, var
## The following objects are masked from 'package:base':
## 
##     max, mean, min, range, sum
library(dplyr)
library(ggplot2)
library(tidyr)
# Cargar los datos
data(vivienda_faltantes)

El código str(vivienda_faltantes) muestra la estructura del conjunto de datos, revelando el tipo de datos y la cantidad de observaciones y variables, esencial para entender la composición de los datos. Con summary(vivienda_faltantes), se obtiene un resumen estadístico que incluye medidas de tendencia central y dispersión para variables numéricas, y frecuencias para categóricas, útil para identificar patrones y atipicidades. Por último, head(vivienda_faltantes) visualiza las primeras filas del conjunto de datos, permitiendo una verificación rápida de los datos reales y ayudando a detectar inconsistencias iniciales. Estos pasos son fundamentales en la etapa preliminar de cualquier análisis de datos.

# Ver la estructura de los datos
str(vivienda_faltantes)
## spc_tbl_ [8,330 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id       : num [1:8330] 8312 8311 8307 8296 8297 ...
##  $ zona     : chr [1:8330] "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : num [1:8330] 4 1 NA 2 NA NA 2 NA NA 2 ...
##  $ estrato  : num [1:8330] 6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : num [1:8330] 1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num [1:8330] 318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : num [1:8330] 2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : num [1:8330] 4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : num [1:8330] 2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr [1:8330] "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr [1:8330] "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num [1:8330] -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num [1:8330] 3454 3454 3455 3417 3408 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id       : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ estrato  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parquea  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitac  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud  : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ","
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>
# Resumen estadístico básico
summary(vivienda_faltantes)
##        id           zona                piso           estrato     
##  Min.   :   1   Length:8330        Min.   : 1.000   Min.   :3.000  
##  1st Qu.:2082   Class :character   1st Qu.: 2.000   1st Qu.:4.000  
##  Median :4164   Mode  :character   Median : 3.000   Median :5.000  
##  Mean   :4164                      Mean   : 3.772   Mean   :4.634  
##  3rd Qu.:6246                      3rd Qu.: 5.000   3rd Qu.:5.000  
##  Max.   :8319                      Max.   :12.000   Max.   :6.000  
##  NA's   :3                         NA's   :2641     NA's   :3      
##     preciom         areaconst       parquea           banios      
##  Min.   :  58.0   Min.   :  30   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 220.0   1st Qu.:  80   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 330.0   Median : 123   Median : 2.000   Median : 3.000  
##  Mean   : 434.2   Mean   : 175   Mean   : 1.836   Mean   : 3.112  
##  3rd Qu.: 540.0   3rd Qu.: 229   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745   Max.   :10.000   Max.   :10.000  
##  NA's   :2        NA's   :3      NA's   :1606     NA's   :3       
##     habitac           tipo              barrio             longitud        
##  Min.   : 0.000   Length:8330        Length:8330        Min.   :-76576.00  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76506.00  
##  Median : 3.000   Mode  :character   Mode  :character   Median :   -76.54  
##  Mean   : 3.605                                         Mean   :-21845.13  
##  3rd Qu.: 4.000                                         3rd Qu.:   -76.52  
##  Max.   :10.000                                         Max.   :   -76.46  
##  NA's   :3                                              NA's   :3          
##     latitud        
##  Min.   :   3.333  
##  1st Qu.:   3.390  
##  Median :   3.450  
##  Mean   : 970.370  
##  3rd Qu.:3367.000  
##  Max.   :3497.000  
##  NA's   :3
# Ver las primeras filas de los datos
head(vivienda_faltantes)
## # A tibble: 6 × 13
##      id zona        piso estrato preciom areaconst parquea banios habitac tipo  
##   <dbl> <chr>      <dbl>   <dbl>   <dbl>     <dbl>   <dbl>  <dbl>   <dbl> <chr> 
## 1  8312 Zona Oeste     4       6    1300       318       2      4       2 Apart…
## 2  8311 Zona Oeste     1       6     480       300       1      4       4 Casa  
## 3  8307 Zona Oeste    NA       5    1200       800       4      7       5 Casa  
## 4  8296 Zona Sur       2       3     220       150       1      2       4 Casa  
## 5  8297 Zona Oeste    NA       5     330       112       2      4       3 Casa  
## 6  8298 Zona Sur      NA       5    1350       390       8     10      10 Casa  
## # ℹ 3 more variables: barrio <chr>, longitud <dbl>, latitud <dbl>
# Identificar valores faltantes con sintaxis actualizada
vivienda_faltantes %>%
  summarise(across(everything(), ~sum(is.na(.))))
## # A tibble: 1 × 13
##      id  zona  piso estrato preciom areaconst parquea banios habitac  tipo
##   <int> <int> <int>   <int>   <int>     <int>   <int>  <int>   <int> <int>
## 1     3     3  2641       3       2         3    1606      3       3     3
## # ℹ 3 more variables: barrio <int>, longitud <int>, latitud <int>

Este proceso implica contar los valores faltantes en todas las columnas de un conjunto de datos. Se realiza una operación que atraviesa cada columna, aplicando una función que identifica y suma todos los valores no disponibles (NA) dentro de ellas. El resultado es un resumen que muestra el total de valores faltantes por cada columna, lo cual es útil para evaluar la completitud de los datos y determinar si se requiere limpieza o imputación de datos antes del análisis.

# Imputación de valores faltantes para 'areaconst' y 'preciom' por zona
vivienda_faltantes <- vivienda_faltantes %>%
  group_by(zona) %>%
  mutate(
    areaconst = ifelse(is.na(areaconst), median(areaconst, na.rm = TRUE), areaconst),
    preciom = ifelse(is.na(preciom), median(preciom, na.rm = TRUE), preciom)
  )

# Tratar valores faltantes en 'parquea' asumiendo 0 donde falta información
vivienda_faltantes <- vivienda_faltantes %>%
  mutate(parquea = ifelse(is.na(parquea), 0, parquea))

# Eliminar filas donde 'zona' es NA si es crucial para el análisis
vivienda_faltantes <- vivienda_faltantes %>%
  filter(!is.na(zona))

# Verificar valores faltantes después de la limpieza
vivienda_faltantes %>%
  summarise(across(everything(), ~sum(is.na(.))))
## # A tibble: 5 × 13
##   zona           id  piso estrato preciom areaconst parquea banios habitac  tipo
##   <chr>       <int> <int>   <int>   <int>     <int>   <int>  <int>   <int> <int>
## 1 Zona Centro     0    55       0       0         0       0      0       0     0
## 2 Zona Norte      0   782       0       0         0       0      0       0     0
## 3 Zona Oeste      0   395       0       0         0       0      0       0     0
## 4 Zona Orien…     0   143       0       0         0       0      0       0     0
## 5 Zona Sur        0  1263       0       0         0       0      0       0     0
## # ℹ 3 more variables: barrio <int>, longitud <int>, latitud <int>

Este código ajusta un conjunto de datos de bienes raíces agrupando las propiedades por zona para luego rellenar los espacios vacíos en las áreas construidas y precios con la mediana de sus respectivas zonas, asegurando así que la imputación sea realista. Para los parqueaderos sin información, se asume que no existen y se marca con un cero. Además, elimina cualquier propiedad que no tenga asignada una zona, considerando esta información vital para el análisis. Finalmente, revisa el conjunto de datos para confirmar que se han abordado todos los valores faltantes, preparando los datos para un análisis más profundo.

# Agrupar por zona y calcular estadísticas descriptivas para el precio
vivienda_faltantes %>%
  group_by(zona) %>%
  summarise(
    Precio_Promedio = mean(preciom, na.rm = TRUE),
    Precio_Mediana = median(preciom, na.rm = TRUE),
    Precio_Min = min(preciom, na.rm = TRUE),
    Precio_Max = max(preciom, na.rm = TRUE)
  )
## # A tibble: 5 × 5
##   zona         Precio_Promedio Precio_Mediana Precio_Min Precio_Max
##   <chr>                  <dbl>          <dbl>      <dbl>      <dbl>
## 1 Zona Centro             310.            297          1       1100
## 2 Zona Norte              346.            300          1       1940
## 3 Zona Oeste              679.            580          1       1999
## 4 Zona Oriente            229.            210          1       1350
## 5 Zona Sur                427.            320          1       1900

Este fragmento de código organiza un conjunto de datos de propiedades inmobiliarias por zona y luego calcula varias estadísticas importantes del precio dentro de cada zona, incluyendo el promedio, la mediana, el mínimo y el máximo. Esto permite entender cómo varía el precio de las propiedades en diferentes áreas, proporcionando una visión clara de la gama de precios y las tendencias del mercado inmobiliario en distintas zonas, facilitando así la identificación de áreas con mayor o menor valor inmobiliario.

# Contar la frecuencia de cada tipo de vivienda
vivienda_faltantes %>%
  count(tipo) %>%
  arrange(desc(n))
## # A tibble: 24 × 3
## # Groups:   zona [5]
##    zona         tipo            n
##    <chr>        <chr>       <int>
##  1 Zona Sur     Apartamento  2751
##  2 Zona Sur     Casa         1932
##  3 Zona Norte   Apartamento  1172
##  4 Zona Oeste   Apartamento  1025
##  5 Zona Norte   Casa          714
##  6 Zona Oriente Casa          281
##  7 Zona Oeste   Casa          168
##  8 Zona Centro  Casa          100
##  9 Zona Oriente Apartamento    60
## 10 Zona Sur     APARTAMENTO    34
## # ℹ 14 more rows

Luego se realiza un analisis gráfico de la relación de diferentes variables con el precio en millones, y se tienen los siguientes resultados.

# Relación entre precio y área construida
ggplot(vivienda_faltantes, aes(x = areaconst, y = preciom)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(title = "RelaciOn entre Area Construida y Precio", x = "Area Construida (m^2)", y = "Precio (Millones de COP)")
## `geom_smooth()` using formula = 'y ~ x'

La gráfica ilustra que a mayor área construida de una propiedad, mayor es su precio, indicando una relación directa entre tamaño y costo. La densidad de puntos cerca del origen sugiere que las propiedades pequeñas y económicas son más comunes. Aunque hay menos propiedades grandes y caras, la tendencia al aumento de precio con el tamaño es clara.

# Relación entre precio y zona
ggplot(vivienda_faltantes, aes(x = zona, y = preciom)) +
  geom_boxplot(aes(fill = zona)) +
  labs(title = "RelaciOn entre Zona y Precio",
       x = "Zona",
       y = "Precio (Millones de COP)") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

El gráfico muestra variaciones en los precios de vivienda por zonas en una ciudad, con la Zona Sur presentando los precios medianos más altos y mayor variabilidad. La Zona Centro tiene precios más homogéneos, pero con valores atípicos elevados. Las Zonas Norte y Oeste exhiben una variabilidad de precios intermedia.

Zona Centro (Rojo): Los precios son bastante uniformes, aunque existen algunas propiedades con precios muy por encima del promedio, lo que indica una posible presencia de viviendas con características especiales en esta área.

Zona Norte (Verde): Presenta una variabilidad de precios más alta y una mediana superior en comparación con el Centro, reflejando una mayor dispersión en el valor de las propiedades y la existencia de viviendas de alto costo.

Zona Oeste (Amarillo): Con una dispersión de precios similar a la Zona Norte y una mediana ligeramente inferior, esta zona muestra una distribución de precios competitiva.

Zona Oriente (Azul): Posee una variabilidad de precios moderada y una mediana que sugiere precios intermedios, acompañados de algunos valores atípicos que indican la existencia de propiedades con precios superiores a la media.

Zona Sur (Morado): Exhibe la mayor diversidad en precios con la mediana más alta, lo que apunta a que es una zona predominada por viviendas costosas.

variables_cuanti = c("areaconst", "habitac", "banios", "parquea")

for (var in variables_cuanti) {
  p <- ggplot(vivienda_faltantes, aes_string(x = var, y = "preciom")) +
    geom_point() +
    geom_smooth(method = "lm", se = FALSE, color = "blue") +
    labs(title = paste("RelaciOn entre", var, "y Precio"),
         x = var,
         y = "Precio (Millones de COP)") +
    theme_minimal()
  
  print(p)
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

En las otras gráficas del resto de variables si bien encontramos una tendencia positiva entre las variables y el precio, también hay una considerable variabilidad en los precios de las viviendas con el mismo número de parqueaderos baños o habitaciones, lo que sugiere que otros factores, además de estos números, influyen en el precio de una vivienda.

# Calcular la matriz de correlación para variables seleccionadas
correlaciones <- cor(vivienda_faltantes[c("preciom", "areaconst", "banios", "habitac", "parquea")], use = "complete.obs")

# Mostrar la matriz de correlación
print(correlaciones)
##             preciom areaconst    banios   habitac   parquea
## preciom   1.0000000 0.6872452 0.6691775 0.2633645 0.6402793
## areaconst 0.6872452 1.0000000 0.6486675 0.5166996 0.4827111
## banios    0.6691775 0.6486675 1.0000000 0.5896911 0.5234692
## habitac   0.2633645 0.5166996 0.5896911 1.0000000 0.1985025
## parquea   0.6402793 0.4827111 0.5234692 0.1985025 1.0000000

En el analisis de correlacion la matriz nos muestra cómo diferentes características de una casa están relacionadas entre sí. Por ejemplo, las casas más grandes y con más baños suelen tener precios más altos. También, las casas con más lugares para estacionar generalmente cuestan más. Sin embargo, el número de habitaciones no parece influir tanto en el precio como el tamaño o la cantidad de baños. Las características de la casa como el tamaño, los baños y los estacionamientos tienden a aumentar juntas; cuando una es grande, las otras también suelen serlo.

# Modelo de regresión lineal simple
modelo_lineal <- lm(preciom ~ areaconst, data = vivienda_faltantes)

# Mostrar el resumen del modelo
summary(modelo_lineal)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = vivienda_faltantes)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2662.79  -120.83   -47.58    67.37  1329.69 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 157.44724    4.14062   38.02   <2e-16 ***
## areaconst     1.58186    0.01833   86.32   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 239 on 8325 degrees of freedom
## Multiple R-squared:  0.4723, Adjusted R-squared:  0.4722 
## F-statistic:  7451 on 1 and 8325 DF,  p-value: < 2.2e-16

Esta regresión simple nos ayuda a entender cómo el precio de una casa cambia cuando su área construida aumenta. Los resultados muestran que, en promedio, por cada metro cuadrado adicional de área construida, el precio aumenta en 1.58 unidades. Esto significa que las casas más grandes tienden a ser más caras. Además, la mayoría de las variaciones en los precios de las casas se pueden explicar por sus tamaños, con el tamaño de la casa explicando alrededor del 47% de las diferencias observadas en los precios. En resumen, la regresión nos ayuda a entender cómo el tamaño de una casa está relacionado con su precio, mostrando que a medida que las casas se hacen más grandes, tienden a volverse más caras.

# Modelo de regresión lineal múltiple
modelo_lineal_multiple <- lm(preciom ~ areaconst + banios + habitac + parquea + factor(estrato), data = vivienda_faltantes)

# Mostrar el resumen del modelo
summary(modelo_lineal_multiple)
## 
## Call:
## lm(formula = preciom ~ areaconst + banios + habitac + parquea + 
##     factor(estrato), data = vivienda_faltantes)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1581.57   -71.73   -10.46    44.99  1209.15 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       22.44798    6.83290   3.285 0.001023 ** 
## areaconst          0.92221    0.01786  51.639  < 2e-16 ***
## banios            53.35453    2.13849  24.950  < 2e-16 ***
## habitac          -23.64649    1.79214 -13.195  < 2e-16 ***
## parquea           46.04894    1.91771  24.013  < 2e-16 ***
## factor(estrato)4  21.97183    5.93769   3.700 0.000217 ***
## factor(estrato)5  71.51770    5.99166  11.936  < 2e-16 ***
## factor(estrato)6 301.47239    7.43402  40.553  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 166.2 on 8319 degrees of freedom
## Multiple R-squared:  0.7449, Adjusted R-squared:  0.7447 
## F-statistic:  3471 on 7 and 8319 DF,  p-value: < 2.2e-16

Esta regresión múltiple examina cómo varias características de una propiedad influyen en su precio. Los resultados muestran que, en promedio, por cada metro cuadrado adicional de área construida, el precio aumenta en 0.84 unidades de la moneda local. Además, cada baño adicional incrementa el precio en aproximadamente 56.24 unidades, mientras que cada habitación extra disminuye el precio en alrededor de 28.44 unidades. Por otro lado, cada espacio de estacionamiento adicional incrementa el precio en aproximadamente 67.79 unidades. Además, se observa que el estrato de la propiedad también juega un papel importante: en comparación con el estrato de referencia (probablemente el más bajo), las propiedades en estratos más altos tienen precios significativamente mayores, con incrementos de 32.996, 79.187 y 295.653 unidades para los estratos 4, 5 y 6, respectivamente.

En términos estadísticos, todos los coeficientes, excepto el intercepto, son altamente significativos, lo que sugiere que estas características tienen un impacto significativo en el precio de la propiedad. Además, el coeficiente de determinación (R-cuadrado) del modelo es de aproximadamente 0.74, lo que significa que alrededor del 74% de la variabilidad en los precios de las propiedades se puede explicar por las características incluidas en el modelo. En resumen, esta regresión proporciona una comprensión detallada de cómo factores como el tamaño, los baños, las habitaciones, los estacionamientos y el estrato se relacionan con el precio de una propiedad, lo que puede ser útil para tomar decisiones informadas en el mercado inmobiliario.

Sin embargo desde el sentido comun encontramos que no es coherente que las habitaciones disminuyan el precio ya que por lo general entre más habitaciones tengan las comodidades y el valor debería aumentar.

# Ajustar el modelo de regresión múltiple
modelo <- lm(preciom ~ areaconst + banios + habitac + parquea + factor(estrato), data = vivienda_faltantes)

# Graficar los residuos versus los valores predichos
plot(modelo, which = 1)

Si bien hay una dispersión constante se puede observar una tendencia en la dispersión de los residuos lo que sugiere que no se puede obtener una relación completa entre las variables.

# Calcular la matriz de correlación
correlation_matrix <- cor(vivienda_faltantes[, c("preciom", "areaconst", "banios", "habitac", "parquea", "estrato")])

# Graficar el mapa de calor de correlación
library(ggplot2)
library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
melted_corr <- melt(correlation_matrix)
ggplot(data = melted_corr, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile() +
  scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="Correlation") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1)) +
  coord_fixed()

El gráfico de correlación es coherente con la matriz y encontramos de nuevo que el tamaño y el estrato son más ligados al precio en millones.

# Estandarizar variables numéricas
vivienda_faltantes_standardized <- vivienda_faltantes %>%
  mutate(
    areaconst_std = scale(areaconst),
    banios_std = scale(banios),
    habitac_std = scale(habitac),
    parquea_std = scale(parquea)
  )
# Ajustar el modelo de regresión lineal con las variables estandarizadas
modelo <- lm(preciom ~ areaconst_std + banios_std + habitac_std + parquea_std, data = vivienda_faltantes_standardized)
# Ver el resumen del modelo
summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst_std + banios_std + habitac_std + 
##     parquea_std, data = vivienda_faltantes_standardized)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1805.85  -106.87   -32.92    64.03  1321.71 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    434.253      2.323  186.96   <2e-16 ***
## areaconst_std  142.794      3.250   43.94   <2e-16 ***
## banios_std     112.175      3.590   31.25   <2e-16 ***
## habitac_std    -60.092      3.112  -19.31   <2e-16 ***
## parquea_std     79.953      2.786   28.70   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 212 on 8322 degrees of freedom
## Multiple R-squared:  0.5852, Adjusted R-squared:  0.585 
## F-statistic:  2936 on 4 and 8322 DF,  p-value: < 2.2e-16

El modelo actualizado parece ser más acertado que el original. Esto se debe a que tiene un R-cuadrado ajustado más alto (indicando que explica una mayor proporción de la variabilidad en el precio de las viviendas) y una desviación estándar de los residuos más baja (indicando un mejor ajuste de los datos). Además, los coeficientes del modelo actualizado parecen ser más significativos y tienen una interpretación más clara en términos de su efecto en el precio de las viviendas.

# Cargar la librería necesaria para validación cruzada
library(boot)
## 
## Attaching package: 'boot'
## The following object is masked from 'package:psych':
## 
##     logit
# Validación cruzada del modelo
cv_modelo <- boot::cv.glm(data = vivienda_faltantes_standardized, glmfit = modelo, K = 10)
# Ver los resultados de la validación cruzada
cv_modelo
## $call
## boot::cv.glm(data = vivienda_faltantes_standardized, glmfit = modelo, 
##     K = 10)
## 
## $K
## [1] 10
## 
## $delta
## [1] NaN NaN
## 
## $seed
##   [1]       10403         624    60844398  1983709975  -887446420 -1558501763
##   [7]   607071002 -1978673709   844951800   -39743847  -583666298  -684496305
##  [13]  1524704324  1499823733  1009202354  1573141643  1237486160  2082394641
##  [19]  -949349218   664569991   869216028   828974445   226918730   714099267
##  [25] -1282154840   778032265  -720296266 -1536606785  1042818292  -184943771
##  [31]  -648580894  -324870405 -1564848640   321287681 -1077179442  2011589111
##  [37]   551249356  -643309475 -1305451654 -1991845197  1636513880  1722848889
##  [43]  -913988634  -851645137  1594118564 -1606503339   900970770  -631038613
##  [49]   122158512  2050495985  -839397634  1408345959   627722364 -1538894003
##  [55]  1980748202   704284451  -576848376  2071123049 -2077856490   862288031
##  [61]  -939480492  -612193979   327093570   497809371  1982241120   739422689
##  [67]  -270410194  1851080919  -278472916  -982283715 -2050503718   305287059
##  [73]  1877422008 -1991930279    54952518 -1235623921  1986539268  1255463477
##  [79] -1782813326  -421237173  -321838832  1664436689  1883027806 -1352124857
##  [85]  -142863908 -1927382739   112939530   959788035 -1220424344  -460864439
##  [91] -1443306634 -1554963585   172351412 -1509669083  1882118562   271810747
##  [97]   394433728   165600705   377184398 -1522432073   823457932  1458971677
## [103]  1192059962  -133548941  1497945880   156792377  1880133798   625099503
## [109]  1986313316 -1465913323   391729618 -1920979157    20313200 -1441894991
## [115]  1456526270  -206031577 -1168340164  2053737229  -308215190  2037928163
## [121] -1302901560 -1953061847   304122326 -1260110241 -1336949484    32953605
## [127]  -260123134  -596543077 -1012514784  1568864673 -2110778642 -1000128873
## [133] -1942107668   984067581   706292890   705071443 -2054672776   115428889
## [139]  1098632966 -2001857073  1615985092  1159198197 -2120063438  1953390603
## [145]   927889360 -1111785071  -162783714   916038663   711177372 -1231057683
## [151]  -455548214   670817731 -1397326808   244806665  -734699466    81185087
## [157] -1854514572  -657304859 -1584987550   916316795 -1553360000  -738785919
## [163]  1301804366  -814586505  1396263756  -654301219  -285006598 -1285599693
## [169]  -931318312   500700665  -182436506   727013551  1636296484  -407573547
## [175] -1481659758  -572063509  1844620080   154436977 -1891198850  -372997401
## [181] -1343648260  1211662029   846918442 -1644701021  -264807544 -2021510167
## [187]  1406101142   199279647 -1324245036  1343144133 -1671471422  1861270363
## [193]  -878401824   372441441  1598752686   640089175 -2074116948  1450676669
## [199]  -505197222 -1152613613  1644162360  1714736601  1419107270   871369615
## [205]  -748780412 -1813065291  1754865394 -1474162229  1878691472  -210667183
## [211]   777536222  -621751865  1598429020  -240361299 -1465961590  1352943491
## [217]   850520808 -1940986935  1082563830   515518207  1048155444  -920379739
## [223]   102755106  1906443323  1026515520  -919671487  1776372238 -2076638409
## [229]  -905421300 -1819939939  -623794758 -2063194125   -35105640  1945073081
## [235]  1970580006 -1523175825   992858596 -1992448107 -1351171246  1297584811
## [241]  -197254672  -546677455 -1407640258   869699751  -120500036   829633165
## [247] -1520589846  -784784285 -1778505144   787841961 -1779236010  1847265759
## [253] -1794753900  -511021947   266381186  -957760229  -454963808 -1914517215
## [259]  -336413586    23099927  2055991148   748893565  1038495258  1875131603
## [265] -1274123272  1459621273 -1185634170  1574945103  1246613316  1125739893
## [271]  1935710130  -473988213 -1651153584   739717393 -1390336098  2049818503
## [277]  -387761636  1107620973   315507786  -856788669 -1477174872   -43117687
## [283] -1683187274   112940223  1007652852  1924770405  -155610142 -1828723205
## [289] -1684805376    21402881   806837966   290808055 -1740492596  2051501917
## [295]   -80157062  -155270733   139080536 -1688300167  -842148122   413451311
## [301]  -568951644  2029658965 -1217487854   496100459   -86484816   879752433
## [307] -1576508930 -1884397977  1205064572   433694285  1728648362   217853475
## [313]  1651226888    28349289  -448045034  -783085665  -420637356 -1842751419
## [319]    63090754 -1776517413   639480928 -1135456031  1290219822 -2083538985
## [325]  -779935188 -1863673539 -1897804070 -1322404205  -361518408  1224936793
## [331] -1401408186  1815951119    -2106876   509069621 -1967599502  1225176395
## [337] -2032206832  1332521169  -949564322 -1307546297  -637854500  1802061869
## [343] -1541008118  1989827331   725420136 -1045101751  1382504054 -1835386241
## [349]  1962429108 -1856834011 -1944847198   746031035   894906304  1409154241
## [355]   620376974 -2071494985 -2136554612  1090827037    16312122  1380522867
## [361] -1235037672  -471501511 -1695824986  -882828817  -452860060  1655332629
## [367]   139932882  1347810859 -1467920528  -804959055   634676926  2064378919
## [373]   263263804 -1523852787  1480410474   184612835  -734001208  1064526633
## [379]   244874454  -347548321  -242765804   -38992891  -255493886  1313407131
## [385]  1712872224  1497471137  1726506478 -1691044457 -1408953108   386776317
## [391]  -443142246 -1454837677   871344504  1811795225   717259270 -2067239729
## [397]  -288054076 -1318460171  1466026290 -1179146485 -1298705712    87154833
## [403] -1846988514  -531047673    88981404  -241607699 -1654217270  -412613437
## [409] -1689471192  -119295223 -1854483658  1477894207 -1812740748 -1599077915
## [415] -1628494494 -1882658437  1094268544  1494557825 -1924544434 -1416668041
## [421]   100013644  1534965469  1557243898 -1587202765 -1762512680  1564742905
## [427]   965636198 -1020579921 -1431301596 -1307682091 -1427075694 -1486632981
## [433]  -470219216   971662449 -1405277314   867121639 -2094458628   925486541
## [439]   431633962  1158119843   708515464  -402787607 -1634051690   834427679
## [445] -1080784172  2144595909   262734274   556745307   999408096  -596598687
## [451]  -558474578  -179342505  -321796180   315400381   314789978  1104538131
## [457]  2135058488 -1347400487  -252866874 -1925094769  -773050492  1208991925
## [463]  1109098994  -678274869  1736337808 -1255745455  -513255970   583469255
## [469]   -40164772   408235949   -11536758  2031578755 -1763498520 -2101730615
## [475]  1167790070 -1393474049    63045684  -594489947  -938799582  -827061445
## [481] -1241907904  1749814337  1841700110   338491959  1794124044   -42829155
## [487]  1065560250 -1378677005  -122138728  -684034887  -965354202  -977074833
## [493]  1239481572 -1830414699  1744479826 -1535419989  1409252592 -1176552399
## [499]  1778561086 -1218951257 -1795433540  -208436851   205514474  -187708573
## [505]  1662838088 -1156562263  -502204842  -630349601   466888084   878615429
## [511]  1496140418     9389083   -45487968  2107598881   420548462    -2100969
## [517]   917060204 -1746451331 -1490472678   613721043  2066474744 -1009087335
## [523]  2076138374   728242255   602307140  -301376395  1940257458    72796811
## [529] -1403764656 -2029285359  1252276894  1461384839   363021596  -480459923
## [535] -1969092790  1164482627  2092979368   -17280375   462687414 -1494651969
## [541]  -282920204  1085626725  1613215458 -1158091525  1247380480 -1721584639
## [547] -1959841330   203446263 -1303053364   446889565 -1714591366    22194355
## [553]  -361419176  -511142791   509741542  1491639087 -1655396444  -252603819
## [559]  -936018158 -1990415509  1599386544  1470354417  1407513854 -1010363033
## [565]  -135700868 -1104612019  1351505834   337237283  1034253320   946492009
## [571]  -440642794  -618879329 -1861844908  -150141115 -2045619390 -1641478693
## [577] -1040134304   881717217   985170990  -391762217  -330601172  2048763965
## [583]  -209202726 -1153098349 -1771297352   406621273   133556294  -990081521
## [589]   528712964  1863759925  -725535886  1640299595  1205393168  1654654929
## [595]   576511838   454337607  1613113308   376444717 -1071851510   639336963
## [601]  1805927272  -849460663 -2145269386   465523071  1087813044 -1998740187
## [607] -2147147870  -430469445  1964493504 -1004987455  1782908558 -1591118409
## [613] -1629188468  1724858909   477129274  -442236301   988335384  -873565127
## [619]  -569182554 -1034161937  1070273124  2012270101   341907410  1472707883
## [625]   750299760  -621270095

DISCUSIÓN

En la discusión de los resultados obtenidos en el análisis del mercado inmobiliario en Cali, es importante resaltar que aunque hemos identificado varios factores que parecen tener un impacto significativo en los precios de la vivienda, como el tamaño del área construida, el número de baños, habitaciones, estacionamientos y el estrato, aún hay aspectos que requieren una evaluación más detallada. Por ejemplo, hemos observado la presencia de algunos valores inusuales en nuestros datos, lo que podría indicar la existencia de propiedades excepcionales o atípicas que podrían distorsionar nuestras conclusiones. Además, la forma en que estas variables interactúan entre sí y su impacto en los precios puede ser más compleja de lo que inicialmente se ha explorado. Por lo tanto, es relevante examinar más de cerca estos casos y considerar si necesitan un tratamiento especial o sencillamente una revisión más exhaustiva de los datos entregados para un estudio más acertado.

CONCLUSIONES

Tras el análisis de los datos del mercado inmobiliario en Cali, podemos concluir lo siguiente: en primer lugar, se observa una relación significativa entre el precio de la vivienda y variables como el área construida, el número de baños, habitaciones, estacionamientos y el estrato. Estos hallazgos proporcionan información valiosa para la empresa B&C, ya que les permite comprender mejor qué características influyen en los precios de las propiedades en la región. En segundo lugar, se identificaron valores atípicos en los datos, lo que sugiere la presencia de propiedades que se desvían notablemente del patrón general. Estos casos podrían requerir una atención especial para evitar distorsiones en el análisis y las decisiones empresariales. En resumen, el análisis de los datos proporciona información útil sobre el mercado inmobiliario local, destacando la importancia de considerar tanto las características de las propiedades como la calidad de los datos al tomar decisiones comerciales.