A questão da ergodicidade seria para definir que a características de contratos no longo prazo são Não-ergódicos: A intuição nos diz que a medida que aumentamos o tempo de contrato se torna mais difícil cancelar um contrato, devido aos custos de procurement de um novo contrato, assim, o contrato terminaria por ser concluído caso já houvesse um longo prazo envolvido. Nesse sentido a ideia da ergodicidade é determinar que isso não acontece, portanto que o tempo médio que um contrato vem a ter sucesso não é determinado pelo tempo de contrato envolvido. Ou seja, não se pode determinar o sucesso do contrato a partir da ideia do tempo de contrato determinado.
Como questão suplementar, pode ser verificado que independente do status ou tipo de projeto envolvido no contrato, o período de contrato médio por países por características estatísticas determinadas aqui nesse trabalho, não é uma série temporal ergódica, dessa forma a média temporal não converge para uma média global.
Outra característica abordada, foi que choques feitos em outras variáveis (volume do investimento, selic e taxa interna de retorno) no período de contrato, obtiveram implicações não convergentes. Um sistema dinâmico diz-se estável se o seu comportamento não muda de maneira qualitativa quando a sua lei de evolução é ligeiramente modificada. Por exemplo, se modificarmos um pouco o tamanho, o peso ou a forma de um pêndulo, continua sendo verdade que ele irá oscilar por um tempo até parar por efeito da dissipação de energia causada pelo atrito. Sendo assim, se o período de contrato fosse uma variável ergódica esse efeito de choque seria dissipado, contudo é possível observar que o efeito se dissipa, contudo existe um efeito de longo prazo positivo ou negativo, dependendo da variável e que os desvios padrões aumentam em grandes proporções.
# "limpar" ambiente
rm(list = ls())
# Carregar bibliotecas
library(readxl)
library(readr)
library(tseries)
library(urca)
library(ggplot2)
library(forecast)
library(vars)
m1 <- read_excel("C:/Users/kassy/OneDrive - caen.ufc.br/1. CAEN/3. Doutorado/Thesis/Test banco mundial/Base 2023/ergodicidadeserie.xlsx")
#View(m1)
m1$ano <- as.Date(paste0(m1$ano, "/01"), format = "%Y")
data=m1$ano
t=m1$ContractPeriod
selic=m1$over
inv=m1$TotalInvestment1
invdefla=m1$investmentdefla
tir=m1$tir
data=as.Date(m1$ano, "%Y")
t=as.numeric(t)
selic=as.numeric(selic)
inv=as.numeric(inv)
invdefla=as.numeric(invdefla)
# Gráfico do período de contrato médio
tplot <- ggplot(data = m1, aes(data, t, group = 1)) +
geom_line() +
labs(title = NULL, x = "Período", y = "Período de Contrato") +
theme(axis.title.x = element_text(size=10, face="bold"),
axis.title.y = element_text(size=10, face="bold")) +
theme_bw()
print(tplot)
invplot <- ggplot(data = m1, aes(data, invdefla, group = 1)) +
geom_line() +
labs(title = NULL, x = "Período", y = "Investimento") +
theme(axis.title.x = element_text(size=10, face="bold"),
axis.title.y = element_text(size=10, face="bold")) +
theme_bw()
print(invplot)
#Teste ADF
# ADF t
adf.test(t)
##
## Augmented Dickey-Fuller Test
##
## data: t
## Dickey-Fuller = -0.9811, Lag order = 3, p-value = 0.9248
## alternative hypothesis: stationary
adf.test(inv)
##
## Augmented Dickey-Fuller Test
##
## data: inv
## Dickey-Fuller = -1.9612, Lag order = 3, p-value = 0.5876
## alternative hypothesis: stationary
adf.test(invdefla)
##
## Augmented Dickey-Fuller Test
##
## data: invdefla
## Dickey-Fuller = -1.9317, Lag order = 3, p-value = 0.5989
## alternative hypothesis: stationary
adf.test(selic)
##
## Augmented Dickey-Fuller Test
##
## data: selic
## Dickey-Fuller = -2.4321, Lag order = 3, p-value = 0.4067
## alternative hypothesis: stationary
adf.test(tir)
##
## Augmented Dickey-Fuller Test
##
## data: tir
## Dickey-Fuller = -3.6519, Lag order = 3, p-value = 0.04504
## alternative hypothesis: stationary
##
#ur.df(t, lags = 6)
#adf <- ur.df(t, lags = 6)
#summary(adf)
Todas possuem pelo menos uma raiz unitária.
dinv=diff(inv)
dinvdefla=diff(invdefla)
dt=diff(t)
dselic=diff(selic)
d2inv=diff(dinv)
d2invdefla=diff(dinvdefla)
d2t=diff(dt)
adf.test(dinv)
##
## Augmented Dickey-Fuller Test
##
## data: dinv
## Dickey-Fuller = -2.6223, Lag order = 3, p-value = 0.3341
## alternative hypothesis: stationary
adf.test(d2invdefla)
##
## Augmented Dickey-Fuller Test
##
## data: d2invdefla
## Dickey-Fuller = -4.0206, Lag order = 3, p-value = 0.02208
## alternative hypothesis: stationary
adf.test(dt)
## Warning in adf.test(dt): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: dt
## Dickey-Fuller = -4.5131, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
adf.test(dselic)
##
## Augmented Dickey-Fuller Test
##
## data: dselic
## Dickey-Fuller = -3.4959, Lag order = 3, p-value = 0.06296
## alternative hypothesis: stationary
dt=dt[c(-1)]
dselic <- dselic[c(-1)]
dtir = tir[-c(1,2)]
#dinvdefla = dinvdefla[c(-1)]
dados=data.frame(dt,d2invdefla, dselic, dtir)
Pacf(d2t)
acf(dt)
Pacf(d2invdefla)
Pacf(dselic)
Pacf(tir)
## VAR
VAR <- VAR(dados, p=2, type = c("const", "trend", "both", "none"))
summary(VAR)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: dt, d2invdefla, dselic, dtir
## Deterministic variables: const
## Sample size: 26
## Log Likelihood: -303.915
## Roots of the characteristic polynomial:
## 0.7613 0.7613 0.7535 0.7535 0.7037 0.3434 0.3434 0.2009
## Call:
## VAR(y = dados, p = 2, type = c("const", "trend", "both", "none"))
##
##
## Estimation results for equation dt:
## ===================================
## dt = dt.l1 + d2invdefla.l1 + dselic.l1 + dtir.l1 + dt.l2 + d2invdefla.l2 + dselic.l2 + dtir.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## dt.l1 -2.790e-01 2.362e-01 -1.181 0.254
## d2invdefla.l1 -2.387e-05 2.665e-05 -0.896 0.383
## dselic.l1 4.496e-02 1.657e-01 0.271 0.789
## dtir.l1 -2.406e+01 1.180e+02 -0.204 0.841
## dt.l2 -3.148e-01 2.439e-01 -1.290 0.214
## d2invdefla.l2 -3.533e-05 2.738e-05 -1.290 0.214
## dselic.l2 4.625e-02 1.216e-01 0.380 0.708
## dtir.l2 7.971e+01 1.013e+02 0.786 0.442
## const -6.779e+00 7.532e+00 -0.900 0.381
##
##
## Residual standard error: 2.882 on 17 degrees of freedom
## Multiple R-Squared: 0.2874, Adjusted R-squared: -0.048
## F-statistic: 0.8569 on 8 and 17 DF, p-value: 0.5689
##
##
## Estimation results for equation d2invdefla:
## ===========================================
## d2invdefla = dt.l1 + d2invdefla.l1 + dselic.l1 + dtir.l1 + dt.l2 + d2invdefla.l2 + dselic.l2 + dtir.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## dt.l1 1.089e+03 1.757e+03 0.620 0.5437
## d2invdefla.l1 -1.127e+00 1.982e-01 -5.686 2.68e-05 ***
## dselic.l1 -7.090e+02 1.233e+03 -0.575 0.5727
## dtir.l1 8.636e+05 8.778e+05 0.984 0.3390
## dt.l2 -1.850e+02 1.815e+03 -0.102 0.9200
## d2invdefla.l2 -4.938e-01 2.037e-01 -2.424 0.0268 *
## dselic.l2 2.776e+02 9.043e+02 0.307 0.7626
## dtir.l2 -1.158e+06 7.540e+05 -1.536 0.1431
## const 3.539e+04 5.603e+04 0.632 0.5360
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 21440 on 17 degrees of freedom
## Multiple R-Squared: 0.7327, Adjusted R-squared: 0.6069
## F-statistic: 5.826 on 8 and 17 DF, p-value: 0.001138
##
##
## Estimation results for equation dselic:
## =======================================
## dselic = dt.l1 + d2invdefla.l1 + dselic.l1 + dtir.l1 + dt.l2 + d2invdefla.l2 + dselic.l2 + dtir.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## dt.l1 2.765e-01 2.608e-01 1.060 0.3039
## d2invdefla.l1 -3.746e-05 2.943e-05 -1.273 0.2201
## dselic.l1 -1.758e-01 1.830e-01 -0.961 0.3501
## dtir.l1 -1.723e+02 1.303e+02 -1.322 0.2036
## dt.l2 7.536e-01 2.694e-01 2.798 0.0124 *
## d2invdefla.l2 -2.838e-05 3.024e-05 -0.939 0.3611
## dselic.l2 -3.153e-01 1.342e-01 -2.349 0.0312 *
## dtir.l2 -4.087e+00 1.119e+02 -0.037 0.9713
## const 1.996e+01 8.318e+00 2.400 0.0281 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 3.183 on 17 degrees of freedom
## Multiple R-Squared: 0.4874, Adjusted R-squared: 0.2462
## F-statistic: 2.021 on 8 and 17 DF, p-value: 0.1061
##
##
## Estimation results for equation dtir:
## =====================================
## dtir = dt.l1 + d2invdefla.l1 + dselic.l1 + dtir.l1 + dt.l2 + d2invdefla.l2 + dselic.l2 + dtir.l2 + const
##
## Estimate Std. Error t value Pr(>|t|)
## dt.l1 -2.320e-05 4.809e-04 -0.048 0.96208
## d2invdefla.l1 -1.664e-08 5.427e-08 -0.307 0.76290
## dselic.l1 -2.105e-05 3.374e-04 -0.062 0.95099
## dtir.l1 8.301e-01 2.403e-01 3.454 0.00303 **
## dt.l2 -1.397e-04 4.967e-04 -0.281 0.78185
## d2invdefla.l2 2.673e-08 5.576e-08 0.479 0.63776
## dselic.l2 4.058e-05 2.475e-04 0.164 0.87173
## dtir.l2 -7.217e-02 2.064e-01 -0.350 0.73087
## const 2.790e-02 1.534e-02 1.819 0.08661 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.005869 on 17 degrees of freedom
## Multiple R-Squared: 0.7512, Adjusted R-squared: 0.6341
## F-statistic: 6.415 on 8 and 17 DF, p-value: 0.0006604
##
##
##
## Covariance matrix of residuals:
## dt d2invdefla dselic dtir
## dt 8.307e+00 -3.763e+03 3.047e+00 1.849e-03
## d2invdefla -3.763e+03 4.597e+08 -2.127e+04 -2.797e+01
## dselic 3.047e+00 -2.127e+04 1.013e+01 -3.039e-03
## dtir 1.849e-03 -2.797e+01 -3.039e-03 3.445e-05
##
## Correlation matrix of residuals:
## dt d2invdefla dselic dtir
## dt 1.00000 -0.06089 0.3321 0.1093
## d2invdefla -0.06089 1.00000 -0.3117 -0.2222
## dselic 0.33210 -0.31173 1.0000 -0.1627
## dtir 0.10928 -0.22225 -0.1627 1.0000
plot(irf(VAR, impulse = "dselic", response = c("dt"), n.ahead = 30))
plot(irf(VAR, impulse = "d2invdefla", response = c("dt"),n.ahead = 30))
plot(irf(VAR, impulse = "dtir", response = c("dt"), n.ahead = 30))
Data frame em nível
Há pelo menos uma cointegração.
dadosn=data.frame(t,invdefla,selic, tir)
TesteJohansen <- ca.jo(dadosn, type = "trace", ecdet = "trend", K = 4)
summary(TesteJohansen)
##
## ######################
## # Johansen-Procedure #
## ######################
##
## Test type: trace statistic , with linear trend in cointegration
##
## Eigenvalues (lambda):
## [1] 0.8770077 0.6304789 0.5833893 0.4519578 0.0000000
##
## Values of teststatistic and critical values of test:
##
## test 10pct 5pct 1pct
## r <= 3 | 15.64 10.49 12.25 16.26
## r <= 2 | 38.40 22.76 25.32 30.45
## r <= 1 | 64.29 39.06 42.44 48.45
## r = 0 | 118.77 59.14 62.99 70.05
##
## Eigenvectors, normalised to first column:
## (These are the cointegration relations)
##
## t.l4 invdefla.l4 selic.l4 tir.l4
## t.l4 1.000000e+00 1.000000e+00 1.000000e+00 1.0000000000
## invdefla.l4 1.882625e-04 -1.094712e-04 -1.336438e-04 -0.0001177027
## selic.l4 2.377101e+00 6.572762e-01 -2.267907e-01 -0.0781235755
## tir.l4 1.691660e+02 3.070723e+02 6.122316e+02 79.5286235271
## trend.l4 1.389956e+00 9.334053e-01 4.425030e-01 -0.0446263761
## trend.l4
## t.l4 1.000000e+00
## invdefla.l4 5.157187e-04
## selic.l4 -2.126243e+00
## tir.l4 -1.037862e+03
## trend.l4 -2.745002e+00
##
## Weights W:
## (This is the loading matrix)
##
## t.l4 invdefla.l4 selic.l4 tir.l4
## t.d 1.310724e-01 -1.347808e+00 0.28852110 2.099887e-01
## invdefla.d -1.184893e+03 -2.319529e+03 5215.18113121 4.475409e+03
## selic.d -3.237824e-01 -5.143578e-01 -0.43809859 -8.963178e-01
## tir.d -2.664286e-04 4.367501e-04 -0.00199729 2.102795e-03
## trend.l4
## t.d -3.560340e-11
## invdefla.d 1.338638e-07
## selic.d -7.093146e-11
## tir.d -9.258416e-14
#### SELEÇÃO DA ORDEM DO MODELO####
Ordem <- VARselect(dadosn, lag.max = 5)
print(Ordem)
## $selection
## AIC(n) HQ(n) SC(n) FPE(n)
## 5 5 5 5
##
## $criteria
## 1 2 3 4 5
## AIC(n) 13.40702 13.60781 13.16584 12.47541 8.777421e+00
## HQ(n) 13.67747 14.09463 13.86901 13.39494 9.913317e+00
## SC(n) 14.38212 15.36300 15.70110 15.79075 1.287284e+01
## FPE(n) 679342.26507 929964.45830 819586.99491 863129.16669 1.368730e+05
Preferivel 5 lag
# Ajuste do modelo
TesteJohansenOrdem <- ca.jo(dadosn, type = "trace", ecdet = "none",
K = 4)
# Estimando o VEC
VEC <- cajorls(TesteJohansenOrdem, r = 3)
summary(VEC$rlm)
## Response t.d :
##
## Call:
## lm(formula = t.d ~ ect1 + ect2 + ect3 + constant + t.dl1 + invdefla.dl1 +
## selic.dl1 + tir.dl1 + t.dl2 + invdefla.dl2 + selic.dl2 +
## tir.dl2 + t.dl3 + invdefla.dl3 + selic.dl3 + tir.dl3 - 1,
## data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.5781 -0.9451 -0.0013 0.8402 3.0594
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 4.072e-01 4.910e-01 0.829 0.4263
## ect2 -6.167e-06 6.902e-05 -0.089 0.9306
## ect3 -7.168e-02 2.409e-01 -0.298 0.7722
## constant -3.838e+01 2.828e+01 -1.357 0.2045
## t.dl1 -3.404e-01 2.770e-01 -1.229 0.2473
## invdefla.dl1 -1.786e-05 5.319e-05 -0.336 0.7440
## selic.dl1 5.171e-01 2.007e-01 2.576 0.0276 *
## tir.dl1 1.420e+02 1.226e+02 1.158 0.2736
## t.dl2 -3.038e-01 3.360e-01 -0.904 0.3872
## invdefla.dl2 -4.719e-05 8.273e-05 -0.570 0.5809
## selic.dl2 -7.422e-02 1.959e-01 -0.379 0.7127
## tir.dl2 2.499e+01 1.319e+02 0.189 0.8536
## t.dl3 -6.797e-01 3.750e-01 -1.812 0.1000 .
## invdefla.dl3 -3.599e-05 8.118e-05 -0.443 0.6670
## selic.dl3 -7.242e-02 2.422e-01 -0.299 0.7710
## tir.dl3 3.965e+02 2.177e+02 1.822 0.0985 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.184 on 10 degrees of freedom
## Multiple R-squared: 0.7606, Adjusted R-squared: 0.3775
## F-statistic: 1.986 on 16 and 10 DF, p-value: 0.1366
##
##
## Response invdefla.d :
##
## Call:
## lm(formula = invdefla.d ~ ect1 + ect2 + ect3 + constant + t.dl1 +
## invdefla.dl1 + selic.dl1 + tir.dl1 + t.dl2 + invdefla.dl2 +
## selic.dl2 + tir.dl2 + t.dl3 + invdefla.dl3 + selic.dl3 +
## tir.dl3 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18507 -3980 -687 3940 16417
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 8.064e+03 2.744e+03 2.939 0.014815 *
## ect2 -1.403e+00 3.857e-01 -3.637 0.004559 **
## ect3 -4.818e+03 1.346e+03 -3.578 0.005027 **
## constant -5.472e+05 1.580e+05 -3.463 0.006096 **
## t.dl1 3.286e+03 1.548e+03 2.122 0.059802 .
## invdefla.dl1 -1.599e+00 2.973e-01 -5.378 0.000311 ***
## selic.dl1 -1.316e+03 1.122e+03 -1.173 0.268043
## tir.dl1 1.623e+06 6.852e+05 2.368 0.039388 *
## t.dl2 5.098e+03 1.878e+03 2.715 0.021755 *
## invdefla.dl2 -1.561e+00 4.623e-01 -3.377 0.007043 **
## selic.dl2 -3.226e+03 1.095e+03 -2.947 0.014609 *
## tir.dl2 3.145e+06 7.374e+05 4.266 0.001648 **
## t.dl3 7.020e+03 2.096e+03 3.350 0.007369 **
## invdefla.dl3 -1.415e+00 4.537e-01 -3.119 0.010894 *
## selic.dl3 -4.834e+03 1.353e+03 -3.572 0.005083 **
## tir.dl3 3.459e+06 1.216e+06 2.844 0.017439 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12200 on 10 degrees of freedom
## Multiple R-squared: 0.8424, Adjusted R-squared: 0.5903
## F-statistic: 3.341 on 16 and 10 DF, p-value: 0.02914
##
##
## Response selic.d :
##
## Call:
## lm(formula = selic.d ~ ect1 + ect2 + ect3 + constant + t.dl1 +
## invdefla.dl1 + selic.dl1 + tir.dl1 + t.dl2 + invdefla.dl2 +
## selic.dl2 + tir.dl2 + t.dl3 + invdefla.dl3 + selic.dl3 +
## tir.dl3 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2866 -0.9756 -0.0140 0.6606 3.5371
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 -9.325e-01 5.765e-01 -1.618 0.1368
## ect2 2.770e-05 8.103e-05 0.342 0.7395
## ect3 -2.724e-01 2.829e-01 -0.963 0.3582
## constant 3.680e+01 3.320e+01 1.109 0.2936
## t.dl1 -5.058e-01 3.253e-01 -1.555 0.1510
## invdefla.dl1 2.513e-05 6.245e-05 0.402 0.6958
## selic.dl1 -3.738e-01 2.357e-01 -1.586 0.1438
## tir.dl1 -1.886e+02 1.440e+02 -1.310 0.2194
## t.dl2 1.726e-01 3.945e-01 0.438 0.6710
## invdefla.dl2 1.242e-04 9.713e-05 1.279 0.2297
## selic.dl2 -1.722e-01 2.300e-01 -0.749 0.4712
## tir.dl2 -1.598e+02 1.549e+02 -1.031 0.3266
## t.dl3 -8.838e-01 4.403e-01 -2.007 0.0725 .
## invdefla.dl3 9.658e-05 9.531e-05 1.013 0.3348
## selic.dl3 -2.734e-01 2.843e-01 -0.961 0.3590
## tir.dl3 -3.456e+02 2.556e+02 -1.352 0.2061
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.564 on 10 degrees of freedom
## Multiple R-squared: 0.8075, Adjusted R-squared: 0.4995
## F-statistic: 2.622 on 16 and 10 DF, p-value: 0.063
##
##
## Response tir.d :
##
## Call:
## lm(formula = tir.d ~ ect1 + ect2 + ect3 + constant + t.dl1 +
## invdefla.dl1 + selic.dl1 + tir.dl1 + t.dl2 + invdefla.dl2 +
## selic.dl2 + tir.dl2 + t.dl3 + invdefla.dl3 + selic.dl3 +
## tir.dl3 - 1, data = data.mat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0094127 -0.0008883 -0.0002443 0.0013054 0.0074236
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## ect1 1.375e-03 1.139e-03 1.207 0.2553
## ect2 -1.918e-07 1.601e-07 -1.198 0.2585
## ect3 5.172e-04 5.589e-04 0.925 0.3766
## constant 2.112e-02 6.560e-02 0.322 0.7541
## t.dl1 5.708e-04 6.427e-04 0.888 0.3953
## invdefla.dl1 4.268e-08 1.234e-07 0.346 0.7366
## selic.dl1 5.301e-04 4.657e-04 1.138 0.2815
## tir.dl1 -4.477e-01 2.845e-01 -1.574 0.1466
## t.dl2 6.354e-04 7.795e-04 0.815 0.4340
## invdefla.dl2 7.133e-08 1.919e-07 0.372 0.7179
## selic.dl2 5.375e-04 4.544e-04 1.183 0.2642
## tir.dl2 -8.016e-01 3.061e-01 -2.619 0.0257 *
## t.dl3 7.087e-04 8.700e-04 0.815 0.4343
## invdefla.dl3 -8.796e-08 1.883e-07 -0.467 0.6505
## selic.dl3 5.149e-04 5.619e-04 0.916 0.3810
## tir.dl3 -3.272e-01 5.050e-01 -0.648 0.5317
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.005066 on 10 degrees of freedom
## Multiple R-squared: 0.7117, Adjusted R-squared: 0.2505
## F-statistic: 1.543 on 16 and 10 DF, p-value: 0.246
#### FUNÇÃO IMPULSO-RESPOSTA ####
# Transformando o VEC em VAR
VECemVAR <- vec2var(TesteJohansenOrdem, r = 3)
# Autocorrelação serial dos resíduos
serial.test(VECemVAR, lags.pt = 5)
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object VECemVAR
## Chi-squared = 95.7, df = 20, p-value = 7.35e-12
# Estabelecendo as variáveis endógenas
Endogenas <- c("t", "invdefla")
Espera-se que choques em sistemas dinâmicos não ergódicos os choque não cheguem a um ponto de convergencia
# Calculando a função impulso resposta
# Impulso na RNDBF
plot(irf(VECemVAR, impulse = "selic", response = "t", n.ahead = 50))
plot(irf(VECemVAR, impulse = "invdefla", response = "t", n.ahead = 30))
plot(irf(VECemVAR, impulse = "tir", response = "t", n.ahead = 30))
plot(irf(VECemVAR, impulse = "t", response = "invdefla", n.ahead = 30))
plot(irf(VECemVAR, impulse = "selic", response = "invdefla", n.ahead = 30))
## Warning in chol.default(SKK, pivot = TRUE): the matrix is either rank-deficient
## or not positive definite
## Warning in log(1 - lambda[x + 1]): NaNs produzidos
plot(irf(VECemVAR, impulse = "tir", response = "invdefla", n.ahead = 30))
Baseado no teorema ergódico de Birkhoff, pode ser usado para testar se as médias temporais convergem para as médias amostrais.
# Supondo que sua série temporal "t" está dentro de "m1"
#serie_temporal <- m1$ContractPeriod
# Calculando a média global
#media_global <- mean(serie_temporal)
# Calculando a média móvel (média temporal)
#media_movel <- cumsum(serie_temporal) / seq_along(serie_temporal)
# Criar um novo gráfico para garantir que esteja preparado
#plot.new()
# Plotando a convergência da média móvel para a média global
#plot(media_movel, type = "l", col = "blue", lwd = 2,
# main = "Média Móvel vs Média Global", xlab = "Tempo", ylab = "Média Móvel")
# Adicionando a linha da média global ao gráfico
#abline(h = media_global, col = "red", lwd = 2, lty = 2) # Média global
Gráfico de Média Móvel (Birkhoff-Khinchin): Se a média móvel da série “t” não converge para a média global, isso indica que a série pode não ser ergódica.
Essa é uma média movel acumulada, não há nem como não convergir para a média global.
Não convergente
# Convertendo 'ContractPeriod' para numérico
m1$ContractPeriod <- as.numeric(gsub(",", ".", m1$ContractPeriod))
# Calculando a média móvel de janela de 3 anos
library(zoo)
m1$MediaMovel3Anos <- rollmean(m1$ContractPeriod, 3, fill = NA, align = 'right')
# Plotando a média móvel junto com a média global
media_global <- mean(m1$ContractPeriod, na.rm = TRUE) # Calculando a média global sem NA
plot(m1$MediaMovel3Anos, type = "l", col = "blue", lwd = 2,
main = "Média Móvel de 3 Anos vs Média Global", xlab = "Tempo", ylab = "Média Móvel")
lines(rep(media_global, nrow(m1)), col = "red", lwd = 2, lty = 2) # Adicionando a linha da média global
O teorema de Birkhoff-Khinchin é fundamental no estudo de processos estocásticos e séries temporais, especialmente em relação à ergodicidade. Este teorema afirma que, para um processo estocástico ergódico, a média temporal de uma função observável converge quase certamente para a média esperada (média global) à medida que o tempo avança para o infinito. Matematicamente, se \((X_t)\) é um processo estocástico e \((f)\) é uma função integrável, então:
\(\frac{1}{T} \sum_{t=1}^T f(X_t) \xrightarrow{\text{q.c.}} E[f(X)]\)
onde “q.c.” indica “quase certamente” e \((E[f(X)])\) é a média esperada de \((f(X_t))\).
Para aproximar esse conceito em dados práticos, como uma série temporal observada:
Média Global:
É a média de todos os dados na série, representando a expectativa de longo prazo \((E[X_t])\) assumindo que a distribuição subjacente não muda. Este é um valor constante calculado como:
\(\text{Média Global} = \frac{1}{N} \sum_{t=1}^N X_t\)
onde \(N\) é o número total de observações.
Média Móvel:
É a média de um subconjunto da série temporal, calculada em janelas rolantes. Cada ponto na série da média móvel é uma média de \((k)\) valores consecutivos. Isso pode ser visto como uma aproximação da média temporal para cada ponto no tempo:
\(\text{Média Móvel}_t = \frac{1}{k} \sum_{i=t-k+1}^t X_i\)
Comparar essas duas médias ajuda a investigar a ergodicidade:
Utilizar a comparação entre a média móvel e a média global como uma aproximação do teorema de Birkhoff-Khinchin permite visualizar e quantificar até que ponto uma série temporal específica pode ser considerada ergódica, dessa forma é possível ter intuição sobre a estabilidade e previsibilidade do processo ao longo do tempo.
Verifica a aleatoriedade de uma série. Se a série não for aleatória, isso pode ser um indicativo de não ergodicidade.
#Carregando a biblioteca DescTools (se não estiver instalada, instale com
#install.packages("DescTools")
library(DescTools)
##
## Anexando pacote: 'DescTools'
## O seguinte objeto é mascarado por 'package:vars':
##
## Phi
## O seguinte objeto é mascarado por 'package:forecast':
##
## BoxCox
# Supondo que sua série temporal "t" está dentro de "m1"
serie_temporal <- m1$ContractPeriod
# Convertendo a série para uma variável binária baseada na mediana
serie_binaria <- as.factor(serie_temporal > median(serie_temporal))
# Aplicando o Run Test (Wald-Wolfowitz Test)
run_test <- RunsTest(serie_binaria)
# Visualizando o resultado
print(run_test)
##
## Runs Test for Randomness
##
## data: serie_binaria
## runs = 7, m = 15, n = 15, p-value = 0.001106
## alternative hypothesis: true number of runs is not equal the expected number
Run Test (Wald-Wolfowitz): O resultado do teste vai mostrar um p-valor. Se o p-valor for pequeno (geralmente < 0.05), rejeitamos a hipótese de aleatoriedade, sugerindo dependência e não ergodicidade.