Thursday 5 October 2017

Moving Media Deviazione Standard Matlab


Ho una serie di dati X, Y e sto cercando di trovare la media mobile. I numeri x dati sono numeri interi da 1 a 100, mentre i dati y sono numeri da 0,01 a 1 e hanno anche un ydev deviazione standard (cui deriva perché l'esperimento viene ripetuto più volte). Sto cercando di trovare la media mobile utilizzando i 20 vicini più prossimi (con Matlab): Il modo in cui sopra deriva la media mobile, ma non so come utilizzare la deviazione standard che ho per ogni punto di dati y perché alcuni punti dati hanno molto deviazioni standard più grandi di altri che significa che non sono affidabili come gli altri (in modo che probabilmente pesano meno). Come posso includere la deviazione standard per ogni punto di dati nel calcolo di cui sopra ha chiesto 5 luglio 15 alle 15:07 Spostamento media o mediana in movimento. Per quanto riguarda la domanda quotHow posso includere la deviazione standard per ogni punto di dati nel calculationquot sopra, dipende da cosa si vuole fare. Si deve prima decidere che (che non è una questione di programmazione). Un suggerimento: can39t si utilizza l'intero insieme di dati per ogni x (anziché solo la deviazione media e standard) e calcolare meanmedian da quel ndash Luis Mendo 5 luglio 15 alle 15.12 LuisMendo ho voluto fare la media mobile (ho modificato il codice a riflettere sul fatto che). Il set di dati è un esperimento serie storica ed è stato ripetuto più volte (che è come ho deviazioni standard per ogni punto). Voglio usare la deviazione standard per ogni punto della mia calcolo della media mobile perché voglio i punti con più piccola deviazione standard a pesare più dei punti con grande deviazione standard. ndash AL B 5 luglio 15 alle 16:50 Diciamo che avete un vettore a. Poi un altro modo di scrivere significa (a) come media ponderata è AWTS. dove wts quelli (1, Numel (a)) Numel (a). Nel tuo caso, si ha un y (ind1 (i): IND2 (i)). Sembra che quello che stai voler utilizzare è una media mobile ponderata, dove i pesi WTS non sono più identici, ma sono scelti utilizzando la deviazione standard dei valori corrispondenti. Supponendo che il vettore SD tiene le deviazioni standard, ecco un modo per farlo: Qui, i valori con più piccole deviazioni standard contribuiranno con peso maggiore. Un'idea alternativa è quella di calcolare la media mobile semplice sia y e la vostra deviazioni standard SD. e poi tracciare loro affiancati. Questo ha il vantaggio di essere più statisticamente interpretabile che la scelta di pesi in funzione dello standard deviations. Below è possibile vedere il mio metodo per calcolare C Bande di Bollinger per ogni punto (media mobile, fino band, giù di banda). Come si può vedere questo metodo utilizza 2 per cicli per calcolare la deviazione standard in movimento utilizzando la media mobile. È usato per contenere un loop aggiuntivo per calcolare la media mobile degli ultimi n periodi. Questo ho potuto rimuovere aggiungendo il nuovo valore punto totalaverage all'inizio del ciclo e rimuovere i - n valore del punto di fine ciclo. La mia domanda ora è fondamentalmente: Posso rimuovere il ciclo interno rimanente in modo simile sono riuscito con la media mobile chiesto 31 Gennaio 13 ad 21:45 La risposta è sì, è possibile. A metà degli anni '80 ho sviluppato solo come ad un algoritmo (probabilmente non originale) in FORTRAN per un monitoraggio dei processi e controllo delle applicazioni. Purtroppo, che è stato più di 25 anni fa e non ricordo le formule esatte, ma la tecnica era un'estensione di quello per le medie mobili, con il secondo i calcoli di ordine invece di quelli appena lineari. Dopo aver guardato il codice un po ', io penso che posso suss fuori come ho fatto allora. Si noti come il vostro ciclo interno sta facendo la somma dei quadrati: più o meno allo stesso modo in cui il vostro media deve avere in origine aveva una somma di valori Le uniche due differenze sono all'ordine (il suo potere 2 invece di 1) e che si sta sottraendo alla media ogni valore prima di quadrato esso. Ora che potrebbe sembrare inseparabili, ma in realtà possono essere separati: Ora il primo termine è solo una somma di quadrati, di gestire che nello stesso modo in cui si fa la somma dei valori per la media. L'ultimo termine (K2N) sono solo i tempi media quadratica del periodo. Dal momento che si divide il risultato per il periodo in ogni caso, si può semplicemente aggiungere il nuovo media al quadrato senza il ciclo supplementare. Infine, nel secondo termine (SUM (-2vi) k), poiché SUM (vi) totale kn si può quindi cambiare in questo: o solo -2k2n. che è -2 volte la media al quadrato, una volta che il periodo (n) è suddivisa di nuovo. Così la formula finale combinato è: (assicurati di controllare la validità di questo, dal momento che sto derivandola fuori dalla parte superiore della mia testa) e incorporando nel codice dovrebbe essere simile a questo: Il problema con approcci che calcolano la somma dei quadrati è che essa e il quadrato delle somme può diventare piuttosto grande, e il calcolo della loro differenza può introdurre un grande errore. così lascia pensare a qualcosa di meglio. Per il motivo per cui questo è necessario, vedere l'articolo di Wikipedia su algoritmi per il calcolo della varianza e John Cook sulla spiegazione teorica per i risultati numerici) In primo luogo, invece di calcolare il stdDev lascia concentrarsi sulla varianza. Una volta che abbiamo la varianza, stdDev è proprio la radice quadrata della varianza. Supponiamo i dati sono in un array chiamato x rotolamento una finestra n-sized da uno può essere pensato come la rimozione del valore di x0 e aggiungendo il valore di xn. Consente denotano le medie di x0..xn-1 e x1..xn da e rispettivamente. La differenza tra le varianze di x0..xn-1 e x1..xn è, dopo annullando alcuni termini e l'applicazione di (ab) (ab) (ab): Quindi la varianza è turbato da qualcosa che doesnt richiedono di mantenere la somma dei quadrati, che è meglio per la precisione numerica. È possibile calcolare la media e la varianza una volta nel principio con un algoritmo corretto (metodo Welfords). Dopo di che, ogni volta che si deve sostituire un valore nella finestra x0 da un altro xn si aggiorna la media e la varianza in questo modo: Grazie per questo. Ho usato come base di una implementazione in C per il CLR. Ho scoperto che, in pratica, si può aggiornare in modo tale che newVar è un piccolo numero negativo, e il sqrt fallisce. Ho introdotto un if per limitare il valore zero per questo caso. Non un'idea, ma stabile. Ciò si è verificato quando ogni valore nella mia finestra aveva lo stesso valore (io ho usato una dimensione della finestra di 20 e il valore in questione era 0,5, nel caso in cui qualcuno vuole provare a riprodurre questo.) Ndash Drew Noakes 26 luglio 13 alle 15:25 Ive Usato commons-matematica (e contribuito a quella biblioteca) per qualcosa di molto simile a questo. La sua open-source, porting di C dovrebbe essere facile come comprato al supermercato torta (avete provato a fare una torta da zero). Check it out: commons. apache. orgmathapi-3.1.1index. html. Hanno una classe standarddeviation. Andare in città risposto 31 Gennaio 21:48 13 ad You39re ammessi Mi dispiace didn39t ho la risposta you39re cercando. Io sicuramente didn39t intendo suggerire porting l'intera libreria solo il codice necessario minima, che dovrebbe essere a poche centinaia di righe o giù di lì. Si noti che non ho idea di che cosa restrizioni di copyright legali Apache ha su quel codice, in modo you39d deve verificare che fuori. Nel caso in cui si perseguono esso, ecco il link. In modo che Varianza FastMath ndash Jason 31 gennaio 13 alle 22:36 Informazioni Principali è già stato dato sopra --- ma forse questo è ancora di interesse generale. Una libreria Java molto piccolo per calcolare lo spostamento media e deviazione standard è disponibile qui: githubtools4jmeanvar L'implementazione è basata su una variante del metodo di Welfords di cui sopra. Metodi per rimuovere e sostituire i valori sono stati ricavati che può essere utilizzato per lo spostamento del valore windows. What sarebbe il modo ideale per trovare la media e la deviazione standard di un segnale per una applicazione reale tempo. Id come poter attivare un controllore quando un segnale era più di 3 deviazioni standard fuori della media per un certo periodo di tempo. Im assumendo un DSP dedicato farebbe questo abbastanza facilmente, ma non vi è alcun collegamento che non può richiedere qualcosa di così complicato chiesto 3 dicembre 11 a 05:11 C'è una falla in Jason Rs risposta, di cui si parla in Knuths Art of Computer Programming vol. 2. Il problema nasce se si dispone di una deviazione standard che è una piccola frazione della media: il calcolo di E (x2) - (E (x) 2) soffre di una grave sensibilità alla virgola mobile errori di arrotondamento. Si può anche provare da soli in uno script Python: ricevo -128,0 come una risposta, che è neanche chiaro computazionalmente valida, dal momento che la matematica prevede che il risultato dovrebbe essere non negativo. Knuth cita un approccio (mi ricordo il nome dell'inventore) per il calcolo medio di esecuzione e la deviazione standard che meno così: e poi dopo ogni passaggio, il valore di m è la media e la deviazione standard può essere calcolata come sqrt (Sn) o sqrt (Sn-1) a seconda di quale è la tua definizione preferita di deviazione standard. L'equazione che scrivo sopra è leggermente diverso da quello in Knuth, ma il suo equivalente computazionalmente. Quando ho qualche minuto, codice Ill la formula di cui sopra in Python e mostrare che il youll ottenere una risposta non negativa (che si spera è vicino al valore corretto). Update: qui si tratta. Youll nota che theres ancora qualche errore di arrotondamento, ma la sua non è male, considerando naivestats pukes solo. edit: appena notato Belisariuss commento citando Wikipedia, che fa parlare l'algoritmo Knuth. Quale sarebbe il modo ideale per trovare la media e la deviazione standard di un segnale per una applicazione reale tempo. Id come poter attivare un controllore quando un segnale era più di 3 deviazioni standard fuori della media per un certo periodo di tempo. L'approccio giusto in situazioni come questa è di solito per calcolare una deviazione media e standard di esecuzione in modo esponenziale ponderata. Nella media ponderata esponenzialmente, le stime della media e la varianza sono polarizzate verso il più recente campione che dà si stima della media e la varianza negli ultimi secondi tau. che è probabilmente quello che si vuole, piuttosto che la media aritmetica solito su tutti i campioni mai visto. Nel dominio della frequenza, una media corrente ponderata esponenzialmente è semplicemente un vero polo. È semplice da implementare nel dominio del tempo. implementazione dominio del tempo Lasciate media e meansq essere le attuali stime della media e medio della piazza del segnale. In ogni ciclo, aggiornare queste stime con il nuovo campione x: Qui 0 lt tl 1 è una costante che determina la lunghezza effettiva della media corrente. Come scegliere un è descritto di seguito in analisi. Ciò che è sopra espresso come un programma imperativo può anche essere descritta come un diagramma di flusso di segnale: L'algoritmo precedente calcola yi un xi (1-a) y dove xi è l'ingresso al campione i, e yi è l'uscita (cioè stima la media). Questo è un semplice, unipolare filtro IIR. Prendendo la trasformata Z, troviamo il frac funzione di trasferimento H (z). Condensazione i filtri IIR nelle proprie blocchi, lo schema appare come segue: Per andare al dominio continuo, facciamo la sostituzione z e dove T è il tempo di campionamento e FS 1T è la frequenza di campionamento. Soluzione 1- (1-a) e 0, troviamo che il sistema continua ha un polo a log s frac (1-a). Procedimento Ive usato prima in un'applicazione di elaborazione incorporato è di mantenere accumulatori della somma e somma dei quadrati del segnale di interesse: Inoltre, tenere traccia del tempo istantanea corrente i nelle equazioni sopra (cioè, annotare il numero di campioni che youve aggiunte accumulatori). Poi, la media campionaria e la deviazione standard in fase I sono: sigma2 operatorname (X2) - (operatorname (X)) 2 Ive usato questi con successo in passato (anche se ero preoccupato solo con stima della varianza, non deviazione standard), anche se si c'è bisogno di essere attenti ai tipi numerici si usano per tenere gli accumulatori, se si sta andando ad essere sommando per un lungo periodo di tempo non volete troppo pieno. Edit: Oltre al commento sopra overflow, va osservato che questo non è un algoritmo numericamente affidabile quando implementato in virgola mobile, causando potenzialmente grandi errori nelle statistiche stimate. Guardate Jason Ss risposta per un approccio migliore in questo caso. rispose 6 dicembre 11 alle 13:34 Sembra che ci siano un paio di errori di battitura qui. Perché è la media che viene sottratto sotto il segno di radice quadrata per Sigma dovrebbe essere mu2 per abbinare la visualizzazione equazione sigma2 E (X2) - (E (X)) 2, non Inoltre, anche se mi won39t vote down questa risposta, sono d'accordo con Jason che ci possono essere problemi numerici in questo approccio. ndash Dilip Sarwate 20 Jan 12 in 01:33 Simile alla risposta preferito sopra (Jason S.), e anche derivato dalla formula tratto da Knut (Vol.2, p 232), si può anche derivare una formula per sostituire un valore , cioè rimuovere e aggiungere un valore in un solo passaggio. Secondo i miei test, sostituire offre una migliore precisione rispetto alla versione removeadd in due fasi. Il codice qui sotto è in Java, media e s ottenere aggiornato (variabili membro globali), uguale a M e S sopra in Jasons posta. Il conteggio valore si riferisce alla dimensione della finestra n.

No comments:

Post a Comment