# Librerias

library(wooldridge) 
library(dplyr)      
library(gt)         
library(gtExtras) 
library(tseries)    
library(nortest)    
library(fastGraph)  
library(fitdistrplus) 
library(stargazer)  

head(hprice1,n=6)
##     price assess bdrms lotsize sqrft colonial   lprice  lassess llotsize
## 1 300.000  349.1     4    6126  2438        1 5.703783 5.855359 8.720297
## 2 370.000  351.5     3    9903  2076        1 5.913503 5.862210 9.200593
## 3 191.000  217.7     3    5200  1374        0 5.252274 5.383118 8.556414
## 4 195.000  231.8     3    4600  1448        1 5.273000 5.445875 8.433811
## 5 373.000  319.1     4    6095  2514        1 5.921578 5.765504 8.715224
## 6 466.275  414.5     5    8566  2754        1 6.144775 6.027073 9.055556
##     lsqrft
## 1 7.798934
## 2 7.638198
## 3 7.225482
## 4 7.277938
## 5 7.829630
## 6 7.920810

1.Introducción

# Generar el dataframe 
data(mtcars)

#Estimacion del modelo
data(mtcars)
modelo_mtcars <- lm(mpg ~ disp + hp + wt + qsec, data = mtcars)
# Presentación de resultados estilo stargazer
stargazer(modelo_mtcars, title = "Modelo para mtcars", type = "html")
Modelo para mtcars
Dependent variable:
mpg
disp 0.003
(0.011)
hp -0.019
(0.016)
wt -4.609***
(1.266)
qsec 0.544
(0.466)
Constant 27.330***
(8.639)
Observations 32
R2 0.835
Adjusted R2 0.811
Residual Std. Error 2.622 (df = 27)
F Statistic 34.195*** (df = 4; 27)
Note: p<0.1; p<0.05; p<0.01
# Residuos para prueba de normalidad
residuos <- modelo_mtcars$residuals

2.Diagnóstico de Multicolinealidad

# Cálculo “manual” del Índice de Condición
library(stargazer)
X_mat<-model.matrix(modelo_mtcars)
stargazer(head(X_mat,n=6),type="html")
(Intercept) disp hp wt qsec
Mazda RX4 1 160 110 2.620 16.460
Mazda RX4 Wag 1 160 110 2.875 17.020
Datsun 710 1 108 93 2.320 18.610
Hornet 4 Drive 1 258 110 3.215 19.440
Hornet Sportabout 1 360 175 3.440 17.020
Valiant 1 225 105 3.460 20.220
XX_matrix<-t(X_mat)%*%X_mat
stargazer(XX_matrix,type = "html")
(Intercept) disp hp wt qsec
(Intercept) 32 7,383.100 4,694 102.952 571.160
disp 7,383.100 2,179,627.000 1,291,364.000 27,091.490 128,801.500
hp 4,694 1,291,364.000 834,278 16,471.740 81,092.160
wt 102.952 27,091.490 16,471.740 360.901 1,828.095
qsec 571.160 128,801.500 81,092.160 1,828.095 10,293.480
library(stargazer)
options(scipen = 999)
Sn<-solve(diag(sqrt(diag(XX_matrix))))
stargazer(Sn,type = "html")
0.177 0 0 0 0
0 0.001 0 0 0
0 0 0.001 0 0
0 0 0 0.053 0
0 0 0 0 0.010
#XtX normalizada
library(stargazer)
XX_norm<-(Sn%*%XX_matrix)%*%Sn
stargazer(XX_norm,type = "html",digits = 4)
1 0.8840 0.9085 0.9580 0.9952
0.8840 1 0.9576 0.9659 0.8599
0.9085 0.9576 1 0.9493 0.8751
0.9580 0.9659 0.9493 1 0.9485
0.9952 0.8599 0.8751 0.9485 1
#autovalores
library(stargazer)
lambdas<-eigen(XX_norm,symmetric = TRUE)
stargazer(lambdas$values,type = "text")
## 
## =============================
## 4.721 0.217 0.050 0.010 0.001
## -----------------------------
#Cálculo de κ(x): Índice de Condición
K<-sqrt(max(lambdas$values)/min(lambdas$values))
print(K)
## [1] 57.48052
#Cálculo del Indice de Condición usando librería “mctest”
library(mctest)
X_mat<-model.matrix(modelo_mtcars)
mctest(mod = modelo_mtcars)
## 
## Call:
## omcdiag(mod = mod, Inter = TRUE, detr = detr, red = red, conf = conf, 
##     theil = theil, cn = cn)
## 
## 
## Overall Multicollinearity Diagnostics
## 
##                        MC Results detection
## Determinant |X'X|:         0.0247         0
## Farrar Chi-Square:       106.7504         1
## Red Indicator:             0.6542         1
## Sum of Lambda Inverse:    23.2023         1
## Theil's Method:            0.7121         1
## Condition Number:         57.4805         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test
#Prueba de Farrar-Glaubar
#  Calculo de |R|
library(stargazer)
Zn<-scale(X_mat[,-1])
stargazer(head(Zn,n=6),type = "text")
## 
## =============================================
##                    disp    hp     wt    qsec 
## ---------------------------------------------
## Mazda RX4         -0.571 -0.535 -0.610 -0.777
## Mazda RX4 Wag     -0.571 -0.535 -0.350 -0.464
## Datsun 710        -0.990 -0.783 -0.917 0.426 
## Hornet 4 Drive    0.220  -0.535 -0.002 0.890 
## Hornet Sportabout 1.043  0.413  0.228  -0.464
## Valiant           -0.046 -0.608 0.248  1.327 
## ---------------------------------------------
#Calcular la matriz R
library(stargazer)
n<-nrow(Zn)
R<-(t(Zn)%*%Zn)*(1/(n-1))
#También se puede calcular R a través de cor(X_mat[,-1])
stargazer(R,type = "text",digits = 4)
## 
## ====================================
##       disp     hp      wt     qsec  
## ------------------------------------
## disp    1    0.7909  0.8880  -0.4337
## hp   0.7909     1    0.6587  -0.7082
## wt   0.8880  0.6587     1    -0.1747
## qsec -0.4337 -0.7082 -0.1747    1   
## ------------------------------------
#Calcular |R|
determinante_R<-det(R)
print(determinante_R)
## [1] 0.02466606
#Aplicando la prueba de Farrer Glaubar (Bartlett)
# Estadistico χ2FG
m<-ncol(X_mat[,-1])
n<-nrow(X_mat[,-1])
chi_FG<--(n-1-(2*m+5)/6)*log(determinante_R)
print(chi_FG)
## [1] 106.7504
#Valor Critico
gl<-m*(m-1)/2
VC<-qchisq(p = 0.95,df = gl)
print(VC)
## [1] 12.59159
#Cálculo de FG usando “mctest”
library(mctest)
mctest::omcdiag(mod = modelo_mtcars)
## 
## Call:
## mctest::omcdiag(mod = modelo_mtcars)
## 
## 
## Overall Multicollinearity Diagnostics
## 
##                        MC Results detection
## Determinant |X'X|:         0.0247         0
## Farrar Chi-Square:       106.7504         1
## Red Indicator:             0.6542         1
## Sum of Lambda Inverse:    23.2023         1
## Theil's Method:            0.7121         1
## Condition Number:         57.4805         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test
#Cálculo de FG usando la “psych”
library(psych)
FG_test<-cortest.bartlett(X_mat[,-1])
print(FG_test)
## $chisq
## [1] 106.7504
## 
## $p.value
## [1] 0.000000000000000000009757936
## 
## $df
## [1] 6
#VIF’s para el modelo estimado
inversa_R<-solve(R)
VIFs<-diag(inversa_R)
print(VIFs)
##     disp       hp       wt     qsec 
## 7.985439 5.166758 6.916942 3.133119
#Cálculo de los VIF’s usando “performance”
library(performance)
VIFs<-multicollinearity(x = modelo_mtcars,verbose = FALSE)
VIFs
## # Check for Multicollinearity
## 
## Low Correlation
## 
##  Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##  qsec 3.13 [2.10,  5.15]     1.77      0.32     [0.19, 0.48]
## 
## Moderate Correlation
## 
##  Term  VIF    VIF 95% CI adj. VIF Tolerance Tolerance 95% CI
##  disp 7.99 [4.92, 13.44]     2.83      0.13     [0.07, 0.20]
##    hp 5.17 [3.28,  8.62]     2.27      0.19     [0.12, 0.30]
##    wt 6.92 [4.30, 11.61]     2.63      0.14     [0.09, 0.23]
#Cálculo de los VIF’s usando “car”
library(car)
VIFs_car<-vif(modelo_mtcars)
print(VIFs_car)
##     disp       hp       wt     qsec 
## 7.985439 5.166758 6.916942 3.133119
#Cálculo de los VIF’s usando “mctest”
library(mctest)
mc.plot(mod = modelo_mtcars,vif = 2)

  1. Si el valor de VIF es mayor a 5 o 10, ¿qué implica esto para la interpretación de los coeficientes?

Un valor de VIF superior a 5 o 10 indica la presencia de “multicolinealidad severa”, lo que implica que las variables independientes están altamente correlacionadas entre sí y la información que aportan al modelo es redundante. Para la interpretación, esto se traduce en una “inflación de los errores estándar”, lo que vuelve a los coeficientes sumamente inestables y poco precisos; esto provoca que los intervalos de confianza sean demasiado amplios y que variables teóricamente importantes pierdan significancia estadística (p-valores altos). En consecuencia, resulta imposible aislar el efecto individual de una variable sobre la dependiente, invalidando la interpretación de “mantener el resto constante”, ya que el modelo no logra distinguir qué factor está generando realmente el cambio en el fenómeno estudiado.

  1. Observando los resultados: ¿Existe alguna variable en este modelo que parezca estar “robándole” significancia a las demás? Justifica basándote en su correlación técnica (ej. desplazamiento vs. potencia).

Sí, las variables disp (desplazamiento) y wt (peso) son las que principalmente afectan la significancia de las demás. Al observar la matriz de correlación R, se detecta una correlación extremadamente alta entre disp y wt (0.8880), y entre disp e hp (0.7909). Técnicamente, esto causa que disp (con el VIF más alto de 7.985) robe significancia al solaparse con la información que aportan la potencia y el peso; esto se refleja en que disp tiene un p-valor no significativo en el modelo, a pesar de que físicamente el tamaño del motor está íntimamente ligado al consumo de combustible. El modelo no logra separar el efecto individual de la cilindrada frente al peso del vehículo.

  1. ¿Qué indica el Indice de condición en este modelo?

El Índice de Condición , que en este modelo es de 57.4805, indica la presencia de una multicolinealidad fuerte o severa. En la práctica estadística, un índice superior a 15 sugiere posibles problemas y un valor superior a 30 es una señal inequívoca de colinealidad grave. En este caso, el valor de 57.48 confirma que la matriz de datos está mal condicionada, lo que significa que las estimaciones de los coeficientes son altamente inestables y que pequeñas variaciones en los datos de los vehículos podrían generar cambios drásticos en los resultados del modelo.

3.Diagnóstico de Normalidad de los Residuos

# Verificando el ajuste con fitdistrplus
fit_normal <- fitdist(data = residuos, distr = "norm")
plot(fit_normal)

summary(fit_normal)
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##                        estimate Std. Error
## mean -0.00000000000000003122502  0.4257752
## sd    2.40854809054366647558254  0.3010683
## Loglikelihood:  -73.5348   AIC:  151.0696   BIC:  154.0011 
## Correlation matrix:
##                     mean                  sd
## mean  1.0000000000000000 -0.0000000004554131
## sd   -0.0000000004554131  1.0000000000000000
#  a) La prueba Jarque-Bera (JB)
options(scipen = 999)
salida_JB <- jarque.bera.test(residuos)
salida_JB
## 
##  Jarque Bera Test
## 
## data:  residuos
## X-squared = 3.316, df = 2, p-value = 0.1905
#   Gráfica con fastGraph
options(scipen = 999)
alpha_sig <- 0.05
JB <- salida_JB$statistic
gl <- salida_JB$parameter
VC <- qchisq(1 - alpha_sig, gl, lower.tail = TRUE)

shadeDist(JB, ddist = "dchisq", parm1 = gl, lower.tail = FALSE, xmin = 0,
          sub = paste("VC:", round(VC, 2), " ", "JB:", round(JB, 2)))

# b) Prueba de Kolmogorov Smirnov -Lilliefors
library(dplyr) 
library(gt)  
library(gtExtras) 
residuos<-modelo_mtcars$residuals  
residuos %>% 
  as_tibble() %>% 
  mutate(posicion=row_number()) %>%  
  arrange(value) %>%  
  mutate(dist1=row_number()/n()) %>%  
  mutate(dist2=(row_number()-1)/n()) %>%  
  mutate(zi=as.vector(scale(value,center=TRUE))) %>%  
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>%  
  mutate(dif1=abs(dist1-pi)) %>% 
  mutate(dif2=abs(dist2-pi)) %>%  
  rename(residuales=value) -> tabla_KS 

# Aplicación de formato gt y resaltado de máximos
 tabla_KS %>%  
  gt() %>% 
  tab_header("Tabla para calcular el Estadistico KS") %>%  
  tab_source_note(source_note = "Fuente: Elaboración propia") %>%  
  tab_style( 
    style = list(
      cell_fill(color = "#A569BD"), 
      cell_text(style = "italic")  
      ),
    locations = cells_body(  
      columns = dif1,  
      rows = dif1==max(dif1)  
    )) %>%
   tab_style(  
    style = list(
      cell_fill(color = "#3498DB"), 
      cell_text(style = "italic")  
      ),
    locations = cells_body( 
      columns = dif2,  
      rows = dif2==max(dif2)  
    ))
Tabla para calcular el Estadistico KS
residuales posicion dist1 dist2 zi pi dif1 dif2
-3.8664153 21 0.03125 0.00000 -1.58000709 0.05705262 0.025802622 0.057052622
-3.7219399 23 0.06250 0.03125 -1.52096733 0.06413402 0.001634018 0.032884018
-2.9249910 6 0.09375 0.06250 -1.19529489 0.11598592 0.022235918 0.053485918
-2.8335055 22 0.12500 0.09375 -1.15790946 0.12345049 0.001549506 0.029700494
-2.5153146 3 0.15625 0.12500 -1.02788103 0.15200290 0.004247104 0.027002896
-2.1098370 11 0.18750 0.15625 -0.86218297 0.19429342 0.006793419 0.038043419
-1.8775253 14 0.21875 0.18750 -0.76724902 0.22146674 0.002716736 0.033966736
-1.5839621 1 0.25000 0.21875 -0.64728469 0.25872385 0.008723854 0.039973854
-1.5812652 7 0.28125 0.25000 -0.64618256 0.25908057 0.022169435 0.009080565
-1.5256810 32 0.31250 0.28125 -0.62346815 0.26648846 0.046011536 0.014761536
-1.0761488 24 0.34375 0.31250 -0.43976723 0.33005285 0.013697147 0.017552853
-1.0743171 9 0.37500 0.34375 -0.43901872 0.33032399 0.044676013 0.013426013
-0.8170837 29 0.40625 0.37500 -0.33390049 0.36922732 0.037022675 0.005772675
-0.7133657 2 0.43750 0.40625 -0.29151623 0.38532827 0.052171732 0.020921732
-0.4169002 30 0.46875 0.43750 -0.17036590 0.43236119 0.036388805 0.005138805
-0.3833408 10 0.50000 0.46875 -0.15665188 0.43775961 0.062240392 0.030990392
-0.3742943 26 0.53125 0.50000 -0.15295502 0.43921687 0.092033127 0.060783127
-0.3244422 4 0.56250 0.53125 -0.13258300 0.44726159 0.115238410 0.083988410
0.0522694 15 0.59375 0.56250 0.02135984 0.50852070 0.085229304 0.053979304
0.2096827 13 0.62500 0.59375 0.08568663 0.53414223 0.090857767 0.059607767
0.2708056 5 0.65625 0.62500 0.11066445 0.54405878 0.112191219 0.080941219
0.8242600 27 0.68750 0.65625 0.33683309 0.63187864 0.055621362 0.024371362
0.9856164 12 0.71875 0.68750 0.40277125 0.65644174 0.062308257 0.031058257
1.1599816 16 0.75000 0.71875 0.47402542 0.68225911 0.067740891 0.036490891
1.2050398 19 0.78125 0.75000 0.49243841 0.68879527 0.092454727 0.061204727
1.6307713 31 0.81250 0.78125 0.66641320 0.74742649 0.065073512 0.033823512
1.6563961 8 0.84375 0.81250 0.67688474 0.75076046 0.092989544 0.061739544
2.5145182 25 0.87500 0.84375 1.02755556 0.84792053 0.027079468 0.004170532
2.7033586 28 0.90625 0.87500 1.10472502 0.86536062 0.040889380 0.009639380
5.2230317 20 0.93750 0.90625 2.13438716 0.98359445 0.046094449 0.077344449
5.6377518 18 0.96875 0.93750 2.30386212 0.98938481 0.020634808 0.051884808
5.6468467 17 1.00000 0.96875 2.30757875 0.98948871 0.010511289 0.020738711
Fuente: Elaboración propia
#Cálculo del Valor Crítico de Lilliefors
# 1. Cálculos previos
n_mtcars <- nrow(mtcars)
alfa <- 0.05
valor_critico_lillie <- 0.886 / sqrt(n_mtcars)
D_max <- max(max(tabla_KS$dif1), max(tabla_KS$dif2)) # El máximo de tu tabla anterior

# 2. Crear un dataframe para la tabla
resultados_lillie <- data.frame(
  Concepto = c("Tamaño de muestra (n)", 
               "Nivel de significancia (alpha)", 
               "Estadístico D calculado (Máximo)", 
               "Valor Crítico (Lilliefors)"),
  Valor = c(n_mtcars, 
            alfa, 
            round(D_max, 4), 
            round(valor_critico_lillie, 4))
)

# 3. Formatear con gt
library(gt)
resultados_lillie %>%
  gt() %>%
  tab_header(
    title = "Contraste de Hipótesis: Lilliefors",
    subtitle = "Basado en el dataset mtcars"
  ) %>%
  tab_source_note(source_note = "Nota: Valor crítico calculado mediante aproximación de Dallal-Wilkinson para n > 30") %>%
  cols_label(
    Concepto = "Descripción",
    Valor = "Resultado"
  ) %>%
  tab_style(
    style = list(
      cell_fill(color = "#F47"),
      cell_text(weight = "bold")
    ),
    locations = cells_body(rows = 4) # Resalta la fila del Valor Crítico
  )
Contraste de Hipótesis: Lilliefors
Basado en el dataset mtcars
Descripción Resultado
Tamaño de muestra (n) 32.0000
Nivel de significancia (alpha) 0.0500
Estadístico D calculado (Máximo) 0.1152
Valor Crítico (Lilliefors) 0.1566
Nota: Valor crítico calculado mediante aproximación de Dallal-Wilkinson para n > 30
# c)  La prueba Shapiro-Wilk (SW)

library(dplyr)
library(gt)
residuos<-modelo_mtcars$residuals
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

m<-sum(tabla_SW$mi^2)
n<-nrow(mtcars)
theta<-1/sqrt(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)
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)
tabla_SW$ai[1]<- -tabla_SW$ai[n]
tabla_SW$ai[2]<- -tabla_SW$ai[n-1]
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)
tabla_SW$ai[3:(n-2)]<-tabla_SW$mi[3:(n-2)]/sqrt(omega)

tabla_SW %>% 
  mutate(ai_ui=ai*residuales,ui2=residuales^2) ->tabla_SW

tabla_SW %>%
  gt() %>% tab_header("Tabla para calcular el Estadistico W") %>%  # Agrega un encabezado a la tabla
  tab_source_note(source_note = "Fuente: Elaboración propia")
Tabla para calcular el Estadistico W
residuales pi mi ai ai_ui ui2
-3.8664153 0.01937984 -2.06672907 -0.407971522 1.577387330 14.94916721
-3.7219399 0.05038760 -1.64110706 -0.296267293 1.102689045 13.85283628
-2.9249910 0.08139535 -1.39574699 -0.248692215 0.727422479 8.55557209
-2.8335055 0.11240310 -1.21384688 -0.216281511 0.612834858 8.02875360
-2.5153146 0.14341085 -1.06511983 -0.189781537 0.477360277 6.32680768
-2.1098370 0.17441860 -0.93684711 -0.166926086 0.352186833 4.45141219
-1.8775253 0.20542636 -0.82239396 -0.146532987 0.275119397 3.52510140
-1.5839621 0.23643411 -0.71782010 -0.127900165 0.202589020 2.50893608
-1.5812652 0.26744186 -0.62056827 -0.110571972 0.174843606 2.50039947
-1.5256810 0.29844961 -0.52886482 -0.094232382 0.143768554 2.32770247
-1.0761488 0.32945736 -0.44141204 -0.078650169 0.084639285 1.15809624
-1.0743171 0.36046512 -0.35721583 -0.063648210 0.068378362 1.15415730
-0.8170837 0.39147287 -0.27548228 -0.049085041 0.040106585 0.66762569
-0.7133657 0.42248062 -0.19555148 -0.034843085 0.024855860 0.50889056
-0.4169002 0.45348837 -0.11685275 -0.020820656 0.008680136 0.17380580
-0.3833408 0.48449612 -0.03887224 -0.006926201 0.002655095 0.14695018
-0.3742943 0.51550388 0.03887224 0.006926201 -0.002592437 0.14009622
-0.3244422 0.54651163 0.11685275 0.020820656 -0.006755099 0.10526272
0.0522694 0.57751938 0.19555148 0.034843085 0.001821227 0.00273209
0.2096827 0.60852713 0.27548228 0.049085041 0.010292282 0.04396682
0.2708056 0.63953488 0.35721583 0.063648210 0.017236289 0.07333566
0.8242600 0.67054264 0.44141204 0.078650169 0.064828188 0.67940453
0.9856164 0.70155039 0.52886482 0.094232382 0.092876982 0.97143970
1.1599816 0.73255814 0.62056827 0.110571972 0.128261451 1.34555727
1.2050398 0.76356589 0.71782010 0.127900165 0.154124786 1.45212086
1.6307713 0.79457364 0.82239396 0.146532987 0.238961790 2.65941502
1.6563961 0.82558140 0.93684711 0.166926086 0.276495710 2.74364789
2.5145182 0.85658915 1.06511983 0.189781537 0.477209125 6.32280165
2.7033586 0.88759690 1.21384688 0.216281511 0.584686474 7.30814753
5.2230317 0.91860465 1.39574699 0.248692215 1.298927330 27.28006053
5.6377518 0.94961240 1.64110706 0.296267293 1.670281449 31.78424483
5.6468467 0.98062016 2.06672907 0.407971522 2.303752631 31.88687740
Fuente: Elaboración propia

Cálculo del Estadístico W

# Calculamos el estadístico W manual usando las sumatorias de la tabla
W <- (sum(tabla_SW$ai_ui)^2) / sum(tabla_SW$ui2)
print(W)
## [1] 0.9366138

Cálculo del Wn y su p-value

# Aproximación de Royston
mu<-0.0038915*log(n)^3-0.083751*log(n)^2-0.31082*log(n)-1.5861
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n)-0.4803)
Wn<-(log(1-W)-mu)/sigma
print(Wn)
## [1] 1.554447
# Calculamos el estadístico normalizado Wn
Wn <- (log(1 - W) - mu) / sigma
print(Wn)
## [1] 1.554447
# Obtenemos el p-value usando la distribución normal
p.value <- pnorm(Wn, lower.tail = FALSE)
print(p.value)
## [1] 0.06003893
library(fastGraph)
shadeDist(Wn,ddist = "dnorm",lower.tail = FALSE)

¿son coincidentes las pruebas en sus resultados?

Las tres pruebas de normalidad aplicadas (Jarque-Bera, Lilliefors y Shapiro-Wilk) son coincidentes en sus resultados, ya que ninguna logra rechazar la hipótesis nula de normalidad bajo un nivel de significancia del 5%. La prueba de Jarque-Bera presenta el p-valor más alto (0.1905), mostrando una clara compatibilidad en términos de asimetría y curtosis; por su parte, el estadístico de Lilliefors (0.1152) resulta inferior a su valor crítico de 0.1566, confirmando que la distancia de los datos respecto a una distribución teórica es aceptable. Finalmente, aunque la prueba de Shapiro-Wilk es más sensible y arroja el p-valor más ajustado (0.0600), este sigue situándose por encima del umbral de 0.05, lo que ratifica de forma unánime que los residuos del modelo mtcars siguen una distribución normal, validando así la fiabilidad de las inferencias estadísticas realizadas..

#4.Análisis Crítico Final (Reporte)

El modelo estimado para mtcars presenta una confiabilidad parcial para la inferencia estadística. Si bien se valida el supuesto de normalidad de los residuos (confirmado por Jarque-Bera, Lilliefors y Shapiro-Wilk con p-valores > 0.05), el diagnóstico de multicolinealidad severa (Índice de Condición de 57.48 y VIFs > 5) invalida la interpretación individual de los coeficientes, especialmente en disp y wt. Para corregir esto, se propone como medida principal la eliminación de la variable redundante disp, dado que su información técnica está altamente correlacionada con el peso y la potencia, robándoles significancia. Alternativamente, se sugiere el uso de formas funcionales logarítmicas o técnicas de regresión Ridge/Lasso para estabilizar los estimadores. Aunque una muestra más grande ayudaría a reducir el error estándar, la naturaleza estructural de la correlación entre las especificaciones del motor sugiere que la simplificación del modelo es la solución más robusta.