1. Introducción

#Modelar el modelo
library(mctest)
library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
data(mtcars)

modelo_combustible <- lm(data = mtcars, formula = mpg~disp+hp+wt+qsec)

stargazer(modelo_combustible, type = "text")
## 
## ===============================================
##                         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

Prueba de multicolinealidad

Prueba de indice de condicion

matriz_x <- model.matrix(modelo_combustible)
matriz_xx <-t(matriz_x)%*%matriz_x

options(scipen = 999)
Sn<-solve(diag(sqrt(diag(matriz_xx))))
stargazer(Sn,type = "text")
## 
## =============================
## 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
## -----------------------------
# Normalizar
matriz_xx_norm <- (Sn%*%matriz_xx)%*%Sn
# autovalores
autovalores <- eigen(matriz_xx_norm, symmetric = TRUE)
print(autovalores$values)
## [1] 4.721487187 0.216562203 0.050416837 0.010104757 0.001429017
#Calculo de Kapa
kapa <- sqrt(max(autovalores$values)/min(autovalores$values))
print(kapa)
## [1] 57.48052

Libreria mctest

mctest(modelo_combustible)
## 
## 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

Conclusión de la prueba de indice de condición. Como el valor de Kapa () es mayor que 30, se considera que la multicolinealidad es severa.

Prueba de Farrar Glaubar

Zn<-scale(matriz_x[,-1])
n2<-nrow(Zn)
R<-(t(Zn)%*%Zn)*(1/(n2-1))

stargazer(R, type ="text")
## 
## ================================
##       disp    hp     wt    qsec 
## --------------------------------
## disp   1    0.791  0.888  -0.434
## hp   0.791    1    0.659  -0.708
## wt   0.888  0.659    1    -0.175
## qsec -0.434 -0.708 -0.175   1   
## --------------------------------
determinante_R <- det(R)
print(determinante_R)
## [1] 0.02466606
# Calculo del estadistico de prueba
m<-ncol(matriz_x[,-1])
n<-nrow(matriz_x[,-1])
chi_farrar<--(n-1-(2*m+5)/6)*log(determinante_R)

print(chi_farrar)
## [1] 106.7504
# Calculo del Valor Critico

gl = m*(m-1)/2
VC <- qchisq(p=0.95, df=gl)
print(VC)
## [1] 12.59159
# Prueba

resultado1 <- ifelse(chi_farrar>VC, "Rechazar prueba nula","No rechazar prueba nula")
print(resultado1)
## [1] "Rechazar prueba nula"

libreria psych

library(psych)
## Warning: package 'psych' was built under R version 4.5.3
FG_test <- cortest.bartlett(matriz_x[,-1])
## R was not square, finding R from data
print(FG_test)
## $chisq
## [1] 106.7504
## 
## $p.value
## [1] 0.000000000000000000009757936
## 
## $df
## [1] 6

Conclusión de la prueba de Farrar GLaubar El p.value nos dios 0.0000000000000000000097, y con un nivel de significancia del 5%, comparando 0.0000000000000000000097< 0.05 se concluye que se rechaza la hipotesis nula ppor lo tanto hay evidencia de colinealidad en los regresores

factores inflacionarios de la varianza(VIF)

inversa_R <- solve(R)
VIFs <- diag(inversa_R)
print(VIFs)
##     disp       hp       wt     qsec 
## 7.985439 5.166758 6.916942 3.133119
library(performance)
## Warning: package 'performance' was built under R version 4.5.3
VIfs_resultado <- multicollinearity(x=modelo_combustible, verbose=FALSE)
VIfs_resultado
## # 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]

libreria mctest

library(mctest)
mc.plot(mod = modelo_combustible,vif = 5)

Diagnóstico de Multicolinealidad

Realiza las pruebas de Colinealidad vistas en clase. Preguntas de reflexión:

  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 en las variables del modelo. Para la interpretación de los coeficientes, esto implica que las estimaciones de los parámetros se vuelven inestables y sus errores estándar se inflan artificialmente.

  2. 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). En este modelo, las variables desplazamiento (disp) y potencia (hp) muestran una correlación técnica muy alta entre sí. La variable desplazamiento parece estar “robándole” significancia a la potencia (o viceversa), debido a que ambas miden aspectos muy similares del motor

  3. ¿Qué indica el Indice de condición en este modelo? En este model el Índice de Condición es superior a 30, indica que existe una multicolinealidad severa. Esto confirma que los resultados del modelo podrían estar sesgados y que la inferencia estadística sobre los coeficientes individuales no es totalmente confiable debido a la fuerte interdependencia entre las variables independientes. Ya que pequeños cambios en la matriz de información generan grandes cambios en nuestros parámetros.

Pruebas de normalidad

Normalizar residuos

library(fitdistrplus)
## Warning: package 'fitdistrplus' was built under R version 4.5.3
## Cargando paquete requerido: MASS
## Cargando paquete requerido: survival
library(fitdistrplus)
fit_normal<-fitdist(data = modelo_combustible$residuals,distr = "norm")
plot(fit_normal)

Prueba Jaque Bera

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
salida_JB <- jarque.bera.test(modelo_combustible$residuals)
salida_JB
## 
##  Jarque Bera Test
## 
## data:  modelo_combustible$residuals
## X-squared = 3.316, df = 2, p-value = 0.1905

VC de JB

library(fastGraph)
## Warning: package 'fastGraph' was built under R version 4.5.3
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)))

Calculo manual

# Cargar las librerías necesarias para la manipulación de datos y visualización de tablas
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)
## Warning: package 'gt' was built under R version 4.5.3
# 1. Preparación de los datos básicos
# Extraemos el número total de observaciones (n) de los residuos del modelo
n_obs <- length(modelo_combustible$residuals)
# Guardamos los residuales (u_i) en un vector para facilitar su manejo
residuos2 <- modelo_combustible$residuals

# 2. Cálculo manual de los momentos estadísticos (Páginas 5 y 6 del documento)
tabla_JB_referencia <- data.frame(u = residuos2) %>%
  summarise(
    # n: Tamaño de la muestra
    n = n(),
    # sigma: Desviación estándar calculada como la raíz cuadrada de la varianza muestral (sum u^2 / n)
    sigma = (sum(u^2)/n)^(1/2),
    # mu3: Tercer momento central (usado para medir la asimetría)
    mu3 = sum(u^3)/n,
    # mu4: Cuarto momento central (usado para medir la curtosis)
    mu4 = sum(u^4)/n
  ) %>%
  mutate(
    # asimetria (alpha3): Mide la falta de simetría de los residuos. En una normal debe ser 0.
    asimetria = mu3 / (sigma^3),
    # curtosis (alpha4): Mide qué tan "puntiaguda" es la distribución. En una normal debe ser 3.
    curtosis = mu4 / (sigma^4),
    
    # Cálculo del estadístico JB (Fórmula de la pág. 6):
    # JB = (n/6)*(S^2) + (n/24)*(K-3)^2
    # Donde S es asimetría y K es curtosis.
    JB = (n/6)*(asimetria^2) + (n/24)*((curtosis - 3)^2)
  )

# 3. Presentación de resultados en formato de tabla profesional
tabla_JB_referencia %>%
  gt() %>%
  # Añade el título principal a la tabla
  tab_header(title = "Cálculo Manual de Jarque-Bera (Referencia Documento)") %>%
  # Da formato numérico a todas las columnas, limitando a 4 decimales para mayor claridad
  fmt_number(columns = everything(), decimals = 4)
Cálculo Manual de Jarque-Bera (Referencia Documento)
n sigma mu3 mu4 asimetria curtosis JB
32.0000 2.4085 10.8432 110.3520 0.7761 3.2791 3.3160

conclución de la prueba de Jaque Bera. Como 3.32(JB) < 5.991(VC), Se concluye que no se rechaza la hipotesis nula, Los residuos tienen distribución normal

Prueba Kolmogorov Smirnov -Lilliefors

Calculo manual

esiduos<-modelo_combustible$residuals  # Crea un vector con los residuos del modelo estimado
residuos2 %>%  # Utiliza el operador %>% para encadenar las operaciones siguientes al vector residuos
  as_tibble() %>%  # Convierte el vector residuos en una tibble (tabla) de una columna
  mutate(posicion=row_number()) %>%  # Agrega una columna llamada "posicion" con el número de fila
  arrange(value) %>%  # Ordena la tabla por los valores de residuos en orden ascendente
  mutate(dist1=row_number()/n()) %>%  # Agrega una columna "dist1" con los percentiles según su posición en la tabla (usando la función row_number() y n() para obtener el número de filas)
  mutate(dist2=(row_number()-1)/n()) %>%  # Agrega una columna "dist2" con los percentiles según su posición en la tabla, pero ajustando en una unidad para evitar problemas con los extremos de la distribución
  mutate(zi=as.vector(scale(value,center=TRUE))) %>%  # Agrega una columna "zi" con los valores de residuos escalados para tener media cero y varianza uno
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>%  # Agrega una columna "pi" con los valores de la función de distribución acumulada (CDF) de una distribución normal estándar evaluada en los valores de zi
  mutate(dif1=abs(dist1-pi)) %>%  # Agrega una columna "dif1" con las diferencias absolutas entre los percentiles según la posición y los valores de pi
  mutate(dif2=abs(dist2-pi)) %>%  # Agrega una columna "dif2" con las diferencias absolutas entre los percentiles ajustados según la posición y los valores de pi
  rename(residuales=value) -> tabla_KS  # Renombra la columna "value" como "residuales" y asigna la tabla resultante a la variable tabla_KS


#Formato
 tabla_KS %>%  # Utiliza el operador %>% para encadenar las operaciones siguientes a la tabla tabla_KS
  gt() %>%  # Crea una tabla con la función gt()
  tab_header("Tabla para calcular el Estadistico KS") %>%  # Agrega un encabezado a la tabla
  tab_source_note(source_note = "Fuente: Elaboración propia") %>%  # Agrega una nota de fuente a la tabla
  tab_style(  # Cambia el estilo de algunas celdas de la tabla
    style = list(
      cell_fill(color = "#A569BD"),  # Cambia el color de fondo de las celdas a un tono de morado
      cell_text(style = "italic")  # Cambia el estilo de texto de las celdas a itálico
      ),
    locations = cells_body(  # Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns = dif1,  # Que pertenezcan a la columna "dif1"
      rows = dif1==max(dif1)  # Que pertenezcan a la fila donde el valor de "dif1" es máximo
    )) %>%
   tab_style(  # Cambia el estilo de algunas celdas de la tabla
    style = list(
      cell_fill(color = "#3498DB"),  # Cambia el color de fondo de las celdas a un tono de azul
      cell_text(style = "italic")  # Cambia el estilo de texto de las celdas a itálico
      ),
    locations = cells_body(  # Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns = dif2,  # Que pertenezcan a la columna "dif2"
      rows = dif2==max(dif2)  # Que pertenezcan a la fila donde el valor de "dif2" es máximo
    ))
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
# Estadistico de KS
D<-max(max(tabla_KS$dif1),max(tabla_KS$dif2))
print(D)
## [1] 0.1152384
# Comparando con el Valor Crítico de Lilliefors 
# Definir el nivel de significancia 
alpha_sig <- 0.05
# Calcular Valor Crítico aproximado (para n > 30)
# La constante 0.886 es para alpha = 0.05
 VC_Lillie <- 0.886 / sqrt(n_obs)
# Regla de decisión.
decision <- ifelse(D > VC_Lillie, "Rechazar H0", "No Rechazar H0")
print(paste("Tamaño de muestra (n):", n_obs)) 
## [1] "Tamaño de muestra (n): 32"
print(paste("Estadístico D calculado:", round(D, 7))) 
## [1] "Estadístico D calculado: 0.1152384"
print(paste("Valor Crítico de tabla:", round(VC_Lillie, 7)))
## [1] "Valor Crítico de tabla: 0.1566242"
print(paste("Decisión:", decision))
## [1] "Decisión: No Rechazar H0"

Libreria nortest

library(nortest)
## Warning: package 'nortest' was built under R version 4.5.2
prueba_KS <- lillie.test(modelo_combustible$residuals)
prueba_KS
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_combustible$residuals
## D = 0.11524, p-value = 0.3446

Conclusión de la prueba KS. Como 0..1152384 (D) < 0.1566242(VC), se concluye que no se rechaza la hipótesis nula. Los residuos siguen una distribución normal.

Prueba Shapiro Wilk

Calculo manual

library(dplyr)
library(gt)
residuos2<-modelo_combustible$residuals
residuos2 %>%  
  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

m4<-sum(tabla_SW$mi^2)
n4<-nrow(mtcars)
theta<-1/sqrt(n4)
tabla_SW$ai[n4]<- -2.706056*theta^5+4.434685*theta^4-2.071190*theta^3-0.147981*theta^2+0.2211570*theta+tabla_SW$mi[n4]/sqrt(m4)
tabla_SW$ai[n4-1]<- -3.582633*theta^5+5.682633*theta^4-1.752461*theta^3-0.293762*theta^2+0.042981*theta+tabla_SW$mi[n4-1]/sqrt(m4)
tabla_SW$ai[1]<- -tabla_SW$ai[n4]
tabla_SW$ai[2]<- -tabla_SW$ai[n4-1]
omega<-(m4-2*tabla_SW$mi[n4]^2-2*tabla_SW$mi[n4-1]^2)/(1-2*tabla_SW$ai[n4]^2-2*tabla_SW$ai[n4-1]^2)
tabla_SW$ai[3:(n4-2)]<-tabla_SW$mi[3:(n4-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
W<-(sum(tabla_SW$ai_ui)^2)/sum(tabla_SW$ui2)
print(W)
## [1] 0.9366138
# Calculo de Wn
mu<-0.0038915*log(n4)^3-0.083751*log(n4)^2-0.31082*log(n4)-1.5861
sigma<-exp(0.0030302*log(n)^2-0.082676*log(n4)-0.4803)
Wn<-(log(1-W)-mu)/sigma
print(Wn)
## [1] 1.554447
# Valor de pivarios
p.value<-pnorm(Wn,lower.tail = FALSE)
print(p.value)
## [1] 0.06003893
alpha_sig <- 0.05
# Usamos el p.value calculado en el paso anterior
conclusion_final <- ifelse(p.value > alpha_sig,
                           "No se rechaza la Hipótesis Nula (Los residuos son Normales)",
                           "Se rechaza la Hipótesis Nula (Los residuos NO son Normales)")
conclusion_final
## [1] "No se rechaza la Hipótesis Nula (Los residuos son Normales)"
# Forzamos los límites del eje X para que el 1.55 sea visible y calculable
fastGraph::shadeDist(1.554447, ddist = "dnorm", lower.tail = FALSE, xmin = -4, xmax = 4)

#### Libreria Stats

salida_SW <- shapiro.test(modelo_combustible$residuals)
print(salida_SW)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_combustible$residuals
## W = 0.93661, p-value = 0.06004
Wn_salida<-qnorm(salida_SW$p.value,lower.tail = FALSE)
print(Wn_salida)
## [1] 1.554447

Conclusión de la prueba de Shapiro Wilk como 0.06583 (P_value) > 0.05(alpha), se concluye que no se rechaza la hipotesis nula, los residuos siguen una distribución normal.

3. Diagnóstico de Normalidad de los Residuos

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

Redacta un párrafo (máximo 150 palabras) respondiendo lo siguiente:

Aunque el modelo sea “válido” con respecto al supuesto de seguir una distribución normal ya que las tres pruebas arrojaron que no rechazan la hipotesis nula, sin embrago la presencia de multicolinealidad severa hace que los coeficientes sean muy inestables (tengan varianzas grandes), esto dificulta confiar en el valor específico del impacto de cada variable. La muestra es de 32 observaciones basandome en el dataset de “mtcars” posiblemente los problemas de multicolinealidad se resuelva aumentando el tamaño de la muestra. También otra opción es eliminar una variable, por la alta correlación entre hp, dips y Wt.