Eu tenho uma pergunta sobre modelagem de séries temporais em R. meus dados consistem na seguinte matriz:
1 0.03333333 0.01111111 0.9555556
2 0.03810624 0.02309469 0.9387991
3 0.00000000 0.03846154 0.9615385
4 0.03776683 0.03119869 0.9310345
5 0.06606607 0.01201201 0.9219219
6 0.03900325 0.02058505 0.9404117
7 0.03125000 0.01562500 0.9531250
8 0.00000000 0.00000000 1.0000000
9 0.04927885 0.01802885 0.9326923
10 0.06106870 0.02290076 0.9160305
11 0.03846154 0.00000000 0.9615385
12 0.00000000 0.00000000 1.0000000
13 0.06028636 0.03843256 0.9012811
14 0.09646302 0.05144695 0.8520900
15 0.04444444 0.06666667 0.8888889
essas matrizes têm no total 200 linhas.
como você pode ver em cada situação, a soma de cada linha é 1, que se torna porque os valores são a porcentagem de um todo. por exemplo, a linha 1 contém 3,33% da variável a, 1,11% da variável 2 e 95,5% da verificável 3. o primeiro número indica o ano em que os valores são medidos.
minha meta é fazer uma previsão para os próximos 5 anos, portanto, do ano 200 ao 205.
Eu posso fazer isso fazendo três previsões de séries temporais normais. Mas para essa previsão, a soma total nunca é igual a 1, o que é muito importante. Normalmente, são utilizadas técnicas como arima e suavização exponencial.
Alguém conhece um método para fazer uma previsão para esse problema?
fonte
Respostas:
Você está tentando prever uma série temporal composicional . Ou seja, você tem três componentes que são todos restritos a ficar entre 0 e 1 e adicionar até 1.
Você pode solucionar esse problema usando a suavização exponencial padrão, usando uma transformação logística generalizada apropriada. Houve uma apresentação disso por Koehler, Snyder, Ord & Beaumont no Simpósio Internacional de Previsão de 2010 , que se transformou em um artigo ( Snyder et al., 2017, International Journal of Forecasting ).
Vamos andar com isso com seus dados. Leia os dados em uma matriz
obs
de séries temporais:Você pode verificar se isso funcionou digitando
Agora, você tem alguns zeros, o que será um problema quando você usar os logaritmos. Uma solução simples é definir tudo que é menor que um pequeno para esse :ϵ ϵ
Agora as linhas modificadas não somam mais 1. Podemos corrigir isso (embora eu ache que isso pode piorar a previsão):
Agora, transformamos os dados conforme a página 35 da apresentação:
Carregue o
forecast
pacote e defina um horizonte de 5 pontos no tempo:Agora modele e preveja os dados transformados coluna por coluna. Aqui estou simplesmente chamando
ets()
, que tentará ajustar um modelo de suavização exponencial de espaço de estado. Acontece que ele usa suavização exponencial única para todas as três séries, mas especialmente se você tiver mais de 15 períodos, ele poderá selecionar modelos de tendência. Ou, se você tiver dados mensais, explique a R que você tem uma sazonalidade potencial, usandots()
comfrequency=12
- eets()
analisará os modelos sazonais.Em seguida, retrocedemos as previsões conforme a página 38 da apresentação:
Por fim, vamos traçar históricos e previsões:
EDIT: apareceu um artigo sobre previsão de séries temporais composicionais . Eu não li, mas pode ser do seu interesse.
fonte
ets()
noforecast
pacote para suavização exponencial do espaço de estado).