mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
library(stargazer)
modelo_estimado<-lm(mpg~disp+hp+wt+qsec, data = mtcars)
stargazer(modelo_estimado, title = "Consumo de Conbustible", type="text")
##
## Consumo de Conbustible
## ===============================================
## 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
Calculo Manual
library(stargazer)
x_mat<-model.matrix(modelo_estimado)
stargazer(head(x_mat, n=6), type = "text")
##
## ===================================================
## (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 = "text")
##
## ==========================================================================
## (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 = 9999)
Sn<-solve(diag(sqrt(diag(xx_matrix))))
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
## -----------------------------
X^tX Normalizada: Calcular la Matriz Normalizada
library(stargazer)
xx_norm<-(Sn%*%xx_matrix)%*%Sn
stargazer(xx_norm, type = "text", 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 de X^tX
library(stargazer)
#autovalores
lamdas<-eigen(xx_norm, symmetric = TRUE)
stargazer(lamdas$values, type = "text")
##
## =============================
## 4.721 0.217 0.050 0.010 0.001
## -----------------------------
CALCULO DE K(X)=√(λmax/λmin)
k<-sqrt(max(lamdas$values)/min(lamdas$values))
print(k)
## [1] 57.48052
INTERPRETACION Comoκ(x) es de 57.48 mayor o igual a 20, la multicolinealidad es severa, y se considera un problema para el modelo ya que hay correlacion entre las varibales.
En el caso de que κ(x)≥30 la multicolinealidad es severa.
Calculo del indice de condicion utilizando la libreria mctest
library(mctest)
x_mat<-model.matrix(modelo_estimado)
mctest(mod = modelo_estimado)
##
## 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
Como se puede observar donde dice “condition Number” es el indice y podemos concluir que: * Como k(x)>=30 con un valor de 57.48 la multicolinealidad es muy severa considera un problema para seguir ana,izando el modelo.
Calculo del Indice de Condicion usando la libreria “Otsrr”.
library(olsrr)
ols_eigen_cindex(model=modelo_estimado)
## Eigenvalue Condition Index intercept disp hp wt
## 1 4.721487187 1.000000 0.000123237 0.001132468 0.001413094 0.0005253393
## 2 0.216562203 4.669260 0.002617424 0.036811051 0.027751289 0.0002096014
## 3 0.050416837 9.677242 0.001656551 0.120881424 0.392366164 0.0377028008
## 4 0.010104757 21.616057 0.025805998 0.777260487 0.059594623 0.7017528428
## 5 0.001429017 57.480524 0.969796790 0.063914571 0.518874831 0.2598094157
## qsec
## 1 0.0001277169
## 2 0.0046789491
## 3 0.0001952599
## 4 0.0024577686
## 5 0.9925403056
CALCULO MANUAL PARA REALIZAR LA PRUEBA DE FARRAR-GLAUBAR Caculo lRl
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))
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 lRl
determinante_R<-det(R)
print(determinante_R)
## [1] 0.02466606
Aplicando la prueba de Farrer Glaubar (Barlett)
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
Encontrar el valor critico V.C.
gl<-m*(m-1)/2
VC<-qchisq(p=0.95, df=gl)
print(VC)
## [1] 12.59159
Regla de desicion: Como X^2FG es de 106.7504 >= que el valor critico de 12.59159 se rechaza H0, por lo tanto hay evidencia de colinealidad en los regresores.
** Calculando del estadistico utilizando la libreria “mctest and pysich”**
Calculo de FG usando mctest
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
y nuevamente tenemos que el Chi-Square es de 57.4805 superior al valor critico de 7.8 encontrado por lo tanto se detecta como bien lo dice el diagnostico colinealidad en el modelo.
Calculo de FG usando la pysych
library(psych)
FG_test<-cortest.bartlett(x_mat[, -1])
print(FG_test)
## $chisq
## [1] 106.7504
##
## $p.value
## [1] 0.000000000000000000009757936
##
## $df
## [1] 6
Nuevamente se confirma que es de 106.7504 el estadistico FG
Calculo de los VIF’S usando “performance”
library(performance)
## Warning: package 'performance' was built under R version 4.5.3
VIFs<-multicollinearity (x=modelo_estimado, verbase=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]
plot(VIFs)
INTERPRETACION Si para este modelo se define que el
VIF<=2 la variable disp=7.99, la variable hp=5.17, la variable
wt=6.92 y la variable qsec=3.13. Se concluye que si hay correlacion
entre las variables y por ende el problema de multicolinealidad
Cálculo de los VIF’s usando “car”
library(car)
VIFs_car<-vif(modelo_estimado)
print(VIFs_car)
## disp hp wt qsec
## 7.985439 5.166758 6.916942 3.133119
**Calculo de los VIF’S usando la libreria mctes
library(mctest)
mc.plot(mod=modelo_estimado, vif=2)
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? 2 Si el VIF es mayor a 5 o 10 Significa que existe una alta correlacion entre las variables e implica que no se puede estimar de manera aislada los efectos de las X’S ya que son linealmente dependientes entre si y no se garantiza interpretabilidad de los coeficientes.
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). El modelo a analizar busca explicar el consumo de combustible (mpg) en función de: disp (desplazamiento), hp (potencia), wt (peso) y qsec (tiempo en cuarto de milla). Si para este modelo se define que el VIF<=2 la variable disp=7.99, la variable hp=5.17, la variable wt=6.92 y la variable qsec=3.13. Se concluye que el consumo de combustible de un vehiculo va a depender del desplzamienti, la potencia, el peso y el tiempo de cuarto en milla y se entiende que estas variables tienen informacion duplicada para explicar el consumo del combustible por ejemplo la variable desplazamiento se relaciona bastante con la variable peso y para que el modelo presente menos colinealidad en este caso es de omitir por lo menos la variable “desplazamiento” y “peso”.
3. ¿Qué indica el Indice de condición en este modelo? Supuestos para la prueba de multicolinealidad utilizando el indice k(x) Sí κ(x) es inferior o igual a 20, la multicolinealidad es leve, no se considera un problema. Para 20<κ(x)<30, la multicolinealidad se considera moderada. En el caso de que κ(x)≥30 la multicolinealidad es severa. Comoκ(x) es de 57.48 mayor a 30, la multicolinealidad es severa, y se considera un problema para el modelo ya que hay correlacion entre las varibales.
Se concluye que κ(x)≥30 la multicolinealidad es severa.
Verifique el supuesto de Normaidad a traves de” a) La prueba de JB
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
Rechazar H0 si P<=alfa, alfa=0.05=prueba de significancia H0: 0.1905<=0.05 Se acepta la hipotesis nula. por lo tanto se afirma que los residuos tienen una distribucion normal
existe evidencia estadística suficiente para acepetar la hipótesis nula de que los residuos se distribuyen normalmente. Por lo tanto, el modelo cumple con el supuesto de normalidad bajo la prueba de Jarque-Bera.
Prueba de Normalidad usando la libreria “Nortest”
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
Rechazar la hipotesis nula si p<=alfa alfa=0.05=nivel de significancia los residuos no tienen una distribucion normal Aceptar la hipotesis nula si p>=alfa alfa=0.05=nivel de significancia Los residuos tienen una distribucion normal
En este caso 0.3446>0.05 existe evidencia estadística suficiente para acepetar la hipótesis nula de que los residuos se distribuyen normal. Por lo tanto, el modelo cumple con el supuesto de normalidad bajo la prueba de Kolmogorov Smirnov.
Usando la liberia stats (Precargada al inicar R)
salida_SW<-shapiro.test(modelo_estimado$residuals)
print(salida_SW)
##
## Shapiro-Wilk normality test
##
## data: modelo_estimado$residuals
## W = 0.93661, p-value = 0.06004
Rechazar la hipotesis nula si p<=alfa alfa=0.05=nivel de significancia los residuos no tienen una distribucion normal Aceptar la hipotesis nula si p>=alfa alfa=0.05=nivel de significancia Los residuos tienen una distribucion normal
En este caso 0.06004>0.05 existe evidencia estadística suficiente para acepetar la hipótesis nula de que los residuos se distribuyen normal. Por lo tanto, el modelo cumple con el supuesto de normalidad bajo la prueba de Shapiro Wilk.
?Son coincidentes las pruebas en sus resultados Si, Bajo la prueba de Jarque Bera, Kolmogorov Smirnov y Shapiro Wilk se ha aceptado la hipotesis nula utilizando el p-value para probar las hipotesis y se concluye que el modelo no tiene problemas bajo el supuesto de Normalidad.
Redacta un párrafo (máximo 150 palabras) respondiendo lo siguiente: ¿Es este modelo confiable para realizar inferencia estadística? Si detectaste problemas de multicolinealidad o falta de normalidad, ¿qué medidas correctivas propondrías? (Pista: ¿Sería correcto eliminar una variable, transformar los datos o buscar una muestra más grande?)
El modelo actual no es confiable para realizar inferencia estadística debido a que presenta problemas críticos que violan los supuestos del modelo de regresión lineal clásico. Específicamente, la detección de multicolinealidad mediante el VIF indica que las variables independientes están altamente correlacionadas, lo que infla la varianza de los coeficientes y los vuelve inestables. Además, la falta de normalidad en los residuos impide que las pruebas de hipótesis sean válidas para muestras pequeñas. Como medidas correctivas, propongo eliminar la variable que presente el mayor conflicto de multicolinealidad para simplificar el modelo o, alternativamente, realizar una transformación de datos (como el uso de logaritmos) para corregir sesgos y estabilizar la varianza de los residuos. Finalmente, buscar una muestra más grande ayudaría a mejorar la normalidad por el Teorema del Límite Central y reduciría el error estándar de las estimaciones.