CARGA DE DATOS

library(wooldridge)#carga el paquete "wooldridge" en R, que contiene conjuntos de datos utilizados en el libro "Introductory Econometrics: A Modern Approach" de Jeffrey M. Wooldridge.
data(hprice1)#carga el conjunto de datos 'hprice1' que está incluido en la biblioteca 'wooldridge'
head(force(hprice1),n=5) #mostrar las primeras 5 observaciones
##   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

ESTIMACION DE MODELO

library(stargazer)#se utiliza para producir tablas de resumen de resultados de análisis estadísticos.
modelo_price <- lm( formula = price ~ lotsize + sqrft + bdrms, data = hprice1)# crea un modelo de regresión lineal en R, donde se intenta predecir el precio de las casas (price) en función del tamaño del lote (lotsize), el área en pies cuadrados (sqrft), y el número de dormitorios (bdrms), utilizando los datos del conjunto de datos hprice1
stargazer(modelo_price, title = 'Modelo estimado', type = 'text')# genera una tabla de resumen de los resultados del modelo de regresión lineal
## 
## 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

AJUSTE DE RESIDUOS A LA DISTRIBUCION NORMAL

library(fitdistrplus)#se utiliza para ajustar distribuciones de probabilidad a datos observados mediante máxima verosimilitud y realizar diagnósticos sobre los ajustes.
fit_normal<-fitdist(data = modelo_price $residuals,distr = "norm")#ajusta una distribución normal a los residuos del modelo de regresión modelo_price utilizando la función fitdist del paquete "fitdistrplus" en R.
plot(fit_normal)#muestra un gráfico que visualiza el ajuste de la distribución normal a los residuos del modelo de regresión. Esto puede incluir un histograma de los residuos, la densidad ajustada y una línea que representa la distribución normal teórica.

summary(fit_normal)# proporciona un resumen de los resultados del ajuste de la distribución normal a los residuos del modelo de regresión
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##           estimate Std. Error
## mean -2.321494e-15   6.231624
## sd    5.845781e+01   4.406423
## Loglikelihood:  -482.8775   AIC:  969.7549   BIC:  974.7096 
## Correlation matrix:
##      mean sd
## mean    1  0
## sd      0  1

2 Verique el supuesto de normalidad, a través de:

a) La prueba JB

usando TSERIES

library(tseries)#proporciona una variedad de herramientas para el análisis de series temporales, incluyendo funciones para el ajuste de modelos, pruebas de raíz unitaria, y diagnósticos de autocorrelación, entre otros
salida_JB<-jarque.bera.test(modelo_price$residuals)# realiza la prueba de Jarque-Bera sobre los residuos del modelo de regresión
salida_JB#
## 
##  Jarque Bera Test
## 
## data:  modelo_price$residuals
## X-squared = 32.278, df = 2, p-value = 9.794e-08
library(fastGraph)#proporciona herramientas para visualización de datos de manera rápida y eficiente, especialmente útil para conjuntos de datos grandes
alpha_sig<- 0.05#se establece en 0.05, lo que sugiere un nivel de significancia del 5% para las pruebas estadísticas, lo que significa que se considerará significativo cualquier resultado con un valor de p menor o igual a 0.05.
JB<-salida_JB$statistic#El valor del estadístico de la prueba de Jarque-Bera se guarda en la variable JB utilizando el resultado devuelto por la función
gl<-salida_JB$parameter#El valor del estadístico de la prueba de Jarque-Bera se guarda en la variable JB utilizando el resultado devuelto por la función
VC<-qchisq(1-alpha_sig,gl,lower.tail = TRUE)# calcula utilizando la función qchisq() para obtener el cuantil de la distribución chi-cuadrado. Se utiliza un nivel de significancia de 0.05 (almacenado en alpha_sig) y el número de grados de libertad (gl) del estadístico de la prueba de Jarque-Bera. La opción lower.tail = TRUE indica que estamos interesados en la cola inferior de la distribución.
shadeDist(JB,ddist = "dchisq",# probablemente esté destinado a sombrear el área bajo la curva de la distribución chi-cuadrado correspondiente al valor del estadístico de la prueba de Jarque-Bera (JB). Esto se hace utilizando la función shadeDist del paquete "fastGraph" en R.
          parm1 = gl,# 
          lower.tail = FALSE,xmin=0,
          sub=paste("VC:",round(VC,2)," ","JB:",round(JB,2)))

#El parámetro parm1 = gl indica que se está utilizando el número de grados de libertad (almacenado en gl) en la función shadeDist para la distribución chi-cuadrado. Los otros parámetros incluyen lower.tail = FALSE para indicar que se desea sombrear la cola superior de la distribución chi-cuadrado, xmin = 0 para establecer el límite inferior del área sombreada en cero, y sub para añadir una subetiqueta al gráfico que incluye el valor crítico (VC) y el valor del estadístico de la prueba de Jarque-Bera (JB), redondeados a dos decimales.

#b) La prueba KS

##calculo manual

# Carga la librería dplyr para manejo de datos.
library(dplyr)
# Carga la librería  para la creación de tablas en formato HTML.
library(gt) 
# Carga la librería gtExtras que contiene funciones adicionales para la librería gt.
library(gtExtras) 
# Se asigna a la variable residuos los residuos del objeto modelo_price.
residuos<- modelo_price$residuals 
# Es un operador de canalización (pipe) que permite encadenar varias funciones aplicadas a un objeto.
residuos %>% 
# Convierte el vector residuos en un tibble para su posterior manipulación.
  as_tibble() %>% 
# Agrega una columna Position que indica la posición de cada residuo en el vector.
  mutate(Position=row_number()) %>% 
#  Ordena los residuos por valor.
    arrange(value) %>% 
# Agrega una columna dist1 que contiene la distancia acumulada relativa para cada residuo.
    mutate(dist1=row_number()/n())%>% 
# Agrega una columna dist2 que contiene la distancia acumulada relativa ajustada para cada residuo.
    mutate(dist2=(row_number()-1)/n()) %>% 
# Agrega una columna zi que contiene los residuos estandarizados.
     mutate(zi=as.vector(scale(value,center=TRUE))) %>% 
#  Agrega una columna pi que contiene la función de distribución acumulada normal para cada residuo.
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>% 
# Agrega una columna dif1 que contiene la diferencia absoluta entre las distancias acumuladas relativas y la ECDF.
  mutate(dif1=abs(dist1-pi)) %>% 
# Agrega una columna dif2 que contiene la diferencia absoluta entre las distancias acumuladas relativas ajustadas y la ECDF.
  mutate(dif2=abs(dist2-pi)) %>% 
# Cambia el nombre de la columna value por residuales y Asigna el resultado final al objeto tabla_KS.
   rename(residuales=value) -> tabla_KS 

#Formato
# tabla_KSes el objeto de la tabla generado previamente. El %>% se utiliza para encadenar funciones y pasar el objeto tabla_KS a la función gt() .   
 tabla_KS %>% 
# Se utiliza para crear una tabla de gt a partir de un dataframe
  gt() %>%  
# Se aplica la función tab_header para crear un encabezado en la tabla. 
  tab_header("Tabla para calcular el Estadistico KS") %>%  
# Esta línea se utiliza para agregar una nota de fuente a la tabla. tab_source_note se utiliza para agregar una nota de fuente debajo de la tabla y source_note se utiliza para especificar el contenido de la nota de fuente.
    tab_source_note(source_note = "Fuente: Elaboración propia") %>% 
# Esta línea se utiliza para aplicar un estilo específico a las celdas que cumplen ciertos criterios.

# se utiliza para aplicar estilos a la tabla
  tab_style(  
# se utiliza para especificar los estilos a aplicar a las celdas.
    style = list(
# se utiliza para especificar el color de fondo de la celda
      cell_fill(color = "#00FFFF"),  
# se utiliza para especificar el estilo del texto en la celda.
      cell_text(style = "italic")  
      ),
# se utiliza para especificar las celdas en las que se aplicarán los estilos.
# cells_body se utiliza para especificar que se aplicarán estilos a las celdas del cuerpo de la tabla.
    locations = cells_body( 
# se utiliza para especificar las columnas en las que se aplicarán los estilos
      columns = dif1, 
# se utiliza para especificar las filas en las que se aplicarán los estilos.
# En este caso, se especifica que se aplicarán estilos a las celdas de la columna dif1 donde el valor de la fila sea igual al valor máximo de dif1.
      rows = dif1==max(dif1)  
    )) %>%
# Esta línea es similar a la línea anterior, pero se aplica a las celdas de la columna donde el valor de la fila es igual al valor máximo de dif2. Se especifica que el color de fondo de la celda y el estilo del texto es itálico.
   tab_style( 
    style = list(
      cell_fill(color = "#FF00FF"),  
      cell_text(style = "italic")  
      ),
    locations = cells_body(  
      columns = dif2,  
      rows = dif2==max(dif2)  
    ))
Tabla para calcular el Estadistico KS
residuales Position dist1 dist2 zi pi dif1 dif2
-120.026447 81 0.01136364 0.00000000 -2.041515459 0.02059981 0.0092361731 0.0205998094
-115.508697 77 0.02272727 0.01136364 -1.964673586 0.02472601 0.0019987418 0.0133623781
-107.080889 24 0.03409091 0.02272727 -1.821326006 0.03427866 0.0001877487 0.0115513850
-91.243980 48 0.04545455 0.03409091 -1.551957925 0.06033615 0.0148816002 0.0262452366
-85.461169 12 0.05681818 0.04545455 -1.453598781 0.07302879 0.0162106057 0.0275742421
-77.172687 32 0.06818182 0.05681818 -1.312620980 0.09465535 0.0264735301 0.0378371665
-74.702719 54 0.07954545 0.06818182 -1.270609602 0.10193378 0.0223883300 0.0337519664
-65.502849 39 0.09090909 0.07954545 -1.114130117 0.13261169 0.0417025941 0.0530662305
-63.699108 69 0.10227273 0.09090909 -1.083450505 0.13930425 0.0370315271 0.0483951634
-62.566594 83 0.11363636 0.10227273 -1.064187703 0.14362184 0.0299854747 0.0413491110
-59.845223 36 0.12500000 0.11363636 -1.017900230 0.15436269 0.0293626861 0.0407263225
-54.466158 13 0.13636364 0.12500000 -0.926408352 0.17711690 0.0407532663 0.0521169027
-54.300415 14 0.14772727 0.13636364 -0.923589260 0.17785010 0.0301228311 0.0414864675
-52.129801 15 0.15909091 0.14772727 -0.886669532 0.18762842 0.0285375141 0.0399011505
-51.441108 17 0.17045455 0.15909091 -0.874955638 0.19079902 0.0203444766 0.0317081129
-48.704980 47 0.18181818 0.17045455 -0.828417174 0.20371714 0.0218989601 0.0332625965
-48.350295 29 0.19318182 0.18181818 -0.822384375 0.20542908 0.0122472664 0.0236109028
-47.855859 11 0.20454545 0.19318182 -0.813974573 0.20782976 0.0032843043 0.0146479407
-45.639765 1 0.21590909 0.20454545 -0.776281294 0.21879146 0.0028823668 0.0142460032
-43.142550 9 0.22727273 0.21590909 -0.733806463 0.23153335 0.0042606233 0.0156242596
-41.749618 57 0.23863636 0.22727273 -0.710114247 0.23881665 0.0001802823 0.0115439187
-40.869022 27 0.25000000 0.23863636 -0.695136302 0.24348494 0.0065150566 0.0048485798
-37.749811 34 0.26136364 0.25000000 -0.642082009 0.26040997 0.0009536682 0.0104099682
-36.663785 71 0.27272727 0.26136364 -0.623609925 0.26644190 0.0062853771 0.0050782592
-36.646568 79 0.28409091 0.27272727 -0.623317083 0.26653809 0.0175528221 0.0061891857
-33.801248 37 0.29545455 0.28409091 -0.574921384 0.28267223 0.0127823120 0.0014186757
-29.766931 16 0.30681818 0.29545455 -0.506302171 0.30632227 0.0004959124 0.0108677240
-26.696234 22 0.31818182 0.30681818 -0.454073044 0.32488813 0.0067063089 0.0180699452
-24.271531 23 0.32954545 0.31818182 -0.412831567 0.33986501 0.0103195566 0.0216831929
-23.651448 86 0.34090909 0.32954545 -0.402284648 0.34373728 0.0028281851 0.0141918214
-19.683427 88 0.35227273 0.34090909 -0.334793052 0.36889060 0.0166178738 0.0279815102
-17.817835 10 0.36363636 0.35227273 -0.303061413 0.38092153 0.0172851663 0.0286488027
-16.762094 60 0.37500000 0.36363636 -0.285104441 0.38778206 0.0127820638 0.0241457002
-16.596960 21 0.38636364 0.37500000 -0.282295711 0.38885839 0.0024947507 0.0138583870
-16.271207 58 0.39772727 0.38636364 -0.276755010 0.39098411 0.0067431583 0.0046204781
-13.815798 56 0.40909091 0.39772727 -0.234991254 0.40710776 0.0019831485 0.0093804879
-13.462160 75 0.42045455 0.40909091 -0.228976273 0.40944368 0.0110108666 0.0003527698
-12.081520 4 0.43181818 0.42045455 -0.205493119 0.41859344 0.0132247451 0.0018611087
-11.629207 51 0.44318182 0.43181818 -0.197799788 0.42160086 0.0215809622 0.0102173258
-11.312669 74 0.45454545 0.44318182 -0.192415834 0.42370825 0.0308372092 0.0194735728
-8.236558 3 0.46590909 0.45454545 -0.140094626 0.44429261 0.0216164775 0.0102528411
-7.662789 70 0.47727273 0.46590909 -0.130335452 0.44815052 0.0291222111 0.0177585748
-6.752801 67 0.48863636 0.47727273 -0.114857588 0.45427900 0.0343573625 0.0229937262
-6.707262 31 0.50000000 0.48863636 -0.114083016 0.45458599 0.0454140074 0.0340503710
-6.402439 85 0.51136364 0.50000000 -0.108898313 0.45664157 0.0547220642 0.0433584278
-5.446904 82 0.52272727 0.51136364 -0.092645733 0.46309251 0.0596347676 0.0482711313
-3.537785 43 0.53409091 0.52272727 -0.060173762 0.47600862 0.0580822876 0.0467186512
-2.824941 61 0.54545455 0.53409091 -0.048049090 0.48083856 0.0646159857 0.0532523493
-2.745208 68 0.55681818 0.54545455 -0.046692922 0.48137899 0.0754391961 0.0640755598
-0.195089 65 0.56818182 0.55681818 -0.003318245 0.49867621 0.0695056040 0.0581419676
1.399296 55 0.57954545 0.56818182 0.023800450 0.50949411 0.0700513452 0.0586877088
5.363331 26 0.59090909 0.57954545 0.091224254 0.53634280 0.0545662924 0.0432026561
6.700640 53 0.60227273 0.59090909 0.113970383 0.54536936 0.0569033628 0.0455397265
7.386314 80 0.61363636 0.60227273 0.125632935 0.54998875 0.0636476093 0.0522839730
9.099900 41 0.62500000 0.61363636 0.154779103 0.56150227 0.0634977329 0.0521340965
12.433611 46 0.63636364 0.62500000 0.211481796 0.58374433 0.0526193043 0.0412556680
16.718018 62 0.64772727 0.63636364 0.284354766 0.61193074 0.0357965328 0.0244328965
18.093192 5 0.65909091 0.64772727 0.307744934 0.62086179 0.0382291219 0.0268654856
18.801816 38 0.67045455 0.65909091 0.319797835 0.62543921 0.0450153400 0.0336517036
19.168108 33 0.68181818 0.67045455 0.326028052 0.62779843 0.0540197476 0.0426561112
19.219211 72 0.69318182 0.68181818 0.326897255 0.62812720 0.0650546167 0.0536909803
20.334434 59 0.70454545 0.69318182 0.345865960 0.63527827 0.0692671805 0.0579035442
24.909926 78 0.71590909 0.70454545 0.423689939 0.66410402 0.0518050676 0.0404414312
26.236229 40 0.72727273 0.71590909 0.446248874 0.67229126 0.0549814685 0.0436178321
30.924022 25 0.73863636 0.72727273 0.525982978 0.70054998 0.0380863808 0.0267227444
32.253952 45 0.75000000 0.73863636 0.548603608 0.70836125 0.0416387548 0.0302751184
32.529367 49 0.76136364 0.75000000 0.553288104 0.70996693 0.0513967091 0.0400330727
32.675968 18 0.77272727 0.76136364 0.555781630 0.71081993 0.0619073452 0.0505437088
33.275839 20 0.78409091 0.77272727 0.565984762 0.71429793 0.0697929786 0.0584293423
36.031430 52 0.79545455 0.78409091 0.612854281 0.73001365 0.0654408934 0.0540772571
37.147186 84 0.80681818 0.79545455 0.631832029 0.73625168 0.0705665028 0.0592028664
40.320875 7 0.81818182 0.80681818 0.685812928 0.75358446 0.0645973596 0.0532337232
44.334467 30 0.82954545 0.81818182 0.754079634 0.77459930 0.0549461574 0.0435825211
46.907165 28 0.84090909 0.82954545 0.797838357 0.78751785 0.0533912405 0.0420276041
54.418366 87 0.85227273 0.84090909 0.925595465 0.82267187 0.0296008528 0.0182372164
55.091131 35 0.86363636 0.85227273 0.937038450 0.82563061 0.0380057535 0.0266421172
55.470305 44 0.87500000 0.86363636 0.943487765 0.82728426 0.0477157353 0.0363520989
62.939597 6 0.88636364 0.87500000 1.070532059 0.85781006 0.0285535797 0.0171899433
66.478628 50 0.89772727 0.88636364 1.130727018 0.87091500 0.0268122757 0.0154486394
67.426518 63 0.90909091 0.89772727 1.146849569 0.87427810 0.0348128083 0.0234491719
67.603959 19 0.92045455 0.90909091 1.149867648 0.87490081 0.0455537393 0.0341901029
69.707122 64 0.93181818 0.92045455 1.185640095 0.88211777 0.0497004123 0.0383367759
69.843246 8 0.94318182 0.93181818 1.187955411 0.88257451 0.0606073068 0.0492436705
74.848732 2 0.95454545 0.94318182 1.273093116 0.89850750 0.0560379553 0.0446743189
112.729191 66 0.96590909 0.95454545 1.917397313 0.97240626 0.0064971714 0.0178608078
163.795081 73 0.97727273 0.96590909 2.785970904 0.99733162 0.0200588896 0.0314225260
198.660139 42 0.98863636 0.97727273 3.378986513 0.99963623 0.0109998685 0.0223635048
209.375830 76 1.00000000 0.98863636 3.561248407 0.99981545 0.0001845478 0.0111790885
Fuente: Elaboración propia

#calculo

D<-max(max(tabla_KS$dif1),max(tabla_KS$dif2))#comando calcula el valor máximo entre el máximo de la columna dif1 y el máximo de la columna dif2 en el data frame tabla_KS, y luego asigna ese valor a la variable D
print(D)
## [1] 0.0754392

Conclusión: En este caso dado que 0.0754392 >0,875897/Raiz de n = 0.09337093 Se rechaza la Hipótesis Nula: ϵ∼N(0,σ2), por lo que los residuos no siguen una distribución normal.

#USANDO NORTEST

library(nortest)# carga el paquete "nortest" en R, que proporciona diversas pruebas de normalidad para evaluar si un conjunto de datos sigue una distribución normal.
prueba_KS<-lillie.test(modelo_price$residuals)#realiza la prueba de normalidad de Lilliefors sobre los residuos del modelo de regresión modelo_price, utilizando el paquete "nortest" en R
prueba_KS
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_price$residuals
## D = 0.075439, p-value = 0.2496

#c) La prueba Shapiro Wilk (SW) ##Manual de Cálculo

# Carga el paquete dplyr que se utiliza para manipulación de datos y filtrado.
library(dplyr)
# Carga el paquete gt que se utiliza para crear tablas con formato
library(gt)
# Crea un objeto llamado 'residuos' que contiene los residuos del modelo 'modelo_price'.
residuos<-modelo_price$residuals
# Usa el operador pipe (%>%) para pasar el objeto 'residuos' a la siguiente línea.
residuos %>%  
# Convierte el objeto 'residuos' a un tibble y pasa el resultado a la siguiente línea.
  as_tibble() %>%
# Renombra la columna 'residuos' como 'value' y pasa el resultado a la siguiente línea.
  rename(residuales=value) %>%
# Ordena el tibble en orden ascendente por la columna 'residuales' y pasa el resultado a la siguiente línea.
  arrange(residuales) %>%
# Calcula la probabilidad empírica para cada residuo y lo almacena en la columna 'pi', y pasa el resultado a la siguiente línea.
  mutate(pi=(row_number()-0.375)/(n()+0.25)) %>%
# Calcula el cuantil teórico normal para cada probabilidad empírica y lo almacena en la columna 'mi', y pasa el resultado a la siguiente línea.
  mutate(mi=qnorm(pi,lower.tail = TRUE)) %>%
# Crea una nueva columna 'ai' con valor cero en todo el tibble y guarda el resultado en un objeto llamado 'tabla_SW'.
  mutate(ai=0)->tabla_SW
# Calcula la suma de los cuadrados de los cuantiles teóricos normalizados y lo almacena en una variable 'm'.
m<-sum(tabla_SW$mi^2)
# Obtiene el número de filas de la tabla 'hprice1' y lo almacena en la variable 'n'.
n<-nrow(hprice1)
# Calcula un valor constante 'theta' y lo almacena en la variable.
theta<-1/sqrt(n)
# Calcula el valor de 'ai' para la última fila de la tabla y lo almacena en la columna 'ai[n]'.
tabla_SW$ai[n]<- -2.706056*theta^5+4.434685*theta^4-2.071190*theta^3-0.147981*theta^2+0.2211570*theta+tabla_SW$mi[n]/sqrt(m)
# Calcula el valor de 'ai' para la penúltima fila de la tabla y lo almacena en la columna 'ai[n-1]'.
tabla_SW$ai[n-1]<- -3.582633*theta^5+5.682633*theta^4-1.752461*theta^3-0.293762*theta^2+0.042981*theta+tabla_SW$mi[88-1]/sqrt(m)
# se calcula el valor de ai para el primer caso extremo y se guarda en la tabla_SW
tabla_SW$ai[1]<- -tabla_SW$ai[n]
# se calcula el valor de ai para el segundo caso extremo y se guarda en la tabla_SW
tabla_SW$ai[2]<- -tabla_SW$ai[n-1]
# se calcula el valor de omega
omega<-(m-2*tabla_SW$mi[n]^2-2*tabla_SW$mi[n-1]^2)/(1-2*tabla_SW$ai[n]^2-2*tabla_SW$ai[n-1]^2)
# se calcula el valor de ai para los casos intermedios y se guarda en la tabla_SW
tabla_SW$ai[3:(n-2)]<-tabla_SW$mi[3:(n-2)]/sqrt(omega)
# se calculan los valores de ai_ui y ui2
tabla_SW %>% 
  mutate(ai_ui=ai*residuales,ui2=residuales^2) ->tabla_SW
# el operador %>% se utiliza para pasar el dataframe tabla_SW a la siguiente función sin tener que escribir el nombre del objeto varias veces.
tabla_SW %>%
# se llama a la función gt() para crear la tabla. El operador %>% se utiliza de nuevo para pasar la tabla creada a la siguiente función.
  gt() %>% tab_header("Tabla para calcular el Estadistico W") %>%  # Agrega un encabezado a la tabla
# para agregar una nota de fuente a la tabla con el texto
  tab_source_note(source_note = "Fuente: Elaboración propia")
Tabla para calcular el Estadistico W
residuales pi mi ai ai_ui ui2
-120.026447 0.007082153 -2.45306927 -0.286093929 34.338837782 1.440635e+04
-115.508697 0.018413598 -2.08767462 -0.226331231 26.143225495 1.334226e+04
-107.080889 0.029745042 -1.88455395 -0.201511408 21.578020632 1.146632e+04
-91.243980 0.041076487 -1.73832835 -0.185875811 16.960048752 8.325464e+03
-85.461169 0.052407932 -1.62194155 -0.173430814 14.821600075 7.303611e+03
-77.172687 0.063739377 -1.52411994 -0.162970954 12.576906330 5.955624e+03
-74.702719 0.075070822 -1.43903134 -0.153872609 11.494702279 5.580496e+03
-65.502849 0.086402266 -1.36324747 -0.145769197 9.548297773 4.290623e+03
-63.699108 0.097733711 -1.29457343 -0.138426027 8.817614500 4.057576e+03
-62.566594 0.109065156 -1.23151500 -0.131683320 8.238976839 3.914579e+03
-59.845223 0.120396601 -1.17300649 -0.125427129 7.506214499 3.581451e+03
-54.466158 0.131728045 -1.11825971 -0.119573169 6.512691096 2.966562e+03
-54.300415 0.143059490 -1.06667420 -0.114057239 6.193355472 2.948535e+03
-52.129801 0.154390935 -1.01778137 -0.108829231 5.673246083 2.717516e+03
-51.441108 0.165722380 -0.97120790 -0.103849228 5.342119306 2.646188e+03
-48.704980 0.177053824 -0.92665123 -0.099084876 4.825926905 2.372175e+03
-48.350295 0.188385269 -0.88386232 -0.094509548 4.569564512 2.337751e+03
-47.855859 0.199716714 -0.84263354 -0.090101040 4.311862673 2.290183e+03
-45.639765 0.211048159 -0.80278966 -0.085840618 3.917745629 2.082988e+03
-43.142550 0.222379603 -0.76418130 -0.081712307 3.525277277 1.861280e+03
-41.749618 0.233711048 -0.72667986 -0.077702356 3.244043648 1.743031e+03
-40.869022 0.245042493 -0.69017366 -0.073798824 3.016085791 1.670277e+03
-37.749811 0.256373938 -0.65456498 -0.069991263 2.642156946 1.425048e+03
-36.663785 0.267705382 -0.61976766 -0.066270458 2.429725818 1.344233e+03
-36.646568 0.279036827 -0.58570518 -0.062628228 2.295109622 1.342971e+03
-33.801248 0.290368272 -0.55230918 -0.059057264 1.996209250 1.142524e+03
-29.766931 0.301699717 -0.51951819 -0.055550992 1.653582575 8.860702e+02
-26.696234 0.313031161 -0.48727661 -0.052103467 1.390966354 7.126889e+02
-24.271531 0.324362606 -0.45553386 -0.048709282 1.182248861 5.891072e+02
-23.651448 0.335694051 -0.42424369 -0.045363489 1.072912217 5.593910e+02
-19.683427 0.347025496 -0.39336354 -0.042061540 0.827915257 3.874373e+02
-17.817835 0.358356941 -0.36285409 -0.038799229 0.691318234 3.174752e+02
-16.762094 0.369688385 -0.33267878 -0.035572645 0.596272007 2.809678e+02
-16.596960 0.381019830 -0.30280344 -0.032378138 0.537378676 2.754591e+02
-16.271207 0.392351275 -0.27319601 -0.029212277 0.475319006 2.647522e+02
-13.815798 0.403682720 -0.24382619 -0.026071824 0.360203050 1.908763e+02
-13.462160 0.415014164 -0.21466524 -0.022953704 0.309006447 1.812298e+02
-12.081520 0.426345609 -0.18568573 -0.019854987 0.239878409 1.459631e+02
-11.629207 0.437677054 -0.15686137 -0.016772858 0.195055032 1.352385e+02
-11.312669 0.449008499 -0.12816677 -0.013704604 0.155035654 1.279765e+02
-8.236558 0.460339943 -0.09957734 -0.010647596 0.087699542 6.784089e+01
-7.662789 0.471671388 -0.07106908 -0.007599268 0.058231584 5.871833e+01
-6.752801 0.483002833 -0.04261848 -0.004557105 0.030773222 4.560033e+01
-6.707262 0.494334278 -0.01420234 -0.001518626 0.010185824 4.498736e+01
-6.402439 0.505665722 0.01420234 0.001518626 -0.009722911 4.099122e+01
-5.446904 0.516997167 0.04261848 0.004557105 -0.024822110 2.966876e+01
-3.537785 0.528328612 0.07106908 0.007599268 -0.026884576 1.251592e+01
-2.824941 0.539660057 0.09957734 0.010647596 -0.030078835 7.980294e+00
-2.745208 0.550991501 0.12816677 0.013704604 -0.037621996 7.536170e+00
-0.195089 0.562322946 0.15686137 0.016772858 -0.003272200 3.805971e-02
1.399296 0.573654391 0.18568573 0.019854987 0.027782994 1.958028e+00
5.363331 0.584985836 0.21466524 0.022953704 0.123108313 2.876532e+01
6.700640 0.596317280 0.24382619 0.026071824 0.174697904 4.489858e+01
7.386314 0.607648725 0.27319601 0.029212277 0.215771059 5.455764e+01
9.099900 0.618980170 0.30280344 0.032378138 0.294637808 8.280817e+01
12.433611 0.630311615 0.33267878 0.035572645 0.442296424 1.545947e+02
16.718018 0.641643059 0.36285409 0.038799229 0.648646203 2.794921e+02
18.093192 0.652974504 0.39336354 0.042061540 0.761027520 3.273636e+02
18.801816 0.664305949 0.42424369 0.045363489 0.852915978 3.535083e+02
19.168108 0.675637394 0.45553386 0.048709282 0.933664777 3.674164e+02
19.219211 0.686968839 0.48727661 0.052103467 1.001387528 3.693781e+02
20.334434 0.698300283 0.51951819 0.055550992 1.129598008 4.134892e+02
24.909926 0.709631728 0.55230918 0.059057264 1.471112049 6.205044e+02
26.236229 0.720963173 0.58570518 0.062628228 1.643128534 6.883397e+02
30.924022 0.732294618 0.61976766 0.066270458 2.049349072 9.562951e+02
32.253952 0.743626062 0.65456498 0.069991263 2.257494854 1.040317e+03
32.529367 0.754957507 0.69017366 0.073798824 2.400629035 1.058160e+03
32.675968 0.766288952 0.72667986 0.077702356 2.538999708 1.067719e+03
33.275839 0.777620397 0.76418130 0.081712307 2.719045583 1.107281e+03
36.031430 0.788951841 0.80278966 0.085840618 3.092960242 1.298264e+03
37.147186 0.800283286 0.84263354 0.090101040 3.347000059 1.379913e+03
40.320875 0.811614731 0.88386232 0.094509548 3.810707636 1.625773e+03
44.334467 0.822946176 0.92665123 0.099084876 4.392875123 1.965545e+03
46.907165 0.834277620 0.97120790 0.103849228 4.871272904 2.200282e+03
54.418366 0.845609065 1.01778137 0.108829231 5.922308882 2.961359e+03
55.091131 0.856940510 1.06667420 0.114057239 6.283542333 3.035033e+03
55.470305 0.868271955 1.11825971 0.119573169 6.632760113 3.076955e+03
62.939597 0.879603399 1.17300649 0.125427129 7.894332885 3.961393e+03
66.478628 0.890934844 1.23151500 0.131683320 8.754126443 4.419408e+03
67.426518 0.902266289 1.29457343 0.138426027 9.333585010 4.546335e+03
67.603959 0.913597734 1.36324747 0.145769197 9.854574914 4.570295e+03
69.707122 0.924929178 1.43903134 0.153872609 10.726016772 4.859083e+03
69.843246 0.936260623 1.52411994 0.162970954 11.382420482 4.878079e+03
74.848732 0.947592068 1.62194155 0.173430814 12.981076532 5.602333e+03
112.729191 0.958923513 1.73832835 0.185875811 20.953629849 1.270787e+04
163.795081 0.970254958 1.88455395 0.201511408 33.006577315 2.682883e+04
198.660139 0.981586402 2.08767462 0.226331231 44.962993843 3.946585e+04
209.375830 0.992917847 2.45306927 0.286093929 59.901153719 4.383824e+04
Fuente: Elaboración propia

#Cálculo del Estadistico W

W<-(sum(tabla_SW$ai_ui)^2)/sum(tabla_SW$ui2)#Calcula el estadístico de Shapiro-Wilk (W) utilizando la fórmula dada.
print(W)#imprime el valor de W.
## [1] 0.9413208

#Cálculo del Wn y su valor p

mu<-0.0038915*log(n)^3-0.083751*log(n)^2-0.31082*log(n)-1.5861#Calcula el valor esperado de W (mu) utilizando la fórmula dada, que depende del logaritmo del tamaño de muestra.
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n)-0.4803)#Calcula la desviación estándar de W (sigma) utilizando la fórmula dada, que también depende del logaritmo del tamaño de muestra.
Wn<-(log(1-W)-mu)/sigma# Calcula el valor normalizado de W (Wn) utilizando la fórmula dada
print(Wn)#Imprime el valor de Wn.
## [1] 3.241867
p.value<-pnorm(Wn,lower.tail = FALSE)#Calcula el valor p utilizando la función pnorm, que representa la probabilidad de observar un valor de Wn o mayor.
print(p.value)#Imprime el valor p.value.
## [1] 0.0005937472
library(fastGraph)# Carga la biblioteca 'fastGraph', que proporciona funciones para gráficos rápidos.
shadeDist(Wn,ddist = "dnorm",lower.tail = FALSE)# Grafica la distribución normal estándar sombreada desde Wn hacia la derecha. Esto muestra visualmente la probabilidad de observar un valor de Wn o mayor bajo la distribución normal estándar

##lo que hacemos en este caso dado que 0.0005937472 < 0.05 Se rechaza la Hipótesis Nula: ϵ∼N(0,σ2), por lo que los residuos NO siguen una distribución normal.