Uncategorized

Tudo o que você queria saber sobre o AIC mas nunca te contaram

Prof. Akaike, falecido em 2009.

Rob Hyndman, autor de um ótimo livro de previsão (e de um dos melhores pacotes para R, em termos de séries de tempo univariadas), tem dez fatos sobre o AIC que geralmente a gente nunca sabe. Gosto, principalmente, do último:

The AIC is not a con­sis­tent model selec­tion method. That does not bother me as I don’t believe there is a true model to be selected. The AIC is opti­mal (in some senses) for fore­cast­ing, and that is much more impor­tant in my opinion.

Não sei se eu acho que previsão é mais importante sempre, mas, sim, não devemos nos prender à fantasia de que existe um modelo verdadeiro. Diversos alunos olham para mim como se eu fosse um vendedor de falsos remédios porque eu digo que modelagem econométrica é difícil. Alguns são preguiçosos mas, outros, claro, acham que eu sou idiota e que um dia encontrarão um professor que lhes mostrará a pedra filosofal.

Eles não fazem idéia do quanto estão errados. Eu sei disso, você, creio, também, e mais um monte de gente também. Mas vai falar isso para o aluno que não quer acreditar na inexistência do modelo ‘verdadeiro’…

Uncategorized

Momento R do Dia – A Função de Autocorrelação Estendida (EACF) e os modelos ARIMA

O pessoal que usa modelos ARIMA gosta de olhar para os correlogramas. Entretanto, alguns autores propuseram uma ferramenta alternativa que é a função de autocorrelação estendida (EACF). A proposta está no artigo em Tsay & Tiao (1984) (cuja referência completa você encontra pesquisando a página do prof. Tsay) e, em português, aparece citada na segunda edição de Morettin & Toloi pela sempre ótima editora Blücher. Em poucas palavras:

The EACF method uses the fact that if the AR part of a mixed ARMA model is known, ‘filtering out’ the autoregression from the observed time series results in a pure MA process that enjoys the cutoff property in its ACF. (Cryer, J.D. & Chan, K-S. Time Series Analysis with applications in R, Springer, 2010, 2nd edition, p.116)

Mas, o quanto esta função nos ajuda a identificar o processos ARMA? O que Tsay e Tiao fazem é propor um método tabular de visualização (os detalhes podem ser encontrados nos textos citados). Vou aproveitar que o pacote TSA do R tem o comando eacf() e fazer alguns exemplos básicos. Para cada processo simulado (n = 500) vou colocar o EACF correspondente, ok?

Primeiramente, os casos simples: AR(1) e MA(1). Para estes, a EACF parece ter o padrão óbvio. Visualmente, você analisa o padrão triangular de “zeros”. No caso do AR(1), ele começa em AR(1) e MA(0). No caso do MA(1), é exatamente o oposto. o padrão triangular começa em AR(0) e MA(1).

eacf_arma1

 

As coisas não ficam muito mais fáceis com um ARMA(1,1).

eacf_arma2

Qual a diferença do caso A para o caso B? Apenas os parâmetros usados na simulação. Para o primeiro, temos um phi = 0.8 e um theta = 0.3. No segundo, fiz phi = theta = 0.8.

No caso dos dois ARMA(2,2) que simulei, a EACF já ajudou um pouco mais, mas não vou reproduzir os resultados aqui.

Outra ferramenta útil para se decidir sobre números de defasagens são os critérios de seleção AIC ou BIC embora a literatura indique o uso destes apenas em modelos autoregressivos puros. O problema é que nem sempre sabemos que modelos temos à nossa frente. Assim, usando o mesmo AR(1) simulado acima, fiz uma busca pelo melhor modelo usando o critério BIC para um range de p= 0 a 6 e q= 0 a 6.

bic_range

As cores mais escuras indicam que o melhor modelo seria um AR(1) com intercepto.

As dicas de R

Forneço algumas dicas para vocês então.

library("astsa")
library("forecast")
library("TSA")
# AR
set.seed(123456)
y <- arima.sim(n = 500, list(ar = 0.6), innov=rnorm(500))
op <- par(no.readonly=TRUE)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow=TRUE))
plot.ts(y, ylab='')
Acf(y, main='Autocorrelations', ylab='',
    ylim=c(-1, 1), ci.col = "black")
Pacf(y, main='Partial Autocorrelations', ylab='',
     ylim=c(-1, 1), ci.col = "black")
par(op)

# usando o comando eacf de TSA
eacf(y)
# usando o comando armasubsets de TSA, com
# range de p = q = 6
res=armasubsets(y=y, nar=6, nma=6, y.name='test',ar.method='ols')
plot(res)

# agora um ARMA(1,1)
m <- arima.sim(model=list(ar=c(.8),ma=c(.3)), n = 500)
op <- par(no.readonly=TRUE)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow=TRUE))
plot.ts(m, ylab='')
Acf(m, main='Autocorrelations', ylab='',
    ylim=c(-1, 1), ci.col = "black")
Pacf(m, main='Partial Autocorrelations', ylab='',
     ylim=c(-1, 1), ci.col = "black")
par(op)
eacf(m)

# e um ARMA(2,2)
m2 <- arima.sim(model=list(ar=c(-.1,-.8),ma=c(-.7,.1)), n = 500)
op <- par(no.readonly=TRUE)
layout(matrix(c(1, 1, 2, 3), 2, 2, byrow=TRUE))
plot.ts(m2, ylab='')
Acf(m2, main='Autocorrelations', ylab='',
    ylim=c(-1, 1), ci.col = "black")
Pacf(m2, main='Partial Autocorrelations', ylab='',
     ylim=c(-1, 1), ci.col = "black")
par(op)
# a partir daqui, EACF e o criterio BIC
eacf(m2)
res=armasubsets(y=m2, nar=6, nma=6, y.name='test',ar.method='ols')
plot(res)

Espero que tenha se divertido. Ah sim, não duvido que o leitor mais esperto vá pegar sua série de dados para tentar alguma coisa. Um IPCA ou uma PIM-PF ou alguma taxa de câmbio, sei lá. Só sei que é fácil replicar os comandos. Afinal, você viu primeiro aqui. ^_^

Uncategorized

Critério de Akaike

Dave Giles tem um ótimo texto sobre o critério de Akaike, conhecido como AIC. A leitura vale seu tempo. Um ponto importante, para quem chegou agora neste tipo de critério, é que ele bem poderia ser trocado por um BIC e, claro, todo cuidado é pouco. Por que?

Porque hoje em dia é muito fácil fazer regressão, mas muita gente pensa que pode comparar modelos distintos com estes critérios. O problema inclui, inclusive, transformações na escala das variáveis:

For instance, if you have two regression models that are estimated using the same sample of data, but where one has a dependent variable of y and the other has a dependent variable of log(y), direct comparisons of the AIC values aren’t meaningful. (The same is true of coefficients of determination, of course.) Often, this problem is easily resolved by transforming the likelihood function for one of the dependent variables into one that is consistent with the units of the other dependent variable. You just need to take into account the Jacobian of the transformation from one density function to the other. Examples of this, in the context of systems of Engel curves, are given by Giles and Hampton (1985), for instance

Ah sim, as curvas de Engel…novamente. A questão do consumidor sempre volta a este blog. Tem uma explicação: os meus chefes adoram me fazer trabalhar como um jumento, mas eles têm piedade. Assim, eu tenho que lecionar a Teoria do Consumidor e, ao mesmo tempo, os Microfundamentos da Macroeconomia (sem falar na História Econômica do Brasil e, claro, o motivo de boa parte das recentes mudanças neste blog, a Econometria II).

Não é moleza não, viu? De qualquer forma, e no R? No R é mamata! Veja só esta super-dica!