Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />| Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten? Ich habe die beiden Add-Ins von Brady gefunden, aber diese schließen die Ausreißerzeilen nicht aus, sie beziehen sich nur auf die Verbesserung der Zusammenfassungsfunktion. |
Imputations-Add-In
Erweitertes Zusammenfassungs-Add-In
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Danke, das macht sehr viel Sinn. Ich glaube, ich habe den Teil im AMC-Brief falsch verstanden, der sich auf Huber bezieht ... Ich dachte, sie meinten Huber M-Schätzung, aber ich stimme zu, dass es sich nur um iteratives Windsorisieren handelt.
Danke für diesen Link. Es ist hilfreich.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Es wäre wahrscheinlich Ihre Zeit wert, einige Wiki-Artikel zu lesen.Die Winsorisierung ist nur ein Prozess, ähnlich dem Trimmen.
Wikipedia:
Winsorising oder Winsorisierung ist die Transformation von Statistiken durch Begrenzung von Extremwerten in den statistischen Daten, um den Effekt von möglicherweise unechten Ausreißern zu reduzieren.
Wir brauchen nur ein Perzentil, hier haben wir 1,5 Sigma verwendet.
In dem Artikel, auf den verwiesen wird, verwenden sie den Median zum Winsorisieren und dann die Winsorisierten Daten, um das Zentrum und die Streuung besser vorherzusagen.Sie gewinnen dann erneut, um das Zentrum und die Ausbreitung noch besser vorherzusagen.Hier gewinnen wir, um einen robusten, genauen Mittelwert/Standardabweichung zu erhalten.
Die Abstimmkonstante wird in Hubers M-Schätzungen verwendet.Dieser Prozess ist das Gegenteil, stattdessen verwenden Sie M-Schätzungen, um einen robusten genauen Mittelwert/Standardabweichung zu erhalten, um dann die Daten zu winsorisieren.Wenn K gegen unendlich geht, ist die M-Schätzung Mittelwert = Mittelwert.Wenn sich K 0 nähert, ist der Mittelwert der M-Schätzung = Median.
Sie können Seite 16 dieser Präsentation sehen http://www.bauer.uh.edu/rsusmel/phd/ec1-25.pdf
Um Ihre Frage zu beantworten, wird die Abstimmkonstante K nicht verwendet, weil wir Hubers M-Schätzungen nicht verwendet haben.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Was ist für das Beispiel im AMC Tech Brief, auf dem der Code in diesem Thread basiert, die Tuning-Konstante k?Ich habe die theoretischen Gleichungen gesehen, die sich auf die Stimmkonstante beziehen, aber ich habe nichts gesehen, was das Windsorisieren von +/- n*sigma und sigma_new = x * stddev(data) beschreibt, wobei (ich würde vermuten, dass) n und x beziehen sich auf die Stimmkonstante.
Danke,
Mike
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Im Wesentlichen berücksichtigen wir Überschätzungen des Median/MAD.In unserem Beispieldatensatz passt die Verwendung des Median/MAD im Winzorisierungsprozess den Ausreißerpunkt zu stark an.
x_orig = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 9.9 ] ;
Median- und Mad-Schätzungen:
Mittelwert = 5,2; und Sigma = 1,05;
Die Verwendung dieser Schätzungen ändert die Daten zu:
x_firstpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
Diese Daten geben uns eine bessere Annäherung an unseren Mittelwert und Sigma:
bereinigter Mittelwert = 5,34; Sigma = 1,04;
Wenn wir die besseren Schätzungen verwenden, um den Datensatz zu gewinnen, würde dies zu Folgendem führen:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.905 ] ;
Wenn wir jedoch x anstelle von x_orig verwenden, findet der Code den Ausreißerpunkt 9,9 nicht, um ihn entsprechend anzupassen, b/c 6,775 ist kein Ausreißer, wenn der Mittelwert = 5,34 und Sigma = 1,04 ist.
daher:
x_secondpass = [ 4.5 , 4.9 , 5.6 , 4.2 , 6.2 , 5.2 , 6.775 ] ;
Mittelwert und Sigma sind gleich:
bereinigter Mittelwert = 5,34; Sigma = 1,04;
sigma - sigma_alt = 0
und unsere Konvergenz wird glauben, dass sie abgeschlossen ist.
tl:dr - Wenn Sie versuchen, den optimalen Nullpunkt zu finden, muss Ihr Code robust genug sein, um in beide Richtungen ausgeführt zu werden.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Ich verstehe das x=x_orig nicht genau.
Es scheint, als würde dies eine Endlosschleife erzeugen; aber es funktioniert, also kann ich dem nicht widersprechen.
Danke!
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Dieser Code hat es für mich getan !!Danke!!!
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Danke!
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Ja ja.Wir möchten den Winsorisierungsprozess auf dem ursprünglichen Datensatz mit dem angepassten Mittelwert und der Sigma-Änderung ausführen.Das Hinzufügen von x=xorig ist korrekt.Wie gesagt, ich habe es schnell codiert.
Was das Abgleichen des Papiers angeht:
Da der Datensatz nur 1 Freiheitsgrad hat (welcher Wert dem Ausreißer angenähert werden soll), werden sowohl Sigma als auch Mittelwert basierend auf der Winsorisierung festgelegt.Angesichts dieser Tatsache gibt es keine Möglichkeit, einen Mittelwert von 5,36 UND ein Sigma von 1,15 zu erhalten. 5,386 und 1,145 auf die zweite Stelle gerundet würden 5,39 und 1,15 ergeben. Also m Ich vermute, dass dies ein einfacher Tippfehler ist und kein mathematisch Fehler.In Anbetracht der Korrektheit des Artikels bis zu diesem Punkt, und da er vom Analytical Methods Committee der Royal Society of Chemistry stammt, gebe ich ihnen im Zweifel Recht.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Das war im Wesentlichen das, was ich hatte, obwohl ich alles im Array-Format hatte, damit ich die Daten für jede Iteration überprüfen konnte. Ihre ist sauberer, also hoffe ich, dass es Ihnen nichts ausmacht, dass ich sie ein wenig modifiziert habe. Ich habe die for()-Schleife durch die Loc-Funktion ersetzt, da dies möglicherweise effizienter ist, falls jemand anderes dies für große Datensätze verwendet. (Haftungsausschluss, ich habe diese Funktion nur ein- oder zweimal verwendet ... hoffentlich ist es die richtige Wahl.)
Als ich Ihre und meine Funktion ausführte, stellte ich fest, dass sie in 1 Iteration mit einem Mittelwert von 5,339 und einem Sigma von 1,044 konvergierte. Das Papier scheint darauf hinzudeuten, dass es mehrere Iterationen erfordern würde. Ich dachte, sie meinten sogar diesen Datensatz, aber vielleicht verallgemeinerten sie. Sie sagen weiter, dass der von Huber geschätzte Mittelwert 5,36 und Sigma 1,15 beträgt. Ich konnte diesen geschätzten Mittelwert nicht reproduzieren, aber als ich in jeder Iteration „x“-Daten durch x_orig (Originaldaten) ersetzte, erhielt ich einen Mittelwert von 5,386 und ein Sigma von 1,1459. Sie können die Zeile im folgenden Code sehen, um dies zu aktivieren / deaktivieren. Dies fühlt sich nicht wirklich wie der richtige Weg an, um etwas zu iterieren, aber ich bin mir nicht sicher, wo ich bei der Berechnung einen Fehler gemacht habe. Verzeihen Sie die Sig-Ziffern-Fehler, aber ich wollte hier mehr über den Variableninhalt zeigen.
Aus dem Papier:

Namen standardmäßig hier ( 1 ) ;
Protokoll löschen () ;
//Datensatz in Papier
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 ] ;
// Bestimmen Sie Median und Robust Sigma (MAD)
bedeuten = Quantil ( .5 , X ) ;
j = Abs ( X - bedeuten ) ;
VERRÜCKT = Quantil ( .5 , j ) ;
Sigma = VERRÜCKT * 1.5 ;
Sigmaold = 0 ;
//Konvergieren
Während ( Abs ( Sigma - Sigmaold ) > 2e-16 ,
//x = x_orig; // Versuchen Sie, dies ein- / auszuschalten
X [ Lok ( X > ( bedeuten + 1.5 * Sigma ))] = bedeuten + 1.5 * Sigma ;
X [ Lok ( X < ( bedeuten - 1.5 * Sigma ))] = bedeuten - 1.5 * Sigma ;
gemeinalt = bedeuten ;
Sigmaold = Sigma ;
bedeuten = Bedeuten ( X ) ;
Sigma = 1.134 * Std.-Entw ( X ) ;
zeigen ( bedeuten , Sigma ) ;
) ;
Danke,
Mike
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?CHFFelder : Um Ihre ursprüngliche Frage zu beantworten: Ja, es gibt eine Möglichkeit, die Ausreißerfilterung zu automatisieren.Tatsächlich gibt es eine sehr große (wenn nicht unendliche) Anzahl von Möglichkeiten.
Der mscharf Skript (ursprünglicher Datenmittelwert von 5,785 mit JMP Robust Mean/Huber Center von 5,735) ergibt einen Winsorized-Mittelwert von 5,339. Wenn Sie wirklich in den Kaninchenbau gehen wollen, ein 12A One-Step Hampel W-Estimator (ein robustes Mittel, empfohlen von Andrews, DF, et. al. (1972); Robuste Standortschätzungen: Umfrage und Fortschritte ; Princeton University Press) ergibt bei denselben Daten 5,256.
Ist es besorgniserregend, dass all diese Standortmaße bei denselben Daten so unterschiedlich sind?Nicht wirklich.Wie der heilige Gregor der Wundertäter sagte: „Was anders ist, ist nicht dasselbe.“Umsichtige Forscher werden den Mittelwert nicht ohne zumindest eine Form eines vernünftigen Zurückweisungsverfahrens verwenden.Es wäre großartig, wenn dieses vernünftige Verfahren einfach in einer JMP-Funktion implementiert werden könnte, die von einem Skript aus aufgerufen werden könnte, aber ohne dass dies eine Option wäre, das Winsorizing-Skript aus mscharf wäre eine großartige Alternative, solange Sie die verwendete Methode identifizieren und auch die früheren Warnungen "schlechter Geschmack und schlechte Praxis" beachten.
Haben Sie einen robusten Tag!
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Hier ist mein schneller Code, der genau dem Papier folgt:
//Datensatz in Papier
x = [4,5,4,9,5,6,4,2,6,2,5,2,9,9];
// Bestimmen Sie Median und Robust Sigma (MAD)
Mittelwert = Quantil(.5,x);
y = abs(x - Mittelwert);
MAD = Quantil (0,5, y);
Sigma = MAD*1,5;
Sigmaold = 0;
//Konvergieren
while(abs(sigma - sigmaold) > 2e-16,
for(i=1,i<=nrows(x),i++,
wenn (x
X = Mittelwert-1,5*Sigma
);
wenn (x >Mittelwert+1,5*Sigma,
X = Mittelwert+1,5*Sigma
);
);
gemeinalt = gemein;
sigmaalt = sigma;
Mittelwert = Mittelwert(x);
sigma = 1,134*std dev(x);
);
//Auswerten
drucken(x);
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Ich habe die Huber-Methode befolgt, die in dem AMC-Papier beschrieben ist, auf das msharp verlinkt.Das Skripten war nicht so schlimm, der schwierige Teil ist zu wissen, ob ich den Algorithmus richtig interpretiert habe.Es scheint, dass ich beim Durchlaufen (z. B. N-mal) und Aktualisieren des Datenarrays mit einem neuen Mean-Hat +/- 1,5 x Sigma-Hat-Wert für die i-te Iteration das Datenarray von i-1 aber verwenden würde das funktioniert bei mir nicht. Ich erhalte bessere Ergebnisse, indem ich immer die Originaldaten (i = 0) aktualisiere, während ich aktualisierte Mean-Hat und Sigma-Hat verwende.Bessere Ergebnisse, scheint aber falsch zu sein. Hat jemand Erfahrung mit der Implementierung dieses Algorithmus?
Übrigens laut dieser Seite ( Der Verteilungsbericht ), JMPs robuster Mittelwert / Standardabweichung in der Verteilungsplattform verwendet die Huber M-Schätzung, aber ich bin mir nicht sicher, wie sie windsorisieren. Mein Skript liefert in einigen Fällen ähnliche Ergebnisse, in anderen weniger. Aber wie gesagt, ich bin mir nicht sicher, ob ich es richtig mache.
Danke,
Mike
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Es gibt viele Möglichkeiten, den robusten Mittelwert und die robuste Standardabweichung zu berechnen.Der Artikel, auf den ich verweise, zeigt, wie man den Median (per Definition ein robuster Mittelwert) und MAD (robuste Standardabweichung) berechnet.Dies sind die grundlegendsten.Jedoch kann jede Metrik, die den Mittelpunkt und die Streuung berechnet und gegen Änderungen aufgrund von Ausreißerdaten resistent ist, als robuster Mittelwert oder robuste Standardabweichung angesehen werden, und es gibt sicherlich komplexere Algorithmen als den Median/MAD-Ansatz.
Der Grund, warum ich mich entschieden habe, diesen Artikel zu teilen, ist, dass er die Grundlagen des Winsorizing-Prozesses mit dem leicht verständlichen Median/MAD zeigt.Wenn ich den Prozess von Grund auf neu programmieren würde, würde ich hier beginnen.
Ich bin kein JMP-Programmierer, daher kenne ich die tatsächliche Methode nicht, die sie verwenden. aber ich bezweifle, dass sie die in diesem Papier beschriebene Methode anwenden.Dieses Papier ist wirklich nur hilfreich, um die Grundlagen zu verstehen.Das Papier selbst nennt die meisten Mängel, einer, der einem Programmierer am meisten auffällt, ist die langsame Konvergenz.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Zu CHFFelder : Ich verstehe jetzt besser.Das ist nicht die EINZIGE robuste Prozedur, die nicht leicht zu skripten ist!Die Robust Means und die Robust Standard Deviation von der Distributionsplattform sind ebenfalls keine Funktionen, die JSL zur Verfügung stehen.Bitte beachten Sie die letztjährige Weihnachtsliste für den Weihnachtsmann...
Zu mscharf : Als ich JMP um eine Referenz für den robusten Mittelwert und die robuste Standardabweichung bat, verwies mich der Entwickler auf Huber, PJ (1973); "Robuste Regression: Asymptotik, Vermutungen und Monte Carlo"; The Annals of Statistics, Bd. 1, Nr. 5, S. 799-821, in denen Verfahren beschrieben werden, die sich wesentlich von der von Ihnen zitierten Referenz unterscheiden.Peter Huber ist ein Titan der Robusten Statistik, und seine moderneren Bücher zu diesem Thema (Robust Statistics 2004) loben M-Schätzungen (die auch im Annals-Papier ausführlich beschrieben wurden), daher weiß ich nicht, ob JMP wirklich das Winsorizing durchführt du referenzierst.Ist das wirklich?
Huber M-Schätzungen sehen nicht so aus, als würden sie zu viel Spaß machen, um sie von Grund auf neu zu schreiben.Daher die Anfrage für die Weihnachtsliste.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Im Allgemeinen gilt es als schlechter Geschmack und schlechte Praxis, Ausreißer herauszufiltern, ohne die Ursache zu kennen.Selbst wenn eine Ursache bekannt ist, führt die Verwendung eines Filterkriteriums, das nicht auf Ihren Datensatz zutrifft, zu noch mehr Fehlern, als nur die Ausreißer im Datensatz zu belassen.Wichtige Fragen müssen gestellt werden, sind die Daten symmetrisch? schief? normal? Gibt es eine Maskierung?Besteht Ihr Datensatz wirklich aus zwei verschiedenen Verteilungen?Wäre es besser sie aufzuteilen?Es ist unmöglich, Ihre Daten wirklich zu kennen, ohne sie tatsächlich anzusehen.Die Automatisierung der Ausreißerfilterung führt zu falschen Schlussfolgerungen.Genauso schlecht wie "p-hacking".
Das bedeutet natürlich nicht, dass es keine Gründe gibt, einen Prozess zu automatisieren.Verwenden Sie beispielsweise ein Filterkriterium für Ausreißer, um die Aktualisierung von Eingriffsgrenzen in einem Regeldiagramm zu automatisieren, in dem die Daten im Laufe der Zeit angezeigt/überwacht werden.
Wenn Sie es automatisieren möchten, müssen Sie das Skript schreiben.Du kannst sehen http://www.rsc.org/images/robust-statistics-technical-brief-6_tcm18-214850.pdf für weitere Informationen darüber, was die Huber-Methode tatsächlich tut.Hoffe das hilft.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Die meisten Aktionen in JMP können per Skript ausgeführt werden, indem Sie zum roten Dreieck gehen und zu script > COPY SCRIPT gehen
Auf diese Weise können Sie diese Skriptteile zu einem größeren automatisierten Programm zusammenfügen.
Dies gilt für jede JMP-Aktion/-Funktion usw. ... mit AUSNAHME der Robust Outlier Filter-Funktion unter:
COL > MODELLING UTILITIES > EXPLORE OUTLIERS
Ich möchte den Huber-Filter mit K = 3 für einen bestimmten Parametersatz automatisieren.Ich werde dies immer und immer wieder tun.
Ich möchte es automatisieren, um meine Arbeitsbelastung zu verringern.
Betreff: Gibt es eine Möglichkeit, den Winsor-Prozess der Ausreißerfilterung zu automatisieren/skripten?Deine Frage verwirrt mich.Das Winsorisieren von Ausreißern wird im Allgemeinen so definiert, dass die Extremwerte auf ein bestimmtes Perzentil festgelegt werden, ohne sie auszuschließen.Es ist analog zum Clipping in der Signalverarbeitung.Das Ausschließen von Ausreißerzeilen ist im Allgemeinen kein Winsorising.
Das heißt, jeder algorithmische Ansatz, den Ihr Herz begehrt, kann per Skript erstellt werden.Wenn Sie dafür ein Skript schreiben, verwenden Sie Matrizen.Sie laufen viel schneller, insbesondere bei großen Datensätzen.