Valutazione dei picchi nelle serie temporali dei dati del segnale cellulare


9

Sto misurando l'esistenza della risposta nelle misurazioni del segnale cellulare. Quello che ho fatto è stato prima applicare un algoritmo di smoothing (Hanning) alle serie temporali di dati, quindi rilevare i picchi. Quello che ottengo è questo: serie temporali di risposta del segnale cellulare

Se volessi rendere il rilevamento della risposta un po 'più obiettivo di "sì, vedi un aumento nel calo continuo", quale sarebbe l'approccio migliore? È per ottenere la distanza dei picchi da una linea di base determinata dalla regressione lineare?

(Sono un programmatore Python e non ho quasi nessuna comprensione delle statistiche)

Grazie


4
Non credo che esista "l'approccio migliore". Esistono molti modi per analizzare o segnalare i picchi nelle serie temporali. La tua domanda non fornisce alcun indizio per capire cosa potresti desiderare. Forse ti consulterai con articoli nel tuo campo, per suggerimenti o benchmark.
ttnphns,

Non so quali informazioni fornire per darti gli indizi. Fondamentalmente hai un grafico che ha una tendenza al ribasso (ottieni una risposta minore da una cella col passare del tempo) e da qualche parte nel mezzo potresti vedere un aumento dell'output. Questo è tutto. Pensi che spetti a me dire soggettivamente che dire aumento del 10% della risposta = cosa sto cercando?
Radek,

1
Supponendo che a volte vedi il comportamento come mostrato, e talvolta solo una diminuzione continua (approssimativa), avrai molte più possibilità di ottenere una risposta ragionevole qui se sostituisci un grafico grande con 6-10 piccoli, dove la metà ha questo aumento e l'altra metà no.
AVB,

Può avere più di un massimo locale (bump)?
Emre,

1
perché non pubblichi i tuoi dati e io mi prenderò una briga. Il filtro presuntivo che tu e altri avete suggerito hanno effetti collaterali. Se vuoi un modo oggettivo di gestirlo, potrei essere in grado di darti alcuni suggerimenti. Ma tutto inizia con i dati non con la presunzione!
IrishStat,

Risposte:


2

Quindi sembra dal tuo commento del 25 ottobre che sei interessato a trovare e caratterizzare algoritmicamente due caratteristiche principali: il decadimento della risposta iniziale seguito da un ciclo di risposta aumentata e decadimento successivo. Presumo che i dati vengano osservati a intervalli di tempo discreti.

Ecco cosa vorrei provare:

  1. Usa una routine come numpy.ma.polyfit per inserire, per esempio, un polinomio di 4 ° grado tra i tuoi dati. Ciò dovrebbe tenere conto della caduta iniziale seguita dalla salita / discesa, ma appianare le numerose ma minori fluttuazioni. Speriamo che questo grado di polinomio sia abbastanza flessibile da adattarsi bene ad altre serie simili. L'obiettivo principale che penso sarebbe quello di ottenere una funzione che spieghi il modello principale che stai cercando.
  2. Utilizzare le routine Python per calcolare la derivata della funzione polinomiale adatta ai dati. Le routine di esempio sono scipy.misc.derivative e numpy.diff. Stai cercando i valori temporali in cui la prima derivata è zero, indicando un possibile minimo o massimo locale della funzione. Un secondo test derivativo potrebbe essere utilizzato per confermare quale punto corrisponde a un minimo o massimo. Presumibilmente avrai tre di questi punti se il grafico che hai mostrato è rappresentativo. Si noti che il progetto Sage potrebbe essere molto prezioso qui.
  3. A questo punto avrai i valori temporali associati

    un. l'inizio del decadimento iniziale

    b. l'inizio della ripresa

    c. l'inizio del secondo decadimento

È quindi possibile fare ciò che si desidera analiticamente per valutare le modifiche.

Potrebbe essere meglio lasciare che i dati parlino da soli: attraverso più serie, quando si applica questo metodo, qual è la variazione di dimensione tipica durante la ripresa, quando si verifica in genere nel periodo di decadimento e quanto dura? E come appare la distribuzione di questa ripresa in termini di dove, quanto è grande e per quanto tempo? Conoscendo queste statistiche, è possibile caratterizzare meglio una particolare ripresa come all'interno della tolleranza, rispetto a dove nel tempo si verifica, nonché dimensioni e durata. La chiave della mia comprensione sarebbe quella di identificare facilmente dove si stanno verificando questi cambiamenti. Il resto di ciò che ho descritto è semplice da calcolare.


4
I polinomi non funzioneranno con questi dati a meno che non si raggiunga un livello così elevato da minacciare di introdurre picchi spuri.
whuber

Forse dovrei chiarire la mia risposta che deve ancora applicare la funzione Hanning e quindi eseguire l'adattamento polinomiale. Potrebbe essere necessario modificare la finestra di Hanning per ottenere una funzione più fluida. O stai dicendo che un polinomio di basso grado non funzionerà per i dati uniformi?
Josh Hemann,

5
Un polinomio di basso grado sicuramente non funzionerà, Josh. Avete bisogno di una più agevole locale - pensare ad un kernel lisci o certi tipi di spline - ed è necessario non essere un polinomio, che ha terribili proprietà. (I polinomi possono introdurre picchi spuri e enormi tra quelle che altrimenti sembrano serie di dati ben
educate

f(x)=f(x0)+(xx0)f(x0)+(xx0)22!f(x0)+...

3
Grazie per aver chiarito questo punto, @Sameer. Concordo sul fatto che un adattamento polinomiale locale di basso grado potrebbe essere efficace e non intendevo implicare l'opposto nel mio commento precedente (che intendeva che il "polinomio" fosse inteso come un adattamento globale ). Quanto al fatto che sia "il migliore", però, sono d'accordo con un commento di ttnphns alla domanda originale: tutto dipende. Mi aspetterei che gli accoppiamenti quadratici locali con una fitta serie di dati avvicinino da vicino i frammenti del kernel gaussiano, il che ci dà un approccio. Un altro senso di "migliore" è il BLUP del kriging, che può essere simile a una spline.
whuber

1

Ecco alcune idee, ma ho la testa alta che potrebbe funzionare ...

Derivati: se prendi l'array e sottrai gli elementi l'uno dall'altro per ottenere un array di uno in meno punti, ma questa è la prima derivata. Se ora lo appianate e cercate il cambio di segno, ciò potrebbe rilevare l'urto.

Medie mobili: forse l'uso di 2 medie mobili ritardate (esponenziali o con finestra) potrebbe rivelare il grande dosso ignorando quello piccolo. Fondamentalmente, la larghezza della media mobile della finestra più piccola deve essere maggiore della larghezza dei dossi che si desidera ignorare. L'EMA più ampio deve essere più largo ma non troppo largo per rilevare l'urto.

Cerchi quando attraversano e sottraggono il ritardo (finestra / 2) e questa è una stima di dove si trova il tuo dosso. http://www.stockopedia.com/content/trading-the-golden-cross-does-it-really-work-69694/

Modelli lineari: esegui una serie di modelli lineari di larghezza sufficiente con una larghezza di alcuni piccoli dossi, diciamo 100 punti. Ora passa in rassegna il set di dati generando regressioni lineari sulla variabile X. Basta guardare il coefficiente di X e vedere dove si è verificato il grande cambio di segno. Questo è un grosso bernoccolo.

Quanto sopra è solo congettura è dalla mia parte e probabilmente ci sono modi migliori per farlo.

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.