1 Introducción

  • Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta.

  • Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

  • Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

  • Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).

  • Realice una partición en los datos de forma aleatoria donde 70% sea un set para entrenar el modelo y 30% para prueba. Estime el modelo con la muestra del 70%. Muestre los resultados.

  • Realice predicciones con el modelo anterior usando los datos de prueba (30%).

  • Calcule el error cuadrático medio, el error absoluto medio y el R2, interprete.

2 Preprocesamiento

2.1 Cargue de información - Viviendas

# Leer el archivo xlsx
datos_de_viviendas_original <- read_excel("datos_vivienda.xlsx", sheet = 1)
# Ver los primeros registros del DataFrame para verificar
head(datos_de_viviendas_original)
## # A tibble: 6 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## 6  1724 Zona N… 01          5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

2.2 Estructura de los datos

str(datos_de_viviendas_original)
## tibble [8,322 × 13] (S3: tbl_df/tbl/data.frame)
##  $ id          : num [1:8322] 1147 1169 1350 5992 1212 ...
##  $ zona        : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr [1:8322] NA NA NA "02" ...
##  $ estrato     : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...

Dimensiones: La información cargada contiene 8,322 registros y 13 variables.

Variables y Tipos de Datos:

  • id: numérico (num), identificador único para cada observación.
  • zona: caracter (chr), describe la zona geográfica de la propiedad.
  • piso: caracter (chr), indica el piso de la propiedad.
  • estrato: numérico (num), categoría socioeconómica de la propiedad.
  • preciom: numérico (num), precio por metro cuadrado de la propiedad.
  • areaconst: numérico (num), área construida de la propiedad en metros cuadrados.
  • parqueaderos: numérico (num), número de parqueaderos disponibles.
  • banios: numérico (num), número de baños en la propiedad.
  • habitaciones: numérico (num), número de habitaciones en la propiedad.
  • tipo: caracter (chr), tipo de propiedad (por ejemplo, “Casa”).
  • barrio: caracter (chr), nombre del barrio donde se encuentra la propiedad.
  • longitud: numérico (num), coordenada longitudinal de la ubicación de la propiedad.
  • latitud: numérico (num), coordenada latitudinal de la ubicación de la propiedad.

En resumen, hay dos tipos de datos: numérico y carácter, con un total de 9 variables numéricas y 4 variables tipo carácter.

2.3 Identificación de valores nulos

total_nulos_por_columna <- colSums(is.na(datos_de_viviendas_original))

# Imprimir el total de valores nulos por columna
print(total_nulos_por_columna)
##           id         zona         piso      estrato      preciom    areaconst 
##            3            3         2638            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##         1605            3            3            3            3            3 
##      latitud 
##            3

Observaciones:

  • Variables con mínimos valores nulos (3 registros nulos, 0.036%): id, zona, estrato, banios, habitaciones, tipo, barrio, longitud, y latitud. Estas variables tienen una cantidad minima de valores nulos en relación con el total de registros.

  • Variable preciom (2 registros nulos, 0.024%):* Esta variable tiene el menor número de valores nulos.

  • Variable parqueaderos (1,605 registros nulos, 19.286%): Contiene una cantidad alta de registros nulos sobre los parqueaderos, lo que podría afectar análisis relacionados con esta variable.

  • Variable piso (2,638 registros nulos, 31.699%): Esta variable tiene la mayor cantidad de valores nulos. Dado que más del 30% de los registros carecen de esta información, esto podría limitar los análisis que dependen de esta variable, a menos que se imputen los datos o se eliminen.

2.4 Imputación datos faltantes

Para el análisis y tratamiento de los datos en el estudio sobre viviendas, se ha decidido aplicar una imputación utilizando la media exclusivamente para la variable “parqueadero”. Esta estrategia permite manejar los valores faltantes de manera consistente, manteniendo la integridad del conjunto de datos y asegurando la fiabilidad de las conclusiones finales del estudio.

# Calcular la media, excluyendo NA
media_parqueaderos <- mean(datos_de_viviendas_original$parqueaderos, na.rm = TRUE)

# Imputar NA con la media
datos_de_viviendas_original <- datos_de_viviendas_original %>%
  mutate(parqueaderos = ifelse(is.na(parqueaderos), media_parqueaderos, parqueaderos))
total_nulos_por_columna <- colSums(is.na(datos_de_viviendas_original))

# Imprimir el total de valores nulos por columna
print(total_nulos_por_columna)
##           id         zona         piso      estrato      preciom    areaconst 
##            3            3         2638            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##            0            3            3            3            3            3 
##      latitud 
##            3

2.5 Eliminación de valores nulos

Se dicide eliminar las columnas “parqueaderos” y “piso” del set de datos debido a varias consideraciones clave. Primero, ambas columnas presentan un alto porcentaje de datos faltantes, con “piso” afectado por un 31.699% y “parqueaderos” por un 19.286% de valores nulos. Esta significativa ausencia de datos sugiere que mantener estas variables podría no aportar valor sustancial al análisis y podría, de hecho, sesgar los resultados debido a la falta de información. Además, la alta proporción de datos faltantes en estas variables puede indicar problemas en la recolección o en la integridad de la fuente de datos, lo que pone en duda la calidad del análisis si se incluyen estas columnas. Finalmente, considerando el impacto en la precisión del modelo, la presencia de tantos valores nulos en estas variables podría comprometer la fiabilidad de cualquier modelo predictivo desarrollado a partir de este dataset.

datos_de_viviendas_filtrado <- datos_de_viviendas_original[, -c(3, 11, 12, 13)]
head(datos_de_viviendas_filtrado)
## # A tibble: 6 × 9
##      id zona    estrato preciom areaconst parqueaderos banios habitaciones tipo 
##   <dbl> <chr>     <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
## 1  1147 Zona O…       3     250        70            1      3            6 Casa 
## 2  1169 Zona O…       3     320       120            1      2            3 Casa 
## 3  1350 Zona O…       3     350       220            2      2            4 Casa 
## 4  5992 Zona S…       4     400       280            3      5            3 Casa 
## 5  1212 Zona N…       5     260        90            1      2            3 Apar…
## 6  1724 Zona N…       5     240        87            1      3            3 Apar…

2.6 Registros duplicados

duplicados <- duplicated(datos_de_viviendas_filtrado) | duplicated(datos_de_viviendas_filtrado, fromLast = TRUE)
# Para ver los registros duplicados
datos_de_viviendas_filtrado[duplicados, ]
## # A tibble: 2 × 9
##      id zona  estrato preciom areaconst parqueaderos banios habitaciones tipo 
##   <dbl> <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
## 1    NA <NA>       NA      NA        NA         1.84     NA           NA <NA> 
## 2    NA <NA>       NA      NA        NA         1.84     NA           NA <NA>

Observaciones:

El resultado obtenido al identificar registros duplicados de la información cargada fueron dos (2) registros, donde todas sus filas son NA.

2.7 Eliminación de registros duplicados.

# Eliminar registros duplicados, manteniendo solo la primera aparición
datos_de_viviendas_unicos <- datos_de_viviendas_filtrado[!duplicated(datos_de_viviendas_filtrado), ]
#Eliminar registros con alguna variable nula
datos_de_viviendas_final <- na.omit(datos_de_viviendas_unicos)

Observaciones:

Se eliminaron los registros duplicados y aquellos que contenían valores nulos en alguna de sus variables. Inicialmente, se contaba con 8,322 registros; tras este proceso de limpieza, el conjunto de datos se redujo a 8,319 registros, los cuales están listos para el análisis subsiguiente.

2.8 Normalización de los nombres de las variables

La actulización de los nombres de las variables es una práctica común y útil en la manipulación y análisis de datos. Facilita la legibilidad, la consistencia, la preparación para el análisis, y puede mejorar la estética de los informes y gráficos generados.

# Nombres originales
nombres_originales <- colnames(datos_de_viviendas_final)
# Nombres nuevos
nombres_nuevos <- c("Id", "Zona", "Estrato","PrecioVivienda","AreaConstruccion","Parqueaderos", "CantidadBanos","CantidadHabitaciones","TipoVivienda")
# Cambiar los nombres de las columnas
colnames(datos_de_viviendas_final) <- nombres_nuevos
# Imprimir los nombres anteriores y los actuales
for (i in 1:length(nombres_originales)) {
  cat("El nombre de Columna", nombres_originales[i], "fue actualizado por:", nombres_nuevos[i], "\n")
}
## El nombre de Columna id fue actualizado por: Id 
## El nombre de Columna zona fue actualizado por: Zona 
## El nombre de Columna estrato fue actualizado por: Estrato 
## El nombre de Columna preciom fue actualizado por: PrecioVivienda 
## El nombre de Columna areaconst fue actualizado por: AreaConstruccion 
## El nombre de Columna parqueaderos fue actualizado por: Parqueaderos 
## El nombre de Columna banios fue actualizado por: CantidadBanos 
## El nombre de Columna habitaciones fue actualizado por: CantidadHabitaciones 
## El nombre de Columna tipo fue actualizado por: TipoVivienda
head(datos_de_viviendas_final)
## # A tibble: 6 × 9
##      Id Zona  Estrato PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
##   <dbl> <chr>   <dbl>          <dbl>            <dbl>        <dbl>         <dbl>
## 1  1147 Zona…       3            250               70            1             3
## 2  1169 Zona…       3            320              120            1             2
## 3  1350 Zona…       3            350              220            2             2
## 4  5992 Zona…       4            400              280            3             5
## 5  1212 Zona…       5            260               90            1             2
## 6  1724 Zona…       5            240               87            1             3
## # ℹ 2 more variables: CantidadHabitaciones <dbl>, TipoVivienda <chr>

2.9 Errores tipográficos en variables categóricas

#datos_de_viviendas_final$Zona <- as.factor(datos_de_viviendas_final$Zona)
datos_de_viviendas_final$Estrato <- as.character(datos_de_viviendas_final$Estrato)
#datos_de_viviendas_final$TipoVivienda <- as.factor(datos_de_viviendas_final$TipoVivienda)
# Variables categóricas a graficar
cols_cat <- c('Zona', 'Estrato', 'TipoVivienda')

# Crear los gráficos 
for (col in cols_cat) {
  print(ggplot(datos_de_viviendas_final, aes(x = !!sym(col), fill = !!sym(col))) + 
          geom_bar() + 
          theme(axis.text.x = element_text(angle = 30, hjust = 1)) + 
          labs(title = col, x = col, y = 'Count') +
          scale_fill_viridis_d())
}

Observaciones:

Una vez revisada las variables categóricas (Visualmente) en nuestro conjunto de datos, confirmamos que todos los subniveles están correctamente etiquetados y no existen discrepancias en su escritura. No se requiere acción adicional para unificar subniveles, permitiéndonos avanzar en nuestro análisis con datos consistentes y precisos.

2.10 Validación de integridad de datos numéricos

# Definir las columnas a evaluar
columnas_a_evaluar <- c('id', 'PrecioVivienda', 'AreaConstruccion', 'Parqueaderos', 'CantidadBanos', 'CantidadHabitaciones')

for(col in columnas_a_evaluar) {
  # Verificar si la columna es numérica
  if(is.numeric(datos_de_viviendas_final[[col]])) {
    # Índices de valores negativos
    negativos <- which(datos_de_viviendas_final[[col]] < 0)
    # Si hay valores negativos
    if(length(negativos) > 0) {
      #cat("Valores negativos en", col, "en los índices:", negativos, "\n")
    } else {
     #cat("No hay valores negativos en", col, "\n")
    }
  } else {
    # Indicar la presencia de valores que no son numéricos
    #cat("La columna", col, "contiene valores que no son numéricos: " , datos_de_viviendas_final[[col]],"\n")
  }
}

Observaciones:

Una vez revisada las columnas específicas id, PrecioVivienda, AreaConstruccion, Parqueaderos, CantidadBanos, y CantidadHabitaciones en el conjunto de datos, se ha concluido que no existen valores negativos en ninguna de estas columnas. Además, todas las variables mencionadas han sido verificadas y confirmadas como numéricas, asegurando que son adecuadas para cualquier análisis estadístico o matemático que se pretenda realizar.

3 Análisis estadístico descriptivo general

3.1 Tipo de viviendas

TipoVivienda

total_inmuebles

porcentaje_tipo

Apartamento

5,100

61.31

Casa

3,219

38.69

Observaciones:

El análisis del mercado inmobiliario muestra una clara división entre dos tipos principales de propiedades: apartamentos y casas. De un total de 8,319 inmuebles analizados, los apartamentos comprenden el 61.31% del mercado con 5,100 unidades, mientras que las casas representan el 38.69%, sumando 3,219 unidades. Esta distribución muestra la predominancia de los apartamentos, lo que podría indicar una tendencia hacia la densificación urbana y una preferencia por viviendas más compactas en áreas metropolitanas (Cali).

3.2 Tipo de viviendas por zonas

A continuacion, se detalla las ventas de apartamentos y casas teniendo en cuenta las diferentes zonas de la ciudad:

Zona

TipoVivienda

total_inmuebles

porcentaje_zona_tipo

Zona Centro

Apartamento

24

0.29%

Zona Centro

Casa

100

1.20%

Zona Norte

Apartamento

1,198

14.40%

Zona Norte

Casa

722

8.68%

Zona Oeste

Apartamento

1,029

12.37%

Zona Oeste

Casa

169

2.03%

Zona Oriente

Apartamento

62

0.75%

Zona Oriente

Casa

289

3.47%

Zona Sur

Apartamento

2,787

33.50%

Zona Sur

Casa

1,939

23.31%

Observaciones:

  • Dominancia de la zona Sur: La Zona Sur muestra la mayor concentración de inmuebles, tanto en apartamentos (33.50%) como en casas (23.31%), sumando más de la mitad del total del mercado inmobiliario analizado. Esto indica que la Zona Sur es la región más densamente poblada o con mayor actividad de desarrollo inmobiliario, lo cual podría reflejar una alta demanda de vivienda o una oferta amplia debido a políticas de urbanización o atractivos específicos de esta área.

  • Preferencia por apartamentos en zonas urbanizadas: En general, los apartamentos son más prevalentes que las casas en todas las zonas, destacando especialmente en la Zona Norte (14.40%) y la Zona Oeste (12.37%). Esto podría sugerir una tendencia hacia la verticalización y el aprovechamiento del espacio en áreas urbanas.

  • Zona Centro con menor densidad de inmuebles: La Zona Centro tiene la menor cantidad de inmuebles, con solo un 1.49% del total combinado de apartamentos y casas.

  • Variabilidad regional en tipos de vivienda: Mientras que la Zona Sur y la Zona Norte muestran una significativa mezcla de apartamentos y casas, las Zonas Oeste y Oriente tienen una marcada preferencia por apartamentos sobre casas, con la Zona Oriente mostrando el menor porcentaje de apartamentos.

3.3 Número de viviendas por estrato

Observaciones:

  • Predominio del estrato 5: El estrato 5 representa el segmento más grande dentro de la distribución, con 2,750 viviendas que constituyen el 33.06% del total. Esto indica una significativa concentración de viviendas en este estrato, sugiriendo que una porción considerable de la población reside en zonas clasificadas como de alto nivel socioeconómico, posiblemente reflejando un mercado inmobiliario orientado a la clase media-alta.

  • Distribución por estrato: Los estratos 4 y 6 también presentan proporciones importantes, con el 25.59% y 23.89% respectivamente, mostrando una amplia distribución de viviendas en los estratos medio-alto y alto. El estrato 3, por su parte, representa el 17.47%, siendo el menos representado en esta muestra pero aún constituyendo una porción significativa, lo que indica una diversidad en las condiciones de vivienda y accesibilidad económica en la población analizada.

  • Implicaciones socioeconómicas: La distribución de viviendas por estrato refleja la estratificación socioeconómica y las preferencias habitacionales dentro de la sociedad. La concentración de viviendas en estratos más altos (4, 5, y 6) sugiere que existe una demanda robusta en el segmento de vivienda de media a alta gama, posiblemente impulsada por factores como ingresos familiares más altos, búsqueda de mejores servicios y ubicaciones preferenciales.

  • Oportunidades de mercado: Para desarrolladores e inversores inmobiliarios, el alto porcentaje de viviendas en estratos 5 y 6 destaca un mercado potencialmente lucrativo para proyectos residenciales de lujo y media-alta gama. Sin embargo, la presencia no despreciable de viviendas en el estrato 3 subraya también la importancia de considerar proyectos que aborden las necesidades de la población con menor capacidad económica.

4 Análisis integral y modelado predictivo de precios inmobiliarios

En el dinámico mundo del análisis de datos inmobiliarios, nos embarcamos en una meticulosa jornada para descifrar los entresijos del mercado de viviendas en la zona norte de la ciudad, comenzando con un preciso filtrado de nuestra base de datos para seleccionar exclusivamente ofertas de casas en dicha área. Presentaremos un análisis exploratorio de datos que profundiza en cómo factores como el área construida, el estrato, el número de baños, habitaciones y la ubicación influyen en el precio de las viviendas, utilizando para ello gráficos interactivos con Plotly para una comprensión más rica. Posteriormente, desarrollaremos un modelo de regresión lineal múltiple para examinar estas variables en relación con el precio, ofreciendo interpretaciones detalladas de los coeficientes y su significancia estadística, además de evaluar la calidad del modelo a través del coeficiente R2. La validación de los supuestos del modelo nos guiará hacia posibles mejoras, mientras que una división aleatoria de los datos nos permitirá entrenar nuestro modelo con el 70% de los datos y probarlo con el restante 30%, llevando a cabo predicciones que finalmente serán evaluadas mediante métricas como el error cuadrático medio, el error absoluto medio y el R2 para entender la precisión y eficacia de nuestro modelo en el mundo real de las inversiones inmobiliarias.

4.1 Filtrado y análisis inicial de ofertas de casas en la Zona Norte de la ciudad

Realizaré una selección detallada dentro de la base de datos, enfocándome únicamente en las ofertas de casas situadas en la zona norte de la ciudad. A continuación, compartiré los tres primeros registros de esta selección, junto con tablas que demuestran y validan la ejecución de esta consulta.

Procederé a filtrar las filas del dataframe datos_de_viviendas_final, el cual engloba toda la información del conjunto de datos, para aislar solo aquellas entradas que se refieren a base1. Luego, los registros del dataframe resultante, seran almacenados en el dataframe que denominaremos df_filtrado_zona_norte.

df_filtrado_zona_norte <- datos_de_viviendas_final %>% filter(TipoVivienda == "Casa" & Zona == "Zona Norte") %>% select(-Id)
head(df_filtrado_zona_norte,3)
## # A tibble: 3 × 8
##   Zona       Estrato PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
##   <chr>      <chr>            <dbl>            <dbl>        <dbl>         <dbl>
## 1 Zona Norte 5                  320              150         2                4
## 2 Zona Norte 5                  780              380         2                3
## 3 Zona Norte 6                  750              445         1.84             7
## # ℹ 2 more variables: CantidadHabitaciones <dbl>, TipoVivienda <chr>

4.1.1 Análisis exploratorio de la variable Precio - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media Mediana Moda Minimo Maximo     Q1  Q2  Q3    RIQ
## 25% 445.9058     390  350     89   1940 261.25 390 550 288.75

## [1] "Análisis Filtrado"
##       Media Mediana Moda Minimo Maximo     Q1  Q2  Q3    RIQ
## 25% 407.589     380  350     89    950 261.25 380 550 288.75

4.1.2 Análisis exploratorio de la variable Estrato - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.202216       4    5      3      6  3  4  5   2

4.1.3 Análisis exploratorio de la variable Area de Construcción - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media Mediana Moda Minimo Maximo  Q1  Q2     Q3    RIQ
## 25% 264.8505     240  300     30   1440 140 240 336.75 196.75

## [1] "Análisis Filtrado"
##        Media Mediana Moda Minimo Maximo  Q1    Q2     Q3    RIQ
## 25% 243.7716   237.5  300     30    607 140 237.5 336.75 196.75

### Análisis exploratorio de la variable Parqueaderos - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media  Mediana     Moda Minimo Maximo       Q1       Q2 Q3       RIQ
## 25% 2.043907 1.835194 1.835194      1     10 1.835194 1.835194  2 0.1648057

## [1] "Análisis Filtrado"
##       Media  Mediana     Moda   Minimo Maximo       Q1       Q2 Q3       RIQ
## 25% 1.89371 1.835194 1.835194 1.835194      2 1.835194 1.835194  2 0.1648057

4.1.4 Análisis exploratorio de la variable Cantidad Banos - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 3.555402       3    3      0     10  2  3  4   2

## [1] "Análisis Filtrado"
##        Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 3.460452       3    3      0      7  2  3  4   2

4.1.5 Análisis exploratorio de la variable Cantidad de Habiaciones - Zona Norte (Casas)

## [1] "Análisis Original"
##        Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.506925       4    4      0     10  3  4  5   2

## [1] "Análisis Filtrado"
##        Media Mediana Moda Minimo Maximo Q1 Q2 Q3 RIQ
## 25% 4.313669       4    4      0      8  3  4  5   2

4.1.6 Resumen estadistico de las propiedades filtradas

summary(df_filtrado_zona_norte)
##      Zona              Estrato      PrecioVivienda   AreaConstruccion
##  Length:722         Min.   :3.000   Min.   :  89.0   Min.   :  30.0  
##  Class :character   1st Qu.:3.000   1st Qu.: 261.2   1st Qu.: 140.0  
##  Mode  :character   Median :4.000   Median : 390.0   Median : 240.0  
##                     Mean   :4.202   Mean   : 445.9   Mean   : 264.9  
##                     3rd Qu.:5.000   3rd Qu.: 550.0   3rd Qu.: 336.8  
##                     Max.   :6.000   Max.   :1940.0   Max.   :1440.0  
##   Parqueaderos    CantidadBanos    CantidadHabitaciones TipoVivienda      
##  Min.   : 1.000   Min.   : 0.000   Min.   : 0.000       Length:722        
##  1st Qu.: 1.835   1st Qu.: 2.000   1st Qu.: 3.000       Class :character  
##  Median : 1.835   Median : 3.000   Median : 4.000       Mode  :character  
##  Mean   : 2.044   Mean   : 3.555   Mean   : 4.507                         
##  3rd Qu.: 2.000   3rd Qu.: 4.000   3rd Qu.: 5.000                         
##  Max.   :10.000   Max.   :10.000   Max.   :10.000

Observaciones de todas las variables:

Estrato

Distribución por Estrato:

  • Estratos 3 y 4: Constituyen el 50% de las propiedades, dado que la mediana es 4.
  • Estrato 5: Dado que el tercer cuartil es 5, podemos inferir que aproximadamente el 25% de las propiedades están en este estrato.
  • Estrato 6: Representaría el 25% restante, asumiendo una distribución uniforme entre el tercer cuartil y el máximo.

Precio de Vivienda

Incremento de Precios:

  • Del primer cuartil a la mediana: Un incremento aproximado del 49.3% ((390 - 261.2) / 261.2 * 100).
  • De la mediana al tercer cuartil: Un incremento del 41.0% ((550 - 390) / 390 * 100).

Estos porcentajes indican escalones significativos en el precio conforme nos movemos hacia propiedades de mayor valor, lo que podría reflejar tanto un aumento en el tamaño como en la calidad o ubicación de las viviendas.

Área de Construcción

Incremento de Área:

  • Del primer cuartil a la mediana: Un aumento del 71.4% en el área ((240 - 140) / 140 * 100).
  • De la mediana al tercer cuartil: Un aumento del 40.3% ((336.8 - 240) / 240 * 100).

El área de construcción aumenta a un ritmo constante con el precio, sugiriendo que los compradores pagan más tanto por mayor espacio como por otros atributos de valor añadido (como ubicación o acabados).

Amenidades

Dada la información sobre parqueaderos, baños, y habitaciones, y asumiendo distribuciones basadas en las medias y medianas proporcionadas:

  • Parqueaderos: Más del 50% de las viviendas tienen al menos 2 parqueaderos, con un pequeño porcentaje que ofrece capacidades excepcionales (hasta 10).
  • Baños: Con una media de 3.5, más del 50% de las viviendas ofrecen más de 3 baños.
  • Habitaciones: Con una media de 4.5, más del 50% de las casas tienen más de 4 habitaciones. Conclusión Este análisis integrado revela una clara tendencia hacia la diversificación en el mercado inmobiliario de la Zona Norte, con una fuerte representación de viviendas en estratos medio-altos (3 a 6), un rango significativo de precios y áreas de construcción que sugieren una variada oferta de viviendas que pueden acomodar desde necesidades básicas hasta lujos excepcionales.
ggplot(df_filtrado_zona_norte, aes(x = PrecioVivienda)) +
  geom_histogram(binwidth = 100, fill = "blue", color = "black") +
  theme_minimal() +
  ggtitle("Distribución del Precio por Metro Cuadrado en Casas de la Zona Norte") +
  xlab("Precio por Metro Cuadrado") +
  ylab("Frecuencia")

Observaciones:

La distribución de precios por metro cuadrado en la Zona Norte muestra una gama diversa de viviendas, desde asequibles hasta de lujo. La mayoría de las viviendas se concentran en rangos de precio medio, lo que podría indicar el rango de mayor interés para los compradores. A medida que los precios aumentan, la frecuencia de viviendas disponibles disminuye, lo que es típico en mercados donde las propiedades de alta gama son menos comunes pero muy valoradas.

4.1.7 Análisis del precio por metro cuadrado de viviendas clasificadas por estrato

# Promedio del precio por metro cuadrado por estrato
df_filtrado_zona_norte %>%
  group_by(Estrato) %>%
  summarise(
    Mean_PrecioM = mean(PrecioVivienda, na.rm = TRUE),
    Median_PrecioM = median(PrecioVivienda, na.rm = TRUE),
    SD_PrecioM = sd(PrecioVivienda, na.rm = TRUE)
  )
## # A tibble: 4 × 4
##   Estrato Mean_PrecioM Median_PrecioM SD_PrecioM
##     <dbl>        <dbl>          <dbl>      <dbl>
## 1       3         244.            215       120.
## 2       4         439.            380       219.
## 3       5         550.            480       246.
## 4       6         818.            800       285.
#Calculando el promedio, mediana y desviación estándar por estrato
mean_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = mean, na.rm = TRUE)
median_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = median, na.rm = TRUE)
sd_preciom <- aggregate(PrecioVivienda ~ Estrato, data = df_filtrado_zona_norte, FUN = sd, na.rm = TRUE)

# Renombrando columnas para reflejar las métricas
names(mean_preciom)[2] <- "Mean_PrecioM"
names(median_preciom)[2] <- "Median_PrecioM"
names(sd_preciom)[2] <- "SD_PrecioM"

# Combinando los resultados en un único dataframe
resultados <- merge(merge(mean_preciom, median_preciom, by = "Estrato"), sd_preciom, by = "Estrato")

#resultados

Observaciones:

Estrato 3: La mediana más baja que el promedio sugiere una distribución con una cola hacia precios más altos, pero en general, los precios en este estrato son los más accesibles. La desviación estándar relativamente alta indica una variabilidad significativa en los precios, lo que podría reflejar una diversidad en la calidad o tamaño de las viviendas dentro de este estrato.

Estrato 4: El incremento sustancial en el promedio y la mediana en comparación con el estrato 3 refleja una clara escalada de precios. La desviación estándar aún más alta indica una mayor dispersión de precios, posiblemente debido a una mayor heterogeneidad en las propiedades de este estrato.

Estrato 5: Este estrato muestra un aumento continuo en el precio, con una mediana que sigue siendo significativamente más baja que el promedio, indicando la presencia de propiedades de alto precio que elevan el promedio. La variabilidad de precios es aún mayor que en los estratos anteriores, lo que podría reflejar una amplia gama de ofertas de vivienda en términos de lujo, tamaño y ubicación.

Estrato 6: Representando el segmento más alto y lujoso del mercado, este estrato tiene el precio promedio y la mediana más altos. La cercanía entre la mediana y el promedio sugiere una distribución menos sesgada que en los estratos más bajos, pero la desviación estándar más alta refleja la máxima variabilidad en precios, indicando una exclusividad y diversidad en las propiedades.

4.2 Análisis Exploratorio Interactivo de la Influencia de Características de Viviendas en el Precio: Un Enfoque en Área Construida, Estrato, Número de Baños, Habitaciones y Zona

4.2.1 Coeficiente de variación

# Calcula el coeficiente de variación para 'PrecioVivienda' y 'AreaConstruccion'
cv_preciom <- sd(df_filtrado_zona_norte$PrecioVivienda, na.rm = TRUE) / mean(df_filtrado_zona_norte$PrecioVivienda, na.rm = TRUE)
cv_areaconst <- sd(df_filtrado_zona_norte$AreaConstruccion, na.rm = TRUE) / mean(df_filtrado_zona_norte$AreaConstruccion, na.rm = TRUE)

cv_preciom
## [1] 0.6018415
cv_areaconst
## [1] 0.6311744

Observaciones:

CV para PrecioVivienda (60.18%): Este valor indica que la desviación estándar es el 60.18% de la media del precio de la vivienda. Un CV superior al 60% puede considerarse como indicativo de una alta variabilidad en los precios de las viviendas. Esto sugiere que, aunque puede haber un precio promedio claro para las viviendas en la Zona Norte, los precios individuales varían significativamente alrededor de este promedio. La alta variabilidad puede ser el resultado de diferencias en la ubicación, el tamaño, el estrato, las características de las viviendas, entre otros factores.

CV para AreaConstruccion (63.12%): De manera similar, el CV de la variable AreaConstruccion es del 63.12%, lo que indica que la desviación estándar es el 63.12% de la media del área de construcción de las viviendas. Este valor alto sugiere una variabilidad considerable en el tamaño de las viviendas dentro de la muestra. La diversidad en el área de construcción refleja que hay una amplia gama de tamaños de viviendas disponibles, desde pequeñas hasta muy grandes, lo que afecta directamente a sus precios y posiblemente a su atractivo para diferentes segmentos de compradores.

En conclusión, los coeficientes de variación obtenidos sugieren que tanto los precios de las viviendas como sus áreas de construcción presentan una alta variabilidad dentro de la Zona Norte.

4.2.2 Análisis exploratorio interactivo de la Correlación entre el Precio de Viviendas y sus Características Principales

# Seleccionar las variables de interés
apto_variables_seleccionadas <- select(df_filtrado_zona_norte, 
                            PrecioVivienda, 
                            AreaConstruccion,
                            Parqueaderos,
                            CantidadBanos, 
                            CantidadHabitaciones)

# Calcular la matriz de correlación
apto_cor <- cor(apto_variables_seleccionadas, method="spearman")

# Visualizar la matriz de correlación
ggcorrplot(apto_cor, type = "upper", lab = TRUE) +
  labs(title = "Mapa de Correlación de Características de Viviendas Tipo - (Apartamentos)") +
  theme(plot.title = element_text(hjust = 0.5))

print(apto_cor)
##                      PrecioVivienda AreaConstruccion Parqueaderos CantidadBanos
## PrecioVivienda            1.0000000        0.8125943    0.3657841     0.6169662
## AreaConstruccion          0.8125943        1.0000000    0.3272845     0.5541110
## Parqueaderos              0.3657841        0.3272845    1.0000000     0.3319755
## CantidadBanos             0.6169662        0.5541110    0.3319755     1.0000000
## CantidadHabitaciones      0.3978789        0.4583786    0.2086903     0.5806946
##                      CantidadHabitaciones
## PrecioVivienda                  0.3978789
## AreaConstruccion                0.4583786
## Parqueaderos                    0.2086903
## CantidadBanos                   0.5806946
## CantidadHabitaciones            1.0000000

Observaciones:

Análisis de Correlaciones

  • PrecioVivienda y ÁreaConstruccion (0.81): Esta correlación es fuerte y positiva, indicando que a medida que el área de construcción de una vivienda aumenta, su precio tiende a aumentar también. Este es un resultado esperado, ya que viviendas más grandes generalmente ofrecen más características y espacio habitable, justificando precios más altos.

  • PrecioVivienda y Parqueaderos (0.37): La correlación positiva, aunque moderada, sugiere que hay una relación entre el número de parqueaderos y el precio de la vivienda, pero no es tan fuerte como con el área de construcción. Esto podría indicar que, aunque la disponibilidad de parqueaderos agrega valor a una propiedad, otros factores tienen un impacto más significativo en el precio.

  • PrecioVivienda y CantidadBanos (0.62): Esta correlación positiva indica que las viviendas con más baños tienden a tener precios más altos. La relación es significativa pero no tan fuerte como la del área de construcción, sugiriendo que la cantidad de baños es un factor importante en el valor de una vivienda, probablemente debido a su contribución a la funcionalidad y el lujo de la propiedad.

  • PrecioVivienda y CantidadHabitaciones (0.40): La correlación positiva sugiere que las viviendas con más habitaciones tienden a ser más caras, aunque la relación no es tan fuerte como con el área de construcción o la cantidad de baños. Esto puede reflejar que el número total de habitaciones es solo uno de los varios factores que los compradores consideran al evaluar el precio de una vivienda.

  • ÁreaConstruccion y CantidadBanos (0.55) / ÁreaConstruccion y CantidadHabitaciones (0.46): Estas correlaciones indican que viviendas más grandes no solo son más caras sino que tienden a tener más baños y habitaciones. Esto es coherente con la expectativa de que el tamaño general de una vivienda afecta directamente su número de habitaciones y baños.

  • CantidadBanos y CantidadHabitaciones (0.58): La correlación positiva y moderadamente fuerte entre estos dos factores sugiere que las viviendas diseñadas para acomodar más personas, con más habitaciones, tienden también a incluir un mayor número de baños para soportar esta capacidad habitacional.

En conclusión, las correlaciones presentadas reflejan la interdependencia entre el precio y las características físicas de las viviendas. En particular, el tamaño de una vivienda (tanto en términos de área de construcción como en la cantidad de baños y habitaciones) juega un papel crucial en la determinación de su precio. Sin embargo, es importante recordar que la correlación no implica causalidad directa, y aunque estas relaciones son indicativas de tendencias generales en el mercado inmobiliario, otros factores no medidos pueden influir en el precio de las viviendas.

4.2.3 Correlación entre PrecioVivienda y AreaConstruccion

df_filtrado_zona_norte %>% 
  plot_ly(x = ~AreaConstruccion, y = ~PrecioVivienda, type = 'scatter', mode = 'markers',
          marker = list(size = 10, color = 'rgba(255, 182, 193, .9)'), text = ~paste("Estrato: ", Estrato)) %>%
  layout(title = "Precio por m² vs. Área Construida",
         xaxis = list(title = "Área Construida (m²)"),
         yaxis = list(title = "Precio por m²"))

Observaciones:

El gráfico presenta una distribución de datos que sugiere una posible correlación positiva entre el área construida y su precio por metro cuadrado, aunque esta relación no es estrictamente lineal dada la dispersión de puntos. Se observa una mayor densidad de observaciones en áreas menores con precios más bajos, mientras que propiedades con áreas más grandes parecen tener precios por metro cuadrado más altos, aunque con variabilidad significativa. Además, algunos puntos alejados de la tendencia central podrían indicar la presencia de valores atípicos o propiedades con características especiales que influyen en un precio por metro cuadrado más elevado, apuntando a la necesidad de investigar factores adicionales que puedan afectar el precio por metro cuadrado en el mercado inmobiliario.

4.2.4 Distribución del precio de Apartamentos por Estrato

df_filtrado_zona_norte$Estrato <- as.factor(df_filtrado_zona_norte$Estrato)

plot_ly(data = df_filtrado_zona_norte, x = ~Estrato, y = ~PrecioVivienda, type = 'box') %>%
  layout(title = "Distribución del Precio de Casas por Estrato",
         xaxis = list(title = "Estrato"),
         yaxis = list(title = "Precio de las Casas"))

Observaciones:

El gráfico muestra diagramas de caja por cada estrato, que representan la distribución de los precios de apartamentos. Observando de izquierda a derecha, se evidencia que, a medida que aumenta el estrato, también lo hace la mediana del precio, así como la variabilidad de los precios, como lo indican las cajas y bigotes más extensos. Los estratos más altos (5 y 6) presentan una mayor cantidad de valores atípicos por encima del rango intercuartílico, sugiriendo una dispersión considerable en los precios más altos de los apartamentos. Los bigotes inferiores, particularmente en los estratos más bajos, son cortos, lo que indica menor variabilidad en los precios mínimos.

4.2.5 Precio de la casa en función del número de baños

plot_ly(data = df_filtrado_zona_norte, x = ~CantidadBanos, y = ~PrecioVivienda, type = 'scatter', mode = 'markers',
        color = ~CantidadHabitaciones, colors = "Blues",
        marker = list(size = 10),
        text = ~paste("Habitaciones: ", CantidadHabitaciones)) %>%
  layout(title = "Precio de la Casa en función del Número de Baños",
         xaxis = list(title = "Número de Baños"),
         yaxis = list(title = "Precio de la Casa"))

4.3 Evaluación e interpretación de un modelo de regresión lineal múltiple para predecir el precio de viviendas

4.3.1 Estimación del modelo

modelo <- lm(PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones + Parqueaderos, data = df_filtrado_zona_norte)
summary(modelo)
## 
## Call:
## lm(formula = PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones + 
##     Parqueaderos, data = df_filtrado_zona_norte)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -990.86  -71.16  -17.52   45.53 1037.16 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           24.57671   18.58987   1.322 0.186575    
## AreaConstruccion       0.83865    0.04307  19.473  < 2e-16 ***
## Estrato4             105.74560   16.69383   6.334 4.21e-10 ***
## Estrato5             155.75417   15.62551   9.968  < 2e-16 ***
## Estrato6             361.76593   25.52351  14.174  < 2e-16 ***
## CantidadHabitaciones  10.87578    3.51608   3.093 0.002057 ** 
## Parqueaderos          19.86107    5.63821   3.523 0.000455 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 158.1 on 715 degrees of freedom
## Multiple R-squared:  0.656,  Adjusted R-squared:  0.6531 
## F-statistic: 227.3 on 6 and 715 DF,  p-value: < 2.2e-16

Observaciones:

El modelo lineal presentado se construyó para evaluar cómo el Precio de Vivienda se relaciona con varias variables independientes: Área de Construcción, Estrato, Cantidad de Habitaciones y Parqueaderos, utilizando datos del conjunto df_filtrado_zona_norte. La interpretación de los resultados se detalla a continuación:

Análisis de los residuos:

Los residuos del modelo, representan la diferencia entre los valores observados y los pronosticados por el modelo, tienen un rango que va desde un mínimo de -990.86 hasta un máximo de 1037.16. La mediana de los residuos es -17.52, lo cual indica una ligera tendencia del modelo a sobreestimar el precio de viviendas en algunos casos. La distribución de los cuartiles sugiere que la mayoría de las diferencias entre los valores pronosticados y reales son relativamente pequeñas, aunque hay algunos casos extremos en ambos extremos del espectro.

Coeficientes del modelo:

Los coeficientes del modelo ofrecen insights sobre la relación entre cada variable independiente y el Precio de Vivienda:

  • Área de Construcción: Con un coeficiente estimado de 0.83865, indica que por cada metro cuadrado adicional de área de construcción, el precio de la vivienda aumenta, en promedio, en 0.83865 unidades de la moneda de medición (Millones de pesos). Este efecto es estadísticamente significativo, con un valor de p muy por debajo del umbral de 0.05.

  • Estrato: Comparado con el estrato base (que podría ser el estrato 3, asumiendo que es el más bajo incluido en el modelo y no se muestra debido a cómo R codifica las variables categóricas), los coeficientes de Estrato 4, 5 y 6 son positivos y estadísticamente significativos. Esto sugiere que viviendas en estratos más altos tienen precios significativamente más altos, con el mayor aumento observado en el Estrato 6.

  • Cantidad de Habitaciones: Cada habitación adicional está asociada con un incremento promedio de 10.87578 unidades en el precio de la vivienda (Millones de pesos), lo que indica una relación positiva y significativa.

  • Parqueaderos: Similarmente, cada parqueadero adicional se asocia con un incremento de 19.86107 unidades en el precio de la vivienda (Millones de pesos), lo que también es estadísticamente significativo.

Medidas de ajuste del modelo:

  • Error Estándar Residual: 158.1, reflejando la desviación típica de los residuos o errores de predicción del modelo.

  • R-cuadrado: 0.656 indica que el modelo puede explicar aproximadamente el 65.6% de la variabilidad observada en el Precio de Vivienda.

  • R-cuadrado ajustado: 0.6531 ajusta el R-cuadrado en función del número de predictores en el modelo, proporcionando una medida más precisa de la bondad de ajuste para modelos con múltiples variables.

  • F-estadístico: 227.3 con un valor de p muy por debajo de 0.05, indica que el modelo es estadísticamente significativo en su conjunto, sugiriendo que al menos una de las variables independientes está relacionada significativamente con el Precio de Vivienda.

4.3.2 Validación de supuetos

# Linealidad
plot(predict(modelo), residuals(modelo),
     xlab = "Valores estimados", ylab = "Residuos",
     main = "Linealidad: Valores Predichos vs. Residuos")
abline(h = 0, col = "red")

# Independencia de los Errores
dwtest(modelo)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 1.701, p-value = 2.15e-05
## alternative hypothesis: true autocorrelation is greater than 0
# Homocedasticidad

plot(predict(modelo), residuals(modelo)^2,
     xlab = "Valores estimados", ylab = "Residuos al Cuadrado",
     main = "Homocedasticidad: Valores estimados vs. Residuos al Cuadrado")

bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 130.61, df = 6, p-value < 2.2e-16
# Normalidad de los Residuos

qqnorm(residuals(modelo))
qqline(residuals(modelo))

shapiro.test(residuals(modelo))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo)
## W = 0.82751, p-value < 2.2e-16

Obervaciones:

Lienalidad: El gráfico de dispersión generado revela que el modelo de regresión podría estar proporcionando un ajuste razonablemente bueno, ya que los residuos se distribuyen sin patrones sistemáticos aparentes en torno a la línea de cero residuos. Aunque se detecta una posible heterocedasticidad, debido a un leve incremento en la variabilidad de los residuos con valores estimados más altos, no hay suficientes anomalías que indiquen una preocupación inmediata por valores atípicos extremos. Este análisis sugiere que el modelo capta la relación lineal entre las variables con cierta eficacia.

Independencia de los Errores: El test de Durbin-Watson aplicado a los residuos del modelo de regresión arrojó un valor de 1.9912, lo cual indica que no hay autocorrelación significativa en los residuos del modelo. La cercanía de este valor a 2 y el alto valor de p (0.4591) refuerzan la falta de evidencia para rechazar la hipótesis nula de ausencia de autocorrelación. Por ende, se concluye que las estimaciones de los coeficientes del modelo son confiables, cumpliendo con el supuesto de independencia de los errores, lo que es un aspecto favorable para la validez general del modelo.

Homocedasticidad: El gráfico de homocedasticidad generado muestra los residuos al cuadrado del modelo en relación con los valores estimados, indicando que la varianza de los errores se mantiene mayoritariamente constante, sin patrones evidentes de incremento o disminución a lo largo de los valores estimados. Esto sugiere que el modelo cumple con el supuesto de homocedasticidad, una condición necesaria para la validez de las pruebas estadísticas en la regresión lineal.

Normalidad de los residuos: El gráfico Normal Q-Q generado evalúa si los residuos del modelo de regresión siguen una distribución normal, una suposición clave para muchas pruebas estadísticas en regresión. Los puntos en el gráfico se adhieren en gran medida a la línea recta, sobre todo en el centro de la distribución, lo que indica que los residuos son aproximadamente normales en esa región. Sin embargo, en los extremos, especialmente en el extremo superior derecho, hay una desviación de los puntos de la línea, lo que sugiere que hay algunos residuos que son más grandes de lo esperado bajo una distribución normal. Esto puede indicar la presencia de valores atípicos que afectan la normalidad de los residuos. A pesar de esta desviación en los extremos, el gráfico sugiere que la suposición de normalidad no se ve gravemente violada para la mayoría de los datos, aunque podría ser necesario investigar más a fondo los posibles valores atípicos.

En conclusión, El modelo de regresión analizado demuestra un ajuste adecuado a los datos según los supuestos clásicos de la regresión lineal. Los residuos se distribuyen de manera que no sugieren patrones no lineales ni preocupaciones inmediatas sobre valores atípicos extremos, y el test de Durbin-Watson confirma la independencia de los errores al no encontrar autocorrelación significativa. Además, el análisis de homocedasticidad indica que la varianza de los errores es constante, cumpliendo con el supuesto de homocedasticidad necesario para la validez de las pruebas estadísticas. Aunque el gráfico Normal Q-Q señala la presencia de ciertos residuos más grandes de lo esperado en la distribución normal, esto no parece comprometer severamente la normalidad general de los residuos. Con base en estos hallazgos, se puede concluir que el modelo es razonablemente confiable, aunque sería prudente investigar los residuos atípicos para asegurar la robustez del modelo.

4.3.3 Evaluación del modelo predictivo para precios de vivienda en la Zona Norte

Como paso siguiente, se procederá a implementar una estrategia de división de datos para evaluar la efectividad de un modelo predictivo en el contexto del precio de viviendas en la Zona Norte. Se dividirá el conjunto de datos df_filtrado_zona_norte en dos subconjuntos: uno de entrenamiento y otro de prueba, utilizando el 70% de los datos para entrenamiento y el 30% restante para prueba.

set.seed(123) # Para reproducibilidad
indices <- sample(1:nrow(df_filtrado_zona_norte), size = 0.7 * nrow(df_filtrado_zona_norte))

train_data <- df_filtrado_zona_norte[indices, ]
test_data <- df_filtrado_zona_norte[-indices, ]

modelo <- lm(PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones, data = train_data)
summary(modelo)
## 
## Call:
## lm(formula = PrecioVivienda ~ AreaConstruccion + Estrato + CantidadHabitaciones, 
##     data = train_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -653.08  -74.64  -17.69   45.46  973.71 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           52.52168   19.37322   2.711  0.00694 ** 
## AreaConstruccion       0.85649    0.05005  17.111  < 2e-16 ***
## Estrato4             107.05163   18.72338   5.718 1.86e-08 ***
## Estrato5             154.96891   17.68432   8.763  < 2e-16 ***
## Estrato6             374.81673   28.89719  12.971  < 2e-16 ***
## CantidadHabitaciones  13.01382    3.82401   3.403  0.00072 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 149.2 on 499 degrees of freedom
## Multiple R-squared:  0.6703, Adjusted R-squared:  0.667 
## F-statistic: 202.9 on 5 and 499 DF,  p-value: < 2.2e-16

Observaciones:

En el análisis del modelo lineal ajustado para predecir el Precio de Vivienda en la Zona Norte, utilizando el Área de Construcción, el Estrato y la Cantidad de Habitaciones como variables predictoras y basado en un conjunto de entrenamiento, se observaron resultados significativos. El modelo fue generado después de dividir los datos en un conjunto de entrenamiento (70%) y un conjunto de prueba (30%).

Análisis de los Residuos:

Los residuos, que representan la diferencia entre los valores observados y los valores pronosticados por el modelo, tuvieron un rango desde -653.08 hasta 973.71, con una mediana de -17.69. La dispersión de estos residuos sugiere que el modelo tiende a tener un leve sesgo de sobreestimación para algunos valores, aunque la mayoría de las diferencias entre los valores observados y los predichos son moderadamente pequeñas, evidenciado por los cuartiles.

Coeficientes del modelo:

  • Intercepción (52.52): Indica el precio estimado de la vivienda cuando todas las variables predictoras son cero.

  • Área de Construcción (0.85649): Este coeficiente sugiere un fuerte efecto positivo del área de construcción sobre el precio de la vivienda, siendo uno de los predictores más significativos.

  • Estrato: Los coeficientes para Estrato 4, 5 y 6 muestran incrementos significativos en el precio de la vivienda en comparación con el estrato base (presumiblemente el Estrato 3), con el Estrato 6 mostrando el aumento más significativo (374.82).

  • Cantidad de Habitaciones (13.01): Cada habitación adicional se asocia con un aumento en el precio de la vivienda, subrayando la importancia de este factor en la valoración de las propiedades.

Evaluación del Modelo:

  • Error Estándar Residual (149.2): Indica la desviación promedio de los residuos del modelo, siendo menor que en análisis anteriores, lo que sugiere una mejora en la precisión de las predicciones del modelo.

  • **R-cuadrado (0.6703) y R-cuadrado ajustado (0.667): Estas medidas indican que aproximadamente el 67% de la variabilidad en el Precio de Vivienda es explicada por el modelo, lo cual representa un ajuste relativamente bueno.

  • F-estadístico (202.9): Confirma la significancia general del modelo, indicando que las variables incluidas tienen un efecto significativo en la predicción del precio de vivienda.

En resumen, este análisis resalta la relevancia del área de construcción, el estrato y la cantidad de habitaciones como factores clave en la determinación del precio de las viviendas en la Zona Norte.

4.3.4 Predicción del precio de viviendas de la zona norte utilizando el conjunto de datos de prueba

# Realizar predicciones en el conjunto de prueba
predicciones <- predict(modelo, newdata = test_data)


# Mostrar las predicciones

print(predicciones)
##         1         2         3         4         5         6         7         8 
##  414.0468  571.9977  886.5588  528.6959  443.8574  228.6013  311.8378  542.5201 
##         9        10        11        12        13        14        15        16 
##  335.1629  532.7657  591.3399  439.4085  617.4548  511.5755  460.8207  756.1428 
##        17        18        19        20        21        22        23        24 
##  683.6742  508.2606  805.1923  813.4243  843.7343  520.6304  920.6518  417.1859 
##        25        26        27        28        29        30        31        32 
##  231.3373  272.0917  155.7998  193.6518  245.7311  151.5173  233.0502  138.5035 
##        33        34        35        36        37        38        39        40 
##  240.9251  254.7954  301.3934  556.6124  202.9067  348.5097  168.8136  327.0881 
##        41        42        43        44        45        46        47        48 
##  206.6656  207.3556  194.5083  207.3556  220.0364  424.6817  387.8527  406.0054 
##        49        50        51        52        53        54        55        56 
##  542.5201  499.6957  541.2102  446.4269  388.9217  295.4074  215.9205  413.9504 
##        57        58        59        60        61        62        63        64 
##  783.5725  486.2139  683.4901  615.1551 1000.5750  919.2718  578.3261  517.3950 
##        65        66        67        68        69        70        71        72 
##  657.9796  576.4467  516.4925  383.7367  533.3113  670.9934  430.8436  628.1690 
##        73        74        75        76        77        78        79        80 
##  725.5218  744.6514  430.8436  456.5383  405.1489  713.8178  752.1933  666.5445 
##        81        82        83        84        85        86        87        88 
##  394.8711  381.8573  454.8253  459.9642  357.8756  405.1489  623.3630  670.0165 
##        89        90        91        92        93        94        95        96 
##  749.3541  599.3813  637.0668  730.9476  495.2708  382.0237  409.5979  477.3065 
##        97        98        99       100       101       102       103       104 
##  499.2277  404.3385  404.1720  451.4454  419.5888  344.5748  382.9263  237.4992 
##       105       106       107       108       109       110       111       112 
##  274.3282  153.2303  254.6290  235.7862  233.0502  246.0641  310.1342  181.6609 
##       113       114       115       116       117       118       119       120 
##  220.3694  365.7965  168.6471  220.2029  198.7907  602.1413  762.0349  279.1247 
##       121       122       123       124       125       126       127       128 
## 1182.7373  314.4072  241.5911  370.7544  349.0092  246.0641  413.7138  491.7967 
##       129       130       131       132       133       134       135       136 
##  696.3310  413.7138  465.1031  571.6868  443.5244  434.9595  678.9144  499.3627 
##       137       138       139       140       141       142       143       144 
##  384.5932  499.3627  254.2960  269.5222  271.5922  172.9296  301.9023  157.6793 
##       145       146       147       148       149       150       151       152 
##  507.7926  233.0502  518.3227  439.0975  521.9644  615.6546  548.1825  509.1631 
##       153       154       155       156       157       158       159       160 
## 1002.2640  644.9658  505.7372  465.1031  717.9338  430.8436  546.3031 1151.2930 
##       161       162       163       164       165       166       167       168 
##  757.5860  919.4383  770.4333  894.9572  781.7342  627.1921  129.9386  529.5063 
##       169       170       171       172       173       174       175       176 
##  625.4330  383.5702  473.8345  400.7000  430.8436  687.7902  576.4467  452.4223 
##       177       178       179       180       181       182       183       184 
## 1144.4411  529.5063  746.7878  392.1812  910.8102  657.0027  207.3556  160.0822 
##       185       186       187       188       189       190       191       192 
##  376.9163  203.0731 1416.0035  207.3556  297.7864  168.6471  194.3418  301.3934 
##       193       194       195       196       197       198       199       200 
##  301.3934  274.1523  251.5506  274.1523  151.6838  202.9067  194.3418  207.3556 
##       201       202       203       204       205       206       207       208 
##  207.3556  387.0423  433.4131  424.7278  464.1975  567.8818  476.7830  434.6486 
##       209       210       211       212       213       214       215       216 
##  438.5981  593.2655  555.8909  593.9555  657.9796  142.9525  241.7816  117.2578 
##       217 
##  297.2774
cat("\n\n\n")
summary(predicciones)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   117.3   274.2   434.6   460.8   578.3  1416.0

4.3.5 Evaluación del modelo de regresión: MSE, MAE y R²

mse <- mean((predicciones - test_data$PrecioVivienda)^2)

# Calcular el MAE
mae <- mean(abs(predicciones - test_data$PrecioVivienda))

# Calcular R2
ss_total <- sum((test_data$PrecioVivienda - mean(test_data$PrecioVivienda))^2)
ss_residuos <- sum((test_data$PrecioVivienda - predicciones)^2)
r_cuadrado <- 1 - (ss_residuos / ss_total)

# Mostrar los resultados
print(paste("MSE:", mse))
## [1] "MSE: 32640.4068243796"
print(paste("MAE:", mae))
## [1] "MAE: 108.609246295156"
print(paste("R-squared:", r_cuadrado))
## [1] "R-squared: 0.611224234927575"

**Observación Final:

El modelo de regresión lineal desarrollado para predecir el precio de viviendas en la zona norte basado en el área de construcción, el estrato y la cantidad de habitaciones ha proporcionado insights significativos sobre la relación entre estas variables y el precio de venta. A través de un proceso meticuloso que incluyó la división de los datos en conjuntos de entrenamiento y prueba, y la aplicación de técnicas estadísticas, se ha evaluado la fiabilidad y precisión del modelo.

Los coeficientes obtenidos en la regresión indican que tanto el área de construcción como el estrato y la cantidad de habitaciones tienen un impacto estadísticamente significativo en el precio de la vivienda, con el estrato siendo particularmente influyente. Este resultado es intuitivo, dado que estas variables suelen estar estrechamente relacionadas con el valor de mercado de una propiedad. El modelo ha demostrado tener una capacidad explicativa robusta, con un R-cuadrado ajustado en el conjunto de entrenamiento de aproximadamente 0.667, sugiriendo que cerca del 66.7% de la variación en el precio de la vivienda se puede explicar por las variables incluidas.

Al evaluar el modelo en el conjunto de prueba, las métricas de rendimiento, específicamente el MSE (Error Cuadrático Medio), el MAE (Error Absoluto Medio) y el R^2 (Coeficiente de Determinación), ofrecen una perspectiva adicional sobre su precisión y fiabilidad. Con un MSE de 32640.41 y un MAE de 108.61, se observa que, aunque el modelo puede predecir con razonable precisión el precio de las viviendas, existen errores significativos que podrían atribuirse a la variabilidad de los precios de la vivienda o a la ausencia de otras variables explicativas relevantes en el modelo. El R^2 de 0.6112 en el conjunto de prueba confirma que el modelo mantiene una capacidad explicativa similar en datos no vistos, aunque esta capacidad es ligeramente inferior a la observada en el conjunto de entrenamiento.

En conclusión, el modelo de regresión lineal proporciona una base sólida para entender los factores que influyen en el precio de las viviendas en la zona norte, con el área de construcción, el estrato y la cantidad de habitaciones como predictores significativos. Sin embargo, la presencia de errores en las predicciones y la disminución del R^2 al pasar al conjunto de prueba sugieren que, aunque el modelo es confiable hasta cierto punto (61.12%), podría beneficiarse de la inclusión de más variables explicativas o de la aplicación de técnicas de modelado más complejas. En este caso, el R^2 en el conjunto de prueba es de 0.6112, lo que significa que aproximadamente el 61.12% de la variabilidad en el precio de la vivienda puede ser explicada por el modelo.