Estou tentando detectar valores anômalos em uma série temporal de dados climáticos com algumas observações ausentes. Pesquisando na web, encontrei muitas abordagens disponíveis. Dessas, a decomposição do stl parece atraente, no sentido de remover componentes de tendência e sazonais e estudar o restante. Lendo STL: um procedimento de decomposição de tendências sazonais baseado em Loess , stl
parece ser flexível na determinação das configurações para atribuir variabilidade, não afetadas por valores discrepantes e possíveis de aplicar, apesar dos valores ausentes. No entanto, tentando aplicá-lo em R
, com quatro anos de observações e definindo todos os parâmetros de acordo com http://stat.ethz.ch/R-manual/R-patched/library/stats/html/stl.html , encontro erro:
"time series contains internal NAs"
(quando na.action=na.omit
) e
"series is not periodic or has less than two periods"
(quando na.action=na.exclude
).
Verifiquei duas vezes se a frequência está definida corretamente. Vi perguntas relevantes em blogs, mas não encontrei nenhuma sugestão que pudesse resolver isso. Não é possível aplicar stl
em uma série com valores ausentes? Estou muito relutante em interpolá-los, pois não quero apresentar (e consequentemente detectar ...) artefatos. Pelo mesmo motivo, não sei o quão aconselhável seria usar as abordagens ARIMA (e se os valores ausentes ainda seriam um problema).
Compartilhe se você conhece uma maneira de aplicar stl
em uma série com valores ausentes, ou se acredita que minhas escolhas não são metodologicamente válidas ou se você tem alguma sugestão melhor. Sou bastante novo em campo e dominado pelas pilhas de informações (aparentemente ...) relevantes.
fonte
Respostas:
Os modelos ARIMA incorporam facilmente variáveis dummy para lidar com valores ausentes. Estes são chamados de indicadores de pulso. A metodologia é direta e documentada em http://www.unc.edu/~jbhill/tsay.pdf . Em geral, o método extrai das informações atuais da série residual sobre pulsos, mudanças de nível, pulsos sazonais e tendências de hora local.
fonte
De acordo com @Julius neste post, é possível usar
stl
comna.approx
, a partir dozoo
pacote, usandostl(x, na.action = na.approx, ...)
. Isso faz algum tipo de interpolação .fonte
Você também pode querer conferir o
stlplus
pacote do Hafen . Os detalhes estão em sua tese.Você pode instalá-lo a partir do CRAN com
ou diretamente do github com
fonte