Parte Teórica

1. Para un modelo con 2 regresores, la matriz de correlación es [1, 0.96;0.96,1],el VIF es de:

R/ El valor del VIF es de 12.7551

options(scipen = 999999)
R<- matrix(data = c(1,0.96,0.96,1), nrow = 2, ncol = 2, byrow = FALSE)
VIF<- diag(solve(R))
print(VIF)
## [1] 12.7551 12.7551
# El VIF es igual a 12.7551

2. Prueba robusta para evaluar la normalidad de los residuos, independientemente del tamaño muestral:

R/ Jarque Bera

3. En una prueba de FG, para un modelo con 5 regresores, y 60 observaciones con un alfa de 4.3%, el estadístico de prueba dio 40, el valor del determinante de la matriz de correlación del modelo es de:

R/ El valor del determinante de la matriz de correlación del modelo es de 0.4926459

m<-5
n<-60
FG<-40
determinant<-exp(FG/-(n-1-((2*m+5)/6)))
print(determinant)
## [1] 0.4926459

4. Si el VIF para una variable es de 2.5, el coeficiente de correlación entre las variables y el resto de regresores es de:

R/ El coeficiente de correlación es de 0.6

# VIF=1/1-R^2
#2.5=1/1-R^2 
1-1/2.5
## [1] 0.6

5. Sea 10, 15, -10, -15, 4, -4, los residuos de un modelo, el estadístico de prueba para el contraste de normalidad de KS es:

R/ El estadístico de prueba de KS es igual a 0.1374

options(scipen = 999999)
# Ingresando matriz de residuos 
Residuos<- matrix(data = c(10, 15, -10,-15,4,-4), nrow = 6, ncol = 1, byrow = FALSE)
library(nortest)
lillie.test(Residuos)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  Residuos
## D = 0.1374, p-value = 0.9763

6. En una prueba de FG,para un modelo con 5 regresores y un alfa de 4.3% el valor critico es de:

R/ El valor crítico es de 18.79093

m_1<-5 
gl<- m_1*(m_1-1)/2 # grados de libertad 
VC<- qchisq(0.043, gl, lower.tail = FALSE)
print(VC)
## [1] 18.79093

7. Sean 10, 15, -10, -15, 4,-4, los residuos de un modelo. El estadístico de prueba para el contraste de normalidad de JB es:

R/ El estadístico de Jarque-Bera es igual a 0.51072

library(normtest)
jb.norm.test(Residuos)
## 
##  Jarque-Bera test for normality
## 
## data:  Residuos
## JB = 0.51072, p-value = 0.598

8. Para una tolerancia de 0.05 el VIF es de:

R/ El VIF es igual a 20

# VIF= 1/tolerancia 
VIF_<- 1/0.05 
print(VIF_)
## [1] 20

9. Sean 10, 15, -10, -15, 4, -4, los residuos de un modelo. El estadístico de prueba para el contraste de normalidad de Shapiro Wilk es:

R/ W es igual a 0.96164

shapiro.test(Residuos)
## 
##  Shapiro-Wilk normality test
## 
## data:  Residuos
## W = 0.96164, p-value = 0.8323

10.Para un VIF=2.5, la tolerancia es de:

R/ La tolerancia es de 0.4

VIF2<- 2.5
Tolerancia<- 1/VIF2 
print(Tolerancia)
## [1] 0.4

Parte Práctica

Ejercicio 1

Sea el conjunto de datos, indicados en el enlace de abajo, tomados en 24 meses correspondientes a los gastos de comercialización (C) de una empresa, el nivel de ventas (V), su coste de personal (P) y los costes de materias primas (M); se trata de estimar el nivel de ventas a partir de las restantes variables.

1. Estime el modelo de regresión lineal, correspondiente y verifique el supuesto de normalidad, usando todas las pruebas vistas en clase. Comente sus resultados.

Carga de datos y estimación del modelo

options(scipen = 9999999)
library(stargazer)
library(readxl)
ventas_empresa <- read_excel("C:/Users/familia/Downloads/ventas_empresa.xlsx")
modelo_ventas<-lm(formula = V~C+P+M, data=ventas_empresa)
stargazer(modelo_ventas, title= 'Ejercicio Parcial', type = 'text')
## 
## Ejercicio Parcial
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                  V             
## -----------------------------------------------
## C                            0.923***          
##                               (0.223)          
##                                                
## P                            0.950***          
##                               (0.156)          
##                                                
## M                            1.298***          
##                               (0.431)          
##                                                
## Constant                    107.444***         
##                              (18.057)          
##                                                
## -----------------------------------------------
## Observations                    24             
## R2                             0.980           
## Adjusted R2                    0.977           
## Residual Std. Error       9.506 (df = 20)      
## F Statistic           323.641*** (df = 3; 20)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Pruebas de Normalidad en los residuos

library(fitdistrplus)
ajuste_normal<- fitdist(data = modelo_ventas$residuals,distr = 'norm')
plot(ajuste_normal)

Prueba de JB

library(normtest)
jb.norm.test(modelo_ventas$residuals)
## 
##  Jarque-Bera test for normality
## 
## data:  modelo_ventas$residuals
## JB = 1.4004, p-value = 0.261
#Comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal. Dado que el valor de Jarque Bera es menor que el V.C=5.9915,NO SE RECHAZA la Ho, entonces los residuos siguen una distribucion normal.

Prueba de KS (Lilliefors)

library(nortest)
lillie.test(modelo_ventas$residuals)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_ventas$residuals
## D = 0.13659, p-value = 0.2935
# comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal.

Prueba de Shapiro

shapiro.test(modelo_ventas$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_ventas$residuals
## W = 0.95315, p-value = 0.3166
## Calculando U
U<-(0.00389*(log(24)^3)-0.083751*(log(54)^2)-0.31082*(log(24))-1.5861)
print(U)
## [1] -3.781685
S<-exp(1)^((0.0030302*(log(24)^2))-0.082676*(log(24))-0.4803)
print(S)
## [1] 0.4904442
## Normalizando W
Wn<-((log(1-0.95315)-U)/S)
print(Wn)
## [1] 1.469853
# Comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal. Dado que el valor de “W” es menor que el V.C=1.644854,NO SE RECHAZA la Ho, entonces los residuos siguen una distribucion normal.

2. Utilizando todas las herramientas vistas en clase, evalué la situación de colinealidad de los regresores del modelo. Comente sus resultados.

Pruebas de Multicolinealidad

Indice de condición

#Calculo manual 
# Xmat
Xmat<- model.matrix(modelo_ventas)
print(Xmat)
##    (Intercept)   C   P   M
## 1            1 197 173 110
## 2            1 208 152 107
## 3            1 181 150  99
## 4            1 194 150 102
## 5            1 192 163 109
## 6            1 196 179 114
## 7            1 203 169 113
## 8            1 200 166 113
## 9            1 198 159 115
## 10           1 221 206 119
## 11           1 218 181 120
## 12           1 213 192 123
## 13           1 207 191 122
## 14           1 228 217 131
## 15           1 249 190 133
## 16           1 225 221 135
## 17           1 237 189 133
## 18           1 236 192 128
## 19           1 231 193 134
## 20           1 260 233 135
## 21           1 254 196 139
## 22           1 239 199 138
## 23           1 248 202 146
## 24           1 273 240 153
## attr(,"assign")
## [1] 0 1 2 3
#XXmat
XXmat<-t(Xmat)%*%Xmat
print(XXmat)
##             (Intercept)       C       P      M
## (Intercept)          24    5308    4503   2971
## C                  5308 1187852 1007473 664534
## P                  4503 1007473  859157 564389
## M                  2971  664534  564389 372387
#Sn matriz de normalizacion 
Sn<- diag(1/sqrt(diag(XXmat)))
print(Sn)
##           [,1]        [,2]        [,3]        [,4]
## [1,] 0.2041241 0.000000000 0.000000000 0.000000000
## [2,] 0.0000000 0.000917527 0.000000000 0.000000000
## [3,] 0.0000000 0.000000000 0.001078857 0.000000000
## [4,] 0.0000000 0.000000000 0.000000000 0.001638712
#XXmat_norm
XXmat_norm<- (Sn%*%XXmat)%*%Sn 
print(XXmat_norm)
##           [,1]      [,2]      [,3]      [,4]
## [1,] 1.0000000 0.9941322 0.9916538 0.9938018
## [2,] 0.9941322 1.0000000 0.9972774 0.9991686
## [3,] 0.9916538 0.9972774 1.0000000 0.9978035
## [4,] 0.9938018 0.9991686 0.9978035 1.0000000
# Autovalores 
lambas<- eigen(XXmat_norm, symmetric = TRUE)$values
print(lambas)
## [1] 3.9869237681 0.0095007154 0.0027882470 0.0007872695
# Indice de condición 
K<- sqrt(max(lambas)/min(lambas))
print(K)
## [1] 71.16349

Indice de condición usando mctest

library(mctest) 
source(file = "C:/Users/familia/Downloads/correccion_eigprop.R")
my_eigprop(mod = modelo_ventas)
## 
## Call:
## my_eigprop(mod = modelo_ventas)
## 
##   Eigenvalues      CI (Intercept)      C      P      M
## 1      3.9869  1.0000      0.0007 0.0001 0.0003 0.0001
## 2      0.0095 20.4852      0.8776 0.0049 0.0877 0.0075
## 3      0.0028 37.8141      0.1183 0.1594 0.8478 0.0636
## 4      0.0008 71.1635      0.0034 0.8356 0.0642 0.9288
## 
## ===============================
## Row 4==> C, proportion 0.835554 >= 0.50 
## Row 3==> P, proportion 0.847805 >= 0.50 
## Row 4==> M, proportion 0.928751 >= 0.50
# Comentario: El indice de condición es mayor que >30 la multicolinealidad es severa.

Prueba FG

library(fastGraph)
m_2<- ncol(Xmat[,-1]) #Cantidad de variables Explicativas K-1 
n_2<- nrow(Xmat)
determinante_R<- det(cor(Xmat[,-1]))
Chi_FG<--(n_2-1-(2*m_2+5)/6)*log(determinante_R)
print(Chi_FG)
## [1] 71.20805
# Valor crítico
gl<-m_2*(m_2-1)/2
VC1<-qchisq(0.05,gl,lower.tail = FALSE)
print(VC1)
## [1] 7.814728
# P-value
Pval<-pchisq(Chi_FG,gl, lower.tail = FALSE)
print(Pval)
## [1] 0.000000000000002352605
shadeDist(xshade = Chi_FG,ddist = "dchisq" , parm1 = gl, lower.tail = FALSE, sub=paste("VC:",VC,"FG:",Chi_FG))

FG con mctest

library(mctest)
mctest(modelo_ventas)
## 
## 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.0346         0
## Farrar Chi-Square:        71.2080         1
## Red Indicator:             0.8711         1
## Sum of Lambda Inverse:    20.9196         1
## Theil's Method:            0.5430         1
## Condition Number:        105.2299         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test

FG usando la libreria Psych

library(psych)
library(fastGraph)
FG_test<- cortest.bartlett(Xmat[,-1])
VC_1<-qchisq(0.05, FG_test$df, lower.tail = FALSE)
print(FG_test)
## $chisq
## [1] 71.20805
## 
## $p.value
## [1] 0.000000000000002352605
## 
## $df
## [1] 3
shadeDist(xshade = FG_test$chisq,
          ddist = "dchisq", 
          parm1 = FG_test$df, 
          lower.tail = FALSE,
          sub=paste("VC:", VC_1,"FG:", FG_test$chisq))

#Comentario: Al aplicar el estadístico de prueba rechazamos la hipótesis ya que el valor de FG es mayor que el VC

VIF manual

VIF3<- diag(solve(cor(Xmat[,-1])))
print(VIF3)
##        C        P        M 
## 7.631451 3.838911 9.449210

VIF con libreria car

library(car)
VIF_car<- vif(modelo_ventas)
print(VIF_car)
##        C        P        M 
## 7.631451 3.838911 9.449210

VIF con libreria mctest

library(mctest)
mc.plot(modelo_ventas, vif = 2)

Ejercicio 2

Se tienen los datos para trabajadores hombres,en el archivo adjunto, con ellos estime un modelo donde educ es años de escolaridad, como variable dependiente, y como regresores sibs (número de hermanos), meduc (años de escolaridad de la madre) y feduc (años de escolaridad del padre)

1. Estime el modelo de regresión lineal, correspondiente y verifique el supuesto de normalidad, usando todas las pruebas vistas en clase. Comente sus resultados.

Carga de datos y estimación del modelo

library(readr)
library(stargazer)
options(scipen = 9999999)
load("C:/Users/familia/Downloads/wage2.RData")
modelo_escolar<- lm(formula = educ~sibs+meduc+feduc, data = wage2)
stargazer(modelo_escolar, title = "Ejercicio 2 Parcial", type = 'text')
## 
## Ejercicio 2 Parcial
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                educ            
## -----------------------------------------------
## sibs                         -0.094***         
##                               (0.034)          
##                                                
## meduc                        0.131***          
##                               (0.033)          
##                                                
## feduc                        0.210***          
##                               (0.027)          
##                                                
## Constant                     10.364***         
##                               (0.359)          
##                                                
## -----------------------------------------------
## Observations                    722            
## R2                             0.214           
## Adjusted R2                    0.211           
## Residual Std. Error      1.987 (df = 718)      
## F Statistic           65.198*** (df = 3; 718)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Prueba de normalidad en los residuos

library(fitdistrplus)
ajuste_normal1<-fitdist(modelo_escolar$residuals, distr = "norm")
plot(ajuste_normal1)

#### Al realizar la prueba de normalidad en los residuos podemos observar que es posible que los residuos no sigan una distribución normal

Prueba de JB

library(normtest)
jb.norm.test(modelo_escolar$residuals)
## 
##  Jarque-Bera test for normality
## 
## data:  modelo_escolar$residuals
## JB = 35.655, p-value < 0.00000000000000022
#Comentario: Dado que p-value es menor que el nivel de significancia=0.05, entonces la Ho se rechaza, por lo que los residuos no siguen una distribucion normal. Dado que el valor de Jarque Bera es mayor que el V.C=5.9915, SE RECHAZA la Ho, entonces los residuos no siguen una distribucion normal.

Prueba de KS (Lilliefors)

library(nortest)
lillie.test(modelo_escolar$residuals)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_escolar$residuals
## D = 0.089992, p-value = 0.000000000000003394
# comentario: Dado que p-value es menor que el nivel de significancia=0.05, entonces la Ho se rechaza, por lo que los residuos no siguen una distribución normal. 

Prueba de Shapiro

shapiro.test(modelo_escolar$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_escolar$residuals
## W = 0.96692, p-value = 0.00000000001058
## Calculando U
U1<-(0.00389*(log(722)^3)-0.083751*(log(722)^2)-0.31082*(log(722))-1.5861)
print(U1)
## [1] -6.151027
S1<-exp(1)^((0.0030302*(log(722)^2))-0.082676*(log(722))-0.4803)
print(S1)
## [1] 0.4093446
## Normalizando W
Wn1<-((log(1-0.96692)-U1)/S1)
print(Wn1)
## [1] 6.699004
# Comentario: Dado que p-value es menor que el nivel de significancia=0.05, entonces la Ho se rechaza, por lo que los residuos no siguen una distribucion normal. Dado que el valor de “W” es mayor que el V.C=1.644854, SE RECHAZA la Ho, entonces los residuos no siguen una distribucion normal.

Pruebas de Colinealidad

2. Utilizando todas las herramientas vistas en clase, evalue la situación de colinealidad del modelo. Comente sus resultados

Indice de condición

#Calculo manual 
# Xmat
Xmat_1<- model.matrix(modelo_escolar)
print(head(Xmat_1, n=6))
##   (Intercept) sibs meduc feduc
## 1           1    1     8     8
## 2           1    1    14    14
## 3           1    1    14    14
## 4           1    4    12    12
## 5           1   10     6    11
## 7           1    1     8     8
#XXmat
XXmat_1<-t(Xmat_1)%*%Xmat_1
print(XXmat_1)
##             (Intercept)  sibs meduc feduc
## (Intercept)         722  2064  7802  7404
## sibs               2064  9552 20967 19949
## meduc              7802 20967 90078 83895
## feduc              7404 19949 83895 83806
#Sn matriz de normalizacion 
Sn_1<- diag(1/sqrt(diag(XXmat_1)))
print(Sn_1)
##            [,1]       [,2]       [,3]        [,4]
## [1,] 0.03721615 0.00000000 0.00000000 0.000000000
## [2,] 0.00000000 0.01023182 0.00000000 0.000000000
## [3,] 0.00000000 0.00000000 0.00333189 0.000000000
## [4,] 0.00000000 0.00000000 0.00000000 0.003454319
#XXmat_norm
XXmat_norm_1<- (Sn_1%*%XXmat_1)%*%Sn_1 
print(XXmat_norm_1)
##           [,1]      [,2]      [,3]      [,4]
## [1,] 1.0000000 0.7859482 0.9674488 0.9518319
## [2,] 0.7859482 1.0000000 0.7147921 0.7050768
## [3,] 0.9674488 0.7147921 1.0000000 0.9655820
## [4,] 0.9518319 0.7050768 0.9655820 1.0000000
# Autovalores 
lambas_1<- eigen(XXmat_norm_1, symmetric = TRUE)$values
print(lambas_1)
## [1] 3.55762739 0.37556335 0.04172605 0.02508320
# Indice de condición 
K_1<- sqrt(max(lambas_1)/min(lambas_1))
print(K_1)
## [1] 11.90937

Indice de condición usando mctest

library(mctest) 
source(file = "C:/Users/familia/Downloads/correccion_eigprop.R")
my_eigprop(mod = modelo_escolar)
## 
## Call:
## my_eigprop(mod = modelo_escolar)
## 
##   Eigenvalues      CI (Intercept)   sibs  meduc  feduc
## 1      3.5576  1.0000      0.0033 0.0194 0.0031 0.0046
## 2      0.3756  3.0778      0.0015 0.7200 0.0107 0.0184
## 3      0.0417  9.2337      0.3235 0.1056 0.0813 0.8786
## 4      0.0251 11.9094      0.6717 0.1549 0.9049 0.0984
## 
## ===============================
## Row 2==> sibs, proportion 0.720032 >= 0.50 
## Row 4==> meduc, proportion 0.904919 >= 0.50 
## Row 3==> feduc, proportion 0.878599 >= 0.50
# Comentario: Al calcular el indice de condición k(x)= 11.9094 podemos concluir que es menor a 20 y por lo tanto la colinealidad es leve y no se considera un problema. 

Prueba de FG

library(fastGraph)
m_3<- ncol(Xmat_1[,-1]) #Cantidad de variables Explicativas K-1 
n_3<- nrow(Xmat_1)
determinant_R<- det(cor(Xmat_1[,-1]))
Chi_FG1<--(n_3-1-(2*m_3+5)/6)*log(determinant_R)
print(Chi_FG1)
## [1] 358.3897
# Valor crítico
gl1<-m_3*(m_3-1)/2
VC2<-qchisq(0.05,gl1,lower.tail = FALSE)
print(VC2)
## [1] 7.814728
#P-value
Pval2<-pchisq(Chi_FG1,gl1, lower.tail = FALSE)
print(Pval2)
## [1] 0.0000000000000000000000000000000000000000000000000000000000000000000000000000227501
options(scipen = 0)
shadeDist(xshade = Chi_FG1,ddist = "dchisq" , parm1 = gl1, lower.tail = FALSE, sub=paste("VC:",VC2,"FG:",Chi_FG1))

FG con mctest

library(mctest)
mctest(modelo_escolar)
## 
## 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.6075         0
## Farrar Chi-Square:       358.3897         1
## Red Indicator:             0.3952         0
## Sum of Lambda Inverse:     4.1666         0
## Theil's Method:            0.3575         0
## Condition Number:         11.2768         0
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test

FG usando libreria Psych

library(psych)
library(fastGraph)
FG_test1<- cortest.bartlett(Xmat_1[,-1])
VC_2<-qchisq(0.05, FG_test1$df, lower.tail = FALSE)
print(FG_test1)
## $chisq
## [1] 358.3897
## 
## $p.value
## [1] 2.27501e-77
## 
## $df
## [1] 3
shadeDist(xshade = FG_test1$chisq,
          ddist = "dchisq", 
          parm1 = FG_test1$df, 
          lower.tail = FALSE,
          sub=paste("VC:", VC_2,"FG:", FG_test1$chisq))

#Comentario: Al aplicar el estadístico de prueba rechazamos la hipótesis ya que el valor de FG es mayor que el VC, por lo tanto hay evidencia de multicolinealidad.  

VIF Manual

VIF4<- diag(solve(cor(Xmat_1[,-1])))
print(VIF4)
##     sibs    meduc    feduc 
## 1.098950 1.561254 1.506359

VIF con libreria car

library(car)
VIF_car1<- vif(modelo_escolar)
print(VIF_car1)
##     sibs    meduc    feduc 
## 1.098950 1.561254 1.506359

VIF con libreria mctest

library(mctest)
mc.plot(modelo_escolar, vif = 2)

# Al establecer un umbral de 2 ningún regresor supera el umbral, por lo tanto ninguno infla considerablemente la varianza.

Ejercicio 3

El sueldo inicial medio (salary) para los recién graduados de la Facultad de Economía se determina mediante una función lineal: log(salary)=f(SAT,GPA ,log(libvol),log(cost),rank). Donde LSAT es la media del puntaje LSAT del grupo de graduados, GPA es la media del GPA (promedio general) del grupo, libvol es el número de volúmenes en la biblioteca de la Facultad de Economía, cost es el costo anual por asistir a dicha facultad y rank es una clasificación de las escuelas de Economía (siendo rank 1 la mejor)

1. Estime el modelo de regresión lineal, correspondiente y verifique el supuesto de normalidad, usando todas las pruebas vistas en clase. Comente sus resultados.

Carga de datos y estimación del modelo

library(readr)
library(stargazer)
options(scipen = 999999)
load("C:/Users/familia/Downloads/LAWSCH85.RData")
modelo_graduados<-lm(formula = lsalary~LSAT+GPA+llibvol+lcost+rank, data = LAWSCH85)
stargazer(modelo_graduados, title = "Ejercicio 3 Parcial", type = 'text')
## 
## Ejercicio 3 Parcial
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                               lsalary          
## -----------------------------------------------
## LSAT                           0.005           
##                               (0.004)          
##                                                
## GPA                          0.248***          
##                               (0.090)          
##                                                
## llibvol                      0.095***          
##                               (0.033)          
##                                                
## lcost                          0.038           
##                               (0.032)          
##                                                
## rank                         -0.003***         
##                              (0.0003)          
##                                                
## Constant                     8.343***          
##                               (0.533)          
##                                                
## -----------------------------------------------
## Observations                    136            
## R2                             0.842           
## Adjusted R2                    0.836           
## Residual Std. Error      0.112 (df = 130)      
## F Statistic          138.230*** (df = 5; 130)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Prueba de normalidad en los residuos

library(fitdistrplus)
ajuste_normal2<- fitdist(data = modelo_graduados$residuals,distr = 'norm')
plot(ajuste_normal2)

# Se puede observar que en los residuos puede haber una presencia de distribución normal

Prueba de JB

library(normtest)
jb.norm.test(modelo_graduados$residuals)
## 
##  Jarque-Bera test for normality
## 
## data:  modelo_graduados$residuals
## JB = 0.36511, p-value = 0.817
#Comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal. Dado que el valor de Jarque Bera es menor que el V.C=5.9915,NO SE RECHAZA la Ho, entonces los residuos siguen una distribucion normal.

Prueba de KS (Lilliefors)

library(nortest)
lillie.test(modelo_graduados$residuals)
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_graduados$residuals
## D = 0.054571, p-value = 0.4123
# comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal.

Prueba de Shapiro

shapiro.test(modelo_graduados$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_graduados$residuals
## W = 0.99282, p-value = 0.7235
## Calculando U
U2<-(0.00389*(log(136)^3)-0.083751*(log(136)^2)-0.31082*(log(136))-1.5861)
print(U2)
## [1] -4.673103
S2<-exp(1)^((0.0030302*(log(136)^2))-0.082676*(log(136))-0.4803)
print(S2)
## [1] 0.4433804
## Normalizando W
Wn2<-((log(1-0.99282)-U2)/S2)
print(Wn2)
## [1] -0.5939654
# Comentario: Dado que p-value es mayor que el nivel de significancia=0.05, entonces la Ho No se rechaza, por lo que los residuos siguen una distribucion normal. Dado que el valor de “W” es menor que el V.C=1.644854,NO SE RECHAZA la Ho, entonces los residuos siguen una distribucion normal.

Pruebas de Colinealidad

2. Utilizando todas las herramientas vistas en clase, evalue la situación de colinealidad del modelo. Comente sus resultados

Indice de condición

#Calculo manual 
# Xmat
Xmat_2<- model.matrix(modelo_graduados)
print(head(Xmat_2, n=6))
##   (Intercept) LSAT  GPA  llibvol    lcost rank
## 1           1  155 3.15 5.375278 9.028818  128
## 2           1  160 3.50 5.545177 8.850804  104
## 3           1  155 3.25 6.049734 9.703206   34
## 4           1  157 3.20 5.796058 9.773721   49
## 5           1  162 3.38 5.805135 9.030017   95
## 6           1  161 3.40 5.739793 9.030017   98
#XXmat
XXmat_2<-t(Xmat_2)%*%Xmat_2
print(XXmat_2)
##             (Intercept)       LSAT       GPA     llibvol      lcost       rank
## (Intercept)    136.0000   21557.00   450.110    783.3715   1277.008   10847.00
## LSAT         21557.0000 3419799.00 71440.370 124336.7471 202521.842 1697437.00
## GPA            450.1100   71440.37  1494.950   2599.2641   4228.169   34980.46
## llibvol        783.3715  124336.75  2599.264   4536.4063   7362.770   60522.09
## lcost         1277.0080  202521.84  4228.169   7362.7705  12010.096  100735.74
## rank         10847.0000 1697437.00 34980.460  60522.0934 100735.740 1190245.00
#Sn matriz de normalizacion 
Sn_2<- diag(1/sqrt(diag(XXmat_2)))
print(Sn_2)
##            [,1]        [,2]       [,3]       [,4]        [,5]         [,6]
## [1,] 0.08574929 0.000000000 0.00000000 0.00000000 0.000000000 0.0000000000
## [2,] 0.00000000 0.000540754 0.00000000 0.00000000 0.000000000 0.0000000000
## [3,] 0.00000000 0.000000000 0.02586346 0.00000000 0.000000000 0.0000000000
## [4,] 0.00000000 0.000000000 0.00000000 0.01484718 0.000000000 0.0000000000
## [5,] 0.00000000 0.000000000 0.00000000 0.00000000 0.009124872 0.0000000000
## [6,] 0.00000000 0.000000000 0.00000000 0.00000000 0.000000000 0.0009166041
#XXmat_norm
XXmat_norm_2<- (Sn_2%*%XXmat_2)%*%Sn_2 
print(XXmat_norm_2)
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
## [1,] 1.0000000 0.9995823 0.9982420 0.9973380 0.9991966 0.8525542
## [2,] 0.9995823 1.0000000 0.9991485 0.9982590 0.9993057 0.8413471
## [3,] 0.9982420 0.9991485 1.0000000 0.9981161 0.9978511 0.8292662
## [4,] 0.9973380 0.9982590 0.9981161 1.0000000 0.9974980 0.8236445
## [5,] 0.9991966 0.9993057 0.9978511 0.9974980 1.0000000 0.8425432
## [6,] 0.8525542 0.8413471 0.8292662 0.8236445 0.8425432 1.0000000
# Autovalores 
lambas_2<- eigen(XXmat_norm_2, symmetric = TRUE)$values
print(lambas_2)
## [1] 5.7351306262 0.2604004371 0.0020823558 0.0018442636 0.0003778106
## [6] 0.0001645068
# Indice de condición 
K_2<- sqrt(max(lambas_2)/min(lambas_2))
print(K_2)
## [1] 186.7153

Indice de condición usando mctest

library(mctest) 
source(file = "C:/Users/familia/Downloads/correccion_eigprop.R")
my_eigprop(mod = modelo_graduados)
## 
## Call:
## my_eigprop(mod = modelo_graduados)
## 
##   Eigenvalues       CI (Intercept)   LSAT    GPA llibvol  lcost   rank
## 1      5.7351   1.0000      0.0000 0.0000 0.0000  0.0001 0.0000 0.0021
## 2      0.2604   4.6930      0.0000 0.0000 0.0002  0.0004 0.0001 0.2884
## 3      0.0021  52.4800      0.0058 0.0030 0.0007  0.8411 0.1155 0.1357
## 4      0.0018  55.7648      0.0002 0.0010 0.3355  0.1095 0.1756 0.0161
## 5      0.0004 123.2068      0.4254 0.0588 0.4407  0.0423 0.6610 0.4700
## 6      0.0002 186.7153      0.5686 0.9371 0.2229  0.0066 0.0478 0.0877
## 
## ===============================
## Row 6==> LSAT, proportion 0.937119 >= 0.50 
## Row 3==> llibvol, proportion 0.841136 >= 0.50 
## Row 5==> lcost, proportion 0.661004 >= 0.50
# Comentario: Al calcular el indice de condición k(x)= 186.7153 concluimos que es mayor que 30 y por lo tanto la colinealidad es severa.

Prueba de FG

library(fastGraph)
m_4<- ncol(Xmat_2[,-1]) #Cantidad de variables Explicativas K-1 
n_4<- nrow(Xmat_2)
det_R<- det(cor(Xmat_2[,-1]))
Chi_FG2<--(n_4-1-(2*m_4+5)/6)*log(det_R)
print(Chi_FG2)
## [1] 391.509
# Valor crítico
gl2<-m_4*(m_4-1)/2
VC3<-qchisq(0.05,gl2,lower.tail = FALSE)
print(VC3)
## [1] 18.30704
# P-value
Pval3<-pchisq(Chi_FG2,gl2, lower.tail = FALSE)
print(Pval3)
## [1] 0.000000000000000000000000000000000000000000000000000000000000000000000000000006031929
options(scipen = 0)
shadeDist(xshade = Chi_FG2,ddist = "dchisq" , parm1 = gl2, lower.tail = FALSE, sub=paste("VC:",VC3,"FG:",Chi_FG2))

FG con mctest

library(mctest)
mctest(modelo_graduados)
## 
## 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.0521         0
## Farrar Chi-Square:       391.5090         1
## Red Indicator:             0.5819         1
## Sum of Lambda Inverse:    13.8127         0
## Theil's Method:           -0.3680         0
## Condition Number:        181.9505         1
## 
## 1 --> COLLINEARITY is detected by the test 
## 0 --> COLLINEARITY is not detected by the test

FG usando la libreria Psych

library(psych)
library(fastGraph)
FG_test2<- cortest.bartlett(Xmat_2[,-1])
VC_3<-qchisq(0.05, FG_test2$df, lower.tail = FALSE)
print(FG_test2)
## $chisq
## [1] 391.509
## 
## $p.value
## [1] 6.031929e-78
## 
## $df
## [1] 10
shadeDist(xshade = FG_test2$chisq,
          ddist = "dchisq", 
          parm1 = FG_test2$df, 
          lower.tail = FALSE,
          sub=paste("VC:", VC_3,"FG:", FG_test2$chisq))

#Comentario: Al aplicar el estadístico de prueba rechazamos la hipótesis ya que el valor de FG es mayor que el VC 

VIF Manual

VIF5<- diag(solve(cor(Xmat_2[,-1])))
print(VIF5)
##     LSAT      GPA  llibvol    lcost     rank 
## 3.635214 3.369004 2.110802 1.573583 3.124106

VIF con libreria car

library(car)
VIF_car2<- vif(modelo_graduados)
print(VIF_car2)
##     LSAT      GPA  llibvol    lcost     rank 
## 3.635214 3.369004 2.110802 1.573583 3.124106

VIF con libreria mctest

library(mctest)
mc.plot(modelo_graduados, vif = 2)

# Al utilizar el umbral de 2 podemos observar que los elementos LSAT, GPA y rank; superan el umbral de 2 y por lo tanto son los regresores que aumentan la varianza.