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)
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%
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.
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.
shapiro.test(modelo_cobre_EEUU$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo_cobre_EEUU$residuals
## W = 0.9876, p-value = 0.9729
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.
# 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.
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
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.
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))
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
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.
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)
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.
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
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.
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 |
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)
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”.
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”
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
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.
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
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")
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 |