Ajustar um modelo ARIMAX com regularização ou penalização (por exemplo, com o laço, rede elástica ou regressão de crista)

29

Eu uso a função auto.arima () no pacote de previsão para ajustar os modelos ARMAX a uma variedade de covariáveis. No entanto, muitas vezes tenho um grande número de variáveis ​​para selecionar e geralmente termino com um modelo final que funciona com um subconjunto delas. Não gosto de técnicas ad-hoc para seleção de variáveis ​​porque sou humano e sujeito a preconceitos, mas a validação cruzada de séries temporais é difícil , portanto, não encontrei uma boa maneira de experimentar automaticamente diferentes subconjuntos de minhas variáveis ​​disponíveis e Estou preso ajustando meus modelos usando meu próprio julgamento.

Quando encaixo os modelos glm, posso usar a rede elástica ou o laço para regularização e seleção de variáveis, através do pacote glmnet . Existe um kit de ferramentas existente no R para usar a rede elástica nos modelos ARMAX ou terei que rolar sozinho? Isso é mesmo uma boa ideia?

editar: faria sentido calcular manualmente os termos AR e MA (digamos até AR5 e MA5) e usar o glmnet para ajustar-se ao modelo?

edit 2: Parece que o pacote FitAR me deixa parte, mas não tudo, do caminho até lá.

Zach
fonte
2
Eu ficaria curioso para saber se você conseguiu fazer algo sobre esse problema. Eu tinha marcado para qualquer atualização - então, basta tocar na base aqui.
Vishal Belsare
Nunca conseguiu resolver isso. Pensei em escrever minha própria implementação, mas não cheguei a isso. Talvez você possa calcular manualmente os termos AR e MA e aplicar glmnet a esses dados?
Zach
1
Oi Zach, eu me perguntei se você levou isso adiante ou se ainda está estacionado. Eu preciso desse algoritmo para prever um grande número de séries.
Matt Weller
3
@MattWeller Conversei um pouco com Rob Hyndman, autor do excelente forecastpacote para R. Ele disse que seria difícil com o ARIMA completo, porque você teria que envolver o laço com o otimizador não-linear do ARIMA. Uma solução parcial seria ajustar um modelo de RA usando glmnetvariáveis ​​variáveis. Até onde eu sei, ninguém fez isso com um modelo ARIMA completo ainda.
Zach

Respostas:

7

Esta não é uma solução, mas algumas reflexões sobre as possibilidades e dificuldades que conheço.

Sempre que é possível especificar um modelo de série temporal como com computável a partir de covariáveis ​​e observações com atraso no tempo , também é possível calcular o estimador penalizado com rede elástica dos mínimos quadrados de usando glmnet em R. Ele exige que você escreva código para calcular para formar a matriz de modelo a ser especificada no glmnet. Isso funciona para modelos AR, mas não diretamente para modelos ARMA, digamos. Além disso, os procedimentos de validação cruzada do glmnet não são sensíveis per se para dados de séries temporais.x t β x t

Yt+1=xtβ+ϵt+1
xtβxt

Para modelos mais gerais, uma implementação de um algoritmo para calcular o estimador penalizado por rede elástica de mínimos quadrados não linear de é necessário. Até onde eu sei, não existe essa implementação em R. Atualmente, estou escrevendo uma implementação para resolver o caso em que o ponto é que é fundamental para a seleção do modelo que a penalização do laço esteja em e não em . Se bem me lembro da parametrização ARIMA, ela também assume esse formato mas não posso oferecer nenhum código no momento. É (será) baseado em β Y t + 1 = x t g ( β ) + ϵ t + 1 β g ( β ) -

Yt+1=f(xt,β)+ϵt+1
β
Yt+1=xtg(β)+ϵt+1
βg(β)Um método de descida de gradiente de coordenadas para minimização separável não suave .

Outra questão é a seleção da quantidade de penalização (os parâmetros de ajuste). Geralmente, é necessário uma forma de validação cruzada para séries temporais, mas espero poder descobrir alguns métodos menos exigentes em termos computacionais para modelos específicos.

NRH
fonte
O pacote de interpolação para R possui uma boa implementação de validação cruzada de séries temporais que pode ser usada para selecionar os parâmetros para o glmnet. Obrigado pela resposta.
Zach
2

Fui desafiado por um cliente a resolver esse problema de forma automática, ou seja, chave na mão. Eu implementei uma abordagem que para cada par (ou seja, y e um candidato x), pré-brancos, calcule correlações cruzadas das séries pré-branqueadas, identifique o PDL (OU ADL AUTOREGRESSIVE DISTRIBUTED LAG MODEL incluindo qualquer DEAD TIME) ao incorporar a Detecção de Intervenção para produzir estimativas robustas, desenvolver uma "medida" para essa estrutura. Depois de realizar isso para TODOS os regressores candidatos, classifique-os pela "medida" e selecione os principais regressores K com base na "medida". Às vezes, isso é chamado de filtragem linear. Incorporamos com sucesso essa heurística em nosso pacote de séries temporais disponíveis comercialmente. Você deve poder "ROLAR O SEU PRÓPRIO"

IrishStat
fonte
Quero especificamente incorporar o laço ou a rede elástica em um modelo ARIMA.
Zach
3
Na verdade, não estou procurando um filtro linear (embora isso seja útil). Eu quero especificamente uma maneira de incorporar o laço, a regressão de crista ou a rede elástica em um modelo ARIMAX.
Zach
2
No momento, não estou interessado em mudanças de nível, tendências de hora local, mudanças de coeficiente ou variação de erro não constante. Estou muito especificamente interessado em aplicar a regularização por laço, cume ou rede elástica nos modelos ARIMAX.
Zach
2
Se você puder incorporar a regularização de laço, crista ou rede elástica na metodologia acima e postar algum código de exemplo em uma linguagem de programação de código aberto, ficarei feliz em conceder a você a recompensa.
Zach
1
@ frank você está tentando fazer a identificação via estimativa (abaixamento) e isso não funciona porque existem muitas combinações demais de pulsos possíveis, mudanças de nível, pulsos sazonais e tendências de tempo. Se essas estruturas são necessárias, mas ignoradas, a estimativa de parâmetros é tendenciosa e os testes paramétricos de significância saem pela janela.
IrishStat 5/07