1) Com relação à sua primeira pergunta, algumas estatísticas de testes foram desenvolvidas e discutidas na literatura para testar o nulo de estacionariedade e o nulo de uma raiz unitária. Alguns dos muitos documentos que foram escritos sobre esse assunto são os seguintes:
Relacionado à tendência:
- Dickey, D. e Fuller, W. (1979a), Distribuição dos estimadores para séries temporais autoregressivas com raiz unitária, Journal of the American Statistical Association 74, 427-31.
- Dickey, D. e Fuller, W. (1981), Estatísticas da razão de verossimilhança para séries temporais autoregressivas com uma raiz unitária, Econometrica 49, 1057-1071.
- Kwiatkowski, D., Phillips, P., Schmidt, P. y Shin, Y. (1992), Testando a hipótese nula de estacionariedade contra a alternativa de uma raiz unitária: Qual a certeza de que séries temporais econômicas têm uma raiz unitária? , Journal of Econometrics 54, 159-178.
- Phillips, P. y Perron, P. (1988), Testando uma raiz unitária na regressão de séries temporais, Biometrika 75, 335-46.
- Durlauf, S. e Phillips, P. (1988), Tendências versus caminhadas aleatórias na análise de séries temporais, Econometrica 56, 1333-54.
Relacionado ao componente sazonal:
- Hylleberg, S., Engle, R., Granger, C. y Yoo, B. (1990), Integração sazonal e cointegração, Journal of Econometrics 44, 215-38.
- Canova, F. e Hansen, BE (1995), os padrões sazonais são constantes ao longo do tempo? um teste de estabilidade sazonal, Journal of Business and Economic Statistics 13, 237-252.
- Franses, P. (1990), Teste para raízes de unidades sazonais em dados mensais, Relatório Técnico 9032, Econometric Institute.
- Ghysels, E., Lee, H. e Noh, J. (1994), Teste de raízes unitárias em séries temporais sazonais. algumas extensões teóricas e uma investigação de Monte Carlo, Journal of Econometrics 62, 415-442.
O livro Banerjee, A., Dolado, J., Galbraith, J. e Hendry, D. (1993), co-integração, correção de erros e a análise econométrica de dados não estacionários, Advanced Texts in Econometrics. A Oxford University Press também é uma boa referência.
2) Sua segunda preocupação é justificada pela literatura. Se houver um teste de raiz unitária, a estatística t tradicional que você aplicaria em uma tendência linear não segue a distribuição padrão. Ver, por exemplo, Phillips, P. (1987), regressão de séries temporais com raiz unitária, Econometrica 55 (2), 277-301.
Se uma raiz unitária existe e é ignorada, a probabilidade de rejeitar o nulo de que o coeficiente de uma tendência linear é zero é reduzida. Ou seja, acabaríamos modelando uma tendência linear determinística com muita frequência para um determinado nível de significância. Na presença de uma raiz de unidade, devemos transformar os dados, levando diferenças regulares aos dados.
3) Para ilustração, se você usar R, poderá fazer a seguinte análise com seus dados.
x <- structure(c(7657, 5451, 10883, 9554, 9519, 10047, 10663, 10864,
11447, 12710, 15169, 16205, 14507, 15400, 16800, 19000, 20198,
18573, 19375, 21032, 23250, 25219, 28549, 29759, 28262, 28506,
33885, 34776, 35347, 34628, 33043, 30214, 31013, 31496, 34115,
33433, 34198, 35863, 37789, 34561, 36434, 34371, 33307, 33295,
36514, 36593, 38311, 42773, 45000, 46000, 42000, 47000, 47500,
48000, 48500, 47000, 48900), .Tsp = c(1, 57, 1), class = "ts")
Primeiro, você pode aplicar o teste Dickey-Fuller para o nulo de uma raiz de unidade:
require(tseries)
adf.test(x, alternative = "explosive")
# Augmented Dickey-Fuller Test
# Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.453
# alternative hypothesis: explosive
e o teste KPSS para a hipótese nula reversa, estacionariedade contra a alternativa de estacionariedade em torno de uma tendência linear:
kpss.test(x, null = "Trend", lshort = TRUE)
# KPSS Test for Trend Stationarity
# KPSS Trend = 0.2691, Truncation lag parameter = 1, p-value = 0.01
Resultados: teste do ADF, no nível de significância de 5%, uma raiz unitária não é rejeitada; No teste KPSS, o nulo de estacionariedade é rejeitado em favor de um modelo com tendência linear.
Observação: o uso lshort=FALSE
do nulo do teste KPSS não é rejeitado no nível de 5%, no entanto, ele seleciona 5 atrasos; uma inspeção adicional não mostrada aqui sugeriu que escolher 1-3 lags é apropriado para os dados e leva a rejeitar a hipótese nula.
Em princípio, devemos nos guiar pelo teste para o qual fomos capazes de rejeitar a hipótese nula (e não pelo teste para o qual não rejeitamos (aceitamos) o nulo). No entanto, uma regressão da série original em uma tendência linear acaba não sendo confiável. Por um lado, o quadrado R é alto (acima de 90%), apontado na literatura como indicador de regressão espúria.
fit <- lm(x ~ 1 + poly(c(time(x))))
summary(fit)
#Coefficients:
# Estimate Std. Error t value Pr(>|t|)
#(Intercept) 28499.3 381.6 74.69 <2e-16 ***
#poly(c(time(x))) 91387.5 2880.9 31.72 <2e-16 ***
#---
#Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
#Residual standard error: 2881 on 55 degrees of freedom
#Multiple R-squared: 0.9482, Adjusted R-squared: 0.9472
#F-statistic: 1006 on 1 and 55 DF, p-value: < 2.2e-16
Por outro lado, os resíduos são autocorrelacionados:
acf(residuals(fit)) # not displayed to save space
Além disso, o nulo de uma raiz unitária nos resíduos não pode ser rejeitado.
adf.test(residuals(fit))
# Augmented Dickey-Fuller Test
#Dickey-Fuller = -2.0685, Lag order = 3, p-value = 0.547
#alternative hypothesis: stationary
Nesse ponto, você pode escolher um modelo a ser usado para obter previsões. Por exemplo, previsões baseadas em um modelo estrutural de série temporal e em um modelo ARIMA podem ser obtidas da seguinte maneira.
# StructTS
fit1 <- StructTS(x, type = "trend")
fit1
#Variances:
# level slope epsilon
#2982955 0 487180
#
# forecasts
p1 <- predict(fit1, 10, main = "Local trend model")
p1$pred
# [1] 49466.53 50150.56 50834.59 51518.62 52202.65 52886.68 53570.70 54254.73
# [9] 54938.76 55622.79
# ARIMA
require(forecast)
fit2 <- auto.arima(x, ic="bic", allowdrift = TRUE)
fit2
#ARIMA(0,1,0) with drift
#Coefficients:
# drift
# 736.4821
#s.e. 267.0055
#sigma^2 estimated as 3992341: log likelihood=-495.54
#AIC=995.09 AICc=995.31 BIC=999.14
#
# forecasts
p2 <- forecast(fit2, 10, main = "ARIMA model")
p2$mean
# [1] 49636.48 50372.96 51109.45 51845.93 52582.41 53318.89 54055.37 54791.86
# [9] 55528.34 56264.82
Uma trama das previsões:
par(mfrow = c(2, 1), mar = c(2.5,2.2,2,2))
plot((cbind(x, p1$pred)), plot.type = "single", type = "n",
ylim = range(c(x, p1$pred + 1.96 * p1$se)), main = "Local trend model")
grid()
lines(x)
lines(p1$pred, col = "blue")
lines(p1$pred + 1.96 * p1$se, col = "red", lty = 2)
lines(p1$pred - 1.96 * p1$se, col = "red", lty = 2)
legend("topleft", legend = c("forecasts", "95% confidence interval"),
lty = c(1,2), col = c("blue", "red"), bty = "n")
plot((cbind(x, p2$mean)), plot.type = "single", type = "n",
ylim = range(c(x, p2$upper)), main = "ARIMA (0,1,0) with drift")
grid()
lines(x)
lines(p2$mean, col = "blue")
lines(ts(p2$lower[,2], start = end(x)[1] + 1), col = "red", lty = 2)
lines(ts(p2$upper[,2], start = end(x)[1] + 1), col = "red", lty = 2)
As previsões são semelhantes nos dois casos e parecem razoáveis. Observe que as previsões seguem um padrão relativamente determinístico semelhante a uma tendência linear, mas não modelamos explicitamente uma tendência linear. O motivo é o seguinte: i) no modelo de tendência local, a variação do componente de inclinação é estimada como zero. Isso transforma o componente de tendência em uma deriva que tem o efeito de uma tendência linear. ii) ARIMA (0,1,1), um modelo com desvio é selecionado em um modelo para a série diferenciada. O efeito do termo constante em uma série diferenciada é uma tendência linear. Isso é discutido neste post .
Você pode verificar se, se for escolhido um modelo local ou um ARIMA (0,1,0) sem desvio, as previsões serão uma linha horizontal reta e, portanto, não terão nenhuma semelhança com a dinâmica observada dos dados. Bem, isso faz parte do quebra-cabeça dos testes de raiz unitária e dos componentes determinísticos.
Edição 1 (inspeção de resíduos):
a autocorrelação e o ACF parcial não sugerem uma estrutura nos resíduos.
resid1 <- residuals(fit1)
resid2 <- residuals(fit2)
par(mfrow = c(2, 2))
acf(resid1, lag.max = 20, main = "ACF residuals. Local trend model")
pacf(resid1, lag.max = 20, main = "PACF residuals. Local trend model")
acf(resid2, lag.max = 20, main = "ACF residuals. ARIMA(0,1,0) with drift")
pacf(resid2, lag.max = 20, main = "PACF residuals. ARIMA(0,1,0) with drift")
Como o IrishStat sugeriu, também é aconselhável verificar a presença de discrepâncias. Dois outliers aditivos são detectados usando o pacote tsoutliers
.
require(tsoutliers)
resol <- tsoutliers(x, types = c("AO", "LS", "TC"),
remove.method = "bottom-up",
args.tsmethod = list(ic="bic", allowdrift=TRUE))
resol
#ARIMA(0,1,0) with drift
#Coefficients:
# drift AO2 AO51
# 736.4821 -3819.000 -4500.000
#s.e. 220.6171 1167.396 1167.397
#sigma^2 estimated as 2725622: log likelihood=-485.05
#AIC=978.09 AICc=978.88 BIC=986.2
#Outliers:
# type ind time coefhat tstat
#1 AO 2 2 -3819 -3.271
#2 AO 51 51 -4500 -3.855
Observando o ACF, podemos dizer que, no nível de significância de 5%, os resíduos também são aleatórios nesse modelo.
par(mfrow = c(2, 1))
acf(residuals(resol$fit), lag.max = 20, main = "ACF residuals. ARIMA with additive outliers")
pacf(residuals(resol$fit), lag.max = 20, main = "PACF residuals. ARIMA with additive outliers")
Nesse caso, a presença de possíveis discrepantes não parece distorcer o desempenho dos modelos. Isso é suportado pelo teste de Jarque-Bera para normalidade; o nulo de normalidade nos resíduos dos modelos iniciais ( fit1
, fit2
) não é rejeitado no nível de significância de 5%.
jarque.bera.test(resid1)[[1]]
# X-squared = 0.3221, df = 2, p-value = 0.8513
jarque.bera.test(resid2)[[1]]
#X-squared = 0.426, df = 2, p-value = 0.8082
Editar 2 (gráfico de resíduos e seus valores)
É assim que os resíduos se parecem:
E estes são seus valores em um formato csv:
0;6.9205
-0.9571;-2942.4821
2.6108;4695.5179
-0.5453;-2065.4821
-0.2026;-771.4821
0.1242;-208.4821
0.1909;-120.4821
-0.0179;-535.4821
0.1449;-153.4821
0.484;526.5179
1.0748;1722.5179
0.3818;299.5179
-1.061;-2434.4821
0.0996;156.5179
0.4805;663.5179
0.8969;1463.5179
0.4111;461.5179
-1.0595;-2361.4821
0.0098;65.5179
0.5605;920.5179
0.8835;1481.5179
0.7669;1232.5179
1.4024;2593.5179
0.3785;473.5179
-1.1032;-2233.4821
-0.3813;-492.4821
2.2745;4642.5179
0.2935;154.5179
-0.1138;-165.4821
-0.8035;-1455.4821
-1.2982;-2321.4821
-1.9463;-3565.4821
-0.1648;62.5179
-0.1022;-253.4821
0.9755;1882.5179
-0.5662;-1418.4821
-0.0176;28.5179
0.5;928.5179
0.6831;1189.5179
-1.8889;-3964.4821
0.3896;1136.5179
-1.3113;-2799.4821
-0.9934;-1800.4821
-0.4085;-748.4821
1.2902;2482.5179
-0.0996;-657.4821
0.5539;981.5179
2.0007;3725.5179
1.0227;1490.5179
0.27;263.5179
-2.336;-4736.4821
1.8994;4263.5179
0.1301;-236.4821
-0.0892;-236.4821
-0.1148;-236.4821
-1.1207;-2236.4821
0.4801;1163.5179