Base de datos.
library(wooldridge) #carga la librería "wooldridge" que contiene conjuntos de datos para enseñar econometría.
data(hprice1) #carga el conjunto de datos "hprice1" en la memoria de R.
head(force(hprice1),n=5) #fuerza la carga del conjunto de datos "hprice1" y muestra las primeras cinco filas de la base de datos. La función force() se utiliza aquí para evitar una posible demora en la carga de datos y para asegurarse de que los datos se han cargado correctamente. head() es una función que muestra las primeras filas de un objeto, en este caso de "hprice1" con un argumento n=5 que indica que se deben mostrar solo las primeras cinco filas.
300 |
349.1 |
4 |
6126 |
2438 |
1 |
5.703783 |
5.855359 |
8.720297 |
7.798934 |
370 |
351.5 |
3 |
9903 |
2076 |
1 |
5.913503 |
5.862210 |
9.200593 |
7.638198 |
191 |
217.7 |
3 |
5200 |
1374 |
0 |
5.252274 |
5.383118 |
8.556414 |
7.225481 |
195 |
231.8 |
3 |
4600 |
1448 |
1 |
5.273000 |
5.445875 |
8.433811 |
7.277938 |
373 |
319.1 |
4 |
6095 |
2514 |
1 |
5.921578 |
5.765504 |
8.715224 |
7.829630 |
1. Estimación del modelo.
library(stargazer) #Se carga la librería "stargazer" con la función library(stargazer)
modelo_ejercicio<-lm(formula = price~lotsize+sqrft+bdrms, data=hprice1) #Se ajusta un modelo lineal múltiple utilizando la función lm, especificando la variable dependiente price y las variables independientes lotsize, sqrft y bdrms del conjunto de datos hprice1. El modelo ajustado se guarda en el objeto modelo_ejercicio.
stargazer(modelo_ejercicio, title = "Ejercicio", type = "text") #Se utiliza la función stargazer para crear una tabla de resumen del modelo modelo_ejercicio. La tabla se titula "Ejercicio" y se especifica que se quiere que el resultado sea en formato de texto (type = "text").
##
## Ejercicio
## ===============================================
## 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) #Se carga la biblioteca "fitdistrplus" para realizar ajustes de distribución a los datos.
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:wooldridge':
##
## cement
## Loading required package: survival
fit_normal<-fitdist(data = modelo_ejercicio$residuals,distr = "norm") # Se ajusta la distribución normal a los residuos del modelo utilizando la función "fitdist" de la biblioteca "fitdistrplus" y se almacena el resultado en la variable "fit_normal".
plot(fit_normal) #Se grafica el resultado del ajuste de distribución normal a los residuos utilizando la función "plot" de R.

summary(fit_normal) #Se imprime en la consola un resumen de los resultados del ajuste de distribución normal utilizando la función "summary" de R.
## 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
2. Verificación del supuesto de normalidad.
a) Prueba de Normalidad de Jarque Bera
Utilizando tseries.
library(tseries) #Se carga la biblioteca "tseries" para realizar la prueba de Jarque-Bera.
prueba_JB<-jarque.bera.test(modelo_ejercicio$residuals) #Se realiza la prueba de Jarque-Bera a los residuos del modelo utilizando la función "jarque.bera.test" de la biblioteca "tseries" y se almacena el resultado en la variable "prueba_JB".
prueba_JB
##
## Jarque Bera Test
##
## data: modelo_ejercicio$residuals
## X-squared = 32.278, df = 2, p-value = 9.794e-08
library(fastGraph) # carga el paquete fastGraph para realizar gráficos de distribuciones de probabilidad.
alpha_sig<-0.05 #asigna un valor de 0.05 a la variable alpha_sig, que representa el nivel de significancia.
JB<-prueba_JB$statistic #extrae la estadística de prueba de la prueba de Jarque-Bera (prueba_JB) y la almacena en la variable JB.
gl<-prueba_JB$parameter #extrae los grados de libertad de la prueba de Jarque-Bera (prueba_JB) y los almacena en la variable gl.
VC<-qchisq(1-alpha_sig,gl,lower.tail = TRUE) #calcula el valor crítico para la distribución chi-cuadrado utilizando la función qchisq con 1-alpha_sig grados de libertad y un nivel de significancia de 0.05. El argumento lower.tail = TRUE especifica que se requiere el valor crítico en la cola inferior de la distribución.
shadeDist(JB,ddist = "dchisq",
parm1 = gl,
lower.tail = FALSE,xmin=0,
sub=paste("VC:",round(VC,2)," ","JB:",round(JB,2))) #realiza un gráfico de la distribución chi-cuadrado con gl grados de libertad y sombrea el área a la derecha del valor de JB. xmin=0 especifica que se inicie el gráfico en 0. El argumento sub agrega una subetiqueta al gráfico con los valores críticos y de prueba redondeados a dos decimales.

Se rechaza la hipotesis nula debido a que JB:32.28 es > a VC:
5.99
b) Prueba de Kolmogorov Smirnov - Lilliefors.
Cálculo manual
library(dplyr) #carga el paquete dplyr que proporciona herramientas para manipulación de datos.
library(gt) #carga el paquete gt que permite crear tablas con formato para presentaciones.
library(gtExtras) #carga el paquete gtExtras que proporciona funciones adicionales para dar formato a las tablas creadas con gt.
residuos<-modelo_ejercicio$residuals #crea un objeto llamado residuos que contiene los residuos del modelo especificado en el objeto modelo_ejercicio.
residuos %>% #pasa el objeto residuos al siguiente comando utilizando el operador %>%, que permite encadenar varias operaciones.
as_tibble() %>% #convierte el objeto residuos en una tabla (tibble) y lo pasa al siguiente comando.
mutate(posicion=row_number()) %>% # añade una columna llamada posicion que contiene el número de fila de cada observación y pasa la tabla resultante al siguiente comando.
arrange(value) %>% #ordena las observaciones por los valores de los residuos y pasa la tabla resultante al siguiente comando.
mutate(dist1=row_number()/n()) %>% # añade una columna llamada dist1 que contiene la proporción acumulada de observaciones por orden de los valores de residuos y pasa la tabla resultante al siguiente comando.
mutate(dist2=(row_number()-1)/n()) %>% #añade una columna llamada dist2 que contiene la proporción acumulada de observaciones por orden inverso de los valores de residuos y pasa la tabla resultante al siguiente comando.
mutate(zi=as.vector(scale(value,center=TRUE))) %>% #añade una columna llamada zi que contiene los residuos estandarizados (escalados y centrados) y pasa la tabla resultante al siguiente comando.
mutate(pi=pnorm(zi,lower.tail = TRUE)) %>% #añade una columna llamada pi que contiene las probabilidades acumuladas de una distribución normal estándar a partir de los valores de zi y pasa la tabla resultante al siguiente comando.
mutate(dif1=abs(dist1-pi)) %>% #añade una columna llamada dif1 que contiene la diferencia absoluta entre las proporciones acumuladas de observaciones (dist1) y las probabilidades acumuladas de la distribución normal (pi) y pasa la tabla resultante al siguiente comando.
mutate(dif2=abs(dist2-pi)) %>% #añade una columna llamada dif2 que contiene la diferencia absoluta entre las proporciones acumuladas de observaciones en orden inverso (dist2) y las probabilidades acumuladas de la distribución normal (pi) y pasa la tabla resultante al siguiente comando.
rename(residuales=value) -> tabla_KS #cambia el nombre de la columna value por residuales y guarda la tabla resultante en un objeto llamado tabla_KS.
tabla_KS %>% #está tomando la tabla tabla_KS creada anteriormente y utilizándola como entrada para el siguiente paso.
gt() %>% #está tomando la tabla tabla_KS creada anteriormente y utilizándola como entrada para el siguiente paso.
tab_header("Tabla para calcular el Estadistico KS") %>% #está agregando un encabezado a la tabla creado utilizando el texto "Tabla para calcular el Estadistico KS".
tab_source_note(source_note = "Fuente: Elaboración propia") %>% #está agregando una nota de fuente a la tabla creada utilizando el texto "Fuente: Elaboración propia".
tab_style( #está estableciendo el estilo de la tabla utilizando la siguiente configuración:
style = list(
cell_fill(color = "#33FFA8"),
cell_text(style = "italic")
), # está estableciendo el estilo del texto en la celda como cursiva y el color de fondo de la celda como verde claro.
locations = cells_body(
columns = dif1,
rows = dif1==max(dif1)
)) %>% #está especificando que la configuración de estilo se debe aplicar a la columna dif1 en la fila donde el valor de dif1 sea el máximo.
tab_style( #está estableciendo otro estilo de tabla utilizando la siguiente configuración:
style = list(
cell_fill(color = "#EA1250"),
cell_text(style = "italic")
), # está estableciendo el estilo del texto en la celda como cursiva y el color de fondo de la celda como rojo oscuro.
locations = cells_body(
columns = dif2,
rows = dif2==max(dif2)
))#está especificando que la configuración de estilo se debe aplicar a la columna dif2 en la fila donde el valor de dif2 sea el máximo.
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 |
Cálculo del Estadístico D.
D<-max(max(tabla_KS$dif1),max(tabla_KS$dif2)) #Esta línea define la variable D y calcula el valor máximo entre el máximo de tabla_KS$dif1 y el máximo de tabla_KS$dif2. tabla_KS es un objeto creado previamente que contiene las diferencias entre la función de distribución empírica y la función de distribución teórica en cada punto de corte de los datos. dif1 y dif2 son dos columnas de tabla_KS que contienen estas diferencias en puntos específicos. Por lo tanto, max(tabla_KS$dif1) y max(tabla_KS$dif2) encuentran los valores máximos de estas columnas y luego max() selecciona el valor más grande entre ellos. Finalmente, el resultado se almacena en la variable D.
print(D)
## [1] 0.0754392
Valor critico de la tabla de Lilliefors.
En este caso 0.0754392 < 0.093370933 No se rechaza la hipotesis
nula.
Cálculo utilizando nortest.
library(nortest) #Carga el paquete nortest que contiene funciones para probar la normalidad de una distribución.
prueba_KS<-lillie.test(modelo_ejercicio$residuals) # Ejecuta la prueba de Lilliefors para verificar si los residuos del modelo siguen una distribución normal. La prueba Lilliefors es una versión modificada de la prueba de Kolmogorov-Smirnov (KS) para ajustar una distribución teórica a los datos observados. La función lillie.test() realiza la prueba de Lilliefors y devuelve un objeto de prueba que contiene estadísticas y valores p.
prueba_KS
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo_ejercicio$residuals
## D = 0.075439, p-value = 0.2496
c) Prueba de Shapiro - Wilk.
Cálculo Manual.
library(dplyr) # Carga el paquete dplyr, que proporciona funciones para manipular y transformar datos.
library(gt) # Carga el paquete gt, que proporciona herramientas para crear tablas con formato en R.
residuos<-modelo_ejercicio$residuals #Asigna los residuos del objeto modelo_ejercicio a la variable
residuos %>%
as_tibble() %>% #Convierte los residuos en un tibble, una versión moderna del data frame de R, y pasa el resultado como entrada al siguiente comando.
rename(residuales=value) %>% #Renombra la columna del tibble que contiene los residuos como "residuales" y pasa el resultado como entrada al siguiente comando.
arrange(residuales) %>% #Ordena los residuales en orden ascendente y pasa el resultado como entrada al siguiente comando.
mutate(pi=(row_number()-0.375)/(n()+0.25)) %>% #Calcula los percentiles empíricos de los residuos y los almacena en una nueva columna llamada "pi". Esto se hace mediante la fórmula (i-0.375)/(n+0.25), donde i es el rango del residuo y n es el número total de residuos.
mutate(mi=qnorm(pi,lower.tail = TRUE)) %>% #Calcula los valores correspondientes de la distribución normal estándar que tienen los percentiles empíricos, y los almacena en una nueva columna llamada "mi". Esto se hace mediante la función qnorm, que es la función inversa de la función de distribución acumulada de la distribución normal estándar. El argumento lower.tail = TRUE especifica que se están calculando las colas inferiores de la distribución normal.
mutate(ai=0)->tabla_SW #Crea una nueva columna llamada "ai" en el tibble y la inicializa en cero. Los resultados se almacenan en un nuevo objeto llamado tabla_SW.
m<-sum(tabla_SW$mi^2) # calcula la suma de los residuos al cuadrado y lo guarda en la variable m.
n<-nrow(hprice1) # obtiene el número de filas de la base de datos hprice1 y lo guarda en la variable n.
theta<-1/sqrt(n) # calcula el valor de theta y lo guarda en la variable theta.
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 última fila de la tabla_SW según la fórmula del estadístico W y lo guarda en la posición n de la columna ai de la tabla_SW.
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) #calcula el valor de ai para la penúltima fila de la tabla_SW según la fórmula del estadístico W y lo guarda en la posición n-1 de la columna ai de la tabla_SW.
tabla_SW$ai[1]<- -tabla_SW$ai[n] #calcula el valor de ai para la primera fila de la tabla_SW según la fórmula del estadístico W y lo guarda en la posición 1 de la columna ai de la tabla_SW.
tabla_SW$ai[2]<- -tabla_SW$ai[n-1] #calcula el valor de ai para la segunda fila de la tabla_SW según la fórmula del estadístico W y lo guarda en la posición 2 de la columna ai de la tabla_SW.
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) #calcula el valor de omega según la fórmula del estadístico W y lo guarda en la variable omega.
tabla_SW$ai[3:(n-2)]<-tabla_SW$mi[3:(n-2)]/sqrt(omega) #calcula el valor de ai para las filas 3 hasta n-2 de la tabla_SW según la fórmula del estadístico W y los guarda en las posiciones correspondientes de la columna ai de la tabla_SW.
tabla_SW %>%
mutate(ai_ui=ai*residuales,ui2=residuales^2) ->tabla_SW #añade dos nuevas columnas a la tabla_SW, ai_ui y ui2, que contienen el resultado de multiplicar ai por los residuos y los residuos al cuadrado, respectivamente, y guarda la tabla_SW actualizada en la misma variable.
tabla_SW %>%
gt() %>% tab_header("Tabla para calcular el Estadistico W") %>%
tab_source_note(source_note = "Fuente: Elaboración propia") #crea una tabla con la información contenida en la tabla_SW y le agrega un encabezado y una nota de fuente.
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 Estadístico W
W<-(sum(tabla_SW$ai_ui)^2)/sum(tabla_SW$ui2) #crea una nueva variable llamada "W" y asigna el valor de lo que se calculará a la derecha de la flecha, eleva al cuadrado la suma de la columna "ai_ui" de la tabla_SW. Esto es parte del numerador del estadístico W, suma los cuadrados de los residuos (columna "ui2" en la tabla_SW).
print(W) #imprime en la consola el valor de W, que es el resultado del cálculo anterior.
## [1] 0.9413208
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 #Calcula el valor de mu mediante una fórmula matemática que involucra el logaritmo natural de n (el número de observaciones).
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n)-0.4803) #Calcula el valor de sigma mediante otra fórmula matemática que involucra el logaritmo natural de n.
Wn<-(log(1-W)-mu)/sigma #Calcula el valor de Wn mediante otra fórmula matemática que utiliza el valor de W previamente calculado, y los valores de mu y sigma calculados en los pasos anteriores.
print(Wn) #Imprime el valor de Wn.
## [1] 3.241867
p.value<-pnorm(Wn,lower.tail = FALSE) #Calcula el valor p asociado a Wn mediante la función de distribución acumulada de la distribución normal (que se asume por la prueba de Shapiro-Wilk).
print(p.value) # Imprime el valor de p.
## [1] 0.0005937472
library(fastGraph) #Carga la librería fastGraph.
shadeDist(Wn,ddist = "dnorm", lower.tail = FALSE) #Crea un gráfico que muestra la distribución normal y sombrea el área correspondiente a la cola derecha de la distribución (es decir, el área asociada a un valor igual o mayor que Wn).

En este caso 0.0005937472 < 0.05 Se rechaza la hipotesis
nula.
Cálculo utilizando la libreria stats.
prueba_SW<-shapiro.test(modelo_ejercicio$residuals) #Se realiza una prueba de normalidad de Shapiro-Wilk en los residuos del modelo y se guarda el resultado en la variable prueba_SW.
print(prueba_SW) #Se imprime en la consola el resultado de la prueba de normalidad, que incluye el valor del estadístico de prueba y el p-valor obtenido.
##
## Shapiro-Wilk normality test
##
## data: modelo_ejercicio$residuals
## W = 0.94132, p-value = 0.0005937
Cálculo del Wn
Wn_salida<-qnorm(prueba_SW$p.value,lower.tail = FALSE) #Se calcula el valor de la estadística de prueba de Shapiro-Wilk transformado en una distribución normal estándar utilizando la función qnorm(). El argumento prueba_SW$p.value es el p-valor obtenido en la prueba de normalidad de Shapiro-Wilk, y lower.tail = FALSE indica que se está calculando el percentil de la distribución normal estándar que está por encima del valor prueba_SW$p.value.
print(Wn_salida) #Se imprime en la consola el valor de la estadística de prueba de Shapiro-Wilk transformado en una distribución normal estándar. Este valor se utiliza para compararlo con los valores críticos de la distribución normal estándar y determinar si se rechaza o no la hipótesis nula de normalidad.
## [1] 3.241867