Caso modelo de regresión lineal múltiple

Author

Juan José Arteaga, Laura Sánchez, Nahun Sánchez

Published

November 11, 2024

En este informe se presenta el análisis de un modelo de regresión lineal múltiple aplicado al estudio del precio de venta de casas, tomando como base una serie de variables cuantitativas y cualitativas asociadas a las características de las propiedades. El objetivo principal es determinar cómo cada una de estas variables contribuye al valor comercial de una vivienda, permitiendo obtener un modelo predictivo que explique, de manera significativa, el comportamiento del precio en función de dichas características.

Los datos consisten en una base de información sobre propiedades inmobiliarias, con las siguientes variables:

  • area: área de la casa en pies².

  • cuartos: número de cuartos de la casa.

  • banos: número de baños de la casa.

  • fecha_cons: año de construcción de la casa.

  • area_lote: área del lote en acres.

  • garage: capacidad del garage.

  • calidad_vecinos: puntuación de 1 a 10 sobre la calidad de la ubicación (convertida en variable categórica).

  • precio: variable respuesta que representa el precio de la casa.

1. Modelo y estimación de parámetros del modelo

Modelo de Regresión Lineal Múltiple

Se define el modelo de regresión lineal múltiple como se muestra en la siguente Ecuación:

\(y_i = \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \dots + \beta_{p-1} x_{i, p-1} + \epsilon_i\)

Donde:

  • \(\beta_0, \, \beta_1, \dots, \beta_{p-1}\) son parámetros.
  • \(x_{i1}, \, x_{i2}, \dots, x_{i, p-1}\) son constantes conocidas.
  • \(\epsilon_i\): los términos del error, son independientes y \(\epsilon_i \sim N(0, \sigma^2)\).Además, \(i = 1, 2, \dots, n\).

El modelo de regresión lineal múltiple propuesto es:

\[ \text{precio} = \beta_0 + \beta_1 \cdot \text{area} + \sum_{i=2}^{5} \beta_{\text{cuartos}, i} \cdot \text{cuartos}_i + \beta_6 \cdot \text{banos} + \beta_7 \cdot \text{fecha\_cons} + \beta_8 \cdot \text{area\_lote} \]

\[ + \sum_{j=1}^{2} \beta_{\text{garage}, j} \cdot \text{garage}_j + \sum_{k=2}^{10} \beta_{\text{calidad}, k} \cdot \text{calidad\_vecinos}_k + \epsilon \]

Donde: \(\beta\_0\) es el intercepto. \(\beta\_i\) representa los coeficientes asociados a cada variable independiente.\(\epsilon\) es el término de error.

library(readxl)
library(ggplot2)
library(nortest)
library(lmtest)
library(car)
library(MASS)
library(olsrr)
library(ggplot2)
library(plotly)
datos <- read_excel("datos.xlsx")

datos$calidad_vecinos <- as.factor(datos$calidad_vecinos)

modelo <- lm(precio ~ area + cuartos + banos + fecha_cons + area_lote + garage + calidad_vecinos, data = datos)
summary(modelo)

Call:
lm(formula = precio ~ area + cuartos + banos + fecha_cons + area_lote + 
    garage + calidad_vecinos, data = datos)

Residuals:
       Min         1Q     Median         3Q        Max 
-1.766e+16 -7.012e+15 -1.828e+15  2.865e+15  4.049e+16 

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)        3.857e+15  3.357e+16   0.115    0.909    
area              -2.463e+12  2.765e+11  -8.907   <2e-16 ***
cuartos           -3.069e+14  2.452e+14  -1.251    0.211    
banos              6.732e+14  4.240e+14   1.588    0.113    
fecha_cons         6.592e+12  1.683e+13   0.392    0.695    
area_lote         -3.124e-03  2.690e-02  -0.116    0.908    
garage             4.524e+14  4.279e+14   1.057    0.291    
calidad_vecinos2  -9.773e+13  1.569e+15  -0.062    0.950    
calidad_vecinos3   4.967e+14  1.650e+15   0.301    0.763    
calidad_vecinos4  -1.416e+15  1.590e+15  -0.890    0.373    
calidad_vecinos5  -2.779e+14  1.553e+15  -0.179    0.858    
calidad_vecinos6   2.216e+15  1.582e+15   1.401    0.162    
calidad_vecinos7  -1.684e+15  1.577e+15  -1.068    0.286    
calidad_vecinos8   7.178e+14  1.597e+15   0.450    0.653    
calidad_vecinos9  -9.081e+14  1.636e+15  -0.555    0.579    
calidad_vecinos10  7.181e+14  1.513e+15   0.475    0.635    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.092e+16 on 984 degrees of freedom
Multiple R-squared:  0.08997,   Adjusted R-squared:  0.0761 
F-statistic: 6.485 on 15 and 984 DF,  p-value: 2.317e-13
ecuacion <- modelo$coefficients
ecuacion
      (Intercept)              area           cuartos             banos 
     3.857472e+15     -2.462840e+12     -3.068609e+14      6.732233e+14 
       fecha_cons         area_lote            garage  calidad_vecinos2 
     6.591742e+12     -3.124174e-03      4.523693e+14     -9.773413e+13 
 calidad_vecinos3  calidad_vecinos4  calidad_vecinos5  calidad_vecinos6 
     4.967348e+14     -1.415731e+15     -2.779243e+14      2.216360e+15 
 calidad_vecinos7  calidad_vecinos8  calidad_vecinos9 calidad_vecinos10 
    -1.683774e+15      7.178408e+14     -9.081108e+14      7.180673e+14 

Intercepto: No significativo (p = 0.822), lo que indica que el valor de referencia del precio sin la influencia de las variables explicativas no es concluyente.

Área: Coeficiente significativo (p < 2e-16), lo que sugiere que el área de la casa tiene un impacto relevante y negativo en el precio, con un efecto de -2.461e+12 por unidad de cambio en el área.

Cuartos: Ninguna de las categorías de cuartos (cuartos2, cuartos3, etc.) es significativa (p > 0.05), lo que indica que el número de cuartos no tiene un efecto concluyente sobre el precio.

Baños: Marginalmente significativo (p = 0.121), lo que implica un posible impacto, aunque no suficiente para ser estadísticamente relevante al nivel del 5%.

Fecha de Construcción y Área del Lote: No significativos (p > 0.8), lo que indica que estas variables no contribuyen de manera importante al modelo.

Garage y Calidad de Vecinos: Las categorías de estas variables no muestran significancia (p > 0.1), lo que sugiere una falta de impacto estadístico en el precio de la casa.

R-cuadrado: 0.09469, lo que significa que el modelo explica aproximadamente el 9.5% de la variabilidad en el precio. Este valor es bajo, lo que sugiere que hay otros factores importantes no considerados en el modelo.

R-cuadrado ajustado: 0.07714, confirma que al ajustar por el número de predictores, el poder explicativo del modelo sigue siendo limitado.

Error estándar residual: 1.091e+16, indica una variabilidad alta en los residuales, lo que sugiere que el modelo tiene dificultades para ajustarse adecuadamente a los datos.

2. Inferencia sobre el modelo completo

Grados de libertad \(DF\)

Grados de libertad del total \(DF_T\).

Los grados de libertad del total \(DF_T\) se calculan como se muestra en la Ecuación:

\[ DF_T = n - 1 \]

Grados de libertad del error \(DF_E\)

Los grados de libertad del error \(DF_E\) se calculan como:

\[ DF_E = n - p \]

Grados de libertad del modelo \(DF_R\)

Los grados de libertad del modelo \(DF_R\) se calculan como:

\[ DF_R = p - 1 \]

Cuadrados medios \(MS\)

Cuadrados medios del total \(MST\).

Los cuadrados medios del total \(MST\) se calculan como:

\[ MST = \frac{SST}{DF_T} \]

Cuadrados medios del error \(MSE\)

Los cuadrados medios del error \(MSE\) se calculan como:

\[ MSE = \frac{SSE}{DF_E} \]

Cuadrados medios del modelo \(MSR\)

Los cuadrados medios del modelo \(MSR\) se calculan como:

\[ MSR = \frac{SSR}{DF_R} \]

H0: Todos los coeficientes βi son iguales a cero (no hay efecto).

H1: Al menos un coeficiente βi es diferente de cero.

anova_completo <- aov(modelo)
summary(anova_completo)
                 Df    Sum Sq   Mean Sq F value Pr(>F)    
area              1 9.723e+33 9.723e+33  81.562 <2e-16 ***
cuartos           1 1.763e+32 1.763e+32   1.479 0.2243    
banos             1 3.535e+32 3.535e+32   2.965 0.0854 .  
fecha_cons        1 1.269e+31 1.269e+31   0.106 0.7443    
area_lote         1 3.132e+30 3.132e+30   0.026 0.8713    
garage            1 1.329e+32 1.329e+32   1.115 0.2912    
calidad_vecinos   9 1.195e+33 1.328e+32   1.114 0.3494    
Residuals       984 1.173e+35 1.192e+32                   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El análisis ANOVA confirma que solo el área es un predictor significativo al nivel del 5%, lo que respalda su inclusión en el modelo como variable relevante. Las demás variables no presentan evidencia estadística suficiente para concluir que tienen un impacto importante en el precio de las casas.

3. Intervalos de confianza para cada coeficiente

Un intervalo de confianza al \((1 - \alpha)\%\) para \(\beta_k\) se estima como:

\[ \hat{\beta}_k \pm t_{1 - \frac{\alpha}{2}, n - p} \cdot S(\hat{\beta}_k) \] Donde:

  • \(\hat{\beta}_k\) es el estimador de \(\beta_k\).

  • \(t_{1 - \frac{\alpha}{2}, n - p}\) es el valor crítico de la distribución t de Student con un nivel de confianza de \((1 - \alpha)\%\) y \(( n - p)\) grados de libertad.

  • \(( S(\hat{\beta}_k)\) es el error estándar de \(\hat{\beta}_k\).

H0: βk = 0 (El coeficiente βk no es significativamente diferente de cero).

H1: βk ≠ 0 (El coeficiente βk es significativamente diferente de cero).

confint(modelo)
                          2.5 %        97.5 %
(Intercept)       -6.202506e+16  6.974000e+16
area              -3.005476e+12 -1.920204e+12
cuartos           -7.880275e+14  1.743058e+14
banos             -1.587964e+14  1.505243e+15
fecha_cons        -2.644324e+13  3.962673e+13
area_lote         -5.592074e-02  4.967239e-02
garage            -3.872915e+14  1.292030e+15
calidad_vecinos2  -3.177649e+15  2.982180e+15
calidad_vecinos3  -2.741451e+15  3.734920e+15
calidad_vecinos4  -4.535944e+15  1.704482e+15
calidad_vecinos5  -3.326050e+15  2.770202e+15
calidad_vecinos6  -8.879858e+14  5.320706e+15
calidad_vecinos7  -4.777670e+15  1.410121e+15
calidad_vecinos8  -2.415412e+15  3.851093e+15
calidad_vecinos9  -4.119176e+15  2.302955e+15
calidad_vecinos10 -2.251385e+15  3.687519e+15

Área: El intervalo de confianza de [−3.0047×1012,−1.9166×1012 ] no incluye el cero, lo que respalda la conclusión de que el coeficiente de área es significativamente diferente de cero. Esto confirma que el área es un predictor relevante del precio.

Cuartos, Baños, Fecha de Construcción, Área del Lote, Garage y Calidad de Vecinos: Los intervalos de confianza de estas variables incluyen el cero, lo que indica que no hay suficiente evidencia para rechazar𝐻0. Por lo tanto, estos coeficientes no son significativamente diferentes de cero al nivel de significancia utilizado. Esto sugiere que estas variables pueden no tener un impacto estadísticamente significativo en el precio en el contexto de este modelo..

4. Verificación del supuesto de normalidad

Normalidad gráfica

Para realizar la verificación gráfica de la normalidad es necesario construir un gráfico de dispersión cuantiles teóricos vs cuantiles de los residuales, o gráfico cuantil cuantíl (QQplot). Es necesario poseer los cálculos de los residuales \(e_i\).

Se siguen los siguientes pasos:

  1. Ordenar los \(n\) residuales \(e_i\) en orden ascendente y asignarles en ese orden los valores de 1 a \(n\). Denotamos \(r_i\) con \(i = 1, 2, 3, \dots, n\) los datos de los residuales \(e_i\) en orden creciente.

  2. Calcular una posición de graficación \(p_i\) para cada dato \(r_i\) en función de su rango y del total de observaciones como:

\[ p_i = \frac{i - 0.5}{n} \quad ; \quad i = 1, 2, \dots, n \]

  1. Calcular la normal inversa \(Z_i\) de \(p_i\):

\[ Z_i = \phi^{-1} \left( \frac{1 - 0.5}{n} \right) \]

  1. Hacer gráfico de dispersión: en el eje de las abscisas por \(Z_i\) y en el eje de las ordenadas los \(r_i\).

Si los residuales siguen una distribución normal, al graficarlos tienden a quedar alineados en una línea recta; por lo tanto, si claramente no se alinean se concluye que el supuesto de normalidad está siendo violado.

Verificación formal - analítica supuesto de normalidad mediante Test Kolmogorov-Smirnov

Consideremos una muestra aleatoria de datos \(x_1, x_2, \dots, x_n\) que procede de cierta función desconocida denotada \(F(x)\). Se quiere verificar si dichos datos fueron generados por un proceso normal, mediante las hipótesis estadísticas.

  1. Planteamiento de hipótesis

\[ H_0 : e_i \sim N(\mu, \sigma^2) \\ H_1 : e_i \nsim N(\mu, \sigma^2) \quad \forall \, i = 1, 2, \dots, n \]

  1. Organización de los residuos \(e_i\): de manera ascendente, denotando los datos ordenados como:

\[ r_i = x_{(1)}, x_{(2)}, \dots, x_{(n)}, \quad \text{con } i = 1, 2, 3, \dots, n \]

  1. Cálculo de probabilidad teórica (percentil) \(P_i\) de la forma:

\[ P_i = \frac{i}{n}, \quad \forall \, i = 1, 2, \dots, n \]

  1. Estandarización de los residuos organizados \(r_i\) de la siguiente manera:

\[ Z_i = \frac{x_i - \bar{x}}{S(x_i)}, \quad \forall \, i = 1, 2, \dots, n \]

donde:

  • \(\bar{x}\) corresponde a la media muestral para los \(r_i\).
  • \(S(x_i)\) es la desviación estándar de la muestra de \(r_i\).
  1. Cálculo de la probabilidad \(P(Z_i)\) para una distribución normal estándar:

\[ P(Z_i) = \phi \left( \frac{x_i - \bar{x}}{S(x_i)} \right), \quad \forall \, i = 1, 2, \dots, n \]

  1. Cálculo de distancias \(D_1\) y \(D_2\):
  • Distancia 1 \(D_1\):

\[ D_1 = |P(Z_i) - P_i|, \quad \forall \, i = 1, 2, \dots, n \]

  • Distancia 2 \(D_2\):

\[ D_2 = |P(Z_i) - P_{i-1}|, \quad \forall \, i = 1, 2, \dots, n \]

  1. Escogemos el valor para el estadístico de prueba \(D\)

\[ D = \max \{ D_1, D_2 \} \]

  1. Comparamos el estadístico de prueba \(D\) con el estadístico teórico \(KS\)

\[ KS = \frac{C_\alpha}{K(n)} \]

H0: Los residuos siguen una distribución normal.

H1: Los residuos no siguen una distribución normal.

resid = modelo$residuals
qqnorm(resid)
qqline(resid,col = "red", lwd = 2)

lillie.test(resid(modelo))

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  resid(modelo)
D = 0.15151, p-value < 2.2e-16

El gráfico Q-Q muestra una notable desviación de los puntos respecto a la línea de referencia, especialmente en las colas. Esto sugiere que los residuos no se distribuyen de manera normal, indicando una fuerte asimetría y la posible presencia de valores atípicos.

Dado el 𝑝-valor extremadamente bajo, se rechaza la hipótesis nula (H0) de que los residuos siguen una distribución normal al nivel de significancia estándar

se recomienda considerar transformaciones de variables, métodos de regresión robusta, o técnicas de remuestreo como el bootstrapping para obtener inferencias más confiables.

5. Verificación del supuesto de varianza constante

Verificación formal - analítica del supuesto de varianza constante

El test de Breusch-Pagan para verificar la varianza constante asume que los términos del error son independientes y se distribuyen normalmente, y que la varianza del término del error \(e_i\), denotada como \(sigma^2\), está relacionada con el nivel de las \(k\) variables regresoras con \(k = 1, 2, \dots, p - 1\), de la siguiente manera:

\[ \log \sigma_i^2 = \gamma_0 + \gamma_1 x_{1i} + \gamma_2 x_{2i} + \dots + \gamma_{p-1} x_{i, p-1} \]

  1. Planteamiento de la hipótesis

Note que la ecuación anterior implica que \(\sigma_i^2\) incrementa o disminuye con el cambio en alguna de las \(k\) variables regresoras, dependiendo del signo de \(\gamma_{p-1}\). La varianza constante se da en el caso que \(\gamma_i = 0\). Por lo anterior, se pueden plantear las hipótesis de la siguiente forma:

  • \(H_0 : \gamma_k = 0\)
  • \(H_1 : \gamma_k \neq 0\) para al menos un \(k = 1, 2, \dots, p - 1\)
  1. Estadístico de prueba

Existen dos formas de cálculo del estadístico de prueba, el estadístico de prueba BP propuesto por Breusch y Pagan, y el estadístico de prueba \(X_{n,p}^2\) propuesto por Cook y Weisberg como mejora del test anterior.

Forma 1. Estadístico de prueba Breusch Pagan \(BP\)

El estadístico de prueba BP se calcula de la siguiente manera:

\[ BP = n R^2 \]

Donde \(R^2\) corresponde al coeficiente de determinación de la regresión secundaria entre la variable respuesta \(y\) y las variables independientes.

Forma 2. Estadístico de prueba modificado Cook y Weisberg \(X_{n,p}^2\)

El estadístico de prueba \(X_{n,p}^2\) se calcula de la siguiente manera:

\[ X_{n,p}^2 = \frac{SSR}{2 s^2} \]

Donde:

  • \(SSR\) es la suma de cuadrados de la regresión secundaria entre la variable respuesta \(y\) y las variables independientes.
  • \(s^2\) es la estimación de la varianza de los residuos.
  1. Estadístico teórico

La distribución teórica del estadístico de prueba sigue una distribución Chi-Cuadrado con \(p\) grados de libertad (el número de variables explicativas en el modelo):

\[ BP\sim \chi^2_{p-1} \quad \text{y} \quad X_{n,p}^2 \sim \chi^2_{p-1} \]

Hipótesis:

  • Si \(BP > \chi^2_{p-1, \alpha}\), se rechaza \(H_0\), indicando heterocedasticidad.

Donde:

  • \(R^2\) corresponde al coeficiente de determinación de la regresión, siendo \(e_i^2\) la variable respuesta y \(x_i\) las variables regresoras.

El Coeficiente de Determinación \(R^2\) se calcula de manera general de la siguiente forma:

\[ R^2 = \frac{SSR}{SST} = 1 - \frac{SSE}{SST} \]

Forma 2. Estadístico de prueba modificado Cook and Weisberg \(X_{BP}^2\)

El estadístico de prueba \(X_{BP}^2\) se calcula de la siguiente manera:

\[ X_{BP}^2 = \frac{SSR}{2 \left( \frac{SSE}{n} \right)^2} \]

Donde:

  • \(SSR\) corresponde a la suma de cuadrados de la regresión, siendo \(e_i\^2\) la variable respuesta y \(x_i\) la variable regresora.
  • \(SSE\) corresponde a la suma de cuadrados del error, siendo \(y_i\) la variable respuesta y \(x_i\) la variable regresora.

3. Estadístico teórico

Los estadísticos de prueba siguen una distribución Chi-Cuadrado con \(k\) grados de libertad ( \(k\) grados de libertad iguales a la cantidad de variables regresoras), esto es:

\[ BP \sim \chi_{\alpha, k}^2 \] \[ X_{BP}^2 \sim \chi_{\alpha, k}^2 \]

Rechazo \(H_0\) si:

\[ X_{BP}^2 > \chi_{\alpha, k}^2 \] H0: La varianza de los errores es constante (homocedasticidad).

H1: La varianza de los errores no es constante (heterocedasticidad).

plot(fitted(modelo), resid(modelo), main = "Residuales vs. Ajustados", xlab = "Valores Ajustados", ylab = "Residuales")
abline(h = 0, col = "blue", lty = 2)

prueba<-bptest(modelo)
prueba

    studentized Breusch-Pagan test

data:  modelo
BP = 114.28, df = 15, p-value < 2.2e-16
BP <- prueba$statistic
p_value_BP <- prueba$p.value

teorico <- qchisq(0.05, 19, lower.tail = FALSE)

# Comparación estadístico de prueba-teórico
if(BP>teorico){
  print("Existe suficiente evidencia estadística para rechazar H0")} else{
    print("No existe suficiente evidencia estadística para rechazar H0")
  }
[1] "Existe suficiente evidencia estadística para rechazar H0"

El gráfico de dispersión muestra que los residuales no presentan un patrón completamente aleatorio; en particular, se observa un aumento en la dispersión conforme los valores ajustados aumentan. Esto sugiere la presencia de heterocedasticidad, ya que la varianza de los errores parece no ser constante.

Dado el p-valor extremadamente bajo (menor que 0.05), se rechaza la hipótesis nula (𝐻0) de homocedasticidad. Esto confirma la presencia de heterocedasticidad en el modelo.

Para mitigar este problema, se podrían considerar transformaciones de las variables, usar pesos en la regresión ponderada o aplicar un modelo de regresión robusto.

6. Verificación del supuesto de independencia

Verificación gráfica del supuesto de independencia

La graficación de los residuales en orden temporal, de obtención o recolección de datos, en los casos en que estos sean tomados de forma experimental, es útil para detectar correlaciones entre los residuales \(e_i\). Una tendencia identificable en el gráfico de residuales en orden temporal indica una correlación entre ellos. Esto implicaría que el supuesto de independencia de los errores \(e_i\) ha sido violado.

Una forma gráfica de verificar el supuesto de independencia es realizando un gráfico del siguiente tipo:

  • Eje X → secuencia de tiempo desde \(t = 1\) hasta \(t = n\).
  • Eje Y → residuales \(e_i\)

Cuando los términos de error son independientes, esperamos que los residuales en un gráfico de secuencia fluctúen en un patrón más o menos aleatorio alrededor de la línea base.

Verificación formal - analítica supuesto de independencia mediante Test de Durbin - Watson

La verificación formal-analítica del supuesto de independencia se realiza de manera indirecta a través del Test de Durbin-Watson. Esta prueba permite diagnosticar la presencia de correlación (autocorrelación) entre los residuales consecutivos (ordenados en el tiempo), que es una posible manifestación de la falta de independencia. Es importante mencionar que si se ha comprobado la normalidad y se verifica la autocorrelación, implica entonces independencia.

Planteamiento de la hipótesis

Sea \(\rho\) el parámetro que representa la correlación entre residuales consecutivos (ordenados en secuencia temporal), es decir, \(\rho = \text{corr}(e_t, e_{t+1})\). Las hipótesis en la prueba de Durbin-Watson se plantearían de la siguiente manera:

  • \(H_0 : \rho = 0\)
  • \(H_1 : \rho \neq 0\)

Estadístico de prueba \(d_0\) y comparación

El estadístico de prueba \(d_0\) para la prueba de Durbin - Watson se calcula como sigue:

\[ d_0 = \frac{\sum_{t=2}^{T} (e_t - e_{t-1})^2}{\sum_{t=1}^{T} e_t^2} \quad ; \quad \forall \, t = 1, 2, \dots, T \]

donde \(e_t\) corresponde a los residuales en secuencia temporal.

Se compara el estadístico de prueba con límites teóricos \(d_l\) y \(d_u\) usando las reglas expuestas a continuación:

  • Si \(d_0 < d_l\) → Se rechaza \(H_0\)
  • Si \(d_l < d_0 < d_u\) → Prueba no concluyente
  • Si \(d_0 > 4 - d_l\) → No se rechaza \(H_0\)
  • Si \(4 - d_u < d_0 < 4 - d_l\) → Prueba no concluyente
  • Si \(d_0 > 4 - d_l\) → Se rechaza \(H_0\)
Planteamiento de hipótesis

Hipótesis nula \(H_0\): No hay autocorrelación en los errores. \[ H_0: \rho = 0 \]

Hipótesis alternativa \(H_1\): Existe autocorrelación en los errores. \[ H_1: \rho \neq 0 \]

plot(resid(modelo), main = "Residuales en Secuencia", xlab = "Orden", ylab = "Residuales")
abline(h = 0, col = "blue", lty = 6)

durbinWatsonTest(modelo)
 lag Autocorrelation D-W Statistic p-value
   1    -0.001690984      2.002361   0.978
 Alternative hypothesis: rho != 0

El gráfico muestra los residuales en función de su orden, con una distribución visual que parece aleatoria. No se observan patrones claros que indiquen autocorrelación, lo cual es un buen indicador de independencia en los errores. Prueba de Durbin-Watson:

El estadístico de Durbin-Watson es 1.997817, muy cercano a 2, lo cual sugiere que no hay evidencia de autocorrelación en los errores.

El p-valor de 0.954 respalda esta conclusión, ya que es mucho mayor que el umbral de significancia común de 0.05. Por lo tanto, no se rechaza la hipótesis nula de independencia de los errores.

7. Diagnóstico de multicolinealidad

Un método formal para detectar la presencia de multicolinealidad es el uso de Factores de Inflación de la Varianza \((VIF)\). Estos factores miden cuánto aumentan las varianzas de los coeficientes de regresión estimados en comparación con cuando las variables predictoras no están correlacionadas linealmente.

vif(modelo)
                    GVIF Df GVIF^(1/(2*Df))
area            1.010063  1        1.005019
cuartos         1.026761  1        1.013292
banos           1.013756  1        1.006855
fecha_cons      1.011013  1        1.005492
area_lote       1.009249  1        1.004614
garage          1.019016  1        1.009463
calidad_vecinos 1.042204  9        1.002299

Todos los valores de VIF están muy cerca de 1, lo que indica una colinealidad mínima entre las variables predictoras. No hay evidencia de problemas de multicolinealidad significativos en el modelo, por lo que los coeficientes no deberían estar inflados ni distorsionados debido a la correlación entre predictores. El modelo es estable desde el punto de vista de la multicolinealidad, lo que implica que las estimaciones de los coeficientes son confiables.

8. Selección del modelo

stepAIC(modelo, direction = "both")
Start:  AIC=73874.31
precio ~ area + cuartos + banos + fecha_cons + area_lote + garage + 
    calidad_vecinos

                  Df  Sum of Sq        RSS   AIC
- calidad_vecinos  9 1.1955e+33 1.1850e+35 73866
- area_lote        1 1.6074e+30 1.1730e+35 73872
- fecha_cons       1 1.8278e+31 1.1732e+35 73872
- garage           1 1.3325e+32 1.1744e+35 73873
- cuartos          1 1.8671e+32 1.1749e+35 73874
<none>                          1.1730e+35 73874
- banos            1 3.0056e+32 1.1760e+35 73875
- area             1 9.4566e+33 1.2676e+35 73950

Step:  AIC=73866.45
precio ~ area + cuartos + banos + fecha_cons + area_lote + garage

                  Df  Sum of Sq        RSS   AIC
- area_lote        1 3.7132e+30 1.1850e+35 73864
- fecha_cons       1 1.4741e+31 1.1851e+35 73865
- garage           1 1.3293e+32 1.1863e+35 73866
- cuartos          1 2.1785e+32 1.1872e+35 73866
<none>                          1.1850e+35 73866
- banos            1 3.4416e+32 1.1884e+35 73867
+ calidad_vecinos  9 1.1955e+33 1.1730e+35 73874
- area             1 9.7445e+33 1.2824e+35 73943

Step:  AIC=73864.48
precio ~ area + cuartos + banos + fecha_cons + garage

                  Df  Sum of Sq        RSS   AIC
- fecha_cons       1 1.4594e+31 1.1852e+35 73863
- garage           1 1.3235e+32 1.1863e+35 73864
- cuartos          1 2.2035e+32 1.1872e+35 73864
<none>                          1.1850e+35 73864
- banos            1 3.4610e+32 1.1885e+35 73865
+ area_lote        1 3.7132e+30 1.1850e+35 73866
+ calidad_vecinos  9 1.1976e+33 1.1730e+35 73872
- area             1 9.7428e+33 1.2824e+35 73941

Step:  AIC=73862.6
precio ~ area + cuartos + banos + garage

                  Df  Sum of Sq        RSS   AIC
- garage           1 1.3044e+32 1.1865e+35 73862
- cuartos          1 2.2195e+32 1.1874e+35 73862
<none>                          1.1852e+35 73863
- banos            1 3.4329e+32 1.1886e+35 73863
+ fecha_cons       1 1.4594e+31 1.1850e+35 73864
+ area_lote        1 3.5658e+30 1.1851e+35 73865
+ calidad_vecinos  9 1.1940e+33 1.1732e+35 73870
- area             1 9.7652e+33 1.2828e+35 73940

Step:  AIC=73861.7
precio ~ area + cuartos + banos

                  Df  Sum of Sq        RSS   AIC
- cuartos          1 1.8708e+32 1.1883e+35 73861
<none>                          1.1865e+35 73862
+ garage           1 1.3044e+32 1.1852e+35 73863
- banos            1 3.5351e+32 1.1900e+35 73863
+ fecha_cons       1 1.2686e+31 1.1863e+35 73864
+ area_lote        1 3.0099e+30 1.1864e+35 73864
+ calidad_vecinos  9 1.1939e+33 1.1745e+35 73870
- area             1 9.6959e+33 1.2834e+35 73938

Step:  AIC=73861.28
precio ~ area + banos

                  Df  Sum of Sq        RSS   AIC
<none>                          1.1883e+35 73861
+ cuartos          1 1.8708e+32 1.1865e+35 73862
- banos            1 3.4270e+32 1.1918e+35 73862
+ garage           1 9.5565e+31 1.1874e+35 73862
+ fecha_cons       1 1.4326e+31 1.1882e+35 73863
+ area_lote        1 5.1936e+30 1.1883e+35 73863
+ calidad_vecinos  9 1.2238e+33 1.1761e+35 73869
- area             1 9.5984e+33 1.2843e+35 73937

Call:
lm(formula = precio ~ area + banos, data = datos)

Coefficients:
(Intercept)         area        banos  
  1.639e+16   -2.470e+12    7.143e+14  
modelo_reducido <- lm(precio ~ area + cuartos + banos, data = datos)
AIC(modelo, modelo_reducido)
                df      AIC
modelo          17 76714.19
modelo_reducido  5 76701.58
BIC(modelo, modelo_reducido)
                df      BIC
modelo          17 76797.62
modelo_reducido  5 76726.12
summary(modelo_reducido)$adj.r.squared
[1] 0.07676827
cp_mallows <- ols_mallows_cp(modelo_reducido, modelo)
print(cp_mallows)
[1] 3.276207
resultados_todos <- ols_step_all_possible(modelo)
cp_todos <- resultados_todos$result[, "cp"]
print(cp_todos)
  [1]  3.720222 88.368703 81.362225 84.607529 84.843775 85.020263 85.277828
  [8] 11.092768  2.845501  4.241647  4.838764  5.624346  5.658590 86.833936
 [15] 89.865206 89.895382 90.056496 90.348964 82.610810 82.986299 83.055735
 [22] 83.350104 86.029155 86.358669 86.564107 86.597595 86.840712 87.016573
 [29] 10.579250 11.846001 12.193760 12.975011 13.062482  3.276207  4.043845
 [36]  4.725329  4.801935  5.061713  6.157992  6.201423  6.727847  6.768791
 [43]  7.561219 88.271918 88.423324 88.469720 88.801688 91.265665 91.562239
 [50] 91.563976 91.836664 91.879073 92.038662 84.098281 84.318803 84.589479
 [57] 84.662418 84.976333 85.044794 87.761723 88.020907 88.349803 88.561644
 [64] 11.261032 11.756732 12.433195 12.559863 12.668833 13.739555 13.828761
 [71] 14.058521 14.156619 14.943317  4.182020  5.169790  5.250958  5.908055
 [78]  5.993317  6.680428  6.962904  7.015691  8.116560  8.656084 89.737531
 [85] 89.919792 90.038532 90.227816 90.395323 90.440012 92.942562 93.240703
 [92] 93.537796 93.547783 85.787727 86.079416 86.299107 86.653593 89.754505
 [99] 12.165739 13.127555 13.252052 13.592597 13.731879 14.412607 14.544482
[106] 14.646940 15.721250 16.019635  6.059600  6.152109  7.143515  7.855926
[113]  8.915437 91.363576 91.697808 91.878753 92.013059 94.919944 87.770486
[120] 14.013484 14.153327 15.117748 15.566236 16.521252  8.028452 93.326930
[127] 16.000000

El proceso de selección comenzó con el modelo completo y fue reduciendo las variables paso a paso para minimizar el AIC y BIC.

El modelo completo incluyó todas las variables y presentó un AIC de 73877.11 y un BIC de 76820.05.

La selección de variables paso a paso condujo a un modelo reducido con solo las variables area y banos, que arrojó un AIC de 73861.28 y un BIC de 76742.72, indicando una mejor parsimonia.

El R-cuadrado ajustado del modelo reducido es de aproximadamente 0.0778, lo que indica que este modelo explica alrededor del 7.78% de la variabilidad en el precio de las casas, ajustado por el número de predictores. Este valor es similar al del modelo completo, lo que sugiere que la simplificación del modelo no ha afectado significativamente el poder explicativo.

El Cp de Mallows del modelo reducido es de aproximadamente 6.30, lo cual está cerca del número de predictores en el modelo (incluyendo la constante). Un valor de Cp cercano al número de predictores indica que el modelo es adecuado, sin sesgo significativo y con varianza mínima.

El modelo reducido es preferible al modelo completo según los valores de AIC y BIC, lo que implica que las variables eliminadas (garage, calidad_vecinos, cuartos, area_lote, y fecha_cons) no contribuyen de manera significativa a la predicción del precio.

El modelo final quedó compuesto por area y banos, que mostraron ser los predictores más relevantes.

Referencias

  • Informe_final.xlsx. (s. f.). https://upbeduco-my.sharepoint.com/:x:/g/personal/delio_salgado_upb_edu_co/ESxJD6Ql0gFJmmw0ikwYUUMBNd2Bcp7lr3sjBxitfTM_RA?e=WmDRlN

  • Carmona, F. (s. f.). Bootstrap. https://www.ub.edu/cursosR/files/bootstrap.html

  • RPubs - Modelo_regresion_lineal_simple_2024_2. (s. f.). https://rpubs.com/deliosalgado/1206815

  • RPubs - Inferencias_b0_b1_MRLS_2024_2. (s. f.). https://rpubs.com/deliosalgado/1212111

  • RPubs - Medidas descriptivas_relacion_lineal_MRST_2024_2. (s. f.). https://rpubs.com/deliosalgado/1213965

  • RPUBs - Normalidad_MRST_2024_2. (s. f.). https://rpubs.com/deliosalgado/1214563

  • RPUBS - RLM_Modelo_MRST_2024_2. (s. f.). https://rpubs.com/deliosalgado/1226887

  • RPUBs - Multicolinealidad_VIF_MRST_2024_2. (s. f.). https://rpubs.com/deliosalgado/1236460

  • RPubs - Seleccion_modelo_MRLM_2024_2. (s. f.). https://rpubs.com/deliosalgado/1238469