O Statsmodels diz que o ARIMA não é apropriado porque a série não é estacionária, como está testando isso?

12

Eu tenho uma série temporal que estou tentando modelar com o modelo de estatísticas ARIMA api do Python. Quando aplico o seguinte:

from statsmodels.tsa.arima_model import ARIMA
model = ARIMA(data['Sales difference'].dropna(), order=(2, 1, 2))
results_AR = model.fit(disp=-1)

Estou tendo o erro a seguir:

ValueError: The computed initial AR coefficients are not stationary
You should induce stationarity, choose a different model order, or you can
pass your own start_params.

Mas eu já diferenciei os dados:

data['Sales'] = data['Sales'] - data['Sales'].shift() 

O que mais posso fazer para induzir estacionariedade?

E qual teste a API do ARIMA está executando para determinar que os dados não são estacionários?

Minha série cronológica original se parece com: insira a descrição da imagem aqui

A série temporal diferenciada se parece com: insira a descrição da imagem aqui

E meu gráfico da ACF se parece com: insira a descrição da imagem aqui

Skander H.
fonte
A premissa está errada. A diferença na família ARIMA permite remover tendências polinomiais e, portanto, converter alguns modelos não estacionários em estacionários. A família ARMA não permite diferenciação e não inclui modelos não estacionários.
Michael R. Chernick
2
@MichaelChernick, mas estou chamando a API do ARIMA, não a ARMA. Estou esquecendo de algo?
Skander H.

Respostas:

4

Você perguntou "O que mais posso fazer para induzir a estacionariedade?" Se uma série exibir uma mudança de nível (sintoma), este é um exemplo de não estacionariedade. O remédio correto é "des-significar" os dados para não diferenciá-los. Além disso, uma série pode exibir uma mudança na tendência determinística ou um pulso sazonal que pode ser retificado por esquemas de detecção de intervenção. Se a série alterar os parâmetros ao longo do tempo (sintoma), o remédio correto é encontrar os pontos de interrupção por meio de um teste de Chow e usar o conjunto mais recente ou alguma forma de modelo de limiar (TAR) . Se uma série apresentar uma alteração na variação do erro ao longo do tempo (sintoma), o remédio correto pode ser o WLS, uma forma de GLS ou alguma forma de transformação de energia ou na falta desses remédios relativamente simples, de alguma forma do modelo GARCH.

Se você postar seus dados originais, talvez eu possa ajudar mais.

IrishStat
fonte
2

Leia com atenção: não diz que a série temporal não é estacionária. Diz que os coeficientes iniciais não são estacionários (o que presumo significa que eles não descrevem um processo estacionário).

Você pode tentar adivinhar os valores iniciais, como sugere. Mas suspeito que esteja escolhendo valores iniciais ruins, porque o modelo está mal especificado. Se você já diferenciou as séries temporais, provavelmente também não deseja especificar a ordem de integração 1. Você provavelmente quer dizer ordem = (2, 0, 2), não ordem = (2, 1, 2).

The Laconic
fonte
0

Em um sinal de série temporal, a estacionariedade pode ser introduzida usando a janela. Você pode dividir seu sinal de série temporal em sinais menores usando uma boa técnica de janela com sobreposição. É necessário fazer janelas para evitar picos espúrios no domínio da frequência e sobreposição para conservar a energia do sinal. Normalmente, um sinal de fala (frequência de amostragem de 8 KHz) possui quadros de 30 ms, fornecendo 240 amostras por quadro. Isso é complicado usando uma janela hamming com sobreposição de 50%.

SamParker
fonte
0

A série temporal diferenciada não é estacionária, pois não apresenta uma variação constante. Você pode tentar uma diferenciação logarítmica.

Juan Ruiz Sánchez
fonte