Estou tentando fazer análise de séries temporais e sou novo nesse campo. Eu tenho contagem diária de um evento de 2006-2009 e quero ajustar um modelo de série temporal a ele. Aqui está o progresso que eu fiz:
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)
O gráfico resultante que recebo é:
Para verificar se há sazonalidade e tendência nos dados ou não, sigo as etapas mencionadas neste post :
ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal
e no blog de Rob J Hyndman :
library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")
deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df
#P value
1-pchisq(deviance,df)
Ambos os casos indicam que não há sazonalidade.
Quando plogo o ACF & PACF da série, eis o que recebo:
Minhas perguntas são:
Essa é a maneira de lidar com dados diários de séries temporais? Esta página sugere que eu deveria olhar para os padrões semanais e anuais, mas a abordagem não está clara para mim.
Não sei como proceder depois de ter os gráficos ACF e PACF.
Posso simplesmente usar a função auto.arima?
ajuste <- arima (myts, order = c (p, d, q)
***** Resultados atualizados do Auto.Arima ******
Quando altero a frequência dos dados para 7, de acordo com os comentários de Rob Hyndman aqui , o auto.arima seleciona um modelo ARIMA sazonal e produz:
Series: timeSeriesObj
ARIMA(1,1,2)(1,0,1)[7]
Coefficients:
ar1 ma1 ma2 sar1 sma1
0.89 -1.7877 0.7892 0.9870 -0.9278
s.e. NaN NaN NaN 0.0061 0.0162
sigma^2 estimated as 21.72: log likelihood=-4319.23
AIC=8650.46 AICc=8650.52 BIC=8682.18
****** Atualização da sazonalidade ******
Quando eu testo a sazonalidade com a frequência 7, ele produz True, mas com a sazonalidade 365.25, ele gera false. Isso é suficiente para concluir a falta de sazonalidade anual?
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
retorna:
True
enquanto
timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal
retorna:
False
fonte
str(x)
produz?R
simples não tem a capacidade de lidar com isso. Eu procuraria soluções comerciais se houver um alto custo de estoque / fabricação envolvido no produto que você está tentando prever.R
possui sérias limitações para prever tarefas como a sua. Veja as perguntas sobre previsões diárias em outro lugar deste site.Respostas:
Seu ACF e PACF indicam que você tem pelo menos sazonalidade semanal, o que é mostrado pelos picos nas defasagens 7, 14, 21 e assim por diante.
Você também pode ter sazonalidade anual, embora não seja óbvio em suas séries temporais.
Sua melhor aposta, dadas as sazonalidades potencialmente múltiplas, pode ser um
tbats
modelo, que modela explicitamente vários tipos de sazonalidade. Carregue oforecast
pacote:Sua saída de
str(x)
indica quex
ainda não carrega informações sobre potencialmente com várias sazonalidades. Olhe?tbats
e compare a saída destr(taylor)
. Atribua as sazonalidades:Agora você pode ajustar um
tbats
modelo. (Seja paciente, isso pode demorar um pouco.)Por fim, você pode prever e plotar:
Você não deve usar
arima()
ouauto.arima()
, uma vez que estes só pode lidar com um único tipo de sazonalidade: quer semanal ou anual. Não me pergunte oauto.arima()
que faria nos seus dados. Pode escolher uma das sazonalidades ou pode desconsiderá-las completamente.EDIT para responder a perguntas adicionais de um comentário:
O cálculo de um modelo em dados mensais pode ser uma possibilidade. Então, você poderia, por exemplo, comparar os AICs entre modelos com e sem sazonalidade.
No entanto, prefiro usar uma amostra de validação para avaliar os modelos de previsão. Mantenha os últimos 100 pontos de dados. Ajuste um modelo com sazonalidade anual e semanal ao restante dos dados (como acima) e, em seguida, ajuste apenas um com sazonalidade semanal, por exemplo, usando
auto.arima()
umts
comfrequency=7
. Previsão usando os dois modelos no período de espera. Verifique qual deles apresenta um erro menor, usando MAE, MSE ou o que for mais relevante para a sua função de perda. Se houver pouca diferença entre os erros, siga o modelo mais simples; caso contrário, use aquele com o erro mais baixo.A prova do pudim está na alimentação e a prova do modelo de série temporal está na previsão.
Para melhorar, não use uma única amostra de validação (que pode ser enganosa, considerando o aumento no final de sua série), mas use previsões de origem contínuas, também conhecidas como "validação cruzada de séries temporais" . (Eu recomendo muito todo esse livro de previsões on-line gratuito .
Os modelos ARIMA padrão lidam com a sazonalidade por diferenciação sazonal. Para dados mensais sazonais, você não modelaria as séries temporais brutas, mas as séries temporais de diferenças entre março de 2015 e março de 2014, entre fevereiro de 2015 e fevereiro de 2014 e assim por diante. (Para obter previsões na escala original, é claro que você precisa diferenciar novamente.)
Não existe uma maneira imediatamente óbvia de estender essa idéia a várias sazonalidades.
Obviamente, você pode fazer algo usando o ARIMAX, por exemplo, incluindo manequins mensais para modelar a sazonalidade anual e depois modelar resíduos usando o ARIMA sazonal semanal. Se você quiser fazer isso em R, use
ts(x,frequency=7)
, crie uma matriz de manequins mensais e alimente-a noxreg
parâmetro deauto.arima()
.Não me lembro de nenhuma publicação que estenda especificamente o ARIMA a várias sazonalidades, embora eu tenha certeza de que alguém fez algo parecido no meu parágrafo anterior.
fonte
R
, uma vezR
que não têm a capacidade de lidar com ARIMA multiesazonal.tbats
modelo similar.A melhor maneira de decompor dados sazonais usando pacotes R existentes é ceemdan () no Rlibeemd. Essa técnica extrai a sazonalidade de vários períodos. Os padrões funcionam bem. Ele usa a transformação Hilbert-Huang em vez da transformação de Fourier. A transformação de Fourier tem uma grande desvantagem, pois ela só pode manipular dados estacionários e lineares quando a maioria das séries de interesse não é. Por exemplo, a caminhada aleatória y_t = y_ {t-1} + e_t é a caminhada aleatória mais simples e frequentemente encontrada. Outros métodos mantêm fixa a amplitude da variação sazonal quando ela geralmente varia na prática.
fonte
As perguntas que você levantou foram tratadas na Previsão de Séries Temporais R: perguntas sobre meus resultados . Observe atentamente minha resposta detalhada e todos os comentários da discussão, incluindo os da pergunta original, pois acredito que sejam relevantes para o seu problema. Você pode pegar os dados fornecidos na postagem e usá-los como um momento de ensino para si mesmo. Use toda a discussão como uma cartilha para o que você deve fazer.
fonte