1. Introducción

Teniendo presente la solicitud planteada por su empresa, en relación con el requerimiento de un científico de datos para la construcción de un modelo que oriente sobre los precios de inmuebles de la base de datos que nos remitió, el presente documento tiene como finalidad, realizar análisis exploratorios (simple y bivariado), estimación de modelos de regresión lineal y otras estimaciones, con el fin, de construir un informe que le permita, tomar mejores decisiones.

2. Identificación de tipos de inmuebles

Como primera medida, consideramos pertinente detallar los tipos de inmuebles que se registran en la base de datos:

# Cargar librerías
library(readr,warn.conflicts = FALSE)
library(dplyr,warn.conflicts = FALSE)
library(ggplot2,warn.conflicts = FALSE)
library(gridExtra,warn.conflicts = FALSE)
library(paqueteMETODOS,warn.conflicts = FALSE)
## Loading required package: cubature
## Loading required package: GGally
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
## Loading required package: summarytools
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
## Loading required package: tidyverse
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%()         masks ggplot2::%+%()
## ✖ psych::alpha()       masks ggplot2::alpha()
## ✖ gridExtra::combine() masks dplyr::combine()
## ✖ dplyr::filter()      masks stats::filter()
## ✖ dplyr::lag()         masks stats::lag()
## ✖ MASS::select()       masks dplyr::select()
## ✖ tibble::view()       masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Instalación y carga de paquetes necesarios
#install.packages("learnr") # solo una vez
#install.packages("devtools") # solo una vez
devtools::install_github("dgonxalex80/paqueteMETODOS")
## Skipping install of 'paqueteMETODOS' from a github remote, the SHA1 (9696ffdc) has not changed since last install.
##   Use `force = TRUE` to force installation
data(vivienda4)

# Tabla de frecuencias de la variable "tipo"
table_tipo <- table(vivienda4$tipo)

# Gráfico de pastel para visualizar la proporción de tipos de inmuebles con valores y colores
colors <- c("steelblue", "pink")  # Define los colores que deseas utilizar

# Crea el gráfico de pastel
pie(table_tipo, main = "Proporción de Tipos de Inmuebles", labels = table_tipo, col = colors)
legend("topright", legend = names(table_tipo), fill = colors)  # Agrega una leyenda de colores

  • Se observa, que se tiene un total de 1.363 apartamentos y 343 casas. Por lo tanto, y de acuerdo a las conversaciones sostenidas con sus directivos, el presente informe se centrará para el tipo de inmueble: Apartamentos

  • Por último, y teniendo en cuenta la base de datos remitida, se observa que de los 1.706 registros, 30 de ellos corresponden a apartamentos de 200 m2. Y dado que en sus restricciones cololca menor a 200 m2, se le informa, que para hacer un uso completo de la información contenida, estos 30 registros también harán parte del análisis.

3. Planteamiento de requerimientos

Con base en los datos de ofertas de vivienda descargadas del portal Fincaraiz para apartamento de estrato 4 con área construida menor a 200 m2 (vivienda4.RDS), nuestra inmobiliaria requiere su apoyo en la construcción de un modelo que nos oriente sobre los precios de inmuebles.

Con este propósito el equipo de asesores ha diseñado los siguientes pasos para obtener un modelo y así poder a futuro determinar los precios de los inmuebles a negociar

  1. Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados) - incluir gráficos e indicadores apropiados interpretados.

  2. Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida) - incluir gráficos e indicadores apropiados interpretados.

  3. Estime el modelo de regresión lineal simple entre precio=f(area)+ε . Interprete los coeficientes del modelo β0 , β1 en caso de ser correcto.

  4. Construir un intervalo de confianza (95%) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t.

  5. Calcule e interprete el indicador de bondad R2.

  6. ¿Cuál sería el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.

  7. Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

  8. De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

  9. De ser necesario compare el ajuste y supuestos del modelo inicial y el transformado.

  10. Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

Con los resultados obtenidos construya un informe para los directivos de la inmobiliaria, indicando el modelo apropiado y sus principales características. A este informe se deben añadir los anexos como evidencia de la realización de los pasos anteriores.

4. Solución de requerimientos

4.1. Punto 1

Realice un análisis exploratorio de las variables precio de vivienda (millones de pesos COP) y área de la vivienda (metros cuadrados). Incluir gráficos e indicadores apropiados interpretados:

  • Revisión variable Precio (Millones de Pesos COP) - Apartamentos
vivienda_apartamentos <- vivienda4 %>%
  filter(tipo == "Apartamento")

# Resumen descriptivo de la variable preciom
summary(vivienda_apartamentos$preciom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    78.0   153.5   185.0   202.4   240.0   645.0
# Calcular la desviación estándar de preciom
desviacion_estandar_preciom <- sd(vivienda_apartamentos$preciom)

# Imprimir las desviaciones estándar
cat("Desviación Estándar de preciom:", desviacion_estandar_preciom, "\n")
## Desviación Estándar de preciom: 65.29049
# Histograma de la variable "preciom" sin valores no válidos
ggplot(vivienda_apartamentos, aes(x = preciom)) +
  geom_histogram(binwidth = 3, fill = "blue", color = "grey", na.rm = TRUE) +
  labs(title = "Histograma de la variable 'Precio'",
       x = "Precio (Millones de pesos)",
       y = "Frecuencia")

- El valor mínimo en la variable es 78. 
- El primer cuartil (25%) de la variable es 153.5, es decir, que el 25% de los datos son iguales o menores a este valor.
- La mediana de la variable es 185, que corresponde al valor que se encuentra justo en el medio de los datos cuando se ordenan de menor a mayor. Lo que quiere decir, que el 50% de los datos son iguales o menores a este valor.
- La media (promedio) de la variable es 202.4. 
- El tercer cuartil (75%) de la variable es 240, es decir, que el 75% de los datos son iguales o menores a este valor.
- El valor máximo en la variable es 645. 
- En relación con la desviación estándar, se observa un valor de 65.29049 . Cabe mencionar, que esta es una medida de dispersión que indica cuanto se alejan los valores de la variable de su promedio. Por lo tanto, este valor significa que, en promedio, los valores de la variable precio tienden a estar a unos 65.29049 millones de pesos COP de distancia con respecto a la media.
  • Revisión variable Área construida (m2) - Apartamentos
# Resumen descriptivo de la variable areaconst
summary(vivienda_apartamentos$areaconst)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   40.00   60.00   70.00   75.48   84.00  200.00
# Calcular la desviación estándar de areaconst
desviacion_estandar_areaconst <- sd(vivienda_apartamentos$areaconst)

# Imprimir las desviaciones estándar
cat("Desviación Estándar de areaconst:", desviacion_estandar_areaconst, "\n")
## Desviación Estándar de areaconst: 22.56461
# Histograma de la variable "areaconst" sin valores no válidos
ggplot(vivienda_apartamentos, aes(x = areaconst)) +
  geom_histogram(binwidth = 2, fill = "green", color = "blue", na.rm = TRUE) +
  labs(title = "Histograma de la variable 'Área construida'",
       x = "Área construida (M2)",
       y = "Frecuencia")

- El valor mínimo en la variable es 40. 
- El primer cuartil (25%) de la variable es 60, es decir, que el 25% de los datos son iguales o menores a este valor.
- La mediana de la variable es 70, que corresponde al valor que se encuentra justo en el medio de los datos cuando se ordenan de menor a mayor. Lo que quiere decir, que el 50% de los datos son iguales o menores a este valor.
- La media (promedio) de la variable es 75.48. 
- El tercer cuartil (75%) de la variable es 84, es decir, que el 75% de los datos son iguales o menores a este valor.
- El valor máximo en la variable es 200. 
- En relación con la desviación estándar, se observa un valor de 22.56461 . Cabe mencionar, que esta es una medida de dispersión que indica cuanto se alejan los valores de la variable de su promedio. Por lo tanto, este valor significa que, en promedio, los valores de la variable precio tienden a estar a unos 22.56461 m2 de distancia con respecto a la media.

4.2. Punto 2

Realice un análisis exploratorio bivariado de datos, enfocado en la relación entre la variable respuesta (precio) en función de la variable predictora (area construida). Incluir gráficos e indicadores apropiados interpretados:

A continuación, se presentan gráficos de análisis bivariado de las variables precio y área construida:

# Gráfico 1: Gráfico de dispersión precio vs área
library(ggplot2)
ggplot(vivienda_apartamentos, aes(x = areaconst, y = preciom)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "blue") +  # Agregar la línea de tendencia
  labs(title = "Gráfico de Dispersión con Línea de Tendencia: Precio vs Área Construida", 
       x = "Área Construida (metros cuadrados)", 
       y = "Precio (millones de pesos COP)")
## `geom_smooth()` using formula = 'y ~ x'

  • El eje x representa el área construida en metros cuadrados.
  • El eje y representa el precio en millones de pesos COP.
  • Cada punto en el gráfico representa una observación de la vivienda.
  • En relación con el gráfico de dispersión, se puede determinar que la dirección de la relación es positiva, es decir, como se observa con la línea azul de tendencia, que a medida que aumenta el área, aumenta el precio del inmueble.
  • Adicionalmente, se puede identificar la fuerza de la relación, a través de la dispersión de los puntos alrededor de la línea de tendencia.
  • Por último, se puede visualizar la existencia de posibles datos atípicos, que corresponden a aquellos puntos más aislados de la línea de tendencia general. Para un procesamiento futuro, recomendamos la evaluación de eliminación de este tipo de datos, ya que pueden incidir significativamente en la fuerza de la relación y posibles modelos.

A continuación, se calcula el índice de correlación de Pearson:

# Cálculo del coeficiente de correlación Pearson
correlation <- cor(vivienda_apartamentos$preciom, vivienda_apartamentos$areaconst)
correlation
## [1] 0.7481389
  • En cuanto a este indicador, es importante recordar que cuantifica la fuerza y dirección de la relación lineal entre dos variables cuantitativas.
  • Para este caso, el valor obtenido de 0.7481389 sugiere que existe una correlación lineal significativa entre la variable área construida y la variable precio. Por lo tanto, tienden a aumentar juntas en una relación lineal.
  • Es importante mencionar, que la correlación lineal no implica causalidad, es decir, que si dos variables están correlacionadas linealmente, no implica que necesariamente una cause a la otra.

4.3. Punto 3

Estime el modelo de regresión lineal simple entre precio=f(area)+ε . Interprete los coeficientes del modelo β0 , β1 en caso de ser correcto.

  • Estimación del modelo de regresión lineal simple
# Paso 3: Estimación del modelo de regresión lineal simple
modelo <- lm(preciom ~ areaconst, data = vivienda_apartamentos)
summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = vivienda_apartamentos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -225.404  -23.902   -4.754   25.763  209.021 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 39.04679    4.09977   9.524   <2e-16 ***
## areaconst    2.16473    0.05204  41.595   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared:  0.5597, Adjusted R-squared:  0.5594 
## F-statistic:  1730 on 1 and 1361 DF,  p-value: < 2.2e-16

El modelo de regresión lineal simple se expresa así:

precio=β0 + β1*areaconst + ε

Donde, β0= intercepto o la constante,

β1= coeficiente de la variable independiente areaconst,

ε= error aleatorio.

En relación con el análisis de los coeficientes del modelo β0 , β1, se destaca la siguiente información:

1. Intercepto (β0):

  • El valor del intercepto (β0) es 39.04679.

  • Este valor representa el precio estimado de una vivienda cuando el área construida (areaconst) es igual a cero. Sin embargo, este caso no tiene sentido, dado que el área construida nunca sería igual a cero en la base de datos. Por lo tanto, el intercepto puede no tener una interpretación práctica directa.

2. Coeficiente de β1 (areaconst):

  • El valor de β1 es 2.16473.

  • Este coeficiente representa el cambio esperado en el precio por cada unidad adicional de área construida. Es decir, por cada metro cuadrado adicional de área construida, el precio de la vivienda aumenta en promedio en 2.16473 millones de pesos COP.

  • Teniendo en cuenta que el coeficiente es positivo y significativo (p-value < 0.001), se puede concluir que hay una relación positiva entre el área construida y el precio del inmueble. Es decir, que a medida que el área construida aumenta, se espera que el precio de la vivienda suba.

3. Análisis adicionales - Los coeficientes son estadísticamente significativos, dado que los valores de p-value asociados a ambos coeficientes son muy pequeños (p-value < 0.001). Lo cual, permite inferir que la relación entre el precio y el área construida es significativa para el modelo planteado.

4.4. Punto 4

Construir un intervalo de confianza (95%) para el coeficiente β1, interpretar y concluir si el coeficiente es igual a cero o no. Compare este resultado con una prueba de hipótesis t.

  • Construcción del intervalo de confianza (95%)

Para la construción del intervalo de confianza del 95% para el coeficiente β1 en el modelo de regresión lineal, se utiliza la siguiente fórmula:

Intervalo de Confianza=β^1 ± tα/2 * SE (β^1)

Donde,

β^1= estimado del coeficiente β1 del modelo de regresión lineal,

tα/2= valor crítico de la distribución t de Student con n−2 grados de libertad, donde n es el número de observaciones,

SE (β^1)= error estándar del estimado de β1

# Estimado de beta1 (coeficiente de areaconst)
beta1_estimado <- coef(modelo)["areaconst"]

# Error estándar de beta1
se_beta1 <- summary(modelo)$coef["areaconst", "Std. Error"]

# Calcular el número de observaciones (n)
n <- nrow(vivienda_apartamentos)

# Grados de libertad
grados_libertad <- n - 2  # (número de observaciones - número de coeficientes)

# Valor crítico de t para un intervalo de confianza del 95%
valor_critico_t <- qt(0.975, df = grados_libertad)

# Construir el intervalo de confianza
intervalo_confianza <- beta1_estimado + c(-1, 1) * valor_critico_t * se_beta1

# Imprimir el intervalo de confianza
print(intervalo_confianza)
## [1] 2.062640 2.266826
  • En relación con el análisis del intervalo de confianza para β1, se observa que este, no incluye el valor de 0, por lo tanto, β1, es significativamente diferente de 0. Lo que permite concluir, que existe una relación directa entre el área construida y el precio de las viviendas.

  • Por último, se compara este resultado con una prueba de hipótesis t:

Como primera medida, se establece la hipótesis nula:

  • Hipótesis nula (H0): El coeficiente β1 es igual a 0. H0:β1=0,

  • Hipótesis alternativa (Ha): El coeficiente β1 es distinto de 0. Ha:β1/=0

# Calcular el valor t
valor_t <- (beta1_estimado - 0) / se_beta1

# Calcular los valores críticos t para un nivel de confianza del 95%
valor_critico_t_izquierda <- qt(0.025, df = grados_libertad)
valor_critico_t_derecha <- qt(0.975, df = grados_libertad)

# Realizar la prueba de hipótesis t
if (valor_t < valor_critico_t_izquierda || valor_t > valor_critico_t_derecha) {
  cat("Hipótesis nula (H0) rechazada. Hay evidencia de relación entre areaconst y preciom.")
} else {
  cat("No se rechaza la hipótesis nula (H0). No hay evidencia de una relación entre areaconst y preciom.")
}
## Hipótesis nula (H0) rechazada. Hay evidencia de relación entre areaconst y preciom.
# Imprimir el valor t y los valores críticos t
cat("Valor t:", valor_t, "\n")
## Valor t: 41.59515
cat("Valor Crítico t (Izquierda):", valor_critico_t_izquierda, "\n")
## Valor Crítico t (Izquierda): -1.961709
cat("Valor Crítico t (Derecha):", valor_critico_t_derecha, "\n")
## Valor Crítico t (Derecha): 1.961709

Por lo tanto, y teniendo en cuenta que el valor de t no está dentro de los rangos críticos, se rechaza la hipótesis nula y se concluye que hay evidencia significativa de la relación entre el área construida y el precio de las viviendas de la población de estudio.

4.5. Punto 5

Calcule e interprete el indicador de bondad R2.

  • Interpretación R2

  • El coeficiente de determinación (R-cuadrado ajustado) es 0.5594. Es decir, que el 55.94% de la variabilidad en el precio de la vivienda se explica por la variabilidad en el área construida.

  • Por lo tanto, el modelo explica un porcentaje admisible la variación en el precio de las viviendas en función del área construida.

  • Teniendo en cuenta que el valor de R2 no es cercano a 1, se entiende que aún existe una cantidad significativa de variabilidad en el precio que no puede ser explicado por el modelo. Es decir, que no se consideran otros factores que pueden estar contribuyendo a esta variabilidad. Por lo tanto, recomendamos la inclusión de otros variables de interés que puedan afectar el precio de la vivienda para futuros estudios.

4.6. Punto 6

¿Cuál sería el precio promedio estimado para un apartamento de 110 metros cuadrados? Considera entonces con este resultado que un apartamento en la misma zona con 110 metros cuadrados en un precio de 200 millones sería una atractiva esta oferta? ¿Qué consideraciones adicionales se deben tener?.

  • Cálculo de valor promedio

A continuación, se presenta la estimación del valor del precio promedio para un apartamento de 110 m2 utilizando el modelo de regresión lineal simple presentado en la sección anterior (función definida en la sección 4.3):

# Área construida de 110 m2
area_const <- 110

# Calcular el precio estimado utilizando el modelo
precio_estimado_110 <- coef(modelo)["(Intercept)"] + coef(modelo)["areaconst"] * area_const

# Imprimir el precio estimado
cat("El Precio estimado para un apartamento de 110 metros cuadrados con base en el modelo de regresión lineal es de:", precio_estimado_110, "millones de pesos COP\n")
## El Precio estimado para un apartamento de 110 metros cuadrados con base en el modelo de regresión lineal es de: 277.1674 millones de pesos COP

En relación con la evaluación de conveniencia, y teniendo en cuenta que el valor estimado obtenido es de 277 millones de pesos COP, un apartamento en la misma zona con 110 metros cuadrados y un precio de 200 millones de pesos COP sería una oferta atractiva para ustedes como agentes inmobiliarios, dado que podrían comprarlo por debajo del valor promedio para un posterior venta a mayor precio y obtener un margen de ganancia considerable.

De igual manera, es importante mencionar que esta oferta se puede considerar competitiva en función de los resultados del modelo, pero se deben tener en cuenta otras consideraciones, como la ubicación, cantidad de parqueaderos, cantidad de baños, demanda en el mercado, que le permitan añadir variables para determinar un análisis más completo antes de tomar una decisión de compra o inversión.

4.7. Punto 7

Realice la validación de los supuestos del modelo por medio de gráficos apropiados, interpretarlos y sugerir posibles soluciones si se violan algunos de ellos. Utilice las pruebas de hipótesis para la validación de supuestos y compare los resultados con lo observado en los gráficos asociados.

  • Validación de supuestos

Para determinar la validación de los supuestos del modelo de regresión lineal planteado, se considera importante realizar un análisis de diagnóstico que incluya la revisión de gráficos y pruebas de hipótesis. Por lo tanto, es importante validar los siguientes conceptos:

  • Linealidad: La relación entre la variable independiente (en este caso, areaconst) y la variable dependiente (preciom) debe ser aproximadamente lineal.

  • Normalidad de los Residuales: Los residuales del modelo deben seguir una distribución normal.

  • Homocedasticidad: La varianza de los residuales debe ser constante a lo largo de todos los valores de la variable independiente.

Por lo tanto, se presentan los gráficos que permitirán los correspondientes análisis:

  • Validación Linealidad
library(lmtest,warn.conflicts = FALSE)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car,warn.conflicts = FALSE)
## Loading required package: carData
# Supuesto 1: Linealidad (Gráfico de dispersión de los residuales vs. valores ajustados)
plot(modelo, which = 1)

  • El Gráfico de dispersión de los residuales vs. valores ajustados se utiliza para evaluar el supuesto de linealidad del modelo y detectar patrones no lineales en los residuales.

  • Eje X (Valores Ajustados): valores ajustados o predichos por el modelo para la variable dependiente (preciom).

  • Eje Y (Residuales): Valores residuales, que son las diferencias entre los valores observados reales y los valores predichos por el modelo.

  • Si los puntos en el gráfico están dispersos aleatoriamente alrededor de una línea horizontal centrada en cero (el eje Y), esto sugiere que el supuesto de linealidad está satisfecho. Para este caso, no se observan patrones de comportamiento en la relación entre los valores ajustados y los residuales.

    Validación normalidad de residuales

# Supuesto 2: Normalidad de los Residuales (Prueba de normalidad Shapiro-Wilk)
shapiro.test(resid(modelo))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo)
## W = 0.96486, p-value < 2.2e-16
  • Si el supuesto de normalidad de los residuales se viola (la prueba Shapiro-Wilk arroja un valor significativo), se puede considerar transformar la variable dependiente.

  • W (Estadístico de Shapiro-Wilk): El valor de W es una estadística de prueba que se utiliza para determinar si los residuales siguen una distribución normal. W= 0.96486.

  • p-value (Valor p): El valor p es una medida de la evidencia en contra de la hipótesis nula de que los residuales siguen una distribución normal. Valor p < 2.2e-16.

  • En este caso, el valor de W es cercano a 1, lo que sugiere que los residuales pueden seguir una distribución normal. Sin embargo, se debe tener en cuenta la interpretación del resultado del valor p.

  • El valor p es prácticamente cero, lo que indica que hay evidencia en contra de la hipótesis nula de normalidad. Es decir, los residuales no siguen una distribución normal.

  • Dado el valor p, la recomendación, sería rechazar la hipótesis nula de normalidad, es decir, que los valores residuales no son normalmente distribuidos.

  • Teniendo en cuenta lo anterior, el resultado de la prueba de Shapiro-Wilk sugiere que los residuales del modelo no siguen una distribución normal, lo que puede indicar que el modelo de regresión lineal simple puede no ser el adecuado para describir la relación entre las variables.

  • Por último, se recomienda el uso de transformaciones de variables.

    Validación Homocedasticidad

# Supuesto 3: Homocedasticidad (Gráfico de dispersión de los residuales estandarizados vs. valores ajustados)
plot(modelo, which = 3)

# Prueba de Breusch-Pagan para homocedasticidad
bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 292.99, df = 1, p-value < 2.2e-16
  • En este gráfico, los valores ajustados se representan en el eje X, y los residuales estandarizados (residuales divididos por su desviación estándar) se representan en el eje Y.Estos últimos, están diseñados para tener una varianza constante si se cumple el supuesto de homocedasticidad.

  • Si los puntos se dispersan aleatoriamente alrededor de una línea horizontal (sin un patrón claro), esto sugiere que se cumple el supuesto de homocedasticidad, lo que significa que la varianza de los residuales es constante en todos los niveles de valores ajustados.

  • Si el supuesto de homocedasticidad se viola (por ejemplo, si el gráfico de dispersión de residuales estandarizados muestra un patrón de cono), se recomienda la aplicación de transformación de variables.

  • El resultado del test de Breusch-Pagan (el valor p es prácticamente cero) indica evidencia significativa en contra de la hipótesis nula de homocedasticidad. Lo anterior, que confirma la violación del supuesto.

  • En resumen, el supuesto de homocedasticidad se viola en el modelo de regresión planteado en la sección 4.3.

  • Por último, se recomienda el uso de transformaciones de variables.

4.8. Punto 8 y 9

Punto 4.8: De ser necesario realice una transformación apropiada para mejorar el ajuste y supuestos del modelo.

Punto 4.9: Compare el ajuste y supuestos del modelo inicial y el transformado.

  • Transformación de variables

Teniendo en cuenta que los supuestos del modelo de regresión lineal se violan, se plantea la siguiente transformación en las variables en la búsqueda de mejorar el ajuste y los supuestos del modelo: Logarítmica.

Transformación logarítmica

# Transformación logarítmica de precio
vivienda_apartamentos$log_precio <- log(vivienda_apartamentos$preciom)

# Transformación logarítmica de área construida
vivienda_apartamentos$log_areaconst <- log(vivienda_apartamentos$areaconst)

# Ajustar el modelo con la transformación logarítmica
modelo_log <- lm(log_precio ~ log_areaconst, data = vivienda_apartamentos)

# Supuesto 1: Linealidad (Gráfico de dispersión de los residuales vs. valores ajustados)
plot(modelo_log, which = 1)

# Supuesto 2: Normalidad de los Residuales (Prueba de normalidad Shapiro-Wilk)
shapiro.test(resid(modelo_log))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo_log)
## W = 0.98958, p-value = 2.857e-08
# Supuesto 3: Homocedasticidad (Prueba de Breusch-Pagan para homocedasticidad)
bptest(modelo_log)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_log
## BP = 92.877, df = 1, p-value < 2.2e-16

A continuación, se realizan los análisis para que se interpreten cada una de las validaciones de supuestos del modelo transformado:

  • Linealidad: Si los puntos en los gráficos están dispersos aleatoriamente alrededor de una línea horizontal centrada en cero (el eje Y), se sugiere que el supuesto de linealidad está satisfecho. Para este caso, no se observan patrones de comportamiento en la relación entre los valores ajustados y los residuales.

  • Normalidad de residuales: Teniendo en cuenta que el valore p (p-value) obtenido de la prueba de normalidad Shapiro-Wilk es aproximadamente 0, se sigue manteniendo la premisa que los valores residuales no son normalmente distribuidos.

  • Homocedasticidad: Teniendo en cuenta el valore p (p-value) obtenido de la prueba Breusch-Pagan es aproximadamente 0, se sigue manteniendo la premisa en contra de la hipótesis nula de homocedasticidad.

Comparación de modelo inicial y transformación

Para este caso, se presenta el resumen de los modelos:

# Comparación de modelos
summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst, data = vivienda_apartamentos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -225.404  -23.902   -4.754   25.763  209.021 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 39.04679    4.09977   9.524   <2e-16 ***
## areaconst    2.16473    0.05204  41.595   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 43.34 on 1361 degrees of freedom
## Multiple R-squared:  0.5597, Adjusted R-squared:  0.5594 
## F-statistic:  1730 on 1 and 1361 DF,  p-value: < 2.2e-16
summary(modelo_log)
## 
## Call:
## lm(formula = log_precio ~ log_areaconst, data = vivienda_apartamentos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -0.8890 -0.1119  0.0028  0.1343  0.7538 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    1.48373    0.08703   17.05   <2e-16 ***
## log_areaconst  0.88175    0.02026   43.52   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1914 on 1361 degrees of freedom
## Multiple R-squared:  0.5819, Adjusted R-squared:  0.5816 
## F-statistic:  1894 on 1 and 1361 DF,  p-value: < 2.2e-16

Para la comparación de los modelos, se presenta el siguiente resumen con las variables de comparación más relevantes:

  • Modelo Original:
    • R cuadrado ajustado: 0.5594
    • Coeficiente de área construida: 2.16473
    • Supuestos de regresión: Violación de homocedasticidad.
  • Modelo Logarítimico:
    • R cuadrado ajustado: 0.5816
    • Coeficiente de Logaritmo de área construida: 0.88175
    • Supuestos de regresión: Violación de homocedasticidad.

Teniendo en cuenta lo anterior, la selección de un modelo preferencial, bajo la comparación de los datos descritos,se ejecuta por medio de la selección del modelo con mayor R-cuadrado ajustado, que para este caso, es el modelo logarítmico.

4.9. Punto 10

Estime varios modelos y compare los resultados obtenidos. En el mejor de los modelos, ¿se cumplen los supuestos sobre los errores?

  • Estimación de modelos

Adicional a la transformación establecida, se presentan dos casos más: Raíz cuadrada y Recíproca.

Transformación Raíz cuadrada

# Transformación de raíz cuadrada de precio
vivienda_apartamentos$sqrt_precio <- sqrt(vivienda_apartamentos$preciom)

# Transformación de raíz cuadrada de área construida
vivienda_apartamentos$sqrt_areaconst <- sqrt(vivienda_apartamentos$areaconst)

# Ajustar el modelo con la transformación de raíz cuadrada
modelo_sqrt <- lm(sqrt_precio ~ sqrt_areaconst, data = vivienda_apartamentos)

# Supuesto 1: Linealidad (Gráfico de dispersión de los residuales vs. valores ajustados)
par(mfrow = c(2, 2))
plot(modelo_sqrt)

# Supuesto 2: Normalidad de los Residuales (Prueba de normalidad Shapiro-Wilk)
shapiro.test(resid(modelo_sqrt))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo_sqrt)
## W = 0.98639, p-value = 5.39e-10
# Supuesto 3: Homocedasticidad (Prueba de Breusch-Pagan para homocedasticidad)
bptest(modelo_sqrt)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_sqrt
## BP = 197.45, df = 1, p-value < 2.2e-16
summary(modelo_sqrt)
## 
## Call:
## lm(formula = sqrt_precio ~ sqrt_areaconst, data = vivienda_apartamentos)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -7.0131 -0.8126 -0.0797  0.9305  5.2401 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     2.14048    0.28082   7.622 4.65e-14 ***
## sqrt_areaconst  1.38521    0.03232  42.856  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.41 on 1361 degrees of freedom
## Multiple R-squared:  0.5744, Adjusted R-squared:  0.5741 
## F-statistic:  1837 on 1 and 1361 DF,  p-value: < 2.2e-16

Transformación recíproco

# Transformación recíproca de precio
vivienda_apartamentos$reciproco_precio <- 1/vivienda_apartamentos$preciom

# Transformación recíproca de área construida
vivienda_apartamentos$reciproco_areaconst <- 1 / vivienda_apartamentos$areaconst

# Ajustar el modelo con la transformación recíproca
modelo_reciproco <- lm(reciproco_precio ~ reciproco_areaconst, data = vivienda_apartamentos)

# Supuesto 1: Linealidad (Gráfico de dispersión de los residuales vs. valores ajustados)
par(mfrow = c(2, 2))
plot(modelo_reciproco)

# Supuesto 2: Normalidad de los Residuales (Prueba de normalidad Shapiro-Wilk)
shapiro.test(resid(modelo_reciproco))
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(modelo_reciproco)
## W = 0.96427, p-value < 2.2e-16
# Supuesto 3: Homocedasticidad (Prueba de Breusch-Pagan para homocedasticidad)
bptest(modelo_reciproco)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_reciproco
## BP = 0.4984, df = 1, p-value = 0.4802
summary(modelo_reciproco)
## 
## Call:
## lm(formula = reciproco_precio ~ reciproco_areaconst, data = vivienda_apartamentos)
## 
## Residuals:
##        Min         1Q     Median         3Q        Max 
## -0.0040604 -0.0006786 -0.0001167  0.0005261  0.0054855 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         0.0004085  0.0001190   3.433 0.000614 ***
## reciproco_areaconst 0.3520871  0.0081927  42.976  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.0009848 on 1361 degrees of freedom
## Multiple R-squared:  0.5757, Adjusted R-squared:  0.5754 
## F-statistic:  1847 on 1 and 1361 DF,  p-value: < 2.2e-16

En relación a la comparación de estos dos modelos transformados, se tiene el siguiente resumen:

  • Modelo Raíz cuadrada:
    • R cuadrado ajustado: 0.5741
    • Coeficiente de Raíz cuadrada de área construida: 1.38521
    • Supuestos de regresión: Violación de homocedasticidad.
  • Modelo Raíz recíproco:
    • R cuadrado ajustado: 0.5754
    • Coeficiente de recíproco de área construida: 0.35208
    • Supuestos de regresión: Violación de homocedasticidad.
  • Por último, y al igual que el modelo original y el logarítmico, para estas transformaciones no se cumplen los supuestos establecidos.