Eu tenho um conjunto de dados de séries temporais. Cada série cobre o mesmo período, embora as datas reais de cada série cronológica nem sempre sejam exatamente alinhadas.
Ou seja, se as séries temporais fossem lidas em uma matriz 2D, seria algo como isto:
date T1 T2 T3 .... TN
1/1/01 100 59 42 N/A
2/1/01 120 29 N/A 42.5
3/1/01 110 N/A 12 36.82
4/1/01 N/A 59 40 61.82
5/1/01 05 99 42 23.68
...
31/12/01 100 59 42 N/A
etc
Quero escrever um script R que separe as séries temporais {T1, T2, ... TN} em 'famílias' em que uma família é definida como um conjunto de séries que "tendem a se solidarizar".
Para a parte 'clustering', precisarei selecionar / definir um tipo de medida de distância. Não tenho muita certeza de como fazer isso, já que estou lidando com séries temporais, e um par de séries que podem se mover em simpatia por um intervalo, pode não fazê-lo em um intervalo subsequente.
Tenho certeza de que há pessoas muito mais experientes / inteligentes do que eu aqui, por isso ficaria grato por todas as sugestões, idéias sobre qual algoritmo / heurística usar para a medida de distância e como usá-lo no agrupamento de séries temporais.
Meu palpite é que NÃO existe um método estatístico robusto estabelecido para fazer isso, então eu ficaria muito interessado em ver como as pessoas abordam / resolvem esse problema - pensando como um estatístico.
fonte
Respostas:
No fluxo de dados e na mineração de bancos de dados de séries temporais, uma abordagem comum é transformar a série em uma representação simbólica e, em seguida, usar uma métrica de similaridade, como a distância euclidiana, para agrupar as séries. As representações mais populares são SAX (Keogh & Lin) ou a mais recente iSAX (Shieh & Keogh):
As páginas acima também contêm referências a métricas de distância e cluster. Keogh e sua equipe estão em pesquisa reproduzível e bastante receptivos a divulgar seu código. Então você pode enviá-los por email e perguntar. Eu acredito que eles tendem a funcionar em MATLAB / C ++.
Houve um esforço recente para produzir uma implementação Java e R:
Não sei até que ponto isso é feito - ele é voltado para a localização de motivos, mas, dependendo de quão longe eles chegaram, ele deve ter os bits necessários para compor algo para suas necessidades (iSAX e métricas de distância: já que essa parte é comum ao agrupamento e localização de motivos).
fonte
Outra maneira de dizer "tende a demonstrar simpatia" é "cointegrada".
Existem duas maneiras padrão de calcular a cointegração : o método de Engle-Granger e o procedimento de Johansen. Estes são abordados em "Análise de séries temporais integradas e cointegradas com R" (Pfaff 2008) e o pacote R urca relacionado . Eu recomendo o livro se você quiser seguir esses métodos em R.
Também recomendo que você analise esta questão em séries temporais multivariadas e, em particular, no curso de Ruey Tsay na U. Chicago, que inclui todo o código R necessário.
fonte
As séries temporais de agrupamento são realizadas de maneira bastante comum pelos dinamistas populacionais, particularmente aqueles que estudam insetos para entender tendências em surtos e colapsos. Procure trabalho em mariposa cigana, Spruce budoworm, besouro de pinheiro da montanha e larício budmoth.
Para o agrupamento real, você pode escolher qualquer métrica de distância que desejar, cada uma provavelmente possui suas próprias forças e especificidades em relação ao tipo de dados que estão sendo agrupados, Kaufmann e Rousseeuw, 1990. Localizando grupos nos dados. Uma introdução à análise de cluster é um bom ponto de partida. Lembre-se de que o método de agrupamento não se importa com o fato de você estar usando uma série temporal, apenas analisa os valores medidos no mesmo ponto do tempo. Se suas duas séries temporais não estiverem em sincronia suficiente durante a vida útil, elas não serão agrupadas (e talvez não devam).
Onde você terá problemas é determinar o número de clusters (famílias) a serem usados depois de agrupar a série temporal. Existem várias maneiras de selecionar um corte de clusters informativos, mas aqui a literatura não é tão boa.
fonte
Veja minha resposta para uma pergunta semelhante aqui . Para encurtar a história, faça uma transformação rápida de Fourier dos dados, descarte frequências redundantes se seus dados de entrada tiverem um valor real, separe as partes reais e imaginárias de cada elemento da transformação rápida de Fourier e use o pacote Mclust em R para fazer modelagem. agrupamento baseado nas partes reais e imaginárias de cada elemento de cada série temporal. O pacote automatiza a otimização sobre o número de clusters e suas densidades.
fonte
Você também pode usar o pacote clustDDist, que executa o método leader e o método de cluster hierárquico com diferentes medidas de erro:
http://r-forge.r-project.org/projects/clustddist/
fonte