//styles, look here: https://cdnjs.com/libraries/highlight.js/9.12.0

October 19, 2018

975 palavras 5 mins

Testes de raiz unitária

Os autores deste blog foram confrontados com uma pergunta sobre o uso de testes de raiz unitária. Em linhas gerais, a pessoa já tinha passado o filtro Hodrick Prescott e o teste continuava indicando a presença de raiz unitária. Deveria este economista sentar e chorar? Ou continuar diferenciando a série?

Neste post vamos mostrar que o teste Dickey-Fuller (ADF) - padrão para testar presença de raiz unitária - tem poder baixo se (1) o processo tem uma raiz próxima de unitária e (2) a amostra é pequena. Infelizmente, este caso é frequente em macroeconomia.

Neste exemplo eu usarei um AR(1) (\(y_t = \phi y_{t-1} + u_t\)), onde \(u_t \sim N(0,\sigma)\). Como eu vou querer brincar com processos AR com coeficientes diferentes e tamanhos de amostra diferente, eu vou criar uma função que gera processos AR:

set.seed(2018)

sim_ar <- function(n,phi,sd=1){
  y <- rep(0,n+1000)
  u <- rnorm(n+1000, sd = sd)
  for(i in 2:(n+1000)){
    y[i] <- phi*y[i-1]+u[i]
  }
  y <- y[1000:(1000+n)]
  return(y)
}

Eu sempre gero 1000 observações extras para o processo não depender da condição inicial.

Eu usarei o teste ADF que vem no pacote urca (nenhuma relação com o bairro do Rio de Janeiro):

library(urca)

Vamos simular um processo sem raiz unitária usando a função e ver o resultado do teste ADF. Veja que a hipótese nula do teste ADF é de presença de raiz unitária. Eu vou colocar um coeficiente baixo (0.6) e uma amostra grande (mil observações):

y <- sim_ar(1000,0.6)
summary(ur.df(y))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.1388 -0.6732 -0.0472  0.6507  3.4355 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## z.lag.1    -0.405838   0.028525 -14.228   <2e-16 ***
## z.diff.lag  0.004896   0.031798   0.154    0.878    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9987 on 997 degrees of freedom
## Multiple R-squared:  0.2011, Adjusted R-squared:  0.1995 
## F-statistic: 125.5 on 2 and 997 DF,  p-value: < 2.2e-16
## 
## 
## Value of test-statistic is: -14.2276 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau1 -2.58 -1.95 -1.62

O teste tem valores críticos diferentes dos usuais, que são apresentados embaixo dos valores da regressão. Vamos usar o usual 5% de nível de significância. Veja que o valor do teste está bem abaixo do valor crítico e portanto, não temos nenhuma indicação de termos raiz unitária.

O que acontece, entretanto, se usarmos um horizonte mais curto e um coeficiente mais alto? Eu vou repetir o exercício com 100 observações e um coeficiente de 0.9:

y <- sim_ar(100,0.9)
summary(ur.df(y))
## 
## ############################################### 
## # Augmented Dickey-Fuller Test Unit Root Test # 
## ############################################### 
## 
## Test regression none 
## 
## 
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.51636 -0.59022  0.02518  0.68276  2.70909 
## 
## Coefficients:
##            Estimate Std. Error t value Pr(>|t|)  
## z.lag.1    -0.06383    0.03649  -1.749   0.0834 .
## z.diff.lag  0.21727    0.10107   2.150   0.0341 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.077 on 97 degrees of freedom
## Multiple R-squared:  0.06135,    Adjusted R-squared:  0.04199 
## F-statistic:  3.17 on 2 and 97 DF,  p-value: 0.0464
## 
## 
## Value of test-statistic is: -1.7493 
## 
## Critical values for test statistics: 
##       1pct  5pct 10pct
## tau1 -2.58 -1.95 -1.62

Agora, não rejeitamos a hipótese nula de presença de raiz unitária a 5%. Obviamente não podemos fazer inferência com uma única tentativa, então vamos replicar isso 5000 vezes. Mais ainda, eu vou testar diferentes combinações de tamanhos de amostra e coeficientes:

  • 100 observações e \(\phi = 0.5\)
  • 100 observações e \(\phi = 0.9\)
  • 100 observações e \(\phi = 0.95\)
  • 200 observações e \(\phi = 0.95\)
  • 500 observações e \(\phi = 0.99\)

Em todas elas eu vou avaliar se o valor do teste é menor que o valor crítico a 5% (que é -1.95).

test1 <- rep(0,5000)
test2 <- test1
test3 <- test1
test4 <- test1
test5 <- test1

for(j in 1:5000){
  y_1 <- sim_ar(100,0.5)
  y_2 <- sim_ar(100,0.9)
  y_3 <- sim_ar(200,0.95)
  y_4 <- sim_ar(500,0.99)
  y_5 <- sim_ar(100,0.95)
  test1[j] <- ur.df(y_1)@teststat < -1.95
  test2[j] <- ur.df(y_2)@teststat < -1.95
  test3[j] <- ur.df(y_3)@teststat < -1.95
  test4[j] <- ur.df(y_4)@teststat < -1.95
  test5[j] <- ur.df(y_5)@teststat < -1.95
}

tabela <- c(mean(test1),
mean(test2),
mean(test5),
mean(test3),
mean(test4))

phi = '\u03d5' #pro phi ficar bonito

names(tabela) <- c(paste("n = 100,", phi, "= 0.5"),paste("n = 100,", phi, "= 0.9"),paste("n = 100,", phi, "= 0.95"),paste("n = 200,", phi, "= 0.95"),paste("n = 500,", phi, "= 0.99"))

knitr::kable(tabela, col.names = c("Proporção de rejeição de H0, significância 5%"),escape = F)
Proporção de rejeição de H0, significância 5%
n = 100, ϕ = 0.5 1.0000
n = 100, ϕ = 0.9 0.7582
n = 100, ϕ = 0.95 0.3532
n = 200, ϕ = 0.95 0.7708
n = 500, ϕ = 0.99 0.3558

Trocando em miúdos: com uma amostra de 100 observações e um processo muito persistente, em mais de 20% dos casos você vai aceitar a hipótese nula quando não deveria. Se você tem observações mensais, 100 observações correspondem a um pouco mais de 8 anos. Se a sua observação é trimestral, isso corresponde a 25 anos de dados! Estes horizontes podem ser viáveis em alguns casos, mas não em geral - 25 anos atrás não tinhamos o Plano Real, por exemplo.

Apesar de ser importante diagnosticar a presença de raiz unitária - devido ao problema de regressão espúria - deve se ter algum cuidado com os testes de raiz unitária. Nas amostras geralmente disponíveis para problemas macro, o baixo poder do teste pode gerar problemas.