1. Generar Dataframe

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

2. Estimación del modelo de regresión

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")
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

3. Ajuste de los Residuos a una Distribución Normal

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

4. Prueba de Normalidad Jarque-Bera (\(JB\))

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)))

5. Prueba de Normalidad Kolmogoróv-Smirnov (\(KS\)), con corrección de Lilliefors

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.

6. Prueba de Normalidad Shapiro-Wilk (\(SW\))

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.

7. Conclusión

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.