ejercicio del libro de Damodar Gujarati,pag.485

Consulte los datos sobre la industria del cobre de la tabla 12.7.

a ) Con base en esta información, estime el siguiente modelo de regresión:

ln Ct=β1+β2lnIt+β3lnLt+β4lnHt+β5lnAt+ut

b) realizar las pruebas de Normalidad de los Residuos.

c) Realizar las pruebas de Multicolinealidad.

d) Verifique los supuestos de Heterocedastidad y Autocorrelación para el modelo propuesto.

e) En caso de encontrar evidencia de violación de los supuestos, planteados en el literal anterior, corrija a través de un estimador HAC apropiado, el modelo propuesto.

Etimando el Modelo

options(scipen = 9999)
library(readxl)
library(stargazer)
Determinantes_del_precio_interno_del_cobre_en_EEUU <- read_excel("C:/Users/manue/Desktop/Practicas_ECMA/datos_Excel/Datos_Gujarati/Determinantes del precio interno del cobre en EEUU.xlsx")
modelo_cobre_EEUU<-lm(formula = lC~lG+lI+lL+lH+lA,data = Determinantes_del_precio_interno_del_cobre_en_EEUU)
stargazer(modelo_cobre_EEUU,title = "Modelo del Cobre Estadounidense",type = "html",digits = 6)
Modelo del Cobre Estadounidense
Dependent variable:
lC
lG 0.207252
(0.343281)
lI 0.237207
(0.416870)
lL 0.266840**
(0.118072)
lH -0.039308
(0.155459)
lA 0.311094
(0.241367)
Constant -1.087614
(1.224683)
Observations 30
R2 0.937046
Adjusted R2 0.923930
Residual Std. Error 0.123327 (df = 24)
F Statistic 71.445780*** (df = 5; 24)
Note: p<0.1; p<0.05; p<0.01

Nota: Gary R. Smith recopiló los datos de fuentes como American Metal Market, Metals Week y publicaciones del Departamento de Comercio de Estados Unidos.

C=promedio de doce meses del precio interno del cobre en Estados Unidos (centavos por libra).

G=Producto Nacional Bruto anual (miles de millones).

I=Índice promedio de doce meses de la producción industrial.

L=Precio promedio de doce meses del cobre en la bolsa de metales de Londres (libras esterlinas).

H=Número de casas construidas por año (miles de unidades).

A=Precio promedio de doce meses del aluminio (centavos de dólar por libra).

analisis: Los resultados demuestran que todos los coeficientes estimados son muy significativos desde el punto de vista estadístico, pues sus valores p son muy pequeños. Los coeficientes estimados se interpretan como sigue:la elasticidad del Producto Nacional Bruto anual es 0.20 lo que indica que, cuando las demás variables se mantienen constantes, si el Producto Nacional Bruto aumenta 1%,la media del precio interno del cobre en EEUU aumenta alrededor de 20%. El coeficiente del inidce de producción industrial es=0.23,, lo que significa que si el inidce de producción industrial aumenta 1%,la media del precio interno del cobre aumentara sólo 0.23%.de nuevo cuando las demás variables se mantienen constantes.El coeficiente de la variable Precio del cobre en la bolsa de metales de Londres es de 0.26,lo que indica que, cuando las demás variables se mantienen constantes, si el Precio del cobre en la bolsa de metales de Londres aumenta 1%,la media del precio interno del cobre en EEUU aumenta alrededor de 0.26%. Asi mismo El coeficiente de la variable Número de casas construidas por año es de -0.039 lo que indica que, cuando las demás variables se mantienen constantes, si elNúmero de casas construidas por año disminuye un 1% la media del precio interno del cobre en EEUU disminuira -0.039%.El coeficiente de precio del aluminio es de 0.31,lo que significa que si el precio del aluminio aumenta 1%, la media del precio interno del cobre en aumentara 0.31%

1.Prueba de Normalidad de Jarque - Bera

library(normtest)
jb.norm.test(modelo_cobre_EEUU$residuals)
## 
##  Jarque-Bera test for normality
## 
## data:  modelo_cobre_EEUU$residuals
## JB = 0.094742, p-value = 0.9625

0.094742<5.9961(JB<VC) NO rechaza Ho es decir los residuos tienen una distribucion normal.

0.9585>0.05(P>alfa) NO rechaza Ho es decir los residuos tienen una distribucion normal.

2.Prueba de Normalidad de Kolmogorov - Smirnov

library(nortest)
lillie.test((modelo_cobre_EEUU$residuals))
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  (modelo_cobre_EEUU$residuals)
## D = 0.1031, p-value = 0.5732

0.1031<0.5732(KS<VC) NO rechaza Ho es decir los residuos tienen una distribucion normal.

0.5732>0.05(P>alfa) NO rechaza Ho es decir los residuos tienen una distribucion normal.

3.Prueba de Normalidad de Shapiro - Wilk

shapiro.test(modelo_cobre_EEUU$residuals)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_cobre_EEUU$residuals
## W = 0.9876, p-value = 0.9729

Calcular Wn

W<-0.9876
mew<-0.0038915*I(log(30))^3-0.083751*I(log(30))^2-0.31082*I(log(30))-1.5861
des<-exp(0.0030302*I(log(30))^2-0.083751*(log(30))-0.4803)
Wn<-(log(1-W)-mew)/des
print(Wn)
## [1] -1.932235

-1.932235<1.644854 (Wn<VC) NO rechaza Ho es decir los residuos tienen una distribucion normal. 0.9729>0.05 (P>alfa) NO rechaza Ho es decir los residuos tienen una distribucion normal.

Pruebas de Multicolinealidad.

Indice de condicion( calculo manual)

Calcular la matriz |X X|

# matriz Xmat
Xmat<-model.matrix(modelo_cobre_EEUU)
print(Xmat)
##    (Intercept)       lG       lI       lL       lH       lA
## 1            1 5.799699 3.808882 5.395444 7.307202 2.944439
## 2            1 5.849901 3.929863 5.558757 7.315884 2.965788
## 3            1 5.902907 3.975936 5.546349 7.271009 3.041184
## 4            1 5.903453 3.981549 5.518657 7.346655 3.080992
## 5            1 5.989713 4.000034 5.864483 7.406103 3.164631
## 6            1 6.041920 4.112512 5.796362 7.207119 3.258481
## 7            1 6.091310 4.125520 5.391808 7.109879 3.314913
## 8            1 6.102559 4.058717 5.458734 7.231287 3.291754
## 9            1 6.180017 4.171306 5.469746 7.348394 3.290266
## 10           1 6.226537 4.192680 5.504518 7.167115 3.304319
## 11           1 6.260155 4.200205 5.434595 7.218910 3.237109
## 12           1 6.334700 4.279440 5.454894 7.308208 3.173041
## 13           1 6.388057 4.337291 5.456175 7.399337 3.118834
## 14           1 6.454727 4.403054 5.849325 7.353082 3.166319
## 15           1 6.533934 4.497585 6.148682 7.319666 3.198673
## 16           1 6.624065 4.582925 6.318968 7.086571 3.198673
## 17           1 6.679976 4.605170 6.035481 7.186825 3.218076
## 18           1 6.766768 4.666265 6.263779 7.343038 3.241811
## 19           1 6.841081 4.710431 6.430848 7.312887 3.302481
## 20           1 6.889999 4.680278 6.377747 7.292337 3.357594
## 21           1 6.969227 4.696837 6.096725 7.642284 3.367296
## 22           1 7.065699 4.784989 6.058656 7.774225 3.283539
## 23           1 7.175184 4.865995 6.589064 7.629247 3.231989
## 24           1 7.253400 4.862135 6.777191 7.209710 3.528124
## 25           1 7.332238 4.768988 6.321847 7.065955 3.683616
## 26           1 7.438442 4.865995 6.660063 7.344461 3.795264
## 27           1 7.542850 4.920711 6.621006 7.595789 3.936325
## 28           1 7.662750 4.978112 6.564983 7.612485 3.996732
## 29           1 7.874283 5.027165 6.841295 7.466914 4.111038
## 30           1 7.875917 4.991113 6.846837 7.168965 4.260847
## attr(,"assign")
## [1] 0 1 2 3 4 5
# matriz XXmat
XXmat<-t(Xmat)%*%Xmat
print(XXmat)
##             (Intercept)        lG       lI        lL        lH       lA
## (Intercept)     30.0000  200.0515 134.0817  180.6530  220.0415 101.0641
## lG             200.0515 1345.6131 900.7719 1213.0370 1468.3564 679.3075
## lI             134.0817  900.7719 603.3316  812.4022  984.0907 454.4521
## lL             180.6530 1213.0370 812.4022 1095.1744 1325.6458 612.2089
## lH             220.0415 1468.3564 984.0907 1325.6458 1614.8163 741.5058
## lA             101.0641  679.3075 454.4521  612.2089  741.5058 343.7269
## sn calculo de la matriz de normalizacion
sn<-diag(1/sqrt(diag(XXmat)))
print(sn)
##           [,1]       [,2]       [,3]       [,4]       [,5]      [,6]
## [1,] 0.1825742 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000
## [2,] 0.0000000 0.02726088 0.00000000 0.00000000 0.00000000 0.0000000
## [3,] 0.0000000 0.00000000 0.04071195 0.00000000 0.00000000 0.0000000
## [4,] 0.0000000 0.00000000 0.00000000 0.03021749 0.00000000 0.0000000
## [5,] 0.0000000 0.00000000 0.00000000 0.00000000 0.02488505 0.0000000
## [6,] 0.0000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0539378
## XXmat Normalizada 
XX_norm<-(sn%*%XXmat)%*%sn
print(XX_norm)
##           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
## [1,] 1.0000000 0.9956828 0.9966227 0.9966506 0.9997295 0.9952444
## [2,] 0.9956828 1.0000000 0.9997160 0.9992457 0.9961157 0.9988483
## [3,] 0.9966227 0.9997160 1.0000000 0.9994277 0.9970009 0.9979374
## [4,] 0.9966506 0.9992457 0.9994277 1.0000000 0.9968373 0.9978178
## [5,] 0.9997295 0.9961157 0.9970009 0.9968373 1.0000000 0.9952822
## [6,] 0.9952444 0.9988483 0.9979374 0.9978178 0.9952822 1.0000000
## autovalores
library(stargazer)
#autovalores
lambdas<-eigen(XX_norm,symmetric = TRUE)$values
print(lambdas)
## [1] 5.98738766109 0.00904828088 0.00253790249 0.00074313251 0.00023031264
## [6] 0.00005271039
# Indice de condicion
K<-sqrt(max(lambdas)/min(lambdas))
print(K)
## [1] 337.0316

Como el valor obtenido en el indice de condicion es de 337.0316 la colinealidad en este modelo es severa tomando como referencia los humbrales de este indicador.

Uso de la libreria “mctest”, para obtener el indice de condición

library(mctest)
source("C:/Users/manue/Desktop/Practicas_ECMA/datos_Rdata/correccion_eigprop.R")
my_eigprop(mod=modelo_cobre_EEUU)
## 
## Call:
## my_eigprop(mod = modelo_cobre_EEUU)
## 
##   Eigenvalues       CI (Intercept)     lG     lI     lL     lH     lA
## 1      5.9874   1.0000      0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
## 2      0.0090  25.7238      0.0128 0.0014 0.0007 0.0041 0.0132 0.0116
## 3      0.0025  48.5715      0.0023 0.0005 0.0093 0.0709 0.0001 0.1875
## 4      0.0007  89.7606      0.0106 0.0183 0.0363 0.7826 0.0269 0.0142
## 5      0.0002 161.2352      0.5681 0.0047 0.0763 0.1340 0.7599 0.0010
## 6      0.0001 337.0316      0.4062 0.9751 0.8773 0.0084 0.2000 0.7857
## 
## ===============================
## Row 6==> lG, proportion 0.975101 >= 0.50 
## Row 6==> lI, proportion 0.877302 >= 0.50 
## Row 4==> lL, proportion 0.782558 >= 0.50 
## Row 5==> lH, proportion 0.759874 >= 0.50 
## Row 6==> lA, proportion 0.785675 >= 0.50

Prueba de Farrar-Glaubar ( manual)

library(fastGraph)
m<-ncol(Xmat[,-1]) # cantidad de variables explicativas k-1
n<-nrow(Xmat)
determinante_R<- det(cor(Xmat[,-1])) # determinanre de la matriz de correlacion
chi_FG<--(n-1-(2*m+5)/6)*log(determinante_R)
print(chi_FG)
## [1] 195.6409
## Valor Critico
gl<-m*(m-1)/2
VC<-qchisq(0.05,gl,lower.tail = FALSE)
print(VC)
## [1] 18.30704
shadeDist(xshade = chi_FG,ddist = "dchisq",parm1 = gl,lower.tail = FALSE,sub=paste("VC:",VC,"FG:",chi_FG))

Como 195.6409>18.30704(FG>VC), SI se rechaza la Ho por lo tantp hay evidencia de Colinealidad en los regresores del modelo.

Prueba de Farrar-Glaubar Uso de 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] 195.6409
## 
## $p.value
## [1] 0.000000000000000000000000000000000001307887
## 
## $df
## [1] 10
shadeDist(xshade = FG_test$chisq,ddist = "dchisq",parm1 = FG_test$df,lower.tail = FALSE,sub=paste("VC:",VC_1,"FG:",FG_test$chisq))

Uso de la librería “car” y “mctest”

Obtención de los VIF’s, a través de la librería “car”

library(car)
VIFs_car<-vif(modelo_cobre_EEUU)
print(VIFs_car)
##        lG        lI        lL        lH        lA 
## 89.825185 46.484586  6.713120  1.388114 12.492684

Obtención de los VIF’s, a través de la librería “mctest”

library(mctest)
mc.plot(modelo_cobre_EEUU,vif = 5,)

exite una alta colinealidad en los regresores del modelo principalmente entre las variables lG y l ya que estan inflando la varianza del parametro que estan representando.

pruebas de Heterocedásticidad y Autocorrelación

Prueba de White

library(stargazer)
u_i<-modelo_cobre_EEUU$residuals
data_prueba_white<-as.data.frame(cbind(u_i,Determinantes_del_precio_interno_del_cobre_en_EEUU))
regresion_auxiliar<-lm(I(u_i^2)~lG+lI+lL+lH+lA+I(lG^2)+I(lI^2)+I(lL^2)+I(lH^2)+I(lA^2)+lG*lI+lG*lL+lG*lH+lG*lA+lI*lL+lI*lH+lI*lA+lL*lH+lL*lA+lH*lA,data = data_prueba_white)
sumario<-summary(regresion_auxiliar)
n<-nrow(data_prueba_white)
R_2<-sumario$r.squared
LM_w<-n*R_2
gl=5+5+10
p_value<-1-pchisq(q = LM_w,df = gl)
VC<-qchisq(p = 0.95,df = gl)
salida_white<-c(LM_w,VC,p_value)
names(salida_white)<-c("LMw","Valor Crítico","p value")
stargazer(salida_white,title = "Resultados de la prueba de White",type = "html",digits = 6)
Resultados de la prueba de White
LMw Valor Crítico p value
23.896050 31.410430 0.246962

Como 23.896050<31.410430(LMw<VC) No se rechaza la H0, por lo tanto hay evidencia de que la varianza de los residuos es homocedástica.

De igual forma tomando el Pvalue como referencia tenemos que:0.246962>0.05,No se rechaza la H0, por lo tanto hay evidencia de que la varianza de los residuos es homocedástica.

Prueba de White usando la librería “lmtest”

library(lmtest)
prueba_white<-bptest(modelo_cobre_EEUU,~I(lG^2)+I(lI^2)+I(lL^2)+I(lH^2)+I(lA^2)+lG*lI+lG*lL+lG*lH+lG*lA+lI*lL+lI*lH+lI*lA+lL*lH+lL*lA+lH*lA,data =Determinantes_del_precio_interno_del_cobre_en_EEUU)
print(prueba_white)
## 
##  studentized Breusch-Pagan test
## 
## data:  modelo_cobre_EEUU
## BP = 23.896, df = 20, p-value = 0.247

Como 0.247>0.05 No se rechaza la H0, por lo tanto hay evidencia de que la varianza de los residuos es homocedástica.

Pruebas de Autocorrelación

Autocorrelación de 1° orden

Prueba de Durbin – Watson.

Usando libreria “lmtest”

library(lmtest)
dwtest(modelo_cobre_EEUU,alternative = "two.sided",iterations = 1000)
## 
##  Durbin-Watson test
## 
## data:  modelo_cobre_EEUU
## DW = 0.95271, p-value = 0.00005951
## alternative hypothesis: true autocorrelation is not 0

Usando libreria “car”

library(car)
durbinWatsonTest(modelo_cobre_EEUU,simulate = TRUE,reps = 1000)
##  lag Autocorrelation D-W Statistic p-value
##    1       0.5231119     0.9527104       0
##  Alternative hypothesis: rho != 0

en ambos casos de acuerdo al esquema, el DW calculado, cae en la zona de autocorrelacion(+),por lo cual se rechaza la Ho, es decir hay presencia de autocorrelación lineal.

Autocorrelación de orden superior

1.Preparación de datos:

library(dplyr)
library(tidyr)
library(kableExtra)
cbind(u_i,Determinantes_del_precio_interno_del_cobre_en_EEUU) %>% 
  as.data.frame() %>% 
  mutate(Lag_1=dplyr::lag(u_i,1),
         Lag_2=dplyr::lag(u_i,2)) %>% 
  replace_na(list(Lag_1=0,Lag_2=0))->data_prueba_BG
kable(head(data_prueba_BG,6))
u_i Año C G I L H A lC lG lI lL lH lA Lag_1 Lag_2
-0.0003371 1951 21.89 330.2 45.1 220.4 1491 19.00 3.086030 5.799698 3.808882 5.395444 7.307202 2.944439 0.0000000 0.0000000
-0.0712097 1952 22.29 347.2 50.9 259.5 1504 19.41 3.104138 5.849901 3.929863 5.558757 7.315883 2.965788 -0.0003371 0.0000000
-0.2421112 1953 19.63 366.1 53.3 256.3 1438 20.93 2.977059 5.902907 3.975936 5.546349 7.271008 3.041183 -0.0712097 -0.0003371
-0.0936852 1954 22.85 366.3 53.6 249.3 1551 21.78 3.128951 5.903453 3.981549 5.518657 7.346655 3.080992 -0.2421112 -0.0712097
0.1587112 1955 33.77 399.3 54.6 352.3 1646 23.68 3.519573 5.989713 4.000034 5.864483 7.406103 3.164631 -0.0936852 -0.2421112
0.2509638 1956 39.18 420.7 61.1 329.1 1349 26.01 3.668166 6.041920 4.112512 5.796362 7.207119 3.258481 0.1587112 -0.0936852

2.Calculando la regresión auxiliar y el estadístico LMBP

regresion_auxiliar_BG<-lm(u_i~lG+lI+lL+lH+lA+Lag_1+Lag_2,data = data_prueba_BG)
sumario_BG<-summary(regresion_auxiliar_BG)
R_2_BG<-sumario_BG$r.squared
n<-nrow(data_prueba_BG)
LM_BG<-n*R_2_BG
gl=2
p_value<-1-pchisq(q = LM_BG,df = gl)
VC<-qchisq(p = 0.95,df = gl)
salida_bg<-c(LM_BG,VC,p_value)
names(salida_bg)<-c("LMbg","Valor Crítico","p value")
stargazer(salida_bg,title = "Resultados de la prueba de Breusch Godfrey",type = "html",digits = 6)
Resultados de la prueba de Breusch Godfrey
LMbg Valor Crítico p value
13.101940 5.991465 0.001429

Como 13.101940>5.991465(LMbg>VC) SI se rechaza H0, por lo tanto puede concluirse que los residuos del modelo, siguen autocorrelación de orden “2”.

De igual forma como 0.001429<0.05 SI se rechaza H0, por lo tanto puede concluirse que los residuos del modelo, siguen autocorrelación de orden “2”.

Verificando la autocorrelación de orden 2 a travez de la librería “lmtest”

library(lmtest)
bgtest(modelo_cobre_EEUU,order = 2)
## 
##  Breusch-Godfrey test for serial correlation of order up to 2
## 
## data:  modelo_cobre_EEUU
## LM test = 13.102, df = 2, p-value = 0.001429

De igual forma los resultados muestranq que,como pvalue<0.05 SI se rechaza H0, por lo tanto puede concluirse que los residuos del modelo, siguen autocorrelación de orden “2”

Verificando la autocorrelación de orden 1 a travez de el test BG:

library(lmtest)
bgtest(modelo_cobre_EEUU,order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  modelo_cobre_EEUU
## LM test = 9.3653, df = 1, p-value = 0.002211

Como 0.002211<0.05 se rechaza H0, por lo tanto puede concluirse que los residuos del modelo, siguen autocorrelación de 1° orden

Estimadores HAC

Estimador HAC de NeweyWest

dado que al realizar las pruebas de Heterocedasticidad y Autocorrelación, se evidencio la presencia de Autocorrelación de orden 1 y 2 procederemos a corregirlo a travez de los estimadores HAC, y en este caso usamos el estimador de NeweyWest, el cual es específico para modelos con autocorrelacion.

Sin corregir

options(scipen = 99999)
library(lmtest)
#Sin corregir:
coeftest(modelo_cobre_EEUU)
## 
## t test of coefficients:
## 
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -1.087614   1.224683 -0.8881  0.38331  
## lG           0.207252   0.343281  0.6037  0.55168  
## lI           0.237207   0.416870  0.5690  0.57463  
## lL           0.266840   0.118072  2.2600  0.03318 *
## lH          -0.039308   0.155459 -0.2529  0.80254  
## lA           0.311094   0.241367  1.2889  0.20972  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Corregido (usando un estimador HAC de NeweyWest)

library(lmtest)
library(sandwich)
#Corregido:
estimacion_omega<-NeweyWest(modelo_cobre_EEUU,lag = 2)
coeftest(modelo_cobre_EEUU,vcov. = estimacion_omega)
## 
## t test of coefficients:
## 
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -1.087614   1.550217 -0.7016  0.48968  
## lG           0.207252   0.380803  0.5443  0.59129  
## lI           0.237207   0.395666  0.5995  0.55445  
## lL           0.266840   0.105521  2.5288  0.01843 *
## lH          -0.039308   0.183823 -0.2138  0.83248  
## lA           0.311094   0.327493  0.9499  0.35162  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Estimación Robusta

options(scipen = 999999)
library(robustbase)
library(stargazer)
modelo_cobre_EEUU_robust<-lmrob(lC ~ lG + lI + lL + lH + lA,data=Determinantes_del_precio_interno_del_cobre_en_EEUU)
# print(summary(modelo_cobre_EEUU_robust))
stargazer(modelo_cobre_EEUU,modelo_cobre_EEUU_robust,type = "html",title = "comparativa")
comparativa
Dependent variable:
lC
OLS MM-type
linear
(1) (2)
lG 0.207 0.584
(0.343) (0.820)
lI 0.237 0.022
(0.417) (0.264)
lL 0.267** 0.113
(0.118) (0.565)
lH -0.039 -0.095
(0.155) (0.270)
lA 0.311 0.072
(0.241) (0.513)
Constant -1.088 -0.513
(1.225) (2.043)
Observations 30 30
R2 0.937 0.957
Adjusted R2 0.924 0.948
Residual Std. Error (df = 24) 0.123 0.084
F Statistic 71.446*** (df = 5; 24)
Note: p<0.1; p<0.05; p<0.01