library(datasets)
library(printr)
data("mtcars")
head(force(mtcars),n=5)
| mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
modelo_estimado<-lm(formula = mpg~disp+hp+wt+qsec,data = mtcars )
library(stargazer)
stargazer(modelo_estimado,title = "Modelo de regresión",type = "text",digits = 4)
##
## Modelo de regresión
## ===============================================
## Dependent variable:
## ---------------------------
## mpg
## -----------------------------------------------
## disp 0.0027
## (0.0107)
##
## hp -0.0187
## (0.0156)
##
## wt -4.6091***
## (1.2659)
##
## qsec 0.5442
## (0.4665)
##
## Constant 27.3296***
## (8.6390)
##
## -----------------------------------------------
## Observations 32
## R2 0.8351
## Adjusted R2 0.8107
## Residual Std. Error 2.6221 (df = 27)
## F Statistic 34.1949*** (df = 4; 27)
## ===============================================
## Note: *p<0.1; **p<0.05; ***p<0.01
library(mctest)
mctest::omcdiag(mod = modelo_estimado)
##
## Call:
## mctest::omcdiag(mod = modelo_estimado)
##
##
## 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
library(fastGraph)
shadeDist(15,ddist = "dchisq",parm1 = 4,lower.tail = FALSE)
#Usando libreria "car"
library(car)
VIFs<-vif(modelo_estimado)
print(VIFs)
## disp hp wt qsec
## 7.985439 5.166758 6.916942 3.133119
#Usando libreria "performance"
library(performance)
VIFs<-multicollinearity(modelo_estimado,verbose = FALSE)
VIFs
| Term | VIF | VIF_CI_low | VIF_CI_high | SE_factor | Tolerance | Tolerance_CI_low | Tolerance_CI_high |
|---|---|---|---|---|---|---|---|
| disp | 7.985439 | 4.922223 | 13.440995 | 2.825852 | 0.1252279 | 0.0743993 | 0.2031602 |
| hp | 5.166758 | 3.279348 | 8.617036 | 2.273050 | 0.1935450 | 0.1160492 | 0.3049387 |
| wt | 6.916942 | 4.299228 | 11.611633 | 2.630008 | 0.1445726 | 0.0861205 | 0.2325999 |
| qsec | 3.133119 | 2.097152 | 5.147280 | 1.770062 | 0.3191708 | 0.1942774 | 0.4768371 |
plot(VIFs)
1. Si el valor de VIF es mayor a 5 o 10, ¿qué implica esto para la interpretación de los coeficientes? R//Los valores VIF de disp, hp y wt son mayores a 5, lo que indica multicolinealidad moderada entre estas variables explicativas. Aunque ninguno supera 10 (colinealidad severa), sí existe una correlación importante que puede afectar la precisión de los coeficientes. La variable qsec presenta un VIF menor a 5, por lo que no evidencia problemas relevantes de colinealidad.Por lo que implica que los coeficientes pueden volverse inestables y difíciles de interpretar, debido a que las variables explicativas están correlacionadas entre sí. Esto aumenta los errores estándar y puede hacer que variables importantes aparezcan como no significativas.
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) R//Si existe, la variable que parece estar “robándole” significancia a las demás es disp (desplazamiento), ya que presenta el VIF más alto (7.985). Esto indica que es la variable con mayor grado de colinealidad dentro del modelo. Técnicamente, el desplazamiento del motor está fuertemente relacionado con la potencia (hp) y con el peso del vehículo (wt), ya que motores más grandes suelen generar más potencia y se encuentran en vehículos más pesados. Esta relación provoca que disp, hp y wt expliquen información similar sobre el consumo de combustible (mpg). Como resultado, al incluirlas juntas en el modelo, sus efectos individuales se superponen, aumentando los errores estándar y haciendo que algunas variables pierdan significancia estadística
3. ¿Qué indica el Indice de condición en este modelo? R//El Índice de Condición sugiere la presencia de multicolinealidad moderada, lo cual es consistente con los resultados del VIF. Esto significa que existe dependencia lineal entre algunas variables explicativas, especialmente entre disp, hp y wt, lo que puede afectar la estabilidad de los coeficientes y la interpretación individual de sus efectos, aunque el modelo aún puede utilizarse con precaución.
options(scipen = 9999)
#Obtener residuos
library(fitdistrplus)
fit_normal<-fitdist(data = modelo_estimado$residuals,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
library(tseries)
salida_JB<-jarque.bera.test(modelo_estimado$residuals)
salida_JB
##
## Jarque Bera Test
##
## data: modelo_estimado$residuals
## X-squared = 3.316, df = 2, p-value = 0.1905
library(fastGraph)
alpha_sig<-0.05
JB<-salida_JB$statistic
g1<-salida_JB$parameter
VC<-qchisq(1-alpha_sig,g1,lower.tail = TRUE)
shadeDist(JB,ddist = "dchisq",parm1 = g1,lower.tail = FALSE,xmin = 0,sub=paste("VC:",round(VC,2),"","JB:",round(JB,2)))
library(nortest)
prueba_KS<-lillie.test(modelo_estimado$residuals)
prueba_KS
##
## Lilliefors (Kolmogorov-Smirnov) normality test
##
## data: modelo_estimado$residuals
## D = 0.11524, p-value = 0.3446
SW<-shapiro.test(modelo_estimado$residuals)
print(SW)
##
## Shapiro-Wilk normality test
##
## data: modelo_estimado$residuals
## W = 0.93661, p-value = 0.06004
hist(modelo_estimado$residuals,
probability = TRUE,main = "Histograma de residuos con curva normal",xlab = "Residuos")
curve(dnorm(x, mean = mean(modelo_estimado$residuals), sd = sd(modelo_estimado$residuals)),
col = "red",
lwd = 2,add = TRUE)
¿son coincidentes las pruebas en sus resultados? R//Resultados:Jarque-Bera: p ≈ 0.19,Shapiro-Wilk: p ≈ 0.06, Kolmogorov-Smirnov (Lilliefors): p ≈ 0.35. Como todos los p-values > 0.05, no se rechaza la normalidad.Por lo tanto las tres pruebas coinciden en que los residuos siguen una distribución normal
El modelo presenta evidencia de multicolinealidad moderada, ya que los valores VIF de las variables disp, hp y wt son mayores a 5, lo que indica que comparten información y dificulta la interpretación individual de sus coeficientes. Además, el índice de condición confirma la presencia de dependencia lineal entre algunas variables explicativas. Sin embargo, las pruebas de normalidad aplicadas a los residuos son coincidentes y no rechazan la hipótesis de normalidad, por lo que este supuesto del modelo se cumple. En consecuencia, el modelo puede utilizarse para inferencia estadística, pero con precaución al interpretar los efectos individuales. Como medidas correctivas, podría considerarse eliminar una de las variables altamente correlacionadas, especialmente entre disp, hp y wt, transformar las variables o comparar modelos alternativos. También sería útil ampliar el tamaño de la muestra para mejorar la precisión de las estimaciones.