Función para determinar la normalidad en los residuos

Importación de datos (generar la variable de residuos)

library(readxl)
library(stargazer)

ejemploregresion <-
read_excel("C:/Users/Abigail/Desktop/econometria/ejercicios_de_clase/normalidad/ejemploregresion.xlsx")

#Corriendo el modelo de regresión
regresion <- lm(fomula = Y ~ X1 + X2, data = ejemploregresion)

stargazer(regresion, title = "Modelo estimado", type = "html")
Modelo estimado
Dependent variable:
NA
X2 0.001***
(0.0001)
Y 1.910***
(0.447)
Constant -3.031***
(0.727)
Observations 25
R2 0.937
Adjusted R2 0.932
Residual Std. Error 0.151 (df = 22)
F Statistic 164.631*** (df = 2; 22)
Note: p<0.1; p<0.05; p<0.01

Creación de la formula

#Conocer el tamaño de muestra para saber que prueba aplicar
formula_normalidad <- function(muestra, alpha) {
Tamano_muestra <- muestra

#Si la muestra es grande  
  if (Tamano_muestra > 50) {
  library(nortest)
  Prueba_KS = lillie.test(regresion$residuals)
  
  pvalue = Prueba_KS$p.value
  significancia = alpha
  rechazo = if (pvalue <= alpha) {
                rechazo = "Rechazar Ho" }
            if (pvalue > alpha) {
                rechazo = "NO Rechazar Ho" }
  
  soluciones <- c(pvalue, significancia, rechazo)
  names(soluciones) <- c("p-value", "significancia", "Conclusion")
  }
  
#Si la muestra es pequeña
  if (Tamano_muestra <= 50) {
  Prueba_Sw = shapiro.test(regresion$residuals)
  
  pvalue = Prueba_Sw$p.value
  significancia = alpha
  rechazo = if (pvalue <= alpha) {
            rechazo = "Rechazar Ho" }
            if (pvalue > alpha) {
            rechazo = "NO Rechazar Ho" }
  
  soluciones <- c(pvalue, significancia, rechazo)
  names(soluciones) <- c("p-value", "significancia", "Conclusion")
  }
  return(soluciones)
}

Ejemplo

formula_normalidad(muestra = 25, alpha = 0.05)
##             p-value       significancia          Conclusion 
## "0.562707227417497"              "0.05"    "NO Rechazar Ho"
#En muestra tambien puede ponerse: nrow(model.matrix(regresion)) para obtener el tamaño de muestra

Comprobación

En el caso que se aplique alguna de las dos formulas:

#Prueba KS
library(nortest)
Prueba_KS_Comp <- lillie.test(regresion$residuals)
print(Prueba_KS_Comp)
Lilliefors (Kolmogorov-Smirnov) normality test

data: regresion$residuals D = 0.089675, p-value = 0.8701

#Prueba SW
options(scipen = 999)
Prueba_Sw <- shapiro.test(regresion$residuals)
print(Prueba_Sw)
## 
##  Shapiro-Wilk normality test
## 
## data:  regresion$residuals
## W = 0.96669, p-value = 0.5627