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
El modelo de regresión a estimar es el siguiente: \(\text{price} = \hat{a} + \hat{a}_1(\text{lotsize}) + \hat{a}_2(\text{sqrft}) + \hat{a_3}(\text{bdrms})\)
# Estimación del Modelo de Regresión
modelo <- lm(price ~ lotsize + sqrft + bdrms, data = hprice1)
stargazer(modelo, type = "html", out = "modelo.html", title = "Resultados del Modelo de Regresion")
| Dependent variable: | |
| price | |
| lotsize | 0.002*** |
| (0.001) | |
| sqrft | 0.123*** |
| (0.013) | |
| bdrms | 13.853 |
| (9.010) | |
| Constant | -21.770 |
| (29.475) | |
| Observations | 88 |
| R2 | 0.672 |
| Adjusted R2 | 0.661 |
| Residual Std. Error | 59.833 (df = 84) |
| F Statistic | 57.460*** (df = 3; 84) |
| Note: | p<0.1; p<0.05; p<0.01 |
Para verificar el ajuste de los residuos a una distribución normal,
se utilizará la función fitdist de la libreria
fitdistrplus.
# Obtener los residuos del modelo
dist_normal <- fitdist(data = modelo$residuals, distr = "norm")
# Mostrar graficamente la distribución de los residuos a través de un histograma, el Q-Q plot y el P-P plot
plot(dist_normal)
A simple inspección, a través del histograma y el Q-Q plot se
puede observar que los residuos siguen una distribución normal. Se
confirmara formalmente a través de tres pruebas de normalidad:
Jarque-Bera, Kolgomoróv-Smirnov y
Shapiro-Wilk.
summary(dist_normal)
## Fitting of the distribution ' norm ' by maximum likelihood
## Parameters :
## estimate Std. Error
## mean -0.000000000000002321494 6.231625
## sd 58.457813569303191059134 4.406424
## Loglikelihood: -482.8775 AIC: 969.7549 BIC: 974.7096
## Correlation matrix:
## mean sd
## mean 1 0
## sd 0 1
La prueba de normalidad de Jarque-Bera se basa en el cálculo de la
asimetría y la curtosis de los residuos. La hipótesis nula (\(H_0\)) establece que los residuos siguen
una distribución normal. Para realizar está prueba, se utilizará la
función jarque.bera.test de la librería
tseries.
# Prueba de normalidad de Jarque-Bera
jb_test <- jarque.bera.test(modelo$residuals)
jb_test
##
## Jarque Bera Test
##
## data: modelo$residuals
## X-squared = 32.278, df = 2, p-value = 0.00000009794
La regla de decisión para esta prueba es la siguiente:
Rechazar \(H_0\) si \(p\leq\alpha\).
Como \(p=0.00000009794\leq\alpha=0.05\), se
rechaza \(H_0\). Los residuos NO siguen
una distribución normal.
El estadístico \(JB\) sigue asintóticamente una distribución
Chi-cuadrado (\(\chi^2\)) con dos
grados de libertad (uno por la asimetría y otro por la curtosis),
gráficamente se puede observar de la siguiente manera:
# Graficar la distribución de Chi-cuadrado con 2 grados de libertad
alpha <- 0.05
JB <- jb_test$statistic
gl <- jb_test$parameter
VC <- qchisq(1-alpha, gl, lower.tail = TRUE)
shadeDist(JB, ddist = "dchisq",
parm1 = gl,
lower.tail = FALSE, xmin = 0,
sub=paste("Valor critico:", round(VC,2),"","JB", round(JB,2)))
La prueba de normalidad de Kolmogoróv-Smirnov se basa en la
comparación entre la función de distribución acumulada empírica de los
residuos y la función de distribución acumulada teórica de una
distribución normal. La hipótesis nula (\(H_0\)) establece que los residuos siguen
una distribución normal (\(H_0:\epsilon\sim
N(0,\sigma^2_{\epsilon})\)). Para realizar esta prueba se
utilizará la función lillie.test de la librería
nortest.
# Prueba de normalidad de Kolmogoróv-Smirnov con corrección de Lilliefors
ks_test <- lillie.test(modelo$residuals)
ks_test
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo$residuals
## D = 0.075439, p-value = 0.2496
La regla de decisión para esta prueba es la siguiente:
Rechazar \(H_0\) si \(p\leq\alpha\).
En este
caso, como \(p=0.2496\geq\alpha=0.05\),
no se rechaza \(H_0\). Los residuos
siguen una distribución normal.
Se presenta una contradicción con
la prueba de Jarque-Bera.
La prueba de normalidad de Shapiro-Wilk se basa en la comparación
entre los residuos del modelo y los valores teóricos que deberían tener
si vinieran de una distribución normal perfecta. La hipótesis nula
(\(H_0\)) establece que los residuos
siguen una distribución normal (\(H_0:\epsilon\sim
N(0,\sigma^2_{\epsilon})\)). Para realizar esta prueba se
utilizará la función shapiro.test de la librería
stats.
# Prueba de normalidad de Shapiro-Wilk
sw_test <- shapiro.test(modelo$residuals)
sw_test
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 0.94132, p-value = 0.0005937
La regla de decisión para esta prueba es la siguiente:
Rechazar \(H_0\) si \(p\leq\alpha\).
En este
caso, como \(p=0.0005937\leq\alpha=0.05\), se rechaza
\(H_0\). Los residuos NO siguen una
distribución normal.
Se presenta una contradicción con la prueba
de Kolmogoróv-Smirnov, pero el resultado converge con la prueba de
Jarque-Bera.
En conclusión, a pesar de que la prueba de Kolmogoróv-Smirnov arroja resultados divergentes con las pruebas de Jarque-Bera y Shapiro-Wilk, prima el resultado de la prueba Shapiro-Wilk, por su potencia estadística, que además es un resultado con respaldo de la prueba de Jarque-Bera. Los residuos de este modelo lineal NO siguen una distribución normal.