library(wooldridge)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lmtest)
## Cargando paquete requerido: zoo
## 
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(car)
## Cargando paquete requerido: carData
library(olsrr)
## 
## Adjuntando el paquete: 'olsrr'
## The following object is masked from 'package:wooldridge':
## 
##     cement
## The following object is masked from 'package:datasets':
## 
##     rivers
datos_parcial <- wooldridge::hprice2
modelo <- lm(log(price) ~ log(nox) + log(dist) + rooms + stratio,
             data = datos_parcial)
summary(modelo)
## 
## Call:
## lm(formula = log(price) ~ log(nox) + log(dist) + rooms + stratio, 
##     data = datos_parcial)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.05890 -0.12427  0.02128  0.12882  1.32531 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 11.083861   0.318111  34.843  < 2e-16 ***
## log(nox)    -0.953539   0.116742  -8.168 2.57e-15 ***
## log(dist)   -0.134339   0.043103  -3.117  0.00193 ** 
## rooms        0.254527   0.018530  13.736  < 2e-16 ***
## stratio     -0.052451   0.005897  -8.894  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.265 on 501 degrees of freedom
## Multiple R-squared:  0.584,  Adjusted R-squared:  0.5807 
## F-statistic: 175.9 on 4 and 501 DF,  p-value: < 2.2e-16

El coeficiente de determinación R^2=0.584 indica que el 58.4% de la variabilidad del precio de las viviendas es explicada por las variables independientes incluidas en el modelo. El R^ajusrado de 0.5807 confirma un ajuste aceptable

residuos <- residuals(modelo)
jarque.bera.test(residuos)
## 
##  Jarque Bera Test
## 
## data:  residuos
## X-squared = 480.14, df = 2, p-value < 2.2e-16

Estadístico JB = 480.14 p-value < 2.2e-16 Como el p-value es menor a 0.05, se rechaza la hipótesis nula de normalidad. Por tanto, existe evidencia estadística de que los residuos no siguen una distribución normal

ks.test(residuos,
        "pnorm",
        mean(residuos),
        sd(residuos))
## 
##  Asymptotic one-sample Kolmogorov-Smirnov test
## 
## data:  residuos
## D = 0.082888, p-value = 0.001912
## alternative hypothesis: two-sided

Como el p-value es menor a 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística de que los residuos no siguen una distribución normal. La prueba KS confirma el resultado obtenido en la prueba Jarque-Bera, indicando incumplimiento del supuesto de normalidad.

shapiro.test(residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos
## W = 0.91733, p-value = 5.123e-16

Como el p-valor es menor a 0.05, se rechaza la hipótesis nula de normalidad. Por lo tanto, existe evidencia estadística suficiente para concluir que los residuos no siguen una distribución normal. La prueba Shapiro-Wilk coincide con las pruebas Jarque-Bera y Kolmogorov-Smirnov, confirmando que el supuesto de normalidad no se cumple en el modelo.

vif(modelo)
##  log(nox) log(dist)     rooms   stratio 
##  3.975625  3.888603  1.218893  1.173037

Todos los valores son menores a 10, por lo que no existe evidencia de multicolinealidad severa entre los regresores del modelo. Además, los valores cercanos a 1 en las variables rooms y stratio indican muy baja correlación lineal con las demás variables explicativas.

ols_eigen_cindex(modelo)
##    Eigenvalue Condition Index    intercept     log(nox)  log(dist)        rooms
## 1 4.809944153        1.000000 5.902249e-05 1.470187e-04 0.00165221 0.0004323598
## 2 0.167087373        5.365352 1.628759e-04 3.282579e-03 0.20205044 0.0002769576
## 3 0.015707918       17.498898 1.410708e-04 2.790183e-05 0.03094985 0.3380194089
## 4 0.006253606       27.733505 9.830919e-03 2.370110e-01 0.17474479 0.3827047264
## 5 0.001006949       69.114031 9.898061e-01 7.595315e-01 0.59060270 0.2785665473
##        stratio
## 1 0.0004907696
## 2 0.0034330618
## 3 0.3397852676
## 4 0.4996029087
## 5 0.1566879923

CI=69.11 Como el índice de condición supera ampliamente el valor crítico de 30, existe evidencia de multicolinealidad severa en el modelo. Además, las variables log(nox) y log(dist) presentan proporciones elevadas de varianza en los componentes asociados a índices altos, lo que sugiere que dichas variables están altamente relacionadas linealmente. Sin embargo, aunque existe evidencia de colinealidad según el índice de condición, los valores VIF obtenidos anteriormente no superan 10, por lo que la multicolinealidad no parece afectar gravemente la estabilidad global del modelo.

cor(datos_parcial[,c("nox","dist","rooms","stratio")])
##                nox       dist      rooms    stratio
## nox      1.0000000 -0.7702225 -0.3028280  0.1868634
## dist    -0.7702225  1.0000000  0.2054095 -0.2292694
## rooms   -0.3028280  0.2054095  1.0000000 -0.3540075
## stratio  0.1868634 -0.2292694 -0.3540075  1.0000000

La correlación entre nox y dist es de −0.7702, indicando una relación negativa relativamente alta. La correlación entre rooms y stratio es de −0.3540, mostrando una relación negativa moderada. Las demás correlaciones presentan magnitudes bajas o moderadas.

bptest(modelo)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 69.871, df = 4, p-value = 2.417e-14
bptest(modelo,
       ~ fitted(modelo) + I(fitted(modelo)^2))
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo
## BP = 62.269, df = 2, p-value = 3.009e-14

Ambas pruebas indican incumplimiento del supuesto de homocedasticidad, ya que los errores presentan varianza no constante. Esto implica que los estimadores MCO siguen siendo insesgados, pero dejan de ser eficientes y las inferencias estadísticas podrían verse afectadas.

bgtest(modelo, order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelo
## LM test = 220.04, df = 1, p-value < 2.2e-16
bgtest(modelo, order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo
## LM test = 227.03, df = 2, p-value < 2.2e-16

Como el p-value es menor a 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística de autocorrelación de primer orden en los residuos del modelo. Como el p-value es menor a 0.05, se rechaza la hipótesis nula. Por lo tanto, existe evidencia estadística de autocorrelación de segundo orden.

hist(residuos,
     main = "Histograma de residuos",
     col = "skyblue")

qqnorm(residuos)
qqline(residuos, col = "red")

plot(fitted(modelo), residuos)
abline(h = 0, col = "red")