Carga de datos

library(wooldridge) #Más específicamente, la función library(wooldridge) carga la librería "wooldridge" en la sesión actual de R, lo que permite que las funciones y datos contenidos en esa librería estén disponibles para su uso
## Warning: package 'wooldridge' was built under R version 4.2.3
data(hprice1)#La función data(hprice1) carga el conjunto de datos "hprice1" en la sesión de R
head(force(hprice1),n=5) #Finalmente, la función head(force(hprice1), n = 5) muestra las primeras cinco filas de los datos "hprice1"
##   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

modelo_estimado<-lm(formula = price~lotsize+sqrft+bdrms,data = hprice1) #Más específicamente, el comando lm(formula = price~lotsize+sqrft+bdrms,data = hprice1) ajusta un modelo de regresión lineal múltiple en R, donde la variable de respuesta es "price" y las variables predictoras son "lotsize", "sqrft" y "bdrms". El resultado del modelo se guarda en el objeto "modelo_estimado"
library(stargazer) #La función library(stargazer) carga la librería "stargazer" en la sesión actual de R, lo que permite que la función "stargazer()" esté disponible para su uso
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
stargazer(modelo_estimado,title = "Modelo Estimado",type = "text") #La función stargazer(modelo_estimado, title = "Modelo Estimado", type = "text") muestra la salida del modelo de regresión ajustado utilizando la función "stargazer()" en formato de tabla
## 
## Modelo Estimado
## ===============================================
##                         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
library(fitdistrplus) #la función library(fitdistrplus) carga la librería "fitdistrplus" en la sesión actual de R, lo que permite que las funciones contenidas en esa librería estén disponibles para su uso
fit_normal<-fitdist(data = modelo_estimado$residuals,distr = "norm") #ajusta una distribución normal a los residuos del modelo de regresión lineal múltiple almacenados en el objeto "modelo_estimado". La función "fitdist()" es una función de la librería "fitdistrplus" que ajusta diferentes distribuciones de probabilidad a un vector de datos y devuelve un objeto que contiene los parámetros estimados de la distribución ajustada
plot(fit_normal) #muestra una visualización de los resultados del ajuste de la distribución normal a los residuos utilizando la función "plot()" de R. El argumento "fit_normal" indica que se debe mostrar la gráfica correspondiente al objeto que contiene los resultados del ajuste de la distribución normal a los residuos

summary(fit_normal) # incluirá estadísticas como el valor del logaritmo de verosimilitud negativa (log-likelihood), los parámetros estimados de la distribución normal (media y desviación estándar), los errores estándar y los valores p de los parámetros estimados, y una prueba de bondad de ajuste para evaluar qué tan bien se ajusta la distribución normal a los datos de los residuos del modelo
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##          estimate Std. Error
## mean 9.992007e-16   6.231624
## sd   5.845781e+01   4.406424
## Loglikelihood:  -482.8775   AIC:  969.7549   BIC:  974.7096 
## Correlation matrix:
##      mean sd
## mean    1  0
## sd      0  1

Verificando supuestos de normalidad Prueba de Jarque Bera Usando tseries

library(tseries) #La función library(tseries) carga la librería "tseries" en la sesión actual de R, lo que permite que la función jarque.bera.test() esté disponible para su uso
## Warning: package 'tseries' was built under R version 4.2.3
prueba_JB<-jarque.bera.test(modelo_estimado$residuals) #realiza una prueba de bondad de ajuste de Jarque-Bera sobre los residuos del modelo de regresión lineal múltiple almacenados en el objeto "modelo_estimado". La prueba de Jarque-Bera es una prueba de normalidad que se basa en la asimetría y la curtosis de los datos
prueba_JB #La salida del comando prueba_JB incluirá la estadística de prueba de Jarque-Bera, su valor p y un indicador de si se rechaza o no la hipótesis nula de normalidad de los residuos del modelo
## 
##  Jarque Bera Test
## 
## data:  modelo_estimado$residuals
## X-squared = 32.278, df = 2, p-value = 9.794e-08
library(fastGraph) #El comando library(fastGraph) carga la librería "fastGraph" en la sesión actual de R, lo que permite que las funciones contenidas en esa librería estén disponibles para su uso
alpha_sig<-0.05 #El código define el nivel de significancia alpha_sig como 0.05. A continuación, se extraen la estadística de prueba y los grados de libertad del objeto "prueba_JB" creado anteriormente
JB<-prueba_JB$statistic
gl<-prueba_JB$parameter
Valor_Critico<-qchisq(1-alpha_sig,gl,lower.tail = TRUE) #El siguiente comando qchisq(1-alpha_sig, gl, lower.tail = TRUE) calcula el valor crítico de la distribución chi-cuadrado con los grados de libertad gl correspondientes y nivel de significancia alpha_sig
shadeDist(JB,ddist = "dchisq", # La función "shadeDist()" se utiliza para sombrear áreas debajo o sobre una distribución, en este caso, debajo de la distribución chi-cuadrado
          parm1=gl,
          lower.tail = FALSE,xmin=0,
          sub=paste("Valor Critico:",round(Valor_Critico,2),"","JB:",round(JB,2))) #la distribución que se utilizará (ddist = "dchisq"), los parámetros de la distribución chi-cuadrado (parm1=gl), el nivel de cola a la derecha (lower.tail = FALSE), el valor mínimo de x a partir del cual se sombreará la distribución (xmin=0), y un título que muestra el valor crítico y la estadística de prueba de Jarque-Bera

como el JB se encuentra en la zona del nivel de significancia se procede a rechazar la hipotesis nula

Prueba de Kolmogorov Smirnov - Lilliefors Calculo Manual

library(dplyr) #Carga la libreria de dplyr para manipulación de datos
library(gt) #Carga la libreria de gt para crear tablas de datos 
library(gtExtras)#Carga la libreria de gtExtras para agregar funcionalidades a las tablas creadas con gt
Residuos<-modelo_estimado$residuals #Crea un vector con los residuos del modelo estimado
Residuos %>% #Utiliza el operador %>% para encadenar las operaciones siguientes al vector residuos
  as_tibble() %>% #Convierte el vector residuos en un tibble(tabla) de una columna
  mutate(posicion=row_number()) %>% #Agrega una columna llamada "posicion" con el número de fila 
  arrange(value) %>% #Ordena la tabla por los valores de residuos en orden ascendente 
  mutate(dist1=row_number()/n()) %>% #Agrega una columna "dist1" con los percentiles según su posición en la tabla (usando la función row_number() y  n() para obtener el número de filas)
  mutate(dist2=(row_number()-1)/n()) %>% # Agrega una columna "dist2" con sus percentiles según su posición en la tabla, pero ajustando en una unidad para evitar problemas con los extremos de la distribución
  mutate(zi=as.vector(scale(value,center=TRUE))) %>% #Agrega una columna "zi" con los valores de residuos escalados para tener media cero y varianza uno  
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>% #Agrega una columna "pi" con los valores de la función de distribución acumulada (CDF) de una distribución normal estandar evaluada en los valores zi
  mutate(dif1=abs(dist1-1)) %>% #Agrega una columna "dif1" con las diferencia absolutas entre los percentiles según la posición y los valores pi
  mutate(dif2=abs(dist2-1)) %>% #Agrega una columna "dif2" con la diferencia absoluta de percentiles ajustados según la posición y los valores pi
  rename(Residuos=value)->Tabla_KolmogorovSmirnov #Renombra la columna "value" como "Residuos" y asigna la tabla resultante a la variable Tabla_KolmogorovSmirnov
#Formato
Tabla_KolmogorovSmirnov %>% #Utiliza el operador %>% para encadenar las operaciones siguientes en la tabla Tabla_KolmogorovSmirnov
  gt() %>% #Crear una tabla con la función gt()
  tab_header("Tabla para calcular el estadistico KS") %>% #Agrega un encabezado a la tabla
  tab_source_note(source_note = "Fuente: Elaboración Propia") %>% #Agrega una nota de fuente a la tabla
  tab_style(  #Cambia el estilo de algunas celdas de la tabla 
    style = list(
      cell_fill(color="#A569BD"), #Cambia el color de fondo de las celdas a un tono morado 
      cell_text(style = "italic") #Cambia el estilo de texto de las celdas a itálico
    ),
    locations = cells_body( #Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns=dif1, #Que pertenezca a la columna "dif1"
      rows=dif1==max(dif1) #Que pertenezca a la fila donde el valor de "dif1" es máximo
    )) %>%
  tab_style( #Cambia el estilo de algunas celdas de la tabla
    style = list( 
      cell_fill(color="#3498DB"), #Cambia el color de fondo de las celdas a un tono azul 
      cell_text(style = "italic") #Cambia el estilo de texto de las celdas a itálico 
    ),
    locations=cells_body( #Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns=dif2, #Que pertenezca a la columna "dif2"
      rows=dif2==max(dif2) #Que pertenezca a la fila donde el valor de "dif2" es máximo 
    )
    )
Tabla para calcular el estadistico KS
Residuos posicion dist1 dist2 zi pi dif1 dif2
-120.026447 81 0.01136364 0.00000000 -2.041515459 0.02059981 0.98863636 1.00000000
-115.508697 77 0.02272727 0.01136364 -1.964673586 0.02472601 0.97727273 0.98863636
-107.080889 24 0.03409091 0.02272727 -1.821326006 0.03427866 0.96590909 0.97727273
-91.243980 48 0.04545455 0.03409091 -1.551957925 0.06033615 0.95454545 0.96590909
-85.461169 12 0.05681818 0.04545455 -1.453598781 0.07302879 0.94318182 0.95454545
-77.172687 32 0.06818182 0.05681818 -1.312620980 0.09465535 0.93181818 0.94318182
-74.702719 54 0.07954545 0.06818182 -1.270609602 0.10193378 0.92045455 0.93181818
-65.502849 39 0.09090909 0.07954545 -1.114130117 0.13261169 0.90909091 0.92045455
-63.699108 69 0.10227273 0.09090909 -1.083450505 0.13930425 0.89772727 0.90909091
-62.566594 83 0.11363636 0.10227273 -1.064187703 0.14362184 0.88636364 0.89772727
-59.845223 36 0.12500000 0.11363636 -1.017900230 0.15436269 0.87500000 0.88636364
-54.466158 13 0.13636364 0.12500000 -0.926408352 0.17711690 0.86363636 0.87500000
-54.300415 14 0.14772727 0.13636364 -0.923589260 0.17785010 0.85227273 0.86363636
-52.129801 15 0.15909091 0.14772727 -0.886669532 0.18762842 0.84090909 0.85227273
-51.441108 17 0.17045455 0.15909091 -0.874955638 0.19079902 0.82954545 0.84090909
-48.704980 47 0.18181818 0.17045455 -0.828417174 0.20371714 0.81818182 0.82954545
-48.350295 29 0.19318182 0.18181818 -0.822384375 0.20542908 0.80681818 0.81818182
-47.855859 11 0.20454545 0.19318182 -0.813974573 0.20782976 0.79545455 0.80681818
-45.639765 1 0.21590909 0.20454545 -0.776281294 0.21879146 0.78409091 0.79545455
-43.142550 9 0.22727273 0.21590909 -0.733806463 0.23153335 0.77272727 0.78409091
-41.749618 57 0.23863636 0.22727273 -0.710114247 0.23881665 0.76136364 0.77272727
-40.869022 27 0.25000000 0.23863636 -0.695136302 0.24348494 0.75000000 0.76136364
-37.749811 34 0.26136364 0.25000000 -0.642082009 0.26040997 0.73863636 0.75000000
-36.663785 71 0.27272727 0.26136364 -0.623609925 0.26644190 0.72727273 0.73863636
-36.646568 79 0.28409091 0.27272727 -0.623317083 0.26653809 0.71590909 0.72727273
-33.801248 37 0.29545455 0.28409091 -0.574921384 0.28267223 0.70454545 0.71590909
-29.766931 16 0.30681818 0.29545455 -0.506302171 0.30632227 0.69318182 0.70454545
-26.696234 22 0.31818182 0.30681818 -0.454073044 0.32488813 0.68181818 0.69318182
-24.271531 23 0.32954545 0.31818182 -0.412831567 0.33986501 0.67045455 0.68181818
-23.651448 86 0.34090909 0.32954545 -0.402284648 0.34373728 0.65909091 0.67045455
-19.683427 88 0.35227273 0.34090909 -0.334793052 0.36889060 0.64772727 0.65909091
-17.817835 10 0.36363636 0.35227273 -0.303061413 0.38092153 0.63636364 0.64772727
-16.762094 60 0.37500000 0.36363636 -0.285104441 0.38778206 0.62500000 0.63636364
-16.596960 21 0.38636364 0.37500000 -0.282295711 0.38885839 0.61363636 0.62500000
-16.271207 58 0.39772727 0.38636364 -0.276755010 0.39098411 0.60227273 0.61363636
-13.815798 56 0.40909091 0.39772727 -0.234991254 0.40710776 0.59090909 0.60227273
-13.462160 75 0.42045455 0.40909091 -0.228976273 0.40944368 0.57954545 0.59090909
-12.081520 4 0.43181818 0.42045455 -0.205493119 0.41859344 0.56818182 0.57954545
-11.629207 51 0.44318182 0.43181818 -0.197799788 0.42160086 0.55681818 0.56818182
-11.312669 74 0.45454545 0.44318182 -0.192415834 0.42370825 0.54545455 0.55681818
-8.236558 3 0.46590909 0.45454545 -0.140094626 0.44429261 0.53409091 0.54545455
-7.662789 70 0.47727273 0.46590909 -0.130335452 0.44815052 0.52272727 0.53409091
-6.752801 67 0.48863636 0.47727273 -0.114857588 0.45427900 0.51136364 0.52272727
-6.707262 31 0.50000000 0.48863636 -0.114083016 0.45458599 0.50000000 0.51136364
-6.402439 85 0.51136364 0.50000000 -0.108898313 0.45664157 0.48863636 0.50000000
-5.446904 82 0.52272727 0.51136364 -0.092645733 0.46309251 0.47727273 0.48863636
-3.537785 43 0.53409091 0.52272727 -0.060173762 0.47600862 0.46590909 0.47727273
-2.824941 61 0.54545455 0.53409091 -0.048049090 0.48083856 0.45454545 0.46590909
-2.745208 68 0.55681818 0.54545455 -0.046692922 0.48137899 0.44318182 0.45454545
-0.195089 65 0.56818182 0.55681818 -0.003318245 0.49867621 0.43181818 0.44318182
1.399296 55 0.57954545 0.56818182 0.023800450 0.50949411 0.42045455 0.43181818
5.363331 26 0.59090909 0.57954545 0.091224254 0.53634280 0.40909091 0.42045455
6.700640 53 0.60227273 0.59090909 0.113970383 0.54536936 0.39772727 0.40909091
7.386314 80 0.61363636 0.60227273 0.125632935 0.54998875 0.38636364 0.39772727
9.099900 41 0.62500000 0.61363636 0.154779103 0.56150227 0.37500000 0.38636364
12.433611 46 0.63636364 0.62500000 0.211481796 0.58374433 0.36363636 0.37500000
16.718018 62 0.64772727 0.63636364 0.284354766 0.61193074 0.35227273 0.36363636
18.093192 5 0.65909091 0.64772727 0.307744934 0.62086179 0.34090909 0.35227273
18.801816 38 0.67045455 0.65909091 0.319797835 0.62543921 0.32954545 0.34090909
19.168108 33 0.68181818 0.67045455 0.326028052 0.62779843 0.31818182 0.32954545
19.219211 72 0.69318182 0.68181818 0.326897255 0.62812720 0.30681818 0.31818182
20.334434 59 0.70454545 0.69318182 0.345865960 0.63527827 0.29545455 0.30681818
24.909926 78 0.71590909 0.70454545 0.423689939 0.66410402 0.28409091 0.29545455
26.236229 40 0.72727273 0.71590909 0.446248874 0.67229126 0.27272727 0.28409091
30.924022 25 0.73863636 0.72727273 0.525982978 0.70054998 0.26136364 0.27272727
32.253952 45 0.75000000 0.73863636 0.548603608 0.70836125 0.25000000 0.26136364
32.529367 49 0.76136364 0.75000000 0.553288104 0.70996693 0.23863636 0.25000000
32.675968 18 0.77272727 0.76136364 0.555781630 0.71081993 0.22727273 0.23863636
33.275839 20 0.78409091 0.77272727 0.565984762 0.71429793 0.21590909 0.22727273
36.031430 52 0.79545455 0.78409091 0.612854281 0.73001365 0.20454545 0.21590909
37.147186 84 0.80681818 0.79545455 0.631832029 0.73625168 0.19318182 0.20454545
40.320875 7 0.81818182 0.80681818 0.685812928 0.75358446 0.18181818 0.19318182
44.334467 30 0.82954545 0.81818182 0.754079634 0.77459930 0.17045455 0.18181818
46.907165 28 0.84090909 0.82954545 0.797838357 0.78751785 0.15909091 0.17045455
54.418366 87 0.85227273 0.84090909 0.925595465 0.82267187 0.14772727 0.15909091
55.091131 35 0.86363636 0.85227273 0.937038450 0.82563061 0.13636364 0.14772727
55.470305 44 0.87500000 0.86363636 0.943487765 0.82728426 0.12500000 0.13636364
62.939597 6 0.88636364 0.87500000 1.070532059 0.85781006 0.11363636 0.12500000
66.478628 50 0.89772727 0.88636364 1.130727018 0.87091500 0.10227273 0.11363636
67.426518 63 0.90909091 0.89772727 1.146849569 0.87427810 0.09090909 0.10227273
67.603959 19 0.92045455 0.90909091 1.149867648 0.87490081 0.07954545 0.09090909
69.707122 64 0.93181818 0.92045455 1.185640095 0.88211777 0.06818182 0.07954545
69.843246 8 0.94318182 0.93181818 1.187955411 0.88257451 0.05681818 0.06818182
74.848732 2 0.95454545 0.94318182 1.273093116 0.89850750 0.04545455 0.05681818
112.729191 66 0.96590909 0.95454545 1.917397313 0.97240626 0.03409091 0.04545455
163.795081 73 0.97727273 0.96590909 2.785970904 0.99733162 0.02272727 0.03409091
198.660139 42 0.98863636 0.97727273 3.378986513 0.99963623 0.01136364 0.02272727
209.375830 76 1.00000000 0.98863636 3.561248407 0.99981545 0.00000000 0.01136364
Fuente: Elaboración Propia

Cálculo del estadístico D:

D<-max(max(Tabla_KolmogorovSmirnov$dif1),max(Tabla_KolmogorovSmirnov$dif2)) #El comando max(Tabla_KolmogorovSmirnov$dif1) calcula la máxima diferencia absoluta entre los valores de la ECDF y la distribución teórica para la variable de respuesta (price), mientras que max(Tabla_KolmogorovSmirnov$dif2) calcula la máxima diferencia absoluta para la variable explicativa (lotsize). El estadístico de prueba de Kolmogorov-Smirnov se define como la máxima diferencia entre estas dos diferencias máximas
print(D)
## [1] 1

Usando Nortest

library(nortest) #El comando library(nortest) carga la librería "nortest" en la sesión actual de R, lo que permite que las funciones contenidas en esa librería estén disponibles para su uso
prueba_KolmogorovSmirnov<-lillie.test(modelo_estimado$residuals) #en los residuos del modelo de regresión lineal múltiple ajustado. El resultado se almacena en el objeto "prueba_KolmogorovSmirnov". El comando prueba_KolmogorovSmirnov muestra en la consola el resultado de la prueba de normalidad, que incluye la estadística de prueba, el valor p y el mensaje de resultado
prueba_KolmogorovSmirnov
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_estimado$residuals
## D = 0.075439, p-value = 0.2496
p.value<-prueba_KolmogorovSmirnov$p.value #extrae el valor p de la prueba de normalidad y lo almacena en la variable "p.value". Esto permitirá utilizar este valor en futuros análisis o comparaciones con otros valores p

Prueba Shapiro - Wilk Calculo Manual

library(dplyr) #El comando library(dplyr) carga la librería "dplyr" en la sesión actual de R, lo que permite utilizar las funciones contenidas en esa librería para manipular datos
library(gt) #El comando library(gt) carga la librería "gt" en la sesión actual de R, que proporciona una forma fácil de crear tablas de datos elegantes y personalizables
residuos<-modelo_estimado$residuals #se almacenan los residuos del modelo de regresión lineal múltiple ajustado en el objeto "residuos" utilizando la función modelo_estimado$residuals
residuos %>% #El siguiente comando utiliza el operador %>% (pipe) de "dplyr" para pasar el objeto "residuos" a la siguiente línea de código. El operador pipe permite encadenar múltiples operaciones de manipulación de datos de manera eficiente
  as_tibble() %>% # Este código toma los residuos del modelo de regresión lineal múltiple ajustado, los convierte en un tibble utilizando la función as_tibble()
  rename(residuales=value) %>% #los renombra a "residuales" utilizando la función rename(),
  arrange(residuales) %>% # los ordena de menor a mayor utilizando la función arrange()
  mutate(pi=(row_number()-0.375)/(n()+0.25)) %>% #la función mutate() de la librería "dplyr" para crear tres nuevas columnas en el tibble Tabla_ShapiroWilk
  mutate(mi=qnorm(pi,lower.tail = TRUE)) %>% #la función mutate() crea una nueva columna llamada "pi" que almacena los valores de la distribución de probabilidad normal estándar correspondientes a los cuantiles de los residuos ordenados
  mutate(ai=0)->Tabla_ShapiroWilk #la función mutate() crea una nueva columna llamada "ai" que almacena el valor constante "0
#Formato
m<-sum(Tabla_ShapiroWilk$mi^2) #la función de distribución acumulativa normal almacenados en la columna "mi" del tibble Tabla_ShapiroWilk. Esto se almacena en la variable m
n<-nrow(hprice1) #almacena el número de observaciones en la variable n
theta<-1/sqrt(n) # calcula la variable de escala theta como el inverso de la raíz cuadrada del número de observaciones n
Tabla_ShapiroWilk$ai[n]<--2.706056*theta^5+4.434685*theta^4-2.071190*theta^3-0.147981*theta^2+0.2211570*theta+Tabla_ShapiroWilk$mi[n]/sqrt(m) #se calcula el valor crítico de la estadística de prueba para el nivel de significancia del 0.05% para la observación más grande. Este valor crítico se almacena en la última fila de la columna "ai" en Tabla_ShapiroWilk
Tabla_ShapiroWilk$ai[n-1]<--3.582633*theta^5+5.682633*theta^4-1.752461*theta^3-0.293762*theta^2+0.042981*theta+Tabla_ShapiroWilk$mi[n-1]/sqrt(m) #se calcula el valor crítico de la estadística de prueba para el nivel de significancia del 0.05% para la segunda observación más grande. Este valor crítico se almacena en la penúltima fila de la columna "ai" en Tabla_ShapiroWilk
Tabla_ShapiroWilk$ai[1]<- -Tabla_ShapiroWilk$ai[n] # El primer valor asignado es el negativo del último elemento de "ai"
Tabla_ShapiroWilk$ai[2]<- -Tabla_ShapiroWilk$ai[n-1] #el segundo valor asignado es el negativo del penúltimo elemento de "ai"
omega<-(m-2*Tabla_ShapiroWilk$mi[n]^2-2*Tabla_ShapiroWilk$mi[n-1]^2)/(1-2*Tabla_ShapiroWilk$ai[n]^2-2*Tabla_ShapiroWilk$ai[n-1]^2) #utilizando los valores de "mi" y "ai" de los últimos dos elementos de "Tabla_ShapiroWilk". El valor de "omega" se utiliza en el siguiente paso para calcular el valor p de la prueba de Shapiro-Wilk
Tabla_ShapiroWilk$ai[3:(n-2)]<-Tabla_ShapiroWilk$mi[3:(n-2)]/sqrt(omega)
Tabla_ShapiroWilk %>%
  mutate(ai_ui=ai*residuos,ui2=residuos^2)->Tabla_ShapiroWilk
Tabla_ShapiroWilk %>%
  gt() %>% tab_header("Tabla para calcular el estadístico W") %>%
  tab_source_note(source_note = "Fuente: Elaboración propia")
Tabla para calcular el estadístico W
residuales pi mi ai ai_ui ui2
-120.026447 0.007082153 -2.45306927 -0.286093929 13.05725965 2.082988e+03
-115.508697 0.018413598 -2.08767462 -0.226331231 -16.94060563 5.602333e+03
-107.080889 0.029745042 -1.88455395 -0.201511408 1.65976037 6.784089e+01
-91.243980 0.041076487 -1.73832835 -0.185875811 2.24566225 1.459631e+02
-85.461169 0.052407932 -1.62194155 -0.173430814 -3.13791701 3.273636e+02
-77.172687 0.063739377 -1.52411994 -0.162970954 -10.25732609 3.961393e+03
-74.702719 0.075070822 -1.43903134 -0.153872609 -6.20427818 1.625773e+03
-65.502849 0.086402266 -1.36324747 -0.145769197 -10.18099397 4.878079e+03
-63.699108 0.097733711 -1.29457343 -0.138426027 5.97205177 1.861280e+03
-62.566594 0.109065156 -1.23151500 -0.131683320 2.34631161 3.174752e+02
-59.845223 0.120396601 -1.17300649 -0.125427129 6.00242299 2.290183e+03
-54.466158 0.131728045 -1.11825971 -0.119573169 10.21886279 7.303611e+03
-54.300415 0.143059490 -1.06667420 -0.114057239 6.21225959 2.966562e+03
-52.129801 0.154390935 -1.01778137 -0.108829231 5.90947243 2.948535e+03
-51.441108 0.165722380 -0.97120790 -0.103849228 5.41363953 2.717516e+03
-48.704980 0.177053824 -0.92665123 -0.099084876 2.94945270 8.860702e+02
-48.350295 0.188385269 -0.88386232 -0.094509548 4.86167582 2.646188e+03
-47.855859 0.199716714 -0.84263354 -0.090101040 -2.94413873 1.067719e+03
-45.639765 0.211048159 -0.80278966 -0.085840618 -5.80316566 4.570295e+03
-43.142550 0.222379603 -0.76418130 -0.081712307 -2.71904558 1.107281e+03
-41.749618 0.233711048 -0.72667986 -0.077702356 1.28962292 2.754591e+02
-40.869022 0.245042493 -0.69017366 -0.073798824 1.97015068 7.126889e+02
-37.749811 0.256373938 -0.65456498 -0.069991263 1.69879513 5.891072e+02
-36.663785 0.267705382 -0.61976766 -0.066270458 7.09629954 1.146632e+04
-36.646568 0.279036827 -0.58570518 -0.062628228 -1.93671668 9.562951e+02
-33.801248 0.290368272 -0.55230918 -0.059057264 -0.31674365 2.876532e+01
-29.766931 0.301699717 -0.51951819 -0.055550992 2.27031473 1.670277e+03
-26.696234 0.313031161 -0.48727661 -0.052103467 -2.44402597 2.200282e+03
-24.271531 0.324362606 -0.45553386 -0.048709282 2.35510816 2.337751e+03
-23.651448 0.335694051 -0.42424369 -0.045363489 -2.01116611 1.965545e+03
-19.683427 0.347025496 -0.39336354 -0.042061540 0.28211777 4.498736e+01
-17.817835 0.358356941 -0.36285409 -0.038799229 2.99424070 5.955624e+03
-16.762094 0.369688385 -0.33267878 -0.035572645 -0.68186030 3.674164e+02
-16.596960 0.381019830 -0.30280344 -0.032378138 1.22226859 1.425048e+03
-16.271207 0.392351275 -0.27319601 -0.029212277 -1.60933739 3.035033e+03
-13.815798 0.403682720 -0.24382619 -0.026071824 1.56027410 3.581451e+03
-13.462160 0.415014164 -0.21466524 -0.022953704 0.77586386 1.142524e+03
-12.081520 0.426345609 -0.18568573 -0.019854987 -0.37330980 3.535083e+02
-11.629207 0.437677054 -0.15686137 -0.016772858 1.09866996 4.290623e+03
-11.312669 0.449008499 -0.12816677 -0.013704604 -0.35955714 6.883397e+02
-8.236558 0.460339943 -0.09957734 -0.010647596 -0.09689206 8.280817e+01
-7.662789 0.471671388 -0.07106908 -0.007599268 -1.50967164 3.946585e+04
-6.752801 0.483002833 -0.04261848 -0.004557105 0.01612206 1.251592e+01
-6.707262 0.494334278 -0.01420234 -0.001518626 -0.08423866 3.076955e+03
-6.402439 0.505665722 0.01420234 0.001518626 0.04898170 1.040317e+03
-5.446904 0.516997167 0.04261848 0.004557105 0.05666126 1.545947e+02
-3.537785 0.528328612 0.07106908 0.007599268 -0.37012220 2.372175e+03
-2.824941 0.539660057 0.09957734 0.010647596 -0.97152905 8.325464e+03
-2.745208 0.550991501 0.12816677 0.013704604 0.44580210 1.058160e+03
-0.195089 0.562322946 0.15686137 0.016772858 1.11503656 4.419408e+03
1.399296 0.573654391 0.18568573 0.019854987 -0.23089775 1.352385e+02
5.363331 0.584985836 0.21466524 0.022953704 0.82705479 1.298264e+03
6.700640 0.596317280 0.24382619 0.026071824 0.17469790 4.489858e+01
7.386314 0.607648725 0.27319601 0.029212277 -2.18223653 5.580496e+03
9.099900 0.618980170 0.30280344 0.032378138 0.04530658 1.958028e+00
12.433611 0.630311615 0.33267878 0.035572645 -0.49146448 1.908763e+02
16.718018 0.641643059 0.36285409 0.038799229 -1.61985296 1.743031e+03
18.093192 0.652974504 0.39336354 0.042061540 -0.68439203 2.647522e+02
18.801816 0.664305949 0.42424369 0.045363489 0.92244090 4.134892e+02
19.168108 0.675637394 0.45553386 0.048709282 -0.81646954 2.809678e+02
19.219211 0.686968839 0.48727661 0.052103467 -0.14718924 7.980294e+00
20.334434 0.698300283 0.51951819 0.055550992 0.92870249 2.794921e+02
24.909926 0.709631728 0.55230918 0.059057264 3.98202568 4.546335e+03
26.236229 0.720963173 0.58570518 0.062628228 4.36563358 4.859083e+03
30.924022 0.732294618 0.61976766 0.066270458 -0.01292864 3.805971e-02
32.253952 0.743626062 0.65456498 0.069991263 7.89005852 1.270787e+04
32.529367 0.754957507 0.69017366 0.073798824 -0.49834880 4.560033e+01
32.675968 0.766288952 0.72667986 0.077702356 -0.21330917 7.536170e+00
33.275839 0.777620397 0.76418130 0.081712307 -5.20500110 4.057576e+03
36.031430 0.788951841 0.80278966 0.085840618 -0.65777851 5.871833e+01
37.147186 0.800283286 0.84263354 0.090101040 -3.30344515 1.344233e+03
40.320875 0.811614731 0.88386232 0.094509548 1.81639893 3.693781e+02
44.334467 0.822946176 0.92665123 0.099084876 16.22961518 2.682883e+04
46.907165 0.834277620 0.97120790 0.103849228 -1.17481195 1.279765e+02
54.418366 0.845609065 1.01778137 0.108829231 -1.46507655 1.812298e+02
55.091131 0.856940510 1.06667420 0.114057239 23.88082913 4.383824e+04
55.470305 0.868271955 1.11825971 0.119573169 -13.81174095 1.334226e+04
62.939597 0.879603399 1.17300649 0.125427129 3.12438044 6.205044e+02
66.478628 0.890934844 1.23151500 0.131683320 -4.82574173 1.342971e+03
67.426518 0.902266289 1.29457343 0.138426027 1.02245814 5.455764e+01
67.603959 0.913597734 1.36324747 0.145769197 -17.49615886 1.440635e+04
69.707122 0.924929178 1.43903134 0.153872609 -0.83812929 2.966876e+01
69.843246 0.936260623 1.52411994 0.162970954 -10.19653751 3.914579e+03
74.848732 0.947592068 1.62194155 0.173430814 6.44246664 1.379913e+03
112.729191 0.958923513 1.73832835 0.185875811 -1.19005849 4.099122e+01
163.795081 0.970254958 1.88455395 0.201511408 -4.76603661 5.593910e+02
198.660139 0.981586402 2.08767462 0.226331231 12.31657570 2.961359e+03
209.375830 0.992917847 2.45306927 0.286093929 -5.63130896 3.874373e+02
Fuente: Elaboración propia

Cálculo del estadístico W

W<-(sum(Tabla_ShapiroWilk$ai_ui)^2)/sum(Tabla_ShapiroWilk$ui2) #calcula el estadístico de prueba W como la suma de los cuadrados de los valores ajustados divididos por la suma de los cuadrados de los residuos
print(W)
## [1] 0.002739454

Cálculo del Wn y su p Value

mu<-0.0038915*log(n)^3-0.083751*log(n)^2-0.31082*log(n)-1.5861
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n)-0.4803)
Wn<-(log(1-W)-mu)/sigma
print(Wn)
## [1] 9.482201
P.value<-pnorm(Wn,lower.tail = FALSE)
print(P.value)
## [1] 1.244875e-21
library(fastGraph)
shadeDist(Wn,ddist = "dnorm",lower.tail = FALSE)

Usando la librería stats

Prueba_ShapiroWilk<-shapiro.test(modelo_estimado$residuals)
print(Prueba_ShapiroWilk)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_estimado$residuals
## W = 0.94132, p-value = 0.0005937
Wn_salida<-qnorm(prueba_KolmogorovSmirnov$p.value,lower.tail = FALSE)
print(Wn_salida)
## [1] 0.675615