Como correlacionar duas séries temporais com lacunas e diferentes bases temporais?

10

Fiz essa pergunta no StackOverflow e foi recomendado fazer aqui.


Eu tenho duas séries temporais de dados do acelerômetro 3D que possuem bases de tempo diferentes (relógios iniciados em momentos diferentes, com alguma fluência muito leve durante o tempo de amostragem), além de conter muitas lacunas de tamanho diferente (devido a atrasos associados à gravação para separar dispositivos flash).

Os acelerômetros que estou usando são o GCDC X250-2 barato . Estou executando os acelerômetros com o maior ganho, para que os dados tenham um nível de ruído significativo.

Cada série temporal possui cerca de 2 milhões de pontos de dados (mais de uma hora a 512 amostras / s) e contém cerca de 500 eventos de interesse, onde um evento típico abrange 100-150 amostras (200 a 300 ms cada). Muitos desses eventos são afetados por falhas de dados durante gravações em flash.

Portanto, os dados não são primitivos e nem são muito bonitos. Mas minha inspeção do globo ocular mostra claramente que contém as informações em que estou interessado (posso postar gráficos, se necessário).

Os acelerômetros estão em ambientes semelhantes, mas são apenas moderadamente acoplados, o que significa que eu posso dizer a olho quais eventos correspondem a cada acelerômetro, mas até agora não obtive êxito em software. Devido a limitações físicas, os dispositivos também são montados em diferentes orientações, onde os eixos não coincidem, mas são tão ortogonais quanto eu poderia fazê-los. Assim, por exemplo, para acelerômetros de 3 eixos A e B, + Ax mapeia para -By (para cima), + Az mapeia para -Bx (esquerda-direita) e + Ay mapeia para -Bz (frente-trás) .

Meu objetivo inicial é correlacionar eventos de choque no eixo vertical, embora eu acabasse gostando de: a) descobrir automaticamente o mapeamento do eixo, b) correlacionar a atividade nos ases mapeados ec) extrair diferenças de comportamento entre os dois acelerômetros (como torcer ou flexão).

A natureza dos dados da série temporal torna inutilizável o numpy.correlate () do Python. Eu também olhei para o pacote do R's Zoo, mas não avançamos com ele. Procurei ajuda em diferentes campos da análise de sinais, mas não fiz nenhum progresso.

Alguém tem alguma pista sobre o que posso fazer ou abordagens que devo pesquisar?

Atualização 28 de fevereiro de 2011: adicionadas algumas plotagens aqui mostrando exemplos dos dados.

BobC
fonte
11
@ BobB, talvez um dos moderadores possa migrar sua postagem para este site. Isso seria o mais razoável. Quanto às suas perguntas técnicas, antes de tudo, você está usando a FFT para fazer a correlação? Isso deve ser possível para 2 milhões de pontos de dados em um computador meio decente. Sua relação sinal / ruído parece razoavelmente alta, portanto, você deve estar no negócio. Um corte rápido e sujo seria preencher os dados ausentes com a última amostra disponível ou com zeros. A fluência das diferenças no intervalo de amostragem pode ser o "recurso" mais desafiador dos seus dados para lidar.
cardeal
@ cardinal: Na verdade, tentei um FFT, apenas para obter lixo como resultado. As características 'interessantes' prontamente visíveis nos dados são indistinguíveis do ruído na FFT. No entanto, fiz FFTs apenas em todo o conjunto de dados: talvez uma FFT de janela móvel forneça melhores resultados, mas ainda não consegui encontrar uma maneira computacionalmente eficiente de implementá-la. Eu suspeito que uma transformação Wavelet possa ajudar, mas não estou familiarizada com ela (mas estou aprendendo lentamente sobre isso).
bobc
11
O @BobC, o que eu quis dizer foi, você considerou uma implementação baseada em FFT para calcular a correlação? A convolução direta é , mas uma implementação baseada em FFT reduziria esse , tornando-o viável. Quanto à análise da própria FFT, com 2 milhões de pontos de dados, sua resolução de frequência será muito alta. Qualquer fluência de amostragem e outras coisas são obrigadas a eliminar o sinal por frequência. Mas você deve poder agregar várias caixas para tirar o sinal do barulho. Algo como uma abordagem Welch ou talvez uma técnica de janela personalizada. O(n2)O(nlogn)
cardeal
@BobC, no topo da minha cabeça, parece que alguma variante de um algoritmo de sobreposição e adição ou sobreposição e economia poderia ser usada para fazer uma FFT de janela deslizante. Deslizar as amostras dentro de uma janela equivale a uma mudança de fase; portanto, tudo o que você precisa fazer é compensar as amostras que "caem" na extremidade esquerda e as que "entram" na extremidade direita.
cardeal
Oi, eu tenho uma pergunta semelhante. Eu tenho 2 séries temporais, cada uma representada por uma matriz com sua primeira coluna correspondente aos valores e a segunda coluna correspondente à diferença de tempo (desde o valor anterior). Como encontro a correlação entre essas 2 matrizes? Tentei fazer xcorr2 (), mas não parece correto, e fazer xcorr provavelmente calcularia a correlação apenas com os valores a serem considerados, mas também quero levar em consideração o tempo. Estou realmente confuso aqui, uma FFT ajudará? Como você sugere que eu faça isso?

Respostas:

12

A questão diz respeito ao cálculo da correlação entre duas séries temporais amostradas irregularmente (processos estocásticos unidimensionais) e a utilizá-la para encontrar o deslocamento no tempo em que elas estão maximamente correlacionadas (sua "diferença de fase").

Esse problema geralmente não é tratado na análise de séries temporais, pois presume-se que os dados das séries temporais sejam coletados sistematicamente (em intervalos regulares de tempo). É antes a província da geoestatística , que diz respeito às generalizações multidimensionais de séries temporais. O conjunto de dados geoestatísticos arquetípicos consiste em medições de amostras geológicas em locais com espaçamento irregular.

(z(p)z(q))2/2z(p)ppqZVar(Z(p))pZ(p)Z(q)

(z(p),w(p))zw

Com dois milhões de pontos, você poderá detectar pequenos desvios da estacionariedade. É possível que a diferença de fase entre as duas séries temporais também possa variar ao longo do tempo. Para lidar com isso, calcule o variograma cruzado separadamente para diferentes janelas espaçadas ao longo do período.

O(nk)O(n2)k

whuber
fonte
ntn=nttnτn=tn+α+βnαβ
ββ
@whuber, @BobC, estou fazendo um palpite semi-educado com base em experiências anteriores que lidam com problemas e questões semelhantes. A maioria das abordagens que vi são computacionalmente intensivas e não conseguem impressionar. Uma tentativa pode ser através de algo como distorção dinâmica do tempo ou o que Ramsay e Silverman chamam de registro de curva . Se um desses seria viável nesse tamanho de conjunto de dados não está claro para mim.
cardeal
Vou demorar um pouco para envolver meu cérebro nisso. Começarei com os exemplos nos pacotes R que você mencionou.
BobC, 08/03/11
@ Bob, é o modelo aproximado que eu dei para a assincronicidade de tempo próximo ao que você tem? Eu estou pensando que é "deslocamento inicial aleatório" + "erro linear", onde o último é devido a uma pequena diferença constante no intervalo de amostragem entre seus dois dispositivos. Depois, há um pequeno erro aleatório adicional, por exemplo, devido à interrupção do processamento de dois uCs diferentes.
cardeal