Primeiro importamos a base de dados e apresentamos sua estrutura básica.
dados <- read_excel("dados trabalho.xlsx")
## 'data.frame': 244 obs. of 6 variables:
## $ data: Date, format: "1947-01-01" "1947-04-01" ...
## $ RPD : num 1096 1073 1103 1090 1107 ...
## $ PIB : num 1571 1569 1568 1591 1616 ...
## $ DCP : num 1017 1034 1038 1038 1043 ...
## $ LC : num 21.2 20 19.8 21.7 22.9 24.1 23.8 23 21 18.6 ...
## $ DIV : num 6 6.3 6.5 6.4 7 6.7 7.1 7.4 7.2 7.2 ...
A primeira coluna se refere a data e, como definido pelo professor, as outras colunas são:
Em uma primeira análise visual parece que todas as séries são não estacionárias e que possuem algum tipo de tendência. Além disso, uma equação de tendência quadrática parece ter um ajuste melhor do que uma equação de tendência linear.
A equação do teste Dickey-Fuler Aumentado é:
\[\Delta r_{t}=\mu+\beta t+(\phi-1)r_{t-1}+\sum_{k=1}^{p-1}(\phi_k\times\Delta r_{t-k})+\epsilon_t\]
Como no caso acima temos apenas uma diferença de lag nosso k é igual a 1 e a equação é simplificada para
\[\Delta r_{t}=\mu+\beta t+\tau\times r_{t-1}+\phi_1\Delta r_{t-1}+\epsilon_t\]
em que,
\[\tau=(\phi-1)\]
Assim, seguimos para explicação acerca do fim da tabela abaixo1:
O primeiro valor da estatística de teste (0.2687) se refere a “tau3”; o segundo valor da estatística de teste (51.3392) se refere a “phi2”; e o terceiro valor da estatística de teste (18.4812) se refere a “phi3”.
Por sua vez, “tau3” é um teste em que a hipótese nula é de que existe raiz unitária e existe tendência determinística e existe drift. Já “phi2” tem a hipótese nula de que existe raiz unitária e NÃO existe tendência determinística e NÃO existe drift. Já “phi3” tem a hipótese nula de que existe raiz unitária e existe drift e NÃO existe tendência determinística.
Como podemos perceber, “phi1” não aparece no resultado do modelo. Isso ocorre porque selecionamos o tipo como “trend”. Se tivessemos selecionado o tipo como “drift”, o “phi1” apareceria. Caso optassemos pelo tipo “drift”, “phi1” teria a hipótese nula de que a série possui raiz unitária e NÃO possui drift.
Nos iremos rejeitar a hipótese nula de “tau3”, “phi1”, “phi2” e “phi3” - implicando que pelo menos uma das nossas condições não é verdadeira - quando o valor da estatística de teste estiver dentro da área de rejeição. Para “tau3” isso acontecerá quando o valor crítico é maior que o valor da estatística de teste; para “phi1”, “phi2” e “phi3” isso acontecerá quando o valor crítico for menor que a estatística de teste.
summary(ur.df(dados$RPD, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -142.009 -15.913 0.365 16.190 132.795
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.315849 5.214042 1.787 0.07526 .
## z.lag.1 0.001654 0.006155 0.269 0.78840
## tt 0.181394 0.191056 0.949 0.34337
## z.diff.lag -0.208767 0.063877 -3.268 0.00124 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 39.11 on 238 degrees of freedom
## Multiple R-squared: 0.1399, Adjusted R-squared: 0.129
## F-statistic: 12.9 on 3 and 238 DF, p-value: 7.737e-08
##
##
## Value of test-statistic is: 0.2687 51.3392 18.4812
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Nesse caso, percebemos que não rejeitamos “tau3”, mas que rejeitamos “phi2” e “phi3” (\(\alpha=0.05\)). Isso nos indica que temos um modelo com raiz unitária, tendência determinística e drift. Desse modo, nossa série é não estacionária.
Analisando nossa segunda equação, temos, então, \(\tau=0\); \(\mu\neq0\); \(\beta\neq0\). Assim, nossa série é um passeio aleatório com drift e tendência determinística.
summary(ur.df(dados$PIB, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -142.648 -21.628 0.205 23.237 154.839
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.639e+00 5.519e+00 1.384 0.168
## z.lag.1 9.062e-06 4.414e-03 0.002 0.998
## tt 1.907e-01 1.812e-01 1.053 0.293
## z.diff.lag 2.569e-01 6.328e-02 4.060 6.65e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 40.39 on 238 degrees of freedom
## Multiple R-squared: 0.2158, Adjusted R-squared: 0.2059
## F-statistic: 21.83 on 3 and 238 DF, p-value: 1.599e-12
##
##
## Value of test-statistic is: 0.0021 25.4152 10.9829
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Nesse caso, percebemos que não rejeitamos “tau3”, mas que rejeitamos “phi2” e “phi3” (\(\alpha=0.05\)). Isso nos indica que temos um modelo com raiz unitária, tendência determinística e drift. Desse modo, nossa série é não estacionária.
Analisando nossa segunda equação, temos, então, \(\tau=0\); \(\mu\neq0\); \(\beta\neq0\). Assim, nossa série é um passeio aleatório com drift e tendência determinística.
summary(ur.df(dados$DCP, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -101.080 -12.250 1.033 12.242 66.042
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.120986 2.914047 0.728 0.4674
## z.lag.1 0.004145 0.003016 1.375 0.1705
## tt 0.073149 0.087903 0.832 0.4062
## z.diff.lag 0.142789 0.064669 2.208 0.0282 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 22.39 on 238 degrees of freedom
## Multiple R-squared: 0.3472, Adjusted R-squared: 0.339
## F-statistic: 42.2 on 3 and 238 DF, p-value: < 2.2e-16
##
##
## Value of test-statistic is: 1.3747 41.3054 29.3665
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Nesse caso, percebemos que não rejeitamos “tau3”, mas que rejeitamos “phi2” e “phi3” (\(\alpha=0.05\)). Isso nos indica que temos um modelo com raiz unitária, tendência determinística e drift. Desse modo, nossa série é não estacionária.
Analisando nossa segunda equação, temos, então, \(\tau=0\); \(\mu\neq0\); \(\beta\neq0\). Assim, nossa série é um passeio aleatório com drift e tendência determinística.
summary(ur.df(dados$LC, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -92.075 -2.720 0.303 3.281 185.592
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.767422 3.170825 -0.557 0.5778
## z.lag.1 0.018190 0.008034 2.264 0.0245 *
## tt 0.018770 0.033313 0.563 0.5737
## z.diff.lag 0.168061 0.066296 2.535 0.0119 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 21.72 on 238 degrees of freedom
## Multiple R-squared: 0.1491, Adjusted R-squared: 0.1384
## F-statistic: 13.9 on 3 and 238 DF, p-value: 2.204e-08
##
##
## Value of test-statistic is: 2.2642 9.0793 9.4205
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Nesse caso, percebemos que não rejeitamos “tau3”, mas que rejeitamos “phi2” e “phi3” (\(\alpha=0.05\)). Isso nos indica que temos um modelo com raiz unitária, tendência determinística e drift. Desse modo, nossa série é não estacionária.
Analisando nossa segunda equação, temos, então, \(\tau=0\); \(\mu\neq0\); \(\beta\neq0\). Assim, nossa série é um passeio aleatório com drift e tendência determinística.
summary(ur.df(dados$DIV, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -75.786 -0.569 0.095 1.110 115.503
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.38937 1.60627 0.242 0.809
## z.lag.1 0.04059 0.00725 5.599 5.93e-08 ***
## tt -0.01248 0.01746 -0.715 0.476
## z.diff.lag -0.29366 0.06435 -4.564 8.06e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.5 on 238 degrees of freedom
## Multiple R-squared: 0.238, Adjusted R-squared: 0.2284
## F-statistic: 24.78 on 3 and 238 DF, p-value: 5.461e-14
##
##
## Value of test-statistic is: 5.5987 33.0722 36.956
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
Nesse caso, percebemos que não rejeitamos “tau3”, mas que rejeitamos “phi2” e “phi3” (\(\alpha=0.05\)). Isso nos indica que temos um modelo com raiz unitária, tendência determinística e drift. Desse modo, nossa série é não estacionária.
Analisando nossa segunda equação, temos, então, \(\tau=0\); \(\mu\neq0\); \(\beta\neq0\). Assim, nossa série é um passeio aleatório com drift e tendência determinística.
urca::ur.pp(dados$RPD, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: 0.018
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber, nosso valor da estatística de teste (0.018) é maior que o valor crítico com 5% de significância (-3.43). Desse modo, não podemos rejeitar a hipótese nula de não estacionaridade. Assim, devemos considerar a série como sendo não estacionária.
urca::ur.pp(dados$PIB, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: 0.0126
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber, nosso valor da estatística de teste (0.0126) é maior que o valor crítico com 5% de significância (-3.43). Desse modo, não podemos rejeitar a hipótese nula de não estacionaridade. Assim, devemos considerar a série como sendo não estacionária.
urca::ur.pp(dados$DCP, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: 1.2275
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber, nosso valor da estatística de teste (1.2275) é maior que o valor crítico com 5% de significância (-3.43). Desse modo, não podemos rejeitar a hipótese nula de não estacionaridade. Assim, devemos considerar a série como sendo não estacionária.
urca::ur.pp(dados$LC, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: 2.9097
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber, nosso valor da estatística de teste (2.9097) é maior que o valor crítico com 5% de significância (-3.43). Desse modo, não podemos rejeitar a hipótese nula de não estacionaridade. Assim, devemos considerar a série como sendo não estacionária.
urca::ur.pp(dados$DIV, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: 5.6776
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber, nosso valor da estatística de teste (5.6776) é maior que o valor crítico com 5% de significância (-3.43). Desse modo, não podemos rejeitar a hipótese nula de não estacionaridade. Assim, devemos considerar a série como sendo não estacionária.
Como podemos observar, ambos os testes (Augmented Dickey-Fuller e Phillips-Perron) apontam para a não estacionaridade de todas as séries. A decisão do que fazer caso os testes apresentem resultados contraditórios depende do analista, entretanto, uma boa prática pode ser tentar encontrar alguma forma de ambos os testes apresentarem o mesmo resultado. Tal objetivo pode ser alcançado fazendo a primeira diferença da série, retirar a tendência determinística, etc.
Não é de se esperar que essa regressão sofra do problema de correlação espúria. Para corroborar essa afirmação, apresentamos uma definição do problema2:
“In statistics, a spurious relationship or spurious correlation is a mathematical relationship in which two or more events or variables are associated but not causally related, due to either coincidence or the presence of a certain third, unseen factor (referred to as a”common response variable“,”confounding factor“, or”lurking variable“).”
Ou seja, uma correlação só pode sofre de espuriedade se as variáveis não são casualmente relacionadas. Como o próprio enunciado da questão afirma, “posto que os dividendos dependem dos lucros”, podemos rejeitar a hipótese de que essa relação possa sofrer do fenômeno da regressão espúria.
Não podemos determinar se a série é estacionária ou não apenas analisando o gráfico, entretanto, as séries aparentam ser estacionárias.
Não devemos considerar essa regressão como sendo espúria. Isso se deve ao fato de que as variações no lucro geram uma variação nos dividendos. Se uma empresa, por exemplo, tem uma redução de 50% no lucro, é esperado que uma redução na mesma proporção seja observada nos dividendos caso desejemos manter o pay out constante. Assim, existe uma relação causal entre a série temporal das diferenças do lucro e a série temporal das diferenças dos dividendos.
O intercepto desse modelo pode ser interpretado como sendo o valor do dividendo quando o lucro é igual a zero. Sabemos que quando o lucro é igual a zero e pressupondo que o lucro é uma boa proxy para o fluxo de caixa livre, o dividendo será igual a 0. Sabemos também que um número negativo para essa variável não é possível, dado que o dividendo é, por definição, um número positivo.
Entretanto, obrigar a reta de regressão a passar pela origem pode piorar o ajuste do modelo. Assim, dado que o intercepto tende a ser estatisticamente igual a 0, como esperado, a não exclusão do intercepto pode ser a escolha mais intressante.
regres_div_lc <- lm(dados$DIV ~ dados$LC)
summary(regres_div_lc)
##
## Call:
## lm(formula = dados$DIV ~ dados$LC)
##
## Residuals:
## Min 1Q Median 3Q Max
## -110.103 -9.092 -3.645 6.106 105.791
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.722594 2.537779 -0.285 0.776
## dados$LC 0.576118 0.006409 89.892 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 31.45 on 242 degrees of freedom
## Multiple R-squared: 0.9709, Adjusted R-squared: 0.9708
## F-statistic: 8081 on 1 and 242 DF, p-value: < 2.2e-16
summary(ur.df(regres_div_lc$residuals, type = "trend"))
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression trend
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -187.415 -3.407 0.187 1.846 96.070
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.16368 2.31435 -0.935 0.3508
## z.lag.1 -0.15739 0.03840 -4.099 5.7e-05 ***
## tt 0.01810 0.01655 1.094 0.2752
## z.diff.lag -0.11539 0.06446 -1.790 0.0747 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 17.35 on 238 degrees of freedom
## Multiple R-squared: 0.1011, Adjusted R-squared: 0.0898
## F-statistic: 8.926 on 3 and 238 DF, p-value: 1.256e-05
##
##
## Value of test-statistic is: -4.0987 5.6006 8.3997
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau3 -3.99 -3.43 -3.13
## phi2 6.22 4.75 4.07
## phi3 8.43 6.49 5.47
urca::ur.pp(regres_div_lc$residuals, type="Z-tau", model="trend", lags="short")
##
## ##################################################
## # Phillips-Perron Unit Root / Cointegration Test #
## ##################################################
##
## The value of the test statistic is: -4.4521
## 1pct 5pct 10pct
## critical values -3.998978 -3.429523 -3.137979
Como podemos perceber pelo resultado dos testes, podemos rejeitar a hipótese nula de não estacionaridade e, dessa forma, devemos considerar a série como sendo estacionária.
Como desejamos ajustar nosso modelo \(SARIMA(p,d,q)x(P,D,Q)\) para previsão, o primeiro passo é dividir a amostra entre um período de estimação - onde os parâmetros serão estimados - e um período de avaliação - onde compararemos se as previsões estão adequadas. O segundo passo seria analisar os gráficos das funções de autocorrelação e autocorrelação parcial. Com base nesses gráfico teríamos uma intuição inicial de quais modelos teriam o melhor ajuste. O terceiro passo seria selecionar esse modelos e comparar seus poderes preditivos (MAPE, por exemplo), bem como seus critérios de informação - não queremos selecionar um modelo que prevê “bem” apenas por aleatoriedade e sim entender o PGD. Após esse passo teríamos o modelo mais adequado para previsão.
Entretanto, o software R é capaz de realizar esse processo de forma quase automática.
auto_rpd <- auto.arima(dados_estim_ts[,1], ic = "aicc",seasonal = TRUE, trace = TRUE, stepwise = FALSE, approximation = FALSE)
##
## ARIMA(0,2,0) : 2086.185
## ARIMA(0,2,0)(0,0,1)[4] : 2085.555
## ARIMA(0,2,0)(0,0,2)[4] : 2082.829
## ARIMA(0,2,0)(1,0,0)[4] : 2086.318
## ARIMA(0,2,0)(1,0,1)[4] : 2084.093
## ARIMA(0,2,0)(1,0,2)[4] : 2081.054
## ARIMA(0,2,0)(2,0,0)[4] : 2084.1
## ARIMA(0,2,0)(2,0,1)[4] : 2085.462
## ARIMA(0,2,0)(2,0,2)[4] : 2082.702
## ARIMA(0,2,1) : 1941.229
## ARIMA(0,2,1)(0,0,1)[4] : 1943.184
## ARIMA(0,2,1)(0,0,2)[4] : 1942.968
## ARIMA(0,2,1)(1,0,0)[4] : 1943.205
## ARIMA(0,2,1)(1,0,1)[4] : 1944.766
## ARIMA(0,2,1)(1,0,2)[4] : 1942.116
## ARIMA(0,2,1)(2,0,0)[4] : 1943.267
## ARIMA(0,2,1)(2,0,1)[4] : 1941.928
## ARIMA(0,2,1)(2,0,2)[4] : 1941.562
## ARIMA(0,2,2) : 1941.508
## ARIMA(0,2,2)(0,0,1)[4] : 1943.59
## ARIMA(0,2,2)(0,0,2)[4] : 1943.383
## ARIMA(0,2,2)(1,0,0)[4] : 1943.591
## ARIMA(0,2,2)(1,0,1)[4] : 1945.469
## ARIMA(0,2,2)(1,0,2)[4] : 1942.178
## ARIMA(0,2,2)(2,0,0)[4] : 1943.797
## ARIMA(0,2,2)(2,0,1)[4] : 1941.967
## ARIMA(0,2,3) : 1941.487
## ARIMA(0,2,3)(0,0,1)[4] : 1943.592
## ARIMA(0,2,3)(0,0,2)[4] : 1942.993
## ARIMA(0,2,3)(1,0,0)[4] : 1943.592
## ARIMA(0,2,3)(1,0,1)[4] : 1945.464
## ARIMA(0,2,3)(2,0,0)[4] : 1943.444
## ARIMA(1,2,0) : 2004.617
## ARIMA(1,2,0)(0,0,1)[4] : 2006.646
## ARIMA(1,2,0)(0,0,2)[4] : 2000.466
## ARIMA(1,2,0)(1,0,0)[4] : 2006.658
## ARIMA(1,2,0)(1,0,1)[4] : 2001.986
## ARIMA(1,2,0)(1,0,2)[4] : 1999.631
## ARIMA(1,2,0)(2,0,0)[4] : 2002.364
## ARIMA(1,2,0)(2,0,1)[4] : 1999.773
## ARIMA(1,2,0)(2,0,2)[4] : 2001.756
## ARIMA(1,2,1) : 1941.171
## ARIMA(1,2,1)(0,0,1)[4] : 1943.253
## ARIMA(1,2,1)(0,0,2)[4] : 1942.972
## ARIMA(1,2,1)(1,0,0)[4] : 1943.254
## ARIMA(1,2,1)(1,0,1)[4] : 1941.474
## ARIMA(1,2,1)(1,0,2)[4] : 1941.714
## ARIMA(1,2,1)(2,0,0)[4] : 1943.438
## ARIMA(1,2,1)(2,0,1)[4] : 1941.505
## ARIMA(1,2,2) : 1941.89
## ARIMA(1,2,2)(0,0,1)[4] : 1943.706
## ARIMA(1,2,2)(0,0,2)[4] : 1940.831
## ARIMA(1,2,2)(1,0,0)[4] : 1943.793
## ARIMA(1,2,2)(1,0,1)[4] : 1946.051
## ARIMA(1,2,2)(2,0,0)[4] : 1942.519
## ARIMA(1,2,3) : 1943.992
## ARIMA(1,2,3)(0,0,1)[4] : 1945.374
## ARIMA(1,2,3)(1,0,0)[4] : 1945.373
## ARIMA(2,2,0) : 1982.148
## ARIMA(2,2,0)(0,0,1)[4] : 1984.195
## ARIMA(2,2,0)(0,0,2)[4] : 1984.561
## ARIMA(2,2,0)(1,0,0)[4] : 1984.201
## ARIMA(2,2,0)(1,0,1)[4] : 1986.196
## ARIMA(2,2,0)(1,0,2)[4] : 1981.507
## ARIMA(2,2,0)(2,0,0)[4] : 1984.913
## ARIMA(2,2,0)(2,0,1)[4] : 1980.868
## ARIMA(2,2,1) : 1941.868
## ARIMA(2,2,1)(0,0,1)[4] : 1943.964
## ARIMA(2,2,1)(0,0,2)[4] : 1943.02
## ARIMA(2,2,1)(1,0,0)[4] : 1943.966
## ARIMA(2,2,1)(1,0,1)[4] : 1942.208
## ARIMA(2,2,1)(2,0,0)[4] : 1943.628
## ARIMA(2,2,2) : 1943.992
## ARIMA(2,2,2)(0,0,1)[4] : 1945.832
## ARIMA(2,2,2)(1,0,0)[4] : 1945.918
## ARIMA(2,2,3) : 1946.064
## ARIMA(3,2,0) : 1972.505
## ARIMA(3,2,0)(0,0,1)[4] : 1940.572
## ARIMA(3,2,0)(0,0,2)[4] : 1941.141
## ARIMA(3,2,0)(1,0,0)[4] : 1963.463
## ARIMA(3,2,0)(1,0,1)[4] : 1941.241
## ARIMA(3,2,0)(2,0,0)[4] : 1958.089
## ARIMA(3,2,1) : 1943.673
## ARIMA(3,2,1)(0,0,1)[4] : 1945.8
## ARIMA(3,2,1)(1,0,0)[4] : 1945.8
## ARIMA(3,2,2) : 1945.794
##
##
##
## Best model: ARIMA(3,2,0)(0,0,1)[4]
Assim, selecionamos os três modelos com menor IC. Nesse caso, são:
Agora, analisamos a acurácia dos modelos para realizar previsões.
arima_rpd1 <- Arima(dados_estim_ts[,1], order = c(3,2,0), seasonal = c(0,0,1))
forc_rpd1 <- forecast(arima_rpd1, 44)
Criamos uma função que irá calcular o erro absoluto percentual médio.
mape <- function(forc, actual_values){
sum(abs((actual_values - forc$mean)/actual_values))*100/44
}
Aplicamos a função acima nos nossos dados.
mape(forc_rpd1, dados_aval_ts[,1])
## [1] 7.615233
arima_rpd2 <- Arima(dados_estim_ts[,1], order = c(1,2,2), seasonal = c(0,0,2))
forc_rpd2 <- forecast(arima_rpd2, 44)
E apresentamos o MAPE:
mape(forc_rpd2, dados_aval_ts[,1])
## [1] 7.906358
arima_rpd3 <- Arima(dados_estim_ts[,1], order = c(3,2,0), seasonal = c(0,0,2))
forc_rpd3 <- forecast(arima_rpd3, 44)
E apresentamos o MAPE:
mape(forc_rpd3, dados_aval_ts[,1])
## [1] 7.407936
Como podemos observar, o modelo que possui menor MAPE é o ARIMA(3,2,0)(0,0,2)[4]. Assim, partimos para previsão fora da amostra com esse modelo.
arima_rpd4 <- Arima(dados_ts[,1], order = c(3,2,0), seasonal = c(0,0,2))
forc_rpd4 <- forecast(arima_rpd4, 4)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2008 Q1 8732.533 8681.448 8783.618 8654.405 8810.660
## 2008 Q2 8801.081 8729.208 8872.954 8691.160 8911.001
## 2008 Q3 8868.390 8774.312 8962.468 8724.509 9012.270
## 2008 Q4 8898.394 8783.894 9012.894 8723.282 9073.506
auto_pib <- auto.arima(dados_estim_ts[,2], ic = "aicc",seasonal = TRUE, trace = TRUE, stepwise = FALSE, approximation = FALSE)
##
## ARIMA(0,2,0) : 2083.93
## ARIMA(0,2,0)(0,0,1)[4] : 2085.964
## ARIMA(0,2,0)(0,0,2)[4] : 2084.805
## ARIMA(0,2,0)(1,0,0)[4] : 2085.966
## ARIMA(0,2,0)(1,0,1)[4] : 2087.914
## ARIMA(0,2,0)(1,0,2)[4] : 2085.58
## ARIMA(0,2,0)(2,0,0)[4] : 2084.368
## ARIMA(0,2,0)(2,0,1)[4] : 2083.831
## ARIMA(0,2,0)(2,0,2)[4] : 2079.016
## ARIMA(0,2,1) : 2030.339
## ARIMA(0,2,1)(0,0,1)[4] : 2028.735
## ARIMA(0,2,1)(0,0,2)[4] : 2025.127
## ARIMA(0,2,1)(1,0,0)[4] : 2029.956
## ARIMA(0,2,1)(1,0,1)[4] : 2025.659
## ARIMA(0,2,1)(1,0,2)[4] : 2026.315
## ARIMA(0,2,1)(2,0,0)[4] : 2027.924
## ARIMA(0,2,1)(2,0,1)[4] : 2025.29
## ARIMA(0,2,1)(2,0,2)[4] : 2023.56
## ARIMA(0,2,2) : 2020.154
## ARIMA(0,2,2)(0,0,1)[4] : 2022.237
## ARIMA(0,2,2)(0,0,2)[4] : 2021.213
## ARIMA(0,2,2)(1,0,0)[4] : 2022.237
## ARIMA(0,2,2)(1,0,1)[4] : 2024.278
## ARIMA(0,2,2)(1,0,2)[4] : 2021.45
## ARIMA(0,2,2)(2,0,0)[4] : 2021.48
## ARIMA(0,2,2)(2,0,1)[4] : 2020.247
## ARIMA(0,2,3) : 2014.592
## ARIMA(0,2,3)(0,0,1)[4] : 2016.687
## ARIMA(0,2,3)(0,0,2)[4] : 2015.359
## ARIMA(0,2,3)(1,0,0)[4] : 2016.69
## ARIMA(0,2,3)(1,0,1)[4] : 2018.796
## ARIMA(0,2,3)(2,0,0)[4] : 2015.67
## ARIMA(1,2,0) : 2048.109
## ARIMA(1,2,0)(0,0,1)[4] : 2049.101
## ARIMA(1,2,0)(0,0,2)[4] : 2046.176
## ARIMA(1,2,0)(1,0,0)[4] : 2049.441
## ARIMA(1,2,0)(1,0,1)[4] : 2047.159
## ARIMA(1,2,0)(1,0,2)[4] : 2047.222
## ARIMA(1,2,0)(2,0,0)[4] : 2047.567
## ARIMA(1,2,0)(2,0,1)[4] : 2045.831
## ARIMA(1,2,0)(2,0,2)[4] : 2041.075
## ARIMA(1,2,1) : 2014.748
## ARIMA(1,2,1)(0,0,1)[4] : 2016.831
## ARIMA(1,2,1)(0,0,2)[4] : 2016.1
## ARIMA(1,2,1)(1,0,0)[4] : 2016.831
## ARIMA(1,2,1)(1,0,1)[4] : 2017.02
## ARIMA(1,2,1)(1,0,2)[4] : 2016.683
## ARIMA(1,2,1)(2,0,0)[4] : 2016.157
## ARIMA(1,2,1)(2,0,1)[4] : 2015.439
## ARIMA(1,2,2) : 2014.622
## ARIMA(1,2,2)(0,0,1)[4] : 2016.612
## ARIMA(1,2,2)(0,0,2)[4] : 2015.633
## ARIMA(1,2,2)(1,0,0)[4] : 2016.643
## ARIMA(1,2,2)(1,0,1)[4] : Inf
## ARIMA(1,2,2)(2,0,0)[4] : 2016.065
## ARIMA(1,2,3) : 2015.337
## ARIMA(1,2,3)(0,0,1)[4] : 2017.465
## ARIMA(1,2,3)(1,0,0)[4] : 2017.465
## ARIMA(2,2,0) : 2044.042
## ARIMA(2,2,0)(0,0,1)[4] : 2044.613
## ARIMA(2,2,0)(0,0,2)[4] : 2042.346
## ARIMA(2,2,0)(1,0,0)[4] : 2045.073
## ARIMA(2,2,0)(1,0,1)[4] : 2043.051
## ARIMA(2,2,0)(1,0,2)[4] : 2043.615
## ARIMA(2,2,0)(2,0,0)[4] : 2043.734
## ARIMA(2,2,0)(2,0,1)[4] : 2042.537
## ARIMA(2,2,1) : 2013.692
## ARIMA(2,2,1)(0,0,1)[4] : 2015.683
## ARIMA(2,2,1)(0,0,2)[4] : 2014.494
## ARIMA(2,2,1)(1,0,0)[4] : 2015.713
## ARIMA(2,2,1)(1,0,1)[4] : 2017.885
## ARIMA(2,2,1)(2,0,0)[4] : 2014.976
## ARIMA(2,2,2) : 2015.554
## ARIMA(2,2,2)(0,0,1)[4] : 2017.518
## ARIMA(2,2,2)(1,0,0)[4] : 2017.568
## ARIMA(2,2,3) : 2014.5
## ARIMA(3,2,0) : 2041.608
## ARIMA(3,2,0)(0,0,1)[4] : 2023.461
## ARIMA(3,2,0)(0,0,2)[4] : 2023.647
## ARIMA(3,2,0)(1,0,0)[4] : 2035.674
## ARIMA(3,2,0)(1,0,1)[4] : 2023.782
## ARIMA(3,2,0)(2,0,0)[4] : 2033.369
## ARIMA(3,2,1) : 2015.458
## ARIMA(3,2,1)(0,0,1)[4] : 2020.048
## ARIMA(3,2,1)(1,0,0)[4] : 2017.544
## ARIMA(3,2,2) : 2013.887
##
##
##
## Best model: ARIMA(2,2,1)
Assim, selecionamos os três modelos com menor IC. Nesse caso, são:
Agora, analisamos a acurácia dos modelos para realizar previsões.
arima_pib1 <- Arima(dados_estim_ts[,2], order = c(2,2,1), seasonal = c(0,0,0))
forc_pib1 <- forecast(arima_pib1, 44)
E apresentamos o MAPE:
mape(forc_pib1, dados_aval_ts[,2])
## [1] 4.771147
arima_pib2 <- Arima(dados_estim_ts[,2], order = c(3,2,2), seasonal = c(0,0,0))
forc_pib2 <- forecast(arima_pib2, 44)
E apresentamos o MAPE:
mape(forc_pib2, dados_aval_ts[,2])
## [1] 4.080193
arima_pib3 <- Arima(dados_estim_ts[,2], order = c(0,2,3), seasonal = c(0,0,0))
forc_pib3 <- forecast(arima_pib3, 44)
E apresentamos o MAPE:
mape(forc_pib3, dados_aval_ts[,2])
## [1] 4.697608
Como podemos observar, o modelo que possui menor MAPE é o ARIMA(3,2,2). Assim, partimos para previsão fora da amostra com esse modelo.
arima_pib4 <- Arima(dados_ts[,2], order = c(3,2,2), seasonal = c(0,0,0))
forc_pib4 <- forecast(arima_pib4, 4)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2008 Q1 11740.88 11688.74 11793.01 11661.14 11820.61
## 2008 Q2 11796.71 11712.65 11880.78 11668.15 11925.27
## 2008 Q3 11863.29 11747.15 11979.42 11685.68 12040.89
## 2008 Q4 11926.49 11782.30 12070.69 11705.96 12147.02
auto_dcp <- auto.arima(dados_estim_ts[,3], ic = "aicc",seasonal = TRUE, trace = TRUE, stepwise = FALSE, approximation = FALSE)
##
## ARIMA(0,2,0) : 1877.109
## ARIMA(0,2,0)(0,0,1)[4] : 1876.081
## ARIMA(0,2,0)(0,0,2)[4] : 1876.295
## ARIMA(0,2,0)(1,0,0)[4] : 1876.759
## ARIMA(0,2,0)(1,0,1)[4] : 1876.714
## ARIMA(0,2,0)(1,0,2)[4] : 1878.262
## ARIMA(0,2,0)(2,0,0)[4] : 1876.616
## ARIMA(0,2,0)(2,0,1)[4] : 1877.828
## ARIMA(0,2,0)(2,0,2)[4] : Inf
## ARIMA(0,2,1) : 1783.431
## ARIMA(0,2,1)(0,0,1)[4] : 1782.885
## ARIMA(0,2,1)(0,0,2)[4] : 1780.893
## ARIMA(0,2,1)(1,0,0)[4] : 1783.776
## ARIMA(0,2,1)(1,0,1)[4] : 1781.683
## ARIMA(0,2,1)(1,0,2)[4] : 1782.566
## ARIMA(0,2,1)(2,0,0)[4] : 1781.587
## ARIMA(0,2,1)(2,0,1)[4] : 1782.021
## ARIMA(0,2,1)(2,0,2)[4] : 1783.334
## ARIMA(0,2,2) : 1785.226
## ARIMA(0,2,2)(0,0,1)[4] : 1784.525
## ARIMA(0,2,2)(0,0,2)[4] : 1782.68
## ARIMA(0,2,2)(1,0,0)[4] : 1785.749
## ARIMA(0,2,2)(1,0,1)[4] : 1783.532
## ARIMA(0,2,2)(1,0,2)[4] : 1784.513
## ARIMA(0,2,2)(2,0,0)[4] : 1783.385
## ARIMA(0,2,2)(2,0,1)[4] : 1783.945
## ARIMA(0,2,3) : 1781.973
## ARIMA(0,2,3)(0,0,1)[4] : 1784.008
## ARIMA(0,2,3)(0,0,2)[4] : 1783.531
## ARIMA(0,2,3)(1,0,0)[4] : 1784.027
## ARIMA(0,2,3)(1,0,1)[4] : 1784.215
## ARIMA(0,2,3)(2,0,0)[4] : 1783.422
## ARIMA(1,2,0) : 1815.244
## ARIMA(1,2,0)(0,0,1)[4] : 1813.572
## ARIMA(1,2,0)(0,0,2)[4] : 1813.633
## ARIMA(1,2,0)(1,0,0)[4] : 1814.495
## ARIMA(1,2,0)(1,0,1)[4] : 1814.365
## ARIMA(1,2,0)(1,0,2)[4] : 1815.734
## ARIMA(1,2,0)(2,0,0)[4] : 1813.325
## ARIMA(1,2,0)(2,0,1)[4] : 1815.117
## ARIMA(1,2,0)(2,0,2)[4] : 1815.277
## ARIMA(1,2,1) : 1784.384
## ARIMA(1,2,1)(0,0,1)[4] : 1784.435
## ARIMA(1,2,1)(0,0,2)[4] : 1782.605
## ARIMA(1,2,1)(1,0,0)[4] : 1785.687
## ARIMA(1,2,1)(1,0,1)[4] : 1783.463
## ARIMA(1,2,1)(1,0,2)[4] : 1784.456
## ARIMA(1,2,1)(2,0,0)[4] : 1783.292
## ARIMA(1,2,1)(2,0,1)[4] : 1783.887
## ARIMA(1,2,2) : 1779.523
## ARIMA(1,2,2)(0,0,1)[4] : 1786.503
## ARIMA(1,2,2)(0,0,2)[4] : 1784.655
## ARIMA(1,2,2)(1,0,0)[4] : 1787.686
## ARIMA(1,2,2)(1,0,1)[4] : 1785.502
## ARIMA(1,2,2)(2,0,0)[4] : 1785.327
## ARIMA(1,2,3) : 1777.572
## ARIMA(1,2,3)(0,0,1)[4] : 1778.319
## ARIMA(1,2,3)(1,0,0)[4] : 1778.709
## ARIMA(2,2,0) : 1792.919
## ARIMA(2,2,0)(0,0,1)[4] : 1792.818
## ARIMA(2,2,0)(0,0,2)[4] : 1792.378
## ARIMA(2,2,0)(1,0,0)[4] : 1793.384
## ARIMA(2,2,0)(1,0,1)[4] : 1793.282
## ARIMA(2,2,0)(1,0,2)[4] : 1794.441
## ARIMA(2,2,0)(2,0,0)[4] : 1792.265
## ARIMA(2,2,0)(2,0,1)[4] : 1793.872
## ARIMA(2,2,1) : 1779.447
## ARIMA(2,2,1)(0,0,1)[4] : 1780.842
## ARIMA(2,2,1)(0,0,2)[4] : 1780.934
## ARIMA(2,2,1)(1,0,0)[4] : 1781.007
## ARIMA(2,2,1)(1,0,1)[4] : 1781.521
## ARIMA(2,2,1)(2,0,0)[4] : 1780.891
## ARIMA(2,2,2) : 1778.909
## ARIMA(2,2,2)(0,0,1)[4] : 1779.391
## ARIMA(2,2,2)(1,0,0)[4] : 1779.818
## ARIMA(2,2,3) : 1778.796
## ARIMA(3,2,0) : 1793.939
## ARIMA(3,2,0)(0,0,1)[4] : 1782.7
## ARIMA(3,2,0)(0,0,2)[4] : 1783.393
## ARIMA(3,2,0)(1,0,0)[4] : 1789.675
## ARIMA(3,2,0)(1,0,1)[4] : 1783.561
## ARIMA(3,2,0)(2,0,0)[4] : 1786.701
## ARIMA(3,2,1) : 1776.209
## ARIMA(3,2,1)(0,0,1)[4] : 1777.614
## ARIMA(3,2,1)(1,0,0)[4] : 1777.781
## ARIMA(3,2,2) : 1777.833
##
##
##
## Best model: ARIMA(3,2,1)
Assim, selecionamos os três modelos com menor IC. Nesse caso, são:
Agora, analisamos a acurácia dos modelos para realizar previsões.
arima_dcp1 <- Arima(dados_estim_ts[,3], order = c(3,2,1), seasonal = c(0,0,0))
forc_dcp1 <- forecast(arima_dcp1, 44)
E apresentamos o MAPE:
mape(forc_dcp1, dados_aval_ts[,3])
## [1] 7.980222
arima_dcp2 <- Arima(dados_estim_ts[,3], order = c(1,2,3), seasonal = c(0,0,0))
forc_dcp2 <- forecast(arima_dcp2, 44)
E apresentamos o MAPE:
mape(forc_dcp2, dados_aval_ts[,3])
## [1] 8.00571
arima_dcp3 <- Arima(dados_estim_ts[,3], order = c(3,2,1), seasonal = c(0,0,1))
forc_dcp3 <- forecast(arima_dcp3, 44)
E apresentamos o MAPE:
mape(forc_dcp3, dados_aval_ts[,3])
## [1] 7.963923
Como podemos observar, o modelo que possui menor MAPE é o ARIMA(3,2,1)(0,0,1)[4]. Assim, partimos para previsão fora da amostra com esse modelo.
arima_dcp4 <- Arima(dados_ts[,3], order = c(3,2,1), seasonal = c(0,0,1))
forc_dcp4 <- forecast(arima_dcp4, 4)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2008 Q1 8396.780 8368.565 8424.995 8353.629 8439.931
## 2008 Q2 8452.989 8410.103 8495.875 8387.401 8518.577
## 2008 Q3 8505.309 8446.898 8563.719 8415.977 8594.640
## 2008 Q4 8559.370 8483.631 8635.109 8443.537 8675.203
auto_lc <- auto.arima(dados_estim_ts[,4], ic = "aicc",seasonal = TRUE, trace = TRUE, stepwise = FALSE, approximation = FALSE)
##
## ARIMA(0,2,0) : 1554.486
## ARIMA(0,2,0)(0,0,1)[4] : 1540.959
## ARIMA(0,2,0)(0,0,2)[4] : 1534.372
## ARIMA(0,2,0)(1,0,0)[4] : 1549.541
## ARIMA(0,2,0)(1,0,1)[4] : 1538.181
## ARIMA(0,2,0)(1,0,2)[4] : 1536.261
## ARIMA(0,2,0)(2,0,0)[4] : 1532.705
## ARIMA(0,2,0)(2,0,1)[4] : 1532.344
## ARIMA(0,2,0)(2,0,2)[4] : Inf
## ARIMA(0,2,1) : 1431.376
## ARIMA(0,2,1)(0,0,1)[4] : 1429.429
## ARIMA(0,2,1)(0,0,2)[4] : 1421.767
## ARIMA(0,2,1)(1,0,0)[4] : 1431.429
## ARIMA(0,2,1)(1,0,1)[4] : 1424.795
## ARIMA(0,2,1)(1,0,2)[4] : 1423.509
## ARIMA(0,2,1)(2,0,0)[4] : 1421.759
## ARIMA(0,2,1)(2,0,1)[4] : 1422.256
## ARIMA(0,2,1)(2,0,2)[4] : Inf
## ARIMA(0,2,2) : 1433.423
## ARIMA(0,2,2)(0,0,1)[4] : 1431.058
## ARIMA(0,2,2)(0,0,2)[4] : 1423.705
## ARIMA(0,2,2)(1,0,0)[4] : 1433.436
## ARIMA(0,2,2)(1,0,1)[4] : 1426.652
## ARIMA(0,2,2)(1,0,2)[4] : 1425.533
## ARIMA(0,2,2)(2,0,0)[4] : 1423.753
## ARIMA(0,2,2)(2,0,1)[4] : 1424.206
## ARIMA(0,2,3) : 1435.371
## ARIMA(0,2,3)(0,0,1)[4] : 1433.087
## ARIMA(0,2,3)(0,0,2)[4] : 1425.671
## ARIMA(0,2,3)(1,0,0)[4] : 1435.429
## ARIMA(0,2,3)(1,0,1)[4] : 1428.567
## ARIMA(0,2,3)(2,0,0)[4] : 1425.815
## ARIMA(1,2,0) : 1495.264
## ARIMA(1,2,0)(0,0,1)[4] : 1494.434
## ARIMA(1,2,0)(0,0,2)[4] : 1483.493
## ARIMA(1,2,0)(1,0,0)[4] : 1496.082
## ARIMA(1,2,0)(1,0,1)[4] : 1487.922
## ARIMA(1,2,0)(1,0,2)[4] : 1484.996
## ARIMA(1,2,0)(2,0,0)[4] : 1483.986
## ARIMA(1,2,0)(2,0,1)[4] : 1483.216
## ARIMA(1,2,0)(2,0,2)[4] : Inf
## ARIMA(1,2,1) : 1433.422
## ARIMA(1,2,1)(0,0,1)[4] : 1431.04
## ARIMA(1,2,1)(0,0,2)[4] : 1423.695
## ARIMA(1,2,1)(1,0,0)[4] : 1433.432
## ARIMA(1,2,1)(1,0,1)[4] : 1426.635
## ARIMA(1,2,1)(1,0,2)[4] : 1425.525
## ARIMA(1,2,1)(2,0,0)[4] : 1423.749
## ARIMA(1,2,1)(2,0,1)[4] : 1424.195
## ARIMA(1,2,2) : 1434.701
## ARIMA(1,2,2)(0,0,1)[4] : 1433.12
## ARIMA(1,2,2)(0,0,2)[4] : 1425.798
## ARIMA(1,2,2)(1,0,0)[4] : 1435.474
## ARIMA(1,2,2)(1,0,1)[4] : 1428.704
## ARIMA(1,2,2)(2,0,0)[4] : 1425.871
## ARIMA(1,2,3) : 1436.349
## ARIMA(1,2,3)(0,0,1)[4] : 1435.096
## ARIMA(1,2,3)(1,0,0)[4] : 1437.09
## ARIMA(2,2,0) : 1475.628
## ARIMA(2,2,0)(0,0,1)[4] : 1476.213
## ARIMA(2,2,0)(0,0,2)[4] : 1469.791
## ARIMA(2,2,0)(1,0,0)[4] : 1476.863
## ARIMA(2,2,0)(1,0,1)[4] : 1471.24
## ARIMA(2,2,0)(1,0,2)[4] : 1470.527
## ARIMA(2,2,0)(2,0,0)[4] : 1471.123
## ARIMA(2,2,0)(2,0,1)[4] : 1470.032
## ARIMA(2,2,1) : 1435.344
## ARIMA(2,2,1)(0,0,1)[4] : 1433.097
## ARIMA(2,2,1)(0,0,2)[4] : 1425.709
## ARIMA(2,2,1)(1,0,0)[4] : 1435.419
## ARIMA(2,2,1)(1,0,1)[4] : 1428.593
## ARIMA(2,2,1)(2,0,0)[4] : 1425.841
## ARIMA(2,2,2) : 1436.418
## ARIMA(2,2,2)(0,0,1)[4] : 1435.119
## ARIMA(2,2,2)(1,0,0)[4] : 1437.137
## ARIMA(2,2,3) : Inf
## ARIMA(3,2,0) : 1457.56
## ARIMA(3,2,0)(0,0,1)[4] : 1435.85
## ARIMA(3,2,0)(0,0,2)[4] : 1432.329
## ARIMA(3,2,0)(1,0,0)[4] : 1455.516
## ARIMA(3,2,0)(1,0,1)[4] : 1435.56
## ARIMA(3,2,0)(2,0,0)[4] : 1429.55
## ARIMA(3,2,1) : 1437.441
## ARIMA(3,2,1)(0,0,1)[4] : 1435.202
## ARIMA(3,2,1)(1,0,0)[4] : 1437.539
## ARIMA(3,2,2) : 1438.178
##
##
##
## Best model: ARIMA(0,2,1)(2,0,0)[4]
Assim, selecionamos os três modelos com menor IC. Nesse caso, são:
Agora, analisamos a acurácia dos modelos para realizar previsões.
arima_lc1 <- Arima(dados_estim_ts[,4], order = c(0,2,1), seasonal = c(2,0,0))
forc_lc1 <- forecast(arima_lc1, 44)
E apresentamos o MAPE:
mape(forc_lc1, dados_aval_ts[,4])
## [1] 23.59828
arima_lc2 <- Arima(dados_estim_ts[,4], order = c(0,2,1), seasonal = c(0,0,2))
forc_lc2 <- forecast(arima_lc2, 44)
E apresentamos o MAPE:
mape(forc_lc2, dados_aval_ts[,4])
## [1] 23.51903
arima_lc3 <- Arima(dados_estim_ts[,5], order = c(0,2,1), seasonal = c(2,0,1))
forc_lc3 <- forecast(arima_lc3, 44)
E apresentamos o MAPE:
mape(forc_lc3, dados_aval_ts[,4])
## [1] 34.15463
Como podemos observar, o modelo que possui menor MAPE é o ARIMA(0,2,1)(0,0,2)[4]. Assim, partimos para previsão fora da amostra com esse modelo.
arima_lc4 <- Arima(dados_ts[,4], order = c(0,2,1), seasonal = c(0,0,2))
forc_lc4 <- forecast(arima_lc4, 4)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2008 Q1 1455.346 1427.694 1482.998 1413.056 1497.636
## 2008 Q2 1490.413 1449.850 1530.976 1428.377 1552.449
## 2008 Q3 1505.822 1454.339 1557.305 1427.086 1584.558
## 2008 Q4 1541.544 1479.997 1603.092 1447.415 1635.673
auto_div <- auto.arima(dados_estim_ts[,5], ic = "aicc",seasonal = TRUE, trace = TRUE, stepwise = FALSE, approximation = FALSE)
##
## ARIMA(0,2,0) : 964.8727
## ARIMA(0,2,0)(0,0,1)[4] : 966.2634
## ARIMA(0,2,0)(0,0,2)[4] : 958.069
## ARIMA(0,2,0)(1,0,0)[4] : 966.397
## ARIMA(0,2,0)(1,0,1)[4] : 952.2013
## ARIMA(0,2,0)(1,0,2)[4] : 950.7719
## ARIMA(0,2,0)(2,0,0)[4] : 967.1285
## ARIMA(0,2,0)(2,0,1)[4] : 947.6995
## ARIMA(0,2,0)(2,0,2)[4] : 952.4766
## ARIMA(0,2,1) : 902.2688
## ARIMA(0,2,1)(0,0,1)[4] : 902.4794
## ARIMA(0,2,1)(0,0,2)[4] : 902.4239
## ARIMA(0,2,1)(1,0,0)[4] : 902.644
## ARIMA(0,2,1)(1,0,1)[4] : 896.9835
## ARIMA(0,2,1)(1,0,2)[4] : 898.4246
## ARIMA(0,2,1)(2,0,0)[4] : 904.6259
## ARIMA(0,2,1)(2,0,1)[4] : 897.9439
## ARIMA(0,2,1)(2,0,2)[4] : 894.106
## ARIMA(0,2,2) : 895.1451
## ARIMA(0,2,2)(0,0,1)[4] : 896.6033
## ARIMA(0,2,2)(0,0,2)[4] : 897.3448
## ARIMA(0,2,2)(1,0,0)[4] : 896.6464
## ARIMA(0,2,2)(1,0,1)[4] : 892.5293
## ARIMA(0,2,2)(1,0,2)[4] : 893.4817
## ARIMA(0,2,2)(2,0,0)[4] : 898.6882
## ARIMA(0,2,2)(2,0,1)[4] : 892.5639
## ARIMA(0,2,3) : 897.1777
## ARIMA(0,2,3)(0,0,1)[4] : 898.7085
## ARIMA(0,2,3)(0,0,2)[4] : 899.4344
## ARIMA(0,2,3)(1,0,0)[4] : 898.7516
## ARIMA(0,2,3)(1,0,1)[4] : 894.4018
## ARIMA(0,2,3)(2,0,0)[4] : 900.815
## ARIMA(1,2,0) : 943.7865
## ARIMA(1,2,0)(0,0,1)[4] : 945.3697
## ARIMA(1,2,0)(0,0,2)[4] : 936.6806
## ARIMA(1,2,0)(1,0,0)[4] : 945.4543
## ARIMA(1,2,0)(1,0,1)[4] : 932.0544
## ARIMA(1,2,0)(1,0,2)[4] : 930.6835
## ARIMA(1,2,0)(2,0,0)[4] : 946.4416
## ARIMA(1,2,0)(2,0,1)[4] : 928.1122
## ARIMA(1,2,0)(2,0,2)[4] : 928.5777
## ARIMA(1,2,1) : 895.8302
## ARIMA(1,2,1)(0,0,1)[4] : 897.5039
## ARIMA(1,2,1)(0,0,2)[4] : 898.4096
## ARIMA(1,2,1)(1,0,0)[4] : 897.5311
## ARIMA(1,2,1)(1,0,1)[4] : 893.7691
## ARIMA(1,2,1)(1,0,2)[4] : 894.5938
## ARIMA(1,2,1)(2,0,0)[4] : 899.5663
## ARIMA(1,2,1)(2,0,1)[4] : 893.5898
## ARIMA(1,2,2) : 897.2043
## ARIMA(1,2,2)(0,0,1)[4] : 898.7086
## ARIMA(1,2,2)(0,0,2)[4] : 899.4613
## ARIMA(1,2,2)(1,0,0)[4] : 898.7516
## ARIMA(1,2,2)(1,0,1)[4] : 894.5844
## ARIMA(1,2,2)(2,0,0)[4] : 900.8153
## ARIMA(1,2,3) : 899.1622
## ARIMA(1,2,3)(0,0,1)[4] : 900.6898
## ARIMA(1,2,3)(1,0,0)[4] : 900.7355
## ARIMA(2,2,0) : 933.3516
## ARIMA(2,2,0)(0,0,1)[4] : 932.3882
## ARIMA(2,2,0)(0,0,2)[4] : 926.3128
## ARIMA(2,2,0)(1,0,0)[4] : 932.7566
## ARIMA(2,2,0)(1,0,1)[4] : 919.5322
## ARIMA(2,2,0)(1,0,2)[4] : 920.4434
## ARIMA(2,2,0)(2,0,0)[4] : 934.6764
## ARIMA(2,2,0)(2,0,1)[4] : 919.3094
## ARIMA(2,2,1) : 896.6041
## ARIMA(2,2,1)(0,0,1)[4] : 897.7543
## ARIMA(2,2,1)(0,0,2)[4] : 897.7346
## ARIMA(2,2,1)(1,0,0)[4] : 897.8554
## ARIMA(2,2,1)(1,0,1)[4] : 892.5181
## ARIMA(2,2,1)(2,0,0)[4] : 899.8881
## ARIMA(2,2,2) : 897.1389
## ARIMA(2,2,2)(0,0,1)[4] : 898.4399
## ARIMA(2,2,2)(1,0,0)[4] : 898.6351
## ARIMA(2,2,3) : Inf
## ARIMA(3,2,0) : 917.9878
## ARIMA(3,2,0)(0,0,1)[4] : 883.8979
## ARIMA(3,2,0)(0,0,2)[4] : 884.3347
## ARIMA(3,2,0)(1,0,0)[4] : 900.2842
## ARIMA(3,2,0)(1,0,1)[4] : 883.7352
## ARIMA(3,2,0)(2,0,0)[4] : 899.5352
## ARIMA(3,2,1) : 896.3054
## ARIMA(3,2,1)(0,0,1)[4] : 886.01
## ARIMA(3,2,1)(1,0,0)[4] : 897.0523
## ARIMA(3,2,2) : 898.147
##
##
##
## Best model: ARIMA(3,2,0)(1,0,1)[4]
Assim, selecionamos os três modelos com menor IC. Nesse caso, são:
Agora, analisamos a acurácia dos modelos para realizar previsões.
arima_div1 <- Arima(dados_estim_ts[,5], order = c(3,2,0), seasonal = c(1,0,1))
forc_div1 <- forecast(arima_div1, 44)
E apresentamos o MAPE:
mape(forc_div1, dados_aval_ts[,5])
## [1] 12.62071
arima_div2 <- Arima(dados_estim_ts[,5], order = c(3,2,0), seasonal = c(0,0,1))
forc_div2 <- forecast(arima_div2, 44)
E apresentamos o MAPE:
mape(forc_div2, dados_aval_ts[,5])
## [1] 12.50834
arima_div3 <- Arima(dados_estim_ts[,5], order = c(3,2,0), seasonal = c(0,0,2))
forc_div3 <- forecast(arima_div3, 44)
E apresentamos o MAPE:
mape(forc_div3, dados_aval_ts[,5])
## [1] 12.54859
Como podemos observar, o modelo que possui menor MAPE é o ARIMA(3,2,0)(0,0,1)[4]. Assim, partimos para previsão fora da amostra com esse modelo.
arima_div4 <- Arima(dados_ts[,5], order = c(3,2,0), seasonal = c(0,0,1))
forc_div4 <- forecast(arima_div4, 4)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 2008 Q1 845.4984 831.3478 859.6491 823.8569 867.1400
## 2008 Q2 872.7705 853.2917 892.2493 842.9803 902.5607
## 2008 Q3 893.4749 868.5092 918.4406 855.2932 931.6567
## 2008 Q4 912.0948 881.3346 942.8551 865.0511 959.1386
Referências: QAStack; StackExchange↩︎
[Spurious Relationship - Wikipedia]↩︎