Nos últimos anos, uma técnica poderosa e computacionalmente intensiva conhecida como Análise de Espectro Singular (SSA) ou Análise da Séries Temporais Estruturais foi desenvolvida no campo da análise de séries temporais. SSA é uma técnica nova e poderosa aplicável a muitos problemas práticos, como o estudo de séries temporais clássicas, estatística multivariada, geometria multivariada, sistemas dinâmicos e processamento de sinais.
Possíveis áreas de aplicação do SSA são diversas: da matemática e física à economia e matemática financeira. Outras áreas podem incluir meteorologia e oceanologia às ciências sociais, pesquisa de mercado e medicina. Qualquer série temporal aparentemente complexa pode fornecer outro exemplo de aplicação bem-sucedida do SSA.
O método básico SSA consiste em duas etapas complementares: decomposição e reconstrução; ambos os estágios incluem duas etapas separadas. No primeiro estágio decompomos a série e no segundo estágio reconstruímos a série original e usamos a série reconstruída para prever novos pontos de dados. O conceito principal no estudo das propriedades do SSA é a separabilidade, que caracteriza o quão bem diferentes componentes podem ser separadas umas das outras.
A ausência de separabilidade aproximada é frequentemente observada em séries com estrutura complexa. Para essas séries e séries com estrutura especial, existem diferentes maneiras de modificar o SSA levando a diferentes versões, como SSA com centralização simples e dupla, Toeplitz SSA e SSA sequencial.
Notemos que, embora alguns conceitos probabilísticos e estatísticos sejam empregados nos métodos baseados em SSA, não precisamos fazer nenhuma suposição estatística, como estacionariedade das séries ou normalidade dos resíduos.
SSA é uma ferramenta muito útil que pode ser usada para resolver diferentes problemas, como: encontrar tendências; alisamento; extração de componentes de sazonalidade; extração simultânea de ciclos com períodos pequenos e grandes; extração de periodicidades com amplitudes variadas; extração simultânea de tendências e periodicidades complexas; encontrar estruturas em séries temporais curtas; teste de causalidade baseado no SSA.
A resolução de todos estes problemas corresponde às chamadas capacidades básicas do SSA. Além disso, o método tem várias extensões essenciais. Primeiro, a versão multivariada do método permite a expansão simultânea de várias séries temporais; ver, por exemplo Danilov, D. and Zhigljavsky, A. (1997).
Em segundo lugar, as ideias do SSA levam a vários procedimentos de previsão para séries temporais; ver Golyandina, N., Nekrutkin, V. and Zhigljavsky, A. (2001) e Danilov, D. and Zhigljavsky, A. (1997). Além disso, as mesmas idéias são usadas em Golyandina, N., Nekrutkin, V., and Zhigljavsky, A. (2001) e Moskvina, V. G., and Zhigljavsky, A. (2003) para detecção de ponto de mudança em séries temporais.
Na área de análise de séries temporais não lineares, o SSA foi considerado como uma técnica que poderia competir com métodos clássicos (ARIMA, Holt-Winters, etc.). Há uma série de pesquisas que consideraram o SSA como um método de filtragem ver, por exemplo, Hassani, H., Dionisio, A., and Ghodsi, M. (2010) e suas referências. Em outra pesquisa, a informação de ruído extraída pela técnica SSA, tem sido utilizada como teste de diagnóstico biomédico Ghodsi, M., Hassani, H., Sanei, S., and Hick, Y. (2009).
A técnica SSA também é utilizada como método de filtragem para medições longitudinais. Foi demonstrado que a redução de ruído é importante para o ajuste de curvas em modelos de curva de crescimento e que o SSA pode ser empregado como uma ferramenta poderosa para redução de ruído para medições longitudinais Hassani, H. et all (2009).
Estamos motivados a usar o SSA porque é uma técnica não paramétrica que trabalha com processos estatísticos arbitrários, sejam lineares ou não lineares, estacionários ou não estacionários, gaussianos ou não gaussianos.
A dinâmica das séries temporais geralmente passa por mudanças estruturais durante o período considerado e é preciso ter certeza de que o método de previsão não é sensível às variações dinâmicas.
Além disso, ao contrário dos métodos tradicionais de previsão de séries temporais (tanto modelos autorregressivos quanto estruturais que assumem normalidade e estacionaridade da série), o método SSA é não paramétrico e não faz suposições prévias sobre os dados.
A série em tempo real geralmente possui uma estrutura complexa desse tipo; como consequência, encontramos superioridade da SSA sobre as técnicas clássicas. Além disso, o método SSA decompõe uma série em suas partes componentes e a reconstrói, deixando o componente aleatório (ruído) para trás.
Outro aspecto importante do SSA, que pode ser muito útil em economia, é que, ao contrário de muitos outros métodos, ele funciona bem mesmo para amostras pequenas ver, por exemplo, Hassani, H. and Zhigljavsky, A. (2009) e Hassani, H. (2007).
Deve-se ressaltar que, embora conceitos probabilísticos e estatísticos sejam empregados nos métodos baseados no SSA, não são necessárias suposições estatísticas como estacionaridade da série ou normalidade dos resíduos e o SSA usa o bootstrapping para obter os intervalos de confiança para as previsões.
Consideramos uma série temporal \(Y_T = (y_1,\cdots,y_T)\) unidimensional. Seja \(L\) um número inteiro fixo tal que \(L\leq T/2\) representando o comprimento da janela e também seja \(K = T-L+1\).
Utilizaremos como exemplo de aplicação uma das séries temporais disponíveis na bilbioteca tsdl.
library(tsdl)
industria = subset(tsdl,12,"Industry")
attributes(industria[[1]])
## $tsp
## [1] 1972.00 1979.75 12.00
##
## $class
## [1] "ts"
##
## $source
## [1] "Abraham & Ledolter (1983)"
##
## $description
## [1] "Monthly demand repair parts large/heavy equip. Iowa 1972 – 1979"
##
## $subject
## [1] "Industry"
par(mfrow=c(1,1), mar = c(4,5,3,1), pch=19)
plot(industria[[1]], type="b", xlab="", ylab="", main="Demanda mensal de peças de reparo \n equipamentos grandes/pesados. Iowa 1972 – 1979")
grid()
library(Rssa)
mod = ssa(industria[[1]], L=24)
plot(mod, type = "values")
mod1 = ssa(industria[[1]], L=36)
plot(mod1, type = "values")
Esta figura mostra os autovalores.
mod2 <- reconstruct(mod, groups = list(Trend = 1, Seasonality = 2:11))
plot(mod2, add.residuals = TRUE, add.original = TRUE, plot.method = "xyplot",
superpose = TRUE, auto.key = list(columns = 2))
Observemos melhor os resíduos.
res <- industria[[1]] - (mod2$Trend + mod2$Seasonality)
plot(res)
for3 <- forecast(mod1, groups = list(1:6),
method = "recurrent", interval = "confidence",
only.intervals = FALSE,
len = 6, R = 100, level = 0.95)
plot(for3, include = 36, shadecols = "green", type = "l",
main = "Confidence intervals")
set.seed(3)
for4 <- forecast(mod1, groups = list(1:6),
method = "recurrent", interval = "prediction",
only.intervals = FALSE,
len = 6, R = 100, level = 0.95)
plot(for4, include = 36, shadecols = "green", type = "l",
main = "Prediction intervals")