Thursday 26 January 2017

Simple Moving Average Varianz

Standardabweichung und Abweichung Und das Gute an der Standardabweichung ist, dass es nützlich ist. Nun können wir zeigen, welche Höhen innerhalb einer Standardabweichung (147 mm) des Mittelwerts liegen: Also, mit der Standardabweichung haben wir eine quadratische Methode, um zu wissen, was normal ist und was extra groß oder extra klein ist. Rottweiler sind große Hunde. Und Dachshunds sind ein bisschen kurz. Aber nicht sagen, aber. Gibt es eine kleine Änderung mit Beispieldaten Unser Beispiel ist für eine Bevölkerung gewesen (die 5 Hunde sind die einzigen Hunde, an denen wir interessiert sind). Wenn es sich bei den Daten jedoch um ein Sample handelt (eine Auswahl aus einer größeren Population), dann ändert sich die Berechnung, wenn Sie die Quotdatenwerte für die Population angeben. Dividieren durch N bei der Berechnung der Varianz (wie wir) Eine Stichprobe. Dividieren durch N-1 bei der Berechnung von Varianz Alle anderen Berechnungen bleiben gleich, auch wie wir den Mittelwert berechnet haben. Beispiel: Wenn unsere 5 Hunde nur eine Stichprobe einer größeren Population von Hunden sind, teilen wir mit 4 statt mit 5: Beispielvariante 108,520 4 27,130 Beispiel Standardabweichung radic27,130 164 (auf den nächsten Millimeter) Denken Sie es als ein QuotCorrectionquot, wenn Ihre Daten nur ein Beispiel ist. Hier sind die beiden Formeln, die bei Standardabweichungsformeln erklärt werden, wenn Sie mehr wissen wollen: Ich versuche, einen effizienten, numerisch stabilen Algorithmus zu finden, um eine Rollvarianz zu berechnen (zum Beispiel eine Varianz über ein 20-Perioden-Rollfenster). Im bewusst der Welford-Algorithmus, der effizient berechnet die laufende Varianz für einen Strom von Zahlen (es erfordert nur einen Durchlauf), aber ich bin nicht sicher, ob dies für ein rollenden Fenster angepasst werden kann. Ich möchte auch die Lösung zur Vermeidung der Genauigkeit Probleme am oberen Rand dieses Artikels diskutiert. Eine Lösung in jeder Sprache ist gut. Gefragt Feb 28 11 at 20:46 Ive laufen über dieses Problem als gut. Es gibt einige große Beiträge da draußen bei der Berechnung der laufenden kumulative Varianz wie John Cookes genaue Berechnung der laufenden Varianz Post und die Post von Digital Explorations, Python-Code für die Berechnung von Stichproben-und Bevölkerungsabweichungen, Kovarianz und Korrelationskoeffizienten. Nur nicht finden konnten, die zu einem rollenden Fenster angepasst wurden. Der Running Standard Deviations Post von Subluminal Messages war entscheidend dafür, dass die Rolling-Fenster-Formel funktionierte. Jim nimmt die Leistungssumme der quadrierten Differenzen der Werte gegenüber Welfords Ansatz der Verwendung der Summe der quadrierten Unterschiede des Mittelwerts. Formel wie folgt: PSA heute PSA (gestern) ((x heute x heute) - x gestern)) n x Wert in Ihrer Zeitreihe n Anzahl der bisher analysierten Werte. Aber, um die Power Sum Durchschnittsformel zu einer fensterartigen Variante zu konvertieren, müssen Sie die Formel auf die folgenden anpassen: PSA heute PSA gestern ((x heute x heute) - (x gestern x gestern) nx Wert in Ihrer Zeitreihe n Anzahl der Sie haben auch die Rolling Simple Moving Average Formel: SMA heute SMA gestern ((x heute - x heute - n) nx Wert in Ihrer Zeitreihe n Zeitraum für Ihr rollenden Fenster verwendet Rolling Population Variance: Population Var heute (PSA heute n - n SMA heute SMA heute) n Oder die Rolling Sample Variance: Sample Var heute (PSA heute n - n SMA heute SMA heute) (n - 1) Ich habe dieses Thema zusammen mit Beispiel Python-Code in einem Blog-Post ein paar Jahre zurück, Running Varianz. Hier beachten Sie: Ich habe Links zu allen Blog-Posts und mathematische Formeln in Latex (Bilder) für diese Antwort. Aber wegen meiner geringen Reputation ( Lt 10) Ich beschränke mich auf nur 2 Hyperlinks und absolut keine Bilder. Hoffe, dies nicht wegnehmen aus dem Inhalt. Heres eine Division und Eroberung Ansatz, der O (log k) - Zeit Updates, wobei k die Anzahl der Proben ist. Es sollte relativ stabil aus den gleichen Gründen, dass paarweise Summation und FFTs sind stabil, aber seine ein wenig kompliziert und die Konstante ist nicht groß. Angenommen, wir haben eine Folge A der Länge m mit Mittelwert E (A) und Varianz V (A). Und eine Sequenz B mit der Länge n mit dem Mittelwert E (B) und der Varianz V (B). Es sei C die Verkettung von A und B. Wir haben jetzt die Elemente in einem rot-schwarzen Baum, wobei jeder Knoten mit Mittelwert und Varianz des an diesem Knoten verwurzelten Teilbaums verziert ist. Insert auf der rechten Seite löschen auf der linken Seite. (Seitdem nur auf die Enden zugegriffen wurde, könnte ein Splaybaum O (1) amortisiert sein, aber Im Vermutung amortisiert ist ein Problem für Ihre Anwendung.) Wenn k zum Zeitpunkt der Kompilierung bekannt ist, könnten Sie wahrscheinlich die innere Schleife FFTW-Stil entrollen . Antwort # 2 am: Juli 23, 2010, 04:37:13 am »Eigentlich Welfords Algorithmus kann AFAICT leicht angepasst werden, um gewichtete Varianz zu berechnen. Und indem Sie Gewichte auf -1 setzen, sollten Sie in der Lage sein, Elemente effektiv abzubrechen. Ich habe nicht überprüft die Mathematik, ob es erlaubt negative Gewichte aber, aber auf einen ersten Blick sollte es ein kleines Experiment mit ELKI durchgeführt: 14-stellige Genauigkeit im Vergleich zu den genauen Zwei-Pass-Algorithmus Dies ist etwa so viel wie erwartet werden kann Doppel. Beachten Sie, dass Welford kommt zu einigen Rechenkosten wegen der zusätzlichen Divisionen - es dauert etwa doppelt so lange wie die genaue Zwei-Pass-Algorithmus. Wenn Ihre Fenstergröße klein ist, kann es viel sinnvoller sein, den Mittelwert neu zu berechnen und dann in einem zweiten Durchlauf die Varianz jedes Mal. Ich habe dieses Experiment als Unit-Test zu ELKI hinzugefügt, Sie können die vollständige Quelle hier sehen: elki. dbs. ifi. lmu. debrowserelkitrunktestdelmuifidbselkimathTestSlidingVariance. java es auch vergleicht die exakte Zwei-Pass-Varianz. Auf schiefen Datensätzen kann das Verhalten jedoch unterschiedlich sein. Dieser Datensatz ist offensichtlich einheitlich verteilt, aber Ive auch versucht, ein sortiertes Array und es funktionierte. Antwortete ich freue mich auf diese falsch sein, aber ich glaube nicht, dass dies schnell getan werden kann. Das heißt, ein großer Teil der Berechnung ist die Verfolgung der EV über das Fenster, die leicht durchgeführt werden können. Ill verlassen mit der Frage: Sind Sie sicher, dass Sie eine Fensterfunktion benötigen Wenn Sie nicht mit sehr großen Fenstern arbeiten, ist es wahrscheinlich besser, nur einen wohlbekannten vordefinierten Algorithmus zu verwenden. Ich glaube, die Verfolgung Ihrer 20 Proben, Sum (X2 ab 1..20) und Sum (X ab 1..20) und dann sukzessive Neuberechnung der beiden Summen bei jeder Iteration ist nicht effizient genug Es ist möglich, die neue Varianz neu zu berechnen, ohne jedes der Samples zu addieren, zu quadrieren usw.. Ich glaube, diese Lösung ist anfällig für die Stabilitätsprobleme in den Link in meinem ursprünglichen Post erwähnt (johndcookstandarddeviation. html). Insbesondere, wenn Eingangswerte und groß und ihre Differenz ist kleiner als das Ergebnis könnte tatsächlich negativ sein. Ich habe keine Kontrolle über den Eingang, so würde ich lieber diesen Ansatz zu vermeiden. Ndash Abiel Hallo, ich verstehe. Gibt es etwas, was Sie über die Eingabe sagen können Verwendungszweck Ist es ein Problem, dass Sie nur werfen können mehr Bits an (64-Bit-Float, Arbitant-Präzisions-Arithmetik, etc.) Rundungsfehler weg, wenn Sie die Eingabe in signifikanten Zahlen Trumpf, Ndash John Feb 28 11 at 21:16 Jason S: Die rollende Varianz ist, was es ist. Es könnte viel im Übergang von 1 Million zu Null gehen, aber that39s die Natur des Tieres. Das ist, und die ersten 980 der 1000 1 Million Werte sind aus dem Bild, wenn die Änderung auftritt sowieso. Mein Kommentar schlug vor, dass, wenn Sie genug signifikante Zahlen in Ihren Berechnungen, keine davon haben würde. Ndash John Feb 28 11 at 21:51 Input könnte wirklich alles sein. Die Wertgröße könnte sicherlich in den Billionen liegen, und während die ursprünglichen Daten nur eine Genauigkeit von wenigen Dezimalpunkten haben werden, können die Benutzer ihre Daten (z. B. die Aufteilung durch irgendeinen Skalar) vor der Berechnung der Varianz verwandeln. Ndash Abiel Feb 28 11 at 21:56 Für nur 20 Werte, seine trivial an die Methode ausgesetzt hier anpassen (ich habe nicht sagen, schnell). Sie können einfach ein Array von 20 dieser RunningStat Klassen abholen. Die ersten 20 Elemente des Streams sind etwas ganz Besonderes, aber sobald dies geschieht, ist es viel einfacher: Wenn ein neues Element eintrifft, löscht man die aktuelle RunningStat-Instanz, addiert das Element zu allen 20 Instanzen und erhöht den Zähler (modulo 20) Die die neue vollständige RunningStat-Instanz zu einem gegebenen Zeitpunkt identifiziert, können Sie die aktuelle vollständige Instanz konsultieren, um Ihre laufende Variante zu erhalten. Sie werden offensichtlich beachten, dass dieser Ansatz nicht wirklich skalierbar ist. Sie können auch beachten, dass es einige redudancy in den Zahlen, die wir halten (wenn Sie mit der RunningStat volle Klasse gehen). Eine offensichtliche Verbesserung wäre, die 20 Dauern Mk und Sk direkt zu halten. Ich kann nicht denken, eine bessere Formel mit diesem besonderen Algorithmus, ich fürchte, dass seine rekursive Formulierung etwas Krawatten unsere Hände. Beantwortet Mar 1 11 am 9:01


No comments:

Post a Comment