Come correlare due serie temporali con lacune e diverse basi dei tempi?


10

Ho posto questa domanda su StackOverflow e mi è stato consigliato di farlo qui.


Ho due serie temporali di dati dell'accelerometro 3D che hanno basi temporali diverse (gli orologi sono iniziati in momenti diversi, con un leggero scorrimento durante il tempo di campionamento), oltre a contenere molte lacune di dimensioni diverse (a causa di ritardi associati alla scrittura per separare dispositivi flash).

Gli accelerometri che sto usando sono il GCDC X250-2 economico . Sto facendo funzionare gli accelerometri al massimo guadagno, quindi i dati hanno un livello di rumore significativo.

Le serie temporali hanno ciascuna circa 2 milioni di punti dati (oltre un'ora a 512 campioni / sec) e contengono circa 500 eventi di interesse, in cui un evento tipico comprende 100-150 campioni (200-300 ms ciascuno). Molti di questi eventi sono interessati da interruzioni dei dati durante le scritture flash.

Quindi, i dati non sono incontaminati e non sono nemmeno molto carini. Ma la mia ispezione del bulbo oculare mostra che contiene chiaramente le informazioni che mi interessano. (Posso pubblicare grafici, se necessario).

Gli accelerometri si trovano in ambienti simili ma sono solo moderatamente accoppiati, il che significa che posso dire a occhio quali eventi corrispondono a ciascun accelerometro, ma finora non ho avuto successo nel software. A causa delle limitazioni fisiche, i dispositivi sono anche montati in diversi orientamenti, in cui gli assi non corrispondono, ma sono più vicini all'ortogonale di quanto potessi realizzarli. Quindi, ad esempio, per gli accelerometri a 3 assi A e B, + Ax mappa a -By (su-giù), + Az mappa a -Bx (sinistra-destra) e + Ay mappe a -Bz (fronte-retro) .

Il mio obiettivo iniziale è correlare gli eventi di shock sull'asse verticale, anche se alla fine vorrei a) scoprire automaticamente la mappatura degli assi, b) correlare l'attività sugli assi mappati ec) estrarre differenze di comportamento tra i due accelerometri (come la torsione o flessione).

La natura dei dati delle serie temporali rende numpy.correlate () di Python inutilizzabile. Ho anche esaminato il pacchetto R's Zoo, ma non ho fatto progressi. Ho cercato aiuto in diversi campi dell'analisi del segnale, ma non ho fatto progressi.

Qualcuno ha qualche indizio su cosa posso fare o approcci che dovrei ricercare?

Aggiornamento 28 febbraio 2011: qui sono stati aggiunti alcuni grafici che mostrano esempi di dati.


1
@BobC, forse uno dei moderatori può migrare i tuoi post su questo sito. Sarebbe il più ragionevole. Per quanto riguarda le tue domande tecniche, prima di tutto stai usando la FFT per fare la correlazione? Ciò dovrebbe essere fattibile per 2 milioni di punti dati su un computer decente. Il rapporto segnale-rumore sembra abbastanza alto, quindi dovresti essere in affari. Un taglio rapido e sporco sarebbe quello di riempire i dati mancanti con l'ultimo campione disponibile o con zeri. Il brivido delle differenze nell'intervallo di campionamento potrebbe essere la "caratteristica" più impegnativa dei tuoi dati da affrontare.
cardinale

@cardinal: ho davvero provato un FFT, solo per ottenere la spazzatura di conseguenza. Le caratteristiche "interessanti" facilmente visibili nei dati sono indistinguibili dal rumore nell'FFT. Tuttavia, ho fatto FFT solo sull'intero set di dati: forse un FFT a finestra mobile avrebbe fornito risultati migliori, ma non sono ancora stato in grado di trovare un modo computazionalmente efficiente per implementarlo. Sospetto che una trasformazione di Wavelet possa aiutare, ma non ho familiarità con essa (ma sto lentamente imparando a riguardo).
BobC

1
@BobC, quello che intendevo dire era, hai considerato un'implementazione basata su FFT per il calcolo della correlazione? La convoluzione diretta è , ma un'implementazione basata su FFT ridurrebbe questa , rendendola possibile. Per quanto riguarda lo stesso FFT, con 2 milioni di punti dati, la risoluzione della frequenza sarà molto alta. Qualsiasi scorrimento di campionamento e altre cose è destinato a lavare il segnale in base alla frequenza. Tuttavia, dovresti essere in grado di aggregare più bin per far uscire il segnale dal rumore. Qualcosa come un approccio Welch o forse una tecnica di finestre personalizzate. O ( n registro n )O(n2)O(nlogn)
cardinale

@BobC, dalla parte superiore della mia testa, sembra che una variante di un algoritmo di sovrapposizione e aggiunta o sovrapposizione e salvataggio possa essere utilizzata per eseguire una FFT a finestra scorrevole. Far scorrere i campioni all'interno di una finestra equivale a uno sfasamento, quindi tutto ciò che devi fare è compensare quei campioni che "cadono" dall'estremità sinistra e quelli che "entrano" dall'estremità destra.
cardinale

Ciao, ho una domanda simile. Ho 2 serie temporali, ognuna rappresentata da una matrice con la sua prima colonna corrispondente ai valori e la seconda colonna corrispondente alla differenza temporale (dal valore precedente) Come posso trovare la correlazione tra queste 2 matrici? Ho provato a fare xcorr2 () ma non sembra giusto e fare xcorr probabilmente calcolerebbe la correlazione con solo i valori da considerare, ma voglio anche tenere conto del tempo. Sono davvero confuso qui, sarà un aiuto FFT? Come mi consiglieresti di farlo?

Risposte:


12

La domanda riguarda il calcolo della correlazione tra due serie temporali campionate in modo irregolare (processi stocastici monodimensionali) e l'utilizzo di quello per trovare l'offset temporale in cui sono massimamente correlati (la loro "differenza di fase").

Di solito questo problema non viene affrontato nell'analisi delle serie temporali, poiché si presume che i dati delle serie temporali vengano raccolti sistematicamente (a intervalli regolari di tempo). È piuttosto la provincia della geostatistica , che riguarda le generalizzazioni multidimensionali delle serie temporali. L'archetipo di set di dati geostatistici è costituito da misurazioni di campioni geologici in posizioni irregolarmente distanziate.

Con spaziatura irregolare, le distanze tra le coppie di posizioni variano: non esistono due distanze uguali. La geostatistica lo supera con il variogramma empirico . Questo calcola un valore "tipico" (spesso medio o mediano) di 2/2 - la "semivarianza" - dove indica un valore misurato al punto e la distanza tra e è vincolata a trovarsi in un intervallo chiamato "ritardo". Se assumiamo che il processo sia stazionario e abbia una covarianza, allora l'aspettativa della semivarianza è uguale alla covarianza massima (uguale a per qualsiasi ) meno la covarianza tra(z(p)z(q))2/2z(p)ppqZVar(Z(p))pZ(p) e . Questo binning in ritardo risolve il problema della spaziatura irregolare.Z(q)

Quando una coppia ordinata di misurazioni viene effettuata in ciascun punto, si può allo stesso modo calcolare il cross-variogramma empirico tra le e le e quindi stimare la covarianza in qualsiasi ritardo . Volete la versione monodimensionale del cross-variogramma. I pacchetti R gstat e sgeostat , tra gli altri, stimeranno i cross-variogrammi. Non preoccuparti che i tuoi dati siano monodimensionali; se il software non funziona direttamente con loro, basta introdurre una seconda coordinata costante: ciò li farà apparire bidimensionali.(z(p),w(p))zw

Con due milioni di punti dovresti essere in grado di rilevare piccole deviazioni dalla stazionarietà. È possibile che anche la differenza di fase tra le due serie storiche possa variare nel tempo. Far fronte a ciò calcolando il cross-variogramma separatamente per diverse finestre distanziate nel periodo di tempo.

@cardinal ha già sollevato la maggior parte di questi punti nei commenti. Il principale contributo di questa risposta è di puntare sull'uso di pacchetti di statistiche spaziali per fare il tuo lavoro per te e per usare tecniche di geostatistica per analizzare questi dati. Per quanto riguarda l'efficienza computazionale, si noti che la convoluzione completa (cross-variogramma) non è necessaria: sono necessari solo i suoi valori vicino alla differenza di fase. Questo rende lo sforzo , non , dove è il numero di ritardi da calcolare, quindi potrebbe essere fattibile anche con un software pronto all'uso. In caso contrario, l'algoritmo di convoluzione diretta è facile da implementare.O(nk)O(n2)k


@whuber, buoni commenti e suggerimenti. Se sto leggendo correttamente la domanda, credo che una delle preoccupazioni principali sia l'incertezza sul punto temporale del campionamento. Questo potrebbe essere un po 'diverso dal tipico quadro geostatistico in cui, a mio avviso, la spaziatura è irregolare, ma è ancora ritenuta nota (almeno con elevata precisione). Credo un modello di massima è, se il esimo punto di serie uno è al momento , per fisso allora il esimo punto di serie 2 è a dove è probabilmente nell'ordine di pochi millisecondi e è probabilmente minuscolo. t n = n t t n τ n = t n + α + β n α βntn=nttnτn=tn+α+βnαβ
cardinale

@ Cardinale Non ho capito dalla domanda. Non riesco a pensare a un modo per stimare che non sarebbe abbastanza intensivo dal punto di vista computazionale. Forse suddividendo le serie storiche in gruppi in cui l'effetto netto di è trascurabile? βββ
whuber

@whuber, @BobC, sto facendo un'ipotesi semi-educata basata sull'esperienza passata che affronta problemi e problemi simili. La maggior parte degli approcci che ho visto sono intensivi dal punto di vista computazionale e non riescono a stupire. Un tentativo potrebbe essere attraverso qualcosa come la distorsione temporale dinamica o ciò che Ramsay e Silverman chiamano registrazione curva . Non è chiaro se uno di questi sarebbe possibile su questo set di dati di dimensioni.
cardinale

Mi ci vorrà un po 'per farmi coinvolgere dal cervello. Inizierò con gli esempi nei pacchetti R che hai citato.
BobC

@BobC, il modello approssimativo che ho dato per l'asincronicità dei tempi è simile a quello che hai? Sto pensando che sia "offset iniziale casuale" + "errore lineare" dove quest'ultimo è dovuto a una piccola differenza costante nell'intervallo di campionamento tra i due dispositivi. Poi c'è qualche piccolo errore casuale aggiuntivo, per esempio dovuto all'interruzione dell'elaborazione di due diversi UC.
cardinale
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.