Usando o excelente pacote de previsões de Rob Hyndman, deparei-me com a necessidade de não apenas ter intervalos de previsão, mas simular vários caminhos futuros, considerando observações passadas de uma série temporal com sazonalidades complexas. Há algo para séries temporais menos complexas com apenas uma ou duas sazonalidades (simulate.ets () no pacote de previsão), mas no meu caso, eu exigiria o equivalente a simulate.ets () para o modelo tbats mais complexo.
Suponho que os dados necessários para criar esses caminhos já estejam presentes no objeto de ajuste, mas a possibilidade de criar caminhos de amostra parece não estar diretamente acessível. Portanto, criei uma solução ingênua e gostaria de saber se esta abordagem está correta.
require(forecast)
fit = bats(test,use.parallel=T,use.damped.trend=F,use.trend=T,seasonal.periods=seasonal.periods)
Ingenuamente, imagino que caminhos de amostra possam ser construídos usando a previsão de pontos de
fit
> forecast(fit)
Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
1960.016 24.48576 23.82518 25.14633 23.47550 25.49602
1960.032 24.79870 23.88004 25.71735 23.39374 26.20366
1960.048 25.31743 24.39878 26.23608 23.91247 26.72239
1960.065 25.69254 24.77389 26.61120 24.28759 27.09750
1960.081 26.06863 25.14998 26.98729 24.66367 27.47359
1960.097 26.43215 25.51350 27.35080 25.02719 27.83711
1960.113 26.77674 25.85809 27.69540 25.37179 28.18170
e simplesmente adicionando valores sorteados aleatoriamente a partir do procedimento de ajuste do modelo.
> fit$errors
Time Series:
Start = c(1959, 2)
End = c(1960, 1)
Frequency = 365
[1] 0.140656913 -0.455335141 -0.558989185 1.697532911 -0.114406022 0.366182718 -0.377056927 0.396144296
Portanto, com
prediction = forecast(fit)
errors = fit$errors
path = prediction$mean + sample(errors, size = length(prediction$mean))
plot(ts(path))
um caminho de amostra pode ser construído.
Essa é uma maneira válida de construir caminhos de amostra? Caso contrário, qual seria a maneira correta?
Muito obrigado por qualquer ajuda!
fonte
simulate.tbats
método?Esta é provavelmente uma resposta muito tardia, mas não vejo por que não.
Sua abordagem parece correta. Mas, existe uma maneira mais fácil de fazer isso.
Você já atribuiu um nome de variável à sua previsão. Você simplesmente precisa
plot(prediction)
. Ao adicionar a variávelh
que é o número de períodos para previsãoprediction
, você pode controlar a duração da previsão. Por exemplo, você poderia dizerprediction <- forecast(fit, h = 48)
. Observe que o valor deh
depende de quanto tempo você deseja ver no futuro.fonte