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.

Carregando bibliotecas

# "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.

Séries em diferenças

dinv=diff(inv)
dinvdefla=diff(invdefla)
dt=diff(t)
dselic=diff(selic)
d2inv=diff(dinv)
d2invdefla=diff(dinvdefla)
d2t=diff(dt)

ADF das séries em diferenças

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

Data frame

dt=dt[c(-1)]
dselic <- dselic[c(-1)]
dtir = tir[-c(1,2)]
#dinvdefla = dinvdefla[c(-1)]
dados=data.frame(dt,d2invdefla, dselic, dtir)

Facp

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

Impulso Resposta

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))

VEC

Teste de Johansen

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

Estimação do VEC

# 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

Impulso resposta no VEC

#### 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))

Teste de Birkhoff-Khinchin

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.

Média movel

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))\).

Aplicação com Média Móvel e Média Global

Para aproximar esse conceito em dados práticos, como uma série temporal observada:

  1. 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.

  2. 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\)

Comparação e Convergência

Comparar essas duas médias ajuda a investigar a ergodicidade:

  • Convergência: Se a série temporal é ergódica, a média móvel deve convergir para a média global à medida que a janela da média móvel aumenta (i.e., \((k \rightarrow N)\)). Isso ilustra visualmente o teorema de Birkhoff-Khinchin, onde a média temporal converge para a média global.
  • Análise Gráfica: Um gráfico que mostra a convergência da média móvel para a média global pode fornecer uma validação visual da suposição de ergodicidade. Se as duas médias se alinham à medida que a janela de tempo aumenta, isso indica que a média temporal de longo prazo é estável e reflete a expectativa geral do processo.

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.

Teste de Wald-Wolfowitz

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.