Estimando o mesmo modelo em várias séries temporais

26

Tenho formação iniciante em séries temporais (algumas estimativas / previsões do ARIMA) e estou enfrentando um problema que não entendo completamente. Qualquer ajuda seria muito apreciada.

Estou analisando várias séries temporais, no mesmo intervalo de tempo e na mesma frequência, todas descrevendo um tipo semelhante de dados. Cada série é apenas uma variável, não há outros preditores correspondentes que estou olhando.

Me pediram para estimar um único modelo que descreva TODAS as séries - por exemplo, imagine que eu poderia encontrar um ARIMA (p, d, q) com as mesmas ordens, coeficientes etc. que poderiam se encaixar em todas as séries. Meu supervisor não quer que eu estime separadamente cada série, nem que eu faça algum tipo de modelo VAR com dependências entre as séries.

Minha pergunta é: como eu chamaria esse modelo e como posso estimar / prever? Se for mais fácil usar exemplos de código, falo SAS e R.

sparc_spread
fonte

Respostas:

8

Você pode fazer uma pesquisa na grade: comece com ARIMA (1,0,0) e tente todas as possibilidades até ARIMA (5,2,5) ou algo assim. Ajuste o modelo a cada série e estime uma medição de erro independente de escala como MAPE ou MASE (o MASE provavelmente seria melhor). Escolha o modelo ARIMA com a MASE média mais baixa em todos os seus modelos.

Você pode melhorar esse procedimento validando cruzadamente sua medição de erro para cada série e comparando seus resultados com uma previsão ingênua .

Pode ser uma boa ideia perguntar por que você está procurando um modelo único para descrever todas as séries. A menos que sejam gerados pelo mesmo processo, isso não parece uma boa ideia.

Zach
fonte
2
Obrigado - vou tentar isso. Concordo que esta não parece a melhor ideia. O argumento que recebi foi que cada série não possui observações suficientes (~ 28) para uma boa estimativa e que seria mais robusto estimar ao longo de todas as séries. Não tenho certeza se concordo com esse argumento.
Sparc_spread 17/02/2012
21

Uma maneira de fazer isso é construir uma longa série temporal com todos os seus dados e com sequências de valores ausentes entre as séries para separá-los. Por exemplo, em R, se você tiver três séries ( x, ye z) de comprimento 100 e frequência 12, poderá juntá-las da seguinte maneira

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

Observe que o número de valores ausentes é escolhido para garantir a retenção do período sazonal. Eu completei o ano final com 8 valores ausentes e depois adicionei quatro anos ausentes (48 valores) antes da próxima série. Isso deve ser suficiente para garantir que todas as correlações seriais sejam eliminadas entre as séries.

Então você pode usar auto.arima()para encontrar o melhor modelo:

library(forecast)
fit <- auto.arima(combined)

Por fim, você pode aplicar o modelo combinado a cada série separadamente para obter previsões:

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)
Rob Hyndman
fonte
5
+1, truque puro. A julgar pelo comentário do OP para outra resposta, eu sugeriria algum tipo de modelo de dados em painel, mas isso é muito melhor.
Mvctas
Esta é uma grande ajuda, muito apreciada. Você pode explicar mais sobre: o número de valores ausentes é escolhido para garantir que o período sazonal seja mantido ? Desculpe, eu não segui completamente - obrigado.
Sparc_spread 23/02
11
Se houver sazonalidade nos dados (como costuma ocorrer com as observações mensais), você deseja que a série longa ainda tenha os Janários com um múltiplo de 12 separados, os Februários com um múltiplo de 12 separados e assim por diante. Então, quando o modelo estiver sendo escolhido, a sazonalidade poderá ser modelada adequadamente.
Rob Hyndman
3
Para adicionar esse truque - você pode adicionar regressores externos (xreg) indicando a associação à categoria. Isso explicaria meios separados para as diferentes séries, mantendo ainda outros coeficientes em comum.
Jameson Quinn
6

A estimativa de um modelo único para várias séries temporais é o domínio da econometria de dados em painel . No entanto, no seu caso, sem variável explicativa, a resposta de @Rob Hyndman é provavelmente a melhor opção. No entanto, se os meios das séries temporais forem diferentes (teste-o, pois neste caso o método de Rob Hyndman deve falhar!), Mas a estrutura do ARMA é a mesma, você precisará usar o Arellano-Bond (desculpe a wikipedia nenhuma página, pesquise no google) tipo estimador. O modelo nesse caso seria:

yEut=αEu+ρ1 1yEu,t-1 1+...+ρpyEu,t-p+εEut

Onde Eu indicates different time series and εit can have the same covariance structure across all i.

mpiktas
fonte
1
Really appreciate your solution and the others as well. You mention that: However if it turns out that the means of time series are different (test it, since in this case @Rob Hyndman's method should fail!) Can you explain more about why this is? Thanks.
sparc_spread
2
@sparc_spread, suponha que sejam apenas duas séries. Uma é centrada em cerca de 0 com a variação 1 e a outra é centrada em 1000 com a variação 1. Então, se as duas séries são ajustadas usando os mesmos coeficientes, isso significa que estamos restringindo alpha_1 = alpha_2, para que as previsões para ambas as séries sejam em torno de 500, horrivelmente desligado. Basicamente, tratar todas as séries como pertencentes ao mesmo modelo pode exigir alguma atualização / normalização antes da montagem do modelo conjunto.
Zkurtz 26/03/19
4

Uma alternativa à abordagem de Rob Hyndman, para criar uma única série de dados, é mesclar os dados. Isso pode ser apropriado se suas várias séries temporais representarem leituras ruidosas de um conjunto de máquinas que registram o mesmo evento. (Se cada série temporal estiver em uma escala diferente, você precisará normalizar os dados primeiro.)

NOTA: você ainda acaba com 28 leituras, apenas com menos ruído; portanto, isso pode não ser apropriado para sua situação.

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

insira a descrição da imagem aqui

Darren Cook
fonte
Isso só funcionará se todos os sinais forem de natureza semelhante (por exemplo, periódicos) estiverem em fase - no seu exemplo, se duas das ondas senoidais estavam 180 graus fora de fase, elas cancelariam completamente!
tdc
3
Sim, a média de seus dados é apropriada apenas quando cada série de datas deve representar os mesmos dados e (você está feliz em supor que) eles diferem apenas porque cada um tem um ruído diferente.
Darren Cozinhe
1

Eu examinaria os modelos ocultos de Markov e as redes bayesianas dinâmicas. Eles modelam dados de séries temporais. Também são treinados usando várias instâncias de séries temporais, por exemplo, várias séries temporais de pressão arterial de vários indivíduos. Você deve encontrar pacotes em Python e R para construí-los. Pode ser necessário definir a estrutura para esses modelos.

Isawjet
fonte
0

Estou tentando fazer a mesma coisa. Aparentemente, existe algo chamado modelo 'Multivariate AutoRegressive' por aí. Eu encontrei referência a ele, mas não como usá-lo. Baseado no artigo vinculado, presumo que ele tenha sido implementado em R.

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf

Mox
fonte
A abordagem padrão é a regressão automática de vetores e existe um pacote R chamado var .
Xian
Uma autoregessão de vetor é diferente da autoregressão nos dados do painel? Ou é uma questão de campos diferentes, nomes diferentes? O pacote plm foi sugerido para dados em painel. cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox