Prueba de normalidad

Importación de datos

library(wooldridge) #Incluí el paquete wooldridge, lo que me permite acceder a los conjuntos de datos y funciones que contiene.
data(hprice1) #Esta función se emplea para importar conjuntos de datos al entorno de trabajo de R.
head(force(hprice1),n=5) #Visualiza las primeras 5 observaciones del conjunto de datos.
##   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 del modelo

library(stargazer) # carga el paquete stargazer, que se utiliza para crear tablas de resumen elegantes de modelos de regresión en R.
modelo_lineal<-lm(formula= price~lotsize+sqrft+bdrms,data = hprice1) #Ajusté un modelo de regresión lineal múltiple utilizando la función lm() de R. La fórmula que especificamos indica que la variable dependiente es el precio (price), mientras que las variables independientes son el tamaño del lote (lotsize), la superficie en pies cuadrados (sqrft), y el número de dormitorios (bdrms). Los datos utilizados para este ajuste provienen del conjunto de datos hprice1. El resultado del modelo ajustado se guarda en un objeto llamado modelo_lineal.
stargazer(modelo_lineal, title = "Ejercicio pruebas de normalidad", type = "text") #Generé una tabla de resumen del modelo modelo_lineal utilizando la función stargazer(). Utilicé la opción title para especificar un título para la tabla, y la opción type para indicar el tipo de salida que deseaba (en este caso, elegí "text" para generar una tabla en formato de texto simple).
## 
## Ejercicio pruebas de normalidad
## ===============================================
##                         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 los residuos a la Distribución Normal

library(fitdistrplus) #ncluí el paquete fitdistrplus, el cual se emplea para realizar ajustes de distribuciones de probabilidad a conjuntos de datos y llevar a cabo pruebas de bondad de ajuste..
fit_normal<-fitdist(data = modelo_lineal$residuals,distr = "norm") #Realicé un ajuste de una distribución normal a los residuos del modelo de regresión lineal múltiple modelo_lineal utilizando la función fitdist(). Especifiqué los datos de los cuales se ajustaría la distribución mediante el argumento data (en este caso, los residuos del modelo), y especificé la distribución que se ajustaría mediante el argumento distr (en este caso, la normal). El resultado de este ajuste se guardó en un objeto llamado fit_normal.
plot(fit_normal) #crea un gráfico para visualizar la bondad de ajuste de la distribución normal ajustada utilizando la función plot(). 

summary(fit_normal) #aplica la función summary() al objeto fit_normal para mostrar un resumen de los resultados del ajuste. 
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##                      estimate Std. Error
## mean -0.000000000000002321494   6.231624
## sd   58.457813569303191059134   4.406423
## Loglikelihood:  -482.8775   AIC:  969.7549   BIC:  974.7096 
## Correlation matrix:
##      mean sd
## mean    1  0
## sd      0  1

Prueba de Normalidad de Jarque Bera

Usando tseries

library(tseries) #carga el paquete tseries, que proporciona herramientas para el análisis de series de tiempo y modelos econométricos.
salida_JB<-jarque.bera.test(modelo_lineal$residuals) #Utilicé la función jarque.bera.test() para realizar una prueba de Jarque-Bera de normalidad en los datos. Esta función devuelve varios valores, entre ellos el estadístico de prueba y el valor p asociado. El resultado de la prueba se guardó en un objeto llamado salida_JB.
salida_JB #muestra los resultados de la prueba de Jarque-Bera de normalidad en los residuos del modelo de regresión lineal múltiple.
## 
##  Jarque Bera Test
## 
## data:  modelo_lineal$residuals
## X-squared = 32.278, df = 2, p-value = 0.00000009794
library(fastGraph) #carga el paquete fastGraph, que proporciona herramientas para crear gráficos rápidos y eficientes en R.
alpha_sig<-0.05 #asigna el nivel de significancia alpha_sig a 0.05.
JB<-salida_JB$statistic #xtrae el valor del estadístico de prueba JB de la salida de la prueba de Jarque-Bera de normalidad salida_JB. El valor del estadístico se almacena en un objeto llamado JB.
gl<-salida_JB$parameter #extrae el número de grados de libertad gl de la salida de la prueba de Jarque-Bera de normalidad salida_JB. El número de grados de libertad se almacena en un objeto llamado gl.
VC<-qchisq(1-alpha_sig,gl,lower.tail = TRUE) #calcula el valor crítico VC de la distribución chi-cuadrado con gl grados de libertad utilizando un nivel de significancia alpha_sig.
shadeDist(JB,ddist = "dchisq", 
          parm1 = gl,
          lower.tail = FALSE,xmin = 0, 
          sub =paste("VC:",round(VC,2)," ",
                     "JB:",round(JB,2))) #La función shadeDist crea un gráfico en el que se sombrea el área a la derecha de un valor crítico (obtenido a partir de la distribución chi-cuadrado) utilizando el estadístico de prueba de Jarque-Bera (JB) como variable aleatoria. Los argumentos ddist, parm1 y xmin indican la distribución de probabilidad, el número de grados de libertad y el valor mínimo del eje x a graficar, respectivamente. El argumento lower.tail = FALSE se utiliza para sombrear el área a la derecha del valor crítico. Por último, el argumento sub agrega una leyenda al gráfico con información sobre el valor crítico y el estadístico de prueba JB.

Prueba de Kolmogorov Smirnov- Lilliefors

Calculo Manual

library(dplyr) # carga el paquete dplyr para manipulación de datos.
library(gt) #carga el paquete gt para la creación de tablas con formato.
library(gtExtras) #carga el paquete gtExtras para la creación de tablas con formato avanzado.
residuos<-modelo_lineal$residuals # asigna a la variable residuos el vector de residuos del modelo lineal
residuos %>%  
  as_tibble() %>% #convierte el vector de residuos en un tibble y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(posicion=row_number()) %>% #crea una columna llamada posicion que indica el número de fila de cada residuo en el tibble, y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  arrange(value) %>% # ordena el tibble de manera ascendente según los valores de los residuos y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(dist1=row_number()/n()) %>% #crea una columna llamada dist1 que indica la proporción acumulada de residuos en la distribución empírica, y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(dist2=(row_number()-1)/n()) %>%  #crea una columna llamada dist2 que indica la proporción acumulada de residuos en la distribución empírica, pero con una corrección de continuidad, y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(zi=as.vector(scale(value,center=TRUE))) %>% #crea una columna llamada zi que indica la desviación estandar de cada residuo con respecto a la media, y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>%  #crea una columna llamada pi que indica la probabilidad acumulada de cada residuo en la distribución normal estándar, y pasa el resultado como argumento a la siguiente función usando el operador %>%.
  mutate(dif1=abs(dist1-pi)) %>% # crea una columna llamada dif1 que indica la diferencia entre las proporciones acumuladas de la distribución empírica y la distribución normal estándar en cada fila del tibble.
  mutate(dif2=abs(dist2-pi)) %>% #rea una columna llamada dif2 que indica la diferencia entre las proporciones acumuladas (con corrección de continuidad) de la distribución empírica y la distribución normal estándar en cada fila del tibble.
  rename(residuales=value) -> tabla_KS # renombra la columna value como residuales y asigna el tibble resultante a la variable tabla_KS.

## Formato 

tabla_KS %>% #se utiliza para enviar la tabla de datos a la siguiente función.
  gt() %>%  #se utiliza para crear una tabla con los datos enviados y enviarla a la siguiente función.
  tab_header("Tabla para calcular el Estadistico KS") %>% #se utiliza para agregar un encabezado a la tabla creada.
  tab_source_note(source_note = "Fuente: Elaboración propia") %>% # se utiliza para agregar una nota de fuente a la tabla creada.
  tab_style( style = list(cell_fill(color = "#ffff00"), 
      cell_text(style = "italic")),locations = cells_body(         columns = dif1,  
      rows = dif1==max(dif1))) %>% #se utiliza para agregar un estilo a las celdas de la tabla, se colorea la celda de color verde claro y se escribe en cursiva el texto que contiene dicha celda. Además, se identifican las celdas que tienen el valor máximo de la columna dif1.
   tab_style(style = list(cell_fill(color = "#ff00b1"),  
    cell_text(style = "italic")),
    locations = cells_body( 
      columns = dif2,  
      rows = dif2==max(dif2))) #se utiliza para agregar un estilo a las celdas de la tabla, se colorea la celda de color verde agua y se escribe en cursiva el texto que contiene dicha celda. Además, se identifican las celdas que tienen el valor máximo de la columna dif2.
Tabla para calcular el Estadistico KS
residuales posicion 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 del estadistico D

D<-max(max(tabla_KS$dif1),max(tabla_KS$dif2)) #Se define la variable D como el máximo valor entre el máximo de la columna dif1 y el máximo de la columna dif2 de la tabla tabla_KS.
print(D) #se imprime en consola el valor de la variable D.
## [1] 0.0754392

Valor critico de la tabla de Lilliefors.

Conclusión: Dado que 0.0754392 < 0.093371. No se rechaza la hipotesis nula por lo que los residuos siguen una distribución normal.

Usando nortest

library(nortest) #carga el paquete nortest para hacer pruebas de normalidad en R.
prueba_KS<-lillie.test(modelo_lineal$residuals) #realiza la prueba de normalidad de Lilliefors en los residuos del modelo lineal y guarda el resultado en la variable prueba_KS. Esta prueba se utiliza para comprobar si una muestra se ajusta a una distribución normal.
prueba_KS
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_lineal$residuals
## D = 0.075439, p-value = 0.2496

Prueba de Shapiro - Wilk

Calculo manual

library(dplyr) #Carga el paquete "dplyr" para usar sus funciones en el código.
library(gt) #Carga el paquete "gt" para usar sus funciones en el código, específicamente para la creación de tablas.
residuos<-modelo_lineal$residuals #Crea un objeto llamado "residuos" que almacena los residuos del modelo lineal en la variable "modelo_lineal".
residuos %>%
  as_tibble() %>%
  rename(residuales=value) %>%
  arrange(residuales) %>%
  mutate(pi=(row_number()-0.375)/(n()+0.25)) %>%
  mutate(mi=qnorm(pi,lower.tail = TRUE)) %>% 
  mutate(ai=0)->tabla_SW
#Toma los residuos del modelo, los convierte a un "tibble", los renombra como "residuales", los ordena de manera ascendente y luego se realizan una serie de cálculos para obtener las variables "pi", "mi", y "ai", y se almacenan en el objeto "tabla_SW".

m<-sum(tabla_SW$mi^2) #Se calcula la suma de los cuadrados de la variable "mi" en el objeto "tabla_SW" y se almacena en la variable "m".
n<-nrow(hprice1) #Se calcula el número de filas de "hprice1" y se almacena en la variable "n".
theta<-1/sqrt(n) #Se calcula la variable "theta" como el inverso de la raíz cuadrada de "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) #Se calcula el valor de "ai" para el último elemento de la variable "tabla_SW", según una fórmula dada.
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[n-1]/sqrt(m) #Se calcula el valor de "ai" para el penúltimo elemento de la variable "tabla_SW", según una fórmula dada.
tabla_SW$ai[1]<- -tabla_SW$ai[n] #Se asigna el valor negativo de "ai" correspondiente al último elemento de "tabla_SW" al primer elemento de "ai".
tabla_SW$ai[2]<- -tabla_SW$ai[n-1] #Se asigna el valor negativo de "ai" correspondiente al penúltimo elemento de "tabla_SW" al segundo elemento de "ai".
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 la variable "omega" según una fórmula dada y las variables "mi" y "ai" almacenadas en "tabla_SW".

tabla_SW$ai[3:(n-2)] <- tabla_SW$mi[3:(n-2)] / sqrt(omega) # calcula los valores de 'ai' para las filas 3 hasta n-2 de la tabla_SW según una fórmula específica

tabla_SW %>% # pasa 'tabla_SW' al operador pipe
  mutate(ai_ui = ai * residuales, ui2 = residuales^2) -> tabla_SW # crea dos nuevas columnas en 'tabla_SW', 'ai_ui' y 'ui2', que son multiplicaciones y cálculos de los valores de las columnas 'ai' y 'residuales', y guarda el resultado como 'tabla_SW'

tabla_SW %>%
  gt() %>% # convierte 'tabla_SW' en una tabla utilizando el paquete 'gt'
  tab_header("Tabla para calcular el Estadistico W") %>% # establece el encabezado de la tabla
  tab_source_note(source_note = "Fuente: Elaboración propia") # establece la nota de fuente para la tabla
Tabla para calcular el Estadistico W
residuales pi mi ai ai_ui ui2
-120.026447 0.007082153 -2.45306927 -0.286093929 34.338837782 14406.34799223
-115.508697 0.018413598 -2.08767462 -0.226331231 26.143225495 13342.25903657
-107.080889 0.029745042 -1.88455395 -0.201511408 21.578020632 11466.31670225
-91.243980 0.041076487 -1.73832835 -0.185875811 16.960048752 8325.46388922
-85.461169 0.052407932 -1.62194155 -0.173430814 14.821600075 7303.61136157
-77.172687 0.063739377 -1.52411994 -0.162970954 12.576906330 5955.62354189
-74.702719 0.075070822 -1.43903134 -0.153872609 11.494702279 5580.49626206
-65.502849 0.086402266 -1.36324747 -0.145769197 9.548297773 4290.62326804
-63.699108 0.097733711 -1.29457343 -0.138426027 8.817614500 4057.57641853
-62.566594 0.109065156 -1.23151500 -0.131683320 8.238976839 3914.57869135
-59.845223 0.120396601 -1.17300649 -0.125427129 7.506214499 3581.45072682
-54.466158 0.131728045 -1.11825971 -0.119573169 6.512691096 2966.56233834
-54.300415 0.143059490 -1.06667420 -0.114057239 6.193355472 2948.53511008
-52.129801 0.154390935 -1.01778137 -0.108829231 5.673246083 2717.51610406
-51.441108 0.165722380 -0.97120790 -0.103849228 5.342119306 2646.18755812
-48.704980 0.177053824 -0.92665123 -0.099084876 4.825926905 2372.17509746
-48.350295 0.188385269 -0.88386232 -0.094509548 4.569564512 2337.75102457
-47.855859 0.199716714 -0.84263354 -0.090101040 4.311862673 2290.18324033
-45.639765 0.211048159 -0.80278966 -0.085840618 3.917745629 2082.98814155
-43.142550 0.222379603 -0.76418130 -0.081712307 3.525277277 1861.27961161
-41.749618 0.233711048 -0.72667986 -0.077702356 3.244043648 1743.03058469
-40.869022 0.245042493 -0.69017366 -0.073798824 3.016085791 1670.27697055
-37.749811 0.256373938 -0.65456498 -0.069991263 2.642156946 1425.04821452
-36.663785 0.267705382 -0.61976766 -0.066270458 2.429725818 1344.23312095
-36.646568 0.279036827 -0.58570518 -0.062628228 2.295109622 1342.97093753
-33.801248 0.290368272 -0.55230918 -0.059057264 1.996209250 1142.52439130
-29.766931 0.301699717 -0.51951819 -0.055550992 1.653582575 886.07020942
-26.696234 0.313031161 -0.48727661 -0.052103467 1.390966354 712.68890388
-24.271531 0.324362606 -0.45553386 -0.048709282 1.182248861 589.10722688
-23.651448 0.335694051 -0.42424369 -0.045363489 1.072912217 559.39099788
-19.683427 0.347025496 -0.39336354 -0.042061540 0.827915257 387.43729851
-17.817835 0.358356941 -0.36285409 -0.038799229 0.691318234 317.47522771
-16.762094 0.369688385 -0.33267878 -0.035572645 0.596272007 280.96778010
-16.596960 0.381019830 -0.30280344 -0.032378138 0.537378676 275.45909399
-16.271207 0.392351275 -0.27319601 -0.029212277 0.475319006 264.75217651
-13.815798 0.403682720 -0.24382619 -0.026071824 0.360203050 190.87627634
-13.462160 0.415014164 -0.21466524 -0.022953704 0.309006447 181.22976154
-12.081520 0.426345609 -0.18568573 -0.019854987 0.239878409 145.96311543
-11.629207 0.437677054 -0.15686137 -0.016772858 0.195055032 135.23845458
-11.312669 0.449008499 -0.12816677 -0.013704604 0.155035654 127.97648221
-8.236558 0.460339943 -0.09957734 -0.010647596 0.087699542 67.84088513
-7.662789 0.471671388 -0.07106908 -0.007599268 0.058231584 58.71832836
-6.752801 0.483002833 -0.04261848 -0.004557105 0.030773222 45.60032533
-6.707262 0.494334278 -0.01420234 -0.001518626 0.010185824 44.98736398
-6.402439 0.505665722 0.01420234 0.001518626 -0.009722911 40.99122172
-5.446904 0.516997167 0.04261848 0.004557105 -0.024822110 29.66876028
-3.537785 0.528328612 0.07106908 0.007599268 -0.026884576 12.51592288
-2.824941 0.539660057 0.09957734 0.010647596 -0.030078835 7.98029397
-2.745208 0.550991501 0.12816677 0.013704604 -0.037621996 7.53616965
-0.195089 0.562322946 0.15686137 0.016772858 -0.003272200 0.03805971
1.399296 0.573654391 0.18568573 0.019854987 0.027782994 1.95802794
5.363331 0.584985836 0.21466524 0.022953704 0.123108313 28.76531940
6.700640 0.596317280 0.24382619 0.026071824 0.174697904 44.89857663
7.386314 0.607648725 0.27319601 0.029212277 0.215771059 54.55763860
9.099900 0.618980170 0.30280344 0.032378138 0.294637808 82.80817401
12.433611 0.630311615 0.33267878 0.035572645 0.442296424 154.59467612
16.718018 0.641643059 0.36285409 0.038799229 0.648646203 279.49212715
18.093192 0.652974504 0.39336354 0.042061540 0.761027520 327.36359375
18.801816 0.664305949 0.42424369 0.045363489 0.852915978 353.50828232
19.168108 0.675637394 0.45553386 0.048709282 0.933664777 367.41636183
19.219211 0.686968839 0.48727661 0.052103467 1.001387528 369.37806665
20.334434 0.698300283 0.51951819 0.055550992 1.129598008 413.48922446
24.909926 0.709631728 0.55230918 0.059057264 1.471112049 620.50439009
26.236229 0.720963173 0.58570518 0.062628228 1.643128534 688.33970624
30.924022 0.732294618 0.61976766 0.066270458 2.049349072 956.29510728
32.253952 0.743626062 0.65456498 0.069991263 2.257494854 1040.31742689
32.529367 0.754957507 0.69017366 0.073798824 2.400629035 1058.15970869
32.675968 0.766288952 0.72667986 0.077702356 2.538999708 1067.71890359
33.275839 0.777620397 0.76418130 0.081712307 2.719045583 1107.28147309
36.031430 0.788951841 0.80278966 0.085840618 3.092960242 1298.26396526
37.147186 0.800283286 0.84263354 0.090101040 3.347000059 1379.91339592
40.320875 0.811614731 0.88386232 0.094509548 3.810707636 1625.77293960
44.334467 0.822946176 0.92665123 0.099084876 4.392875123 1965.54494196
46.907165 0.834277620 0.97120790 0.103849228 4.871272904 2200.28216686
54.418366 0.845609065 1.01778137 0.108829231 5.922308882 2961.35853839
55.091131 0.856940510 1.06667420 0.114057239 6.283542333 3035.03273452
55.470305 0.868271955 1.11825971 0.119573169 6.632760113 3076.95468678
62.939597 0.879603399 1.17300649 0.125427129 7.894332885 3961.39282116
66.478628 0.890934844 1.23151500 0.131683320 8.754126443 4419.40796540
67.426518 0.902266289 1.29457343 0.138426027 9.333585010 4546.33534619
67.603959 0.913597734 1.36324747 0.145769197 9.854574914 4570.29533539
69.707122 0.924929178 1.43903134 0.153872609 10.726016772 4859.08292257
69.843246 0.936260623 1.52411994 0.162970954 11.382420482 4878.07906512
74.848732 0.947592068 1.62194155 0.173430814 12.981076532 5602.33268291
112.729191 0.958923513 1.73832835 0.185875811 20.953629849 12707.87061041
163.795081 0.970254958 1.88455395 0.201511408 33.006577315 26828.82842547
198.660139 0.981586402 2.08767462 0.226331231 44.962993843 39465.85101402
209.375830 0.992917847 2.45306927 0.286093929 59.901153719 43838.23810785
Fuente: Elaboración propia

Calculo del estadistico W

W<-(sum(tabla_SW$ai_ui)^2)/sum(tabla_SW$ui2) #calcula el estadístico W para probar la normalidad de los residuos del modelo de regresión lineal.
print(W) #imprime el valor de W en la consola. 
## [1] 0.9413208

Calculo del Wn y su p value

mu<-0.0038915*log(n)^3-0.083751*log(n)^2-0.31082*log(n)-1.5861 #Esta línea calcula el valor de mu, que es un término utilizado en el cálculo de la estadística Wn. 
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n)-0.4803) #Esta línea calcula el valor de sigma, otro término utilizado en el cálculo de la estadística Wn.
Wn<-(log(1-W)-mu)/sigma #Esta línea calcula el valor de la estadística Wn utilizando la fórmula que implica los valores previamente calculados de mu, sigma y la estadística W (que se define en alguna otra parte del código).
print(Wn) #Imprime el valor de la estadística Wn calculado en la consola.
## [1] 3.241867
p.value<-pnorm(Wn,lower.tail = FALSE) #calcula el valor p de la distribución normal estándar utilizando la función pnorm en R. La función pnorm se utiliza para calcular los valores de probabilidad acumulada de una distribución normal estándar en R. En este contexto, el valor de Wn se usa como argumento para la función pnorm(). Además, el parámetro lower.tail = FALSE se establece en FALSE para calcular la probabilidad acumulada en la cola superior de la distribución normal estándar.
print(p.value) #imprime el valor de p.value en la consola de R.
## [1] 0.0005937472
library(fastGraph) 
shadeDist(Wn,ddist = "dnorm",lower.tail = FALSE) # se utiliza para sombrear el área bajo la curva de una función de densidad de probabilidad.

Dado que: 0.0005937472 < 0.05, se rechaza la hipotesis nula, los residuos no siguen una distribución normal.

Usando la libreria stats

salida_SW<-shapiro.test(modelo_lineal$residuals)
print(salida_SW) #Se utiliza para realizar una prueba de normalidad de los residuos de un modelo de regresión lineal. En este caso, parece que la prueba se está realizando en el objeto residuals del objeto modelo_lineal.
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_lineal$residuals
## W = 0.94132, p-value = 0.0005937
Wn_salida<-qnorm(salida_SW$p.value,lower.tail = FALSE)
print(Wn_salida) #Transformé el valor p obtenido de la prueba de normalidad previamente realizada en una estadística de prueba de normalidad llamada estadística Wn. Esto se logró mediante la función inversa de la distribución de probabilidad normal estándar qnorm().
## [1] 3.241867