library(wooldridge)
## Warning: package 'wooldridge' was built under R version 4.5.3
data(hprice1)
head(force(hprice1), n = 5)
##   price assess bdrms lotsize sqrft colonial   lprice  lassess llotsize   lsqrft
## 1   300  349.1     4    6126  2438        1 5.703783 5.855359 8.720297 7.798934
## 2   370  351.5     3    9903  2076        1 5.913503 5.862210 9.200593 7.638198
## 3   191  217.7     3    5200  1374        0 5.252274 5.383118 8.556414 7.225482
## 4   195  231.8     3    4600  1448        1 5.273000 5.445875 8.433811 7.277938
## 5   373  319.1     4    6095  2514        1 5.921578 5.765504 8.715224 7.829630

Estimaciòn del Modelo

library(wooldridge)
data(hprice1)

modelo <- lm(price ~ lotsize + sqrft + bdrms, data = hprice1)

summary(modelo)
## 
## Call:
## lm(formula = price ~ lotsize + sqrft + bdrms, data = hprice1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -120.026  -38.530   -6.555   32.323  209.376 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.177e+01  2.948e+01  -0.739  0.46221    
## lotsize      2.068e-03  6.421e-04   3.220  0.00182 ** 
## sqrft        1.228e-01  1.324e-02   9.275 1.66e-14 ***
## bdrms        1.385e+01  9.010e+00   1.537  0.12795    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 59.83 on 84 degrees of freedom
## Multiple R-squared:  0.6724, Adjusted R-squared:  0.6607 
## F-statistic: 57.46 on 3 and 84 DF,  p-value: < 2.2e-16

2. Verifique si los residuos del modelo son independientes entre sí (no autocorrelación), a través de:

Prueba de Durbin Watson.

library(lmtest)
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
dwtest(modelo, alternative = "two.sided", iterations = 1000)
## 
##  Durbin-Watson test
## 
## data:  modelo
## DW = 2.1098, p-value = 0.6218
## alternative hypothesis: true autocorrelation is not 0

Usando “Car”

library(car)
## Cargando paquete requerido: carData
durbinWatsonTest(modelo, simulate = TRUE, reps = 1000)
##  lag Autocorrelation D-W Statistic p-value
##    1     -0.05900522      2.109796   0.584
##  Alternative hypothesis: rho != 0

El estadístico de Durbin-Watson es 2.1098, valor cercano a 2, y el p-value es 0.6218, el cual es mayor que 0.05. Por lo tanto, no se rechaza la hipótesis nula de no autocorrelación, concluyendo que no existe evidencia de autocorrelación de primer orden en los residuos del modelo.

Prueba del Multiplicador de Lagrange (verifique autocorrelación de primer y segundo orden)

Autocorrelaciòn de Orden Superior (orden “M”)

library(dplyr)
library(tidyr)
library(stargazer)
library(kableExtra)
data(hprice1)
data_prueba_BG <- hprice1 %>%
  mutate(
    resid = residuals(modelo),
    Lag_1 = lag(resid, 1),
    Lag_2 = lag(resid, 2)
  ) %>%
  replace_na(list(Lag_1 = 0, Lag_2 = 0))

kable(head(data_prueba_BG %>%
  select(price, lotsize, sqrft, bdrms, resid, Lag_1, Lag_2), 6))
price lotsize sqrft bdrms resid Lag_1 Lag_2
300.000 6126 2438 4 -45.639765 0.000000 0.000000
370.000 9903 2076 3 74.848732 -45.639765 0.000000
191.000 5200 1374 3 -8.236558 74.848732 -45.639765
195.000 4600 1448 3 -12.081520 -8.236558 74.848732
373.000 6095 2514 4 18.093192 -12.081520 -8.236558
466.275 8566 2754 5 62.939597 18.093192 -12.081520
reg_aux_BG <- lm(resid ~ lotsize + sqrft + bdrms + Lag_1 + Lag_2,
                 data = data_prueba_BG)

resumen_BG <- summary(reg_aux_BG)
n <- nrow(hprice1)
gl <- 2
R2_BG <- resumen_BG$r.squared
LM_BG <- n * R2_BG
VC <- qchisq(p = 0.05, lower.tail = FALSE, df = gl)
p_value_BG <- pchisq(q = LM_BG, lower.tail = FALSE, df = gl)
salida_BG <- c(LM_BG, VC, p_value_BG)
names(salida_BG) <- c("LM BG", "Valor Crítico", "Valor P")

stargazer(salida_BG, title = "Prueba de Breusch-Godfrey", type = "html", digits = 6)
Prueba de Breusch-Godfrey
LM BG Valor Crítico Valor P
3.033403 5.991465 0.219435

El estadístico LM es 3.033403, el cual es menor que el valor crítico de 5.991465, y el p-value es 0.219435, mayor que 0.05. En consecuencia, no se rechaza la hipótesis nula de no autocorrelación, indicando que no existe evidencia de autocorrelación de orden superior (hasta orden 2) en los residuos del modelo.

Usando “lmtest”

library(lmtest)
bgtest(modelo,order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo
## LM test = 3.0334, df = 2, p-value = 0.2194

La prueba de Breusch-Godfrey arroja un p-value de 0.2194, mayor que 0.05, por lo que no se rechaza la hipótesis nula de no autocorrelación, confirmando que no existe autocorrelación de orden 2 en los residuos.