C'è un modo per automatizzare/scriptare il processo Winsor di filtraggio anomalo?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />| C'è un modo per automatizzare/scriptare il processo Winsor di filtraggio anomalo? Ho trovato i due componenti aggiuntivi di Brady, ma quelli non escludono le righe anomale, riguardano solo il miglioramento della funzione Riepilogo. |
Addin di imputazione
Componente aggiuntivo Riepilogo esteso
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Grazie, ha molto senso. Immagino di aver frainteso la parte nel brief dell'AMC che si riferisce a Huber... Pensavo intendessero la stima M di Huber, ma sono d'accordo che è solo iterativamente windsorizing.
Grazie per quel collegamento. È utile.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Probabilmente varrebbe la pena dedicare del tempo a leggere alcuni articoli wiki.Winsorization è solo un processo, simile al taglio.
Wikipedia:
Winsorising o Winsorisation è la trasformazione delle statistiche limitando i valori estremi nei dati statistici per ridurre l'effetto di eventuali valori anomali spuri.
Abbiamo solo bisogno di un percentile, qui abbiamo usato 1.5sigma.
Nell'articolo a cui si fa riferimento, usano la mediana per il winsorize, quindi usano i dati del winsorized per prevedere meglio il centro e lo spread.Quindi vincono di nuovo per prevedere ancora meglio il centro e lo spread.Qui winsorize per ottenere una media accurata robusta/std dev.
La costante di sintonia viene utilizzata nelle stime M di Huber.Questo processo è l'opposto, invece si utilizzano le stime M per ottenere una media/std dev robusta e accurata per poi winsorizzare i dati.Quando K si avvicina all'infinito, la media della stima M = media.Quando K si avvicina a 0, la media della stima M = mediana.
Puoi vedere la pagina 16 di questa presentazione http://www.bauer.uh.edu/rsusmel/phd/ec1-25.pdf
Quindi, per rispondere alla tua domanda, la costante di accordatura K non è usata b/c non abbiamo usato le stime M di Huber.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Per l'esempio nel brief tecnico AMC su cui si basa il codice in questo thread, qual è la costante di sintonia k?Ho visto le equazioni teoriche relative alla costante di accordatura, ma non ho visto nulla che descriva il windsorizing +/- n*sigma e sigma_new = x * stddev(data), dove (immagino che) n e x sono legati alla costante di sintonia.
Grazie,
Mike
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Essenzialmente quello che stiamo facendo è tenere conto delle sovrastime della mediana/MAD.Nel nostro set di dati di esempio, l'utilizzo della mediana/MAD nel processo di winzorizzazione regola troppo il punto anomalo.
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
stime mediane e folli:
media = 5,2; e sigma = 1,05;
l'utilizzo di queste stime modifica i dati in:
x_firstpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
Questi dati ci danno una migliore approssimazione della nostra media e sigma:
media aggiustata = 5,34; sigma = 1,04;
Se usiamo le stime migliori per winzorizzare il set di dati, porterebbe a:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.905 ] ;
Tuttavia, se usiamo x invece di x_orig, il codice non troverà il punto anomalo 9.9 per regolarlo di conseguenza, b/c 6.775 non è un valore anomalo quando la media = 5.34 e sigma = 1.04.
così:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
media e sigma saranno uguali:
media aggiustata = 5,34; sigma = 1,04;
sigma - sigma_old = 0
e la nostra convergenza si crederà completata.
tl:dr - Se stai cercando di trovare il punto zero ottimale, il tuo codice deve essere abbastanza robusto da funzionare in entrambe le direzioni.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Non capisco esattamente x=x_orig.
Sembra che questo creerebbe un ciclo infinito; ma funziona quindi non posso discuterne.
Grazie!
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Questo codice ha fatto per me!!Grazie!!!
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Grazie!
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Si si.Vorremmo eseguire il processo di winsorizzazione sul set di dati originale con la modifica della media e del sigma adattati.L'aggiunta di x=xorig è corretta.Come ho detto, l'ho codificato velocemente.
Per quanto riguarda l'abbinamento della carta:
Poiché il set di dati ha solo 1 grado di libertà (quale valore approssimare il valore anomalo) sia sigma che media sono fissi in base alla winsorizzazione.Dato questo fatto non c'è modo di ottenere una media di 5,36 AND sigma di 1,15. 5,386 e 1,145 arrotondati alla seconda cifra darebbero 5,39 e 1,15. Così, m La mia ipotesi migliore è che si tratti di un semplice errore di battitura e non di un matematico errore.Data la correttezza del documento fino a quel momento, e proveniente dal Comitato per i metodi analitici della Royal Society of Chemistry, concederò loro il beneficio del dubbio.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Questo è essenzialmente quello che avevo, anche se avevo tutto in formato array in modo da poter ispezionare i dati per ogni iterazione. Il tuo è più pulito, quindi spero non ti dispiaccia se l'ho modificato un po'. Ho sostituito il ciclo for() con la funzione Loc in quanto potrebbe essere più efficiente nel caso in cui qualcun altro lo utilizzi per set di dati di grandi dimensioni. (Disclaimer, ho usato questa funzione solo una o due volte... spero sia la scelta giusta.)
Quando ho eseguito la tua funzione e la mia, ho scoperto che convergeva in 1 iterazione con una media di 5,339 e un sigma di 1,044. Il documento sembra indicare che ci vorranno diverse iterazioni. Pensavo intendessero anche per questo set di dati, ma forse stavano generalizzando. Continuano dicendo che la media stimata di Huber è 5,36 e il sigma è 1,15. Non sono stato in grado di riprodurre quella media stimata, ma quando ho sostituito i dati "x" con x_orig (dati originali) in ogni iterazione, ho ottenuto una media di 5,386 e sigma di 1,1459. Puoi vedere la riga nel codice qui sotto per abilitare / disabilitare questo. Questo non sembra davvero il modo corretto di iterare qualcosa, ma non sono davvero sicuro di dove ho sbagliato nel riuscire a calcolarlo. Perdona gli errori delle cifre sig, ma volevo mostrare di più sui contenuti delle variabili qui.
Dal giornale:

i nomi predefiniti sono qui ( 1 ) ;
pulisci il registro () ;
//Insieme di dati su carta
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
X = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
// Determina mediana e sigma robusto (MAD)
Significare = Quantile ( .5 , X ) ;
si = Addominali ( X - Significare ) ;
PAZZO = Quantile ( .5 , si ) ;
sigma = PAZZO * 1.5 ;
sigmaold = 0 ;
//Convergere
Mentre ( Addominali ( sigma - sigmaold ) > 2e-16 ,
//x = x_orig; // prova ad attivarlo / disattivarlo
X [ Loc ( X > ( Significare + 1.5 * sigma ))] = Significare + 1.5 * sigma ;
X [ Loc ( X < ( Significare - 1.5 * sigma ))] = Significare - 1.5 * sigma ;
meanold = Significare ;
sigmaold = sigma ;
Significare = Significare ( X ) ;
sigma = 1.134 * Sviluppo standard ( X ) ;
spettacolo ( Significare , sigma ) ;
) ;
Grazie,
Mike
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Campi : per rispondere alla tua domanda originale: Sì, esiste un modo per automatizzare il filtraggio dei valori anomali.In effetti, ci sono un numero molto grande (se non infinito) di modi.
IL msharp script (media dei dati originali di 5,785 con JMP Robust Mean/Huber Center di 5,735) produce una media winsorizzata di 5,339. Se vuoi davvero scendere nella tana del coniglio, un 12A One-Step Hampel W-Estimator (una media robusta raccomandata da Andrews, DF, et. al (1972); Stime affidabili della posizione: indagine e progressi ; Princeton University Press) rende 5.256 sugli stessi dati.
È preoccupante che tutte queste misure di localizzazione siano così diverse sugli stessi dati?Non proprio.Come disse San Gregorio il Taumaturgo: "Ciò che è diverso non è lo stesso".I ricercatori premurosi non useranno la media senza almeno una qualche forma di ragionevole procedura di rifiuto.Sarebbe fantastico se questa procedura ragionevole fosse facilmente implementata in una funzione JMP che potrebbe essere chiamata da uno script, ma senza che questa sia un'opzione, lo script Winsorizing di msharp sarebbe un'ottima alternativa, purché identifichi il metodo utilizzato e tenga conto anche dei precedenti avvertimenti di "cattivo gusto e cattiva pratica".
Buona giornata!
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Ecco il mio codice rapido che segue esattamente la carta:
//Insieme di dati su carta
x = [4.5,4.9,5.6,4.2,6.2,5.2,9.9];
// Determina mediana e sigma robusto (MAD)
media = quantile(.5,x);
y = abs(x - media);
MAD = quantile(.5,y);
sigma = MAD*1.5;
sigmaold = 0;
//Convergere
while(abs(sigma - sigmaold) > 2e-16,
for(i=1,i<=nrighe(x),i++,
se (x
X = media-1,5*sigma
);
se (x >media+1,5*sigma,
X = media+1,5*sigma
);
);
meanold = medio;
sigmaold = sigma;
media = media(x);
sigma = 1.134*dev.std(x);
);
//Valutare
stampa(x);
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Ho seguito il metodo Huber descritto nel documento AMC a cui msharp link.Lo scripting non è stato poi così male, la parte difficile è sapere se ho interpretato correttamente l'algoritmo.Sembrerebbe che mentre eseguo l'iterazione (diciamo N volte) e aggiorno l'array di dati con un nuovo valore mean-hat +/- 1,5 x sigma-hat, che per l'i-esima iterazione userei l'array di dati da i-1 ma questo non funziona per me. Ottengo risultati migliori aggiornando sempre i dati originali (i=0) mentre utilizzo mean-hat e sigma-hat aggiornati.Risultati migliori ma sembra sbagliato. Qualcuno ha esperienza nell'implementazione di questo algoritmo?
Per inciso, secondo questa pagina ( Il rapporto sulla distribuzione ), la robusta media/deviazione standard di JMP nella piattaforma di distribuzione utilizza la stima M di Huber, ma non sono sicuro di come stiano windsorizzando. Il mio script produce risultati simili in alcuni casi e non così simili in altri. Ma come ho detto sopra non sono sicuro se lo sto facendo correttamente.
Grazie,
Mike
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?Esistono molti modi per calcolare la media robusta e la deviazione standard robusta.L'articolo a cui faccio riferimento mostra come calcolare la mediana (per definizione è una media robusta) e la MAD (deviazione standard robusta).Questi sono i più basilari.Tuttavia, qualsiasi metrica che calcola il centro e lo spread ed è resistente al cambiamento a causa di dati anomali può essere considerata una media robusta o uno std dev robusto e ci sono sicuramente algoritmi più complessi rispetto all'approccio mediano/MAD.
Il motivo per cui ho scelto di condividere quell'articolo è perché mostra le basi del processo Winsorizing utilizzando la mediana/MAD di facile comprensione.Se dovessi programmare il processo da zero, inizierei da qui.
Non sono un programmatore JMP quindi non conosco il metodo effettivo che usano; ma dubito che usino il metodo descritto in quel documento.Quel documento è davvero utile solo per capire le basi.Il documento stesso indica la maggior parte dei difetti, uno che spicca di più per un programmatore è la lenta convergenza.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?A Campi : Ora capisco meglio.Questa non è l'UNICA procedura robusta che non è facilmente scriptabile!Anche le medie robuste e la deviazione standard robusta dalla piattaforma di distribuzione non sono funzioni disponibili per JSL.Si prega di consultare la lista di Natale dell'anno scorso per Babbo Natale...
A msharp : Quando ho chiesto a JMP un riferimento per Robust Mean e Robust Standard Deviation, lo sviluppatore mi ha indirizzato a Huber, PJ(1973); "Regressione robusta: asintotica, congetture e Monte Carlo"; The Annals of Statistics, Vol 1, No. 5, pp799-821, che dettaglia procedure sostanzialmente diverse dal riferimento che hai citato.Peter Huber è un titano di Robust Statistics, e i suoi libri più moderni sull'argomento (Robust Statistics 2004) cantano le lodi delle stime M (che anche l'articolo degli Annals ha dettagliato), quindi non so se JMP stia davvero facendo il Winsorizing fai riferimento.É davvero?
Le stime di Huber M non sembrano troppo divertenti da scrivere da zero.Da qui la richiesta della Lista di Natale.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?In generale, è considerato cattivo gusto e cattiva pratica filtrare i valori anomali senza conoscerne la causa.Anche quando una causa è nota, l'utilizzo di un criterio di filtro che non si applica al set di dati introdurrà ancora più errori rispetto al semplice lasciare i valori anomali nel set di dati.È necessario porre domande importanti, i dati sono simmetrici? distorto? normale? c'è qualche mascheramento?Il tuo set di dati è davvero due diverse distribuzioni?Sarebbe meglio dividerli?È impossibile conoscere veramente i tuoi dati senza guardarli realmente.Automatizzare il filtraggio dei valori anomali porterà a false conclusioni.Una pratica altrettanto brutta del "p-hacking".
Naturalmente, questo non significa che non ci siano motivi per automatizzare un processo.Ad esempio, utilizzando criteri di filtraggio anomali per automatizzare l'aggiornamento dei limiti di controllo su un grafico di controllo in cui i dati vengono visualizzati/monitorati nel corso del tempo.
Se vuoi automatizzarlo, dovrai scrivere lo script.Puoi vedere http://www.rsc.org/images/robust-statistics-technical-brief-6_tcm18-214850.pdf per ulteriori informazioni su ciò che sta effettivamente facendo il metodo Huber.Spero che questo ti aiuti.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?La maggior parte delle azioni in JMP possono essere programmate andando sul triangolo rosso e andando su script > COPIA SCRIPT
In questo modo puoi incollare insieme questi bit di script in un programma automatizzato più grande.
Questo è vero per ogni azione/funzione di JMP, ecc... con l'ECCEZIONE della funzione Robust Outlier Filter in:
COL > UTILITÀ DI MODELLAZIONE > ESPLORA OUTLIER
Voglio automatizzare il filtro Huber con K=3 su un dato insieme di parametri.Lo farò ancora e ancora.
Voglio automatizzarlo per alleggerire il mio carico di lavoro.
Ri: C'è un modo per automatizzare/scrivere il processo Winsor di filtraggio anomalo?La tua domanda mi confonde.I valori anomali Winsorising sono generalmente definiti come l'impostazione dei valori estremi su un percentile specificato, senza escluderli.È analogo al clipping nell'elaborazione del segnale.L'esclusione delle righe anomale generalmente non è Winsorising.
Detto questo, qualsiasi approccio algoritmico che il tuo cuore desidera può essere programmato.Se scrivi uno script per farlo, usa le matrici.Funzionano molto più velocemente, specialmente con set di dati di grandi dimensioni.