Thursday 19 October 2017

Knuth Gleitender Durchschnitt


Ich versuche, einen Weg zu finden, um einen sich bewegenden kumulativen Durchschnitt zu berechnen, ohne die Zähl - und Gesamtdaten, die bisher empfangen werden, zu speichern. Ich kam mit zwei Algorithmen, aber beide müssen die Zähler zu speichern: neue durchschnittliche (alte Daten alte Daten) nächste Daten) nächste Zählung neue durchschnittliche alte Durchschnitt (nächste Daten - alter Durchschnitt) nächste Zählung Das Problem mit diesen Methoden ist, dass die Zählung Wird größer und größer, was zu einer Präzision in dem resultierenden Mittel führt. Die erste Methode verwendet die alte Zahl und die nächste Zahl, die offensichtlich 1 auseinander liegen. Dies hat mich denken, dass vielleicht gibt es einen Weg, um die Zählung zu entfernen, aber leider habe ich es noch nicht gefunden. Es hat mich ein bisschen weiter aber, was in der zweiten Methode aber noch zählen vorhanden ist. Ist es möglich, oder bin ich nur auf der Suche nach dem Unmöglichen gefragt Ich versuche, einen effizienten, numerisch stabilen Algorithmus zu finden, um eine rollende Varianz (z. B. eine Varianz über ein 20-Perioden rollenden Fenster) zu berechnen. 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 Average Formel 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 stabil sind, 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 Splay-Baum 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öschen Sie die aktuelle RunningStat-Instanz, fügen Sie das Element zu allen 20 Instanzen hinzu und erhöhen Sie 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. Antwort # 1 am 11: 01EViews Überblick: Datenverwaltung Teil 3: Ausgefeiltes Datenmanagement Leistungsfähige analytische Werkzeuge sind nur nützlich, wenn Sie mit Ihren Daten leicht arbeiten können. EViews bietet die breiteste Palette an Datenmanagement-Tools, die in jeder ökonometrischen Software zur Verfügung stehen. Mit der umfangreichen Bibliothek von mathematischen, statistischen, Datums-, String - und Zeitreihenoperatoren und - funktionen bietet EViews eine umfassende Unterstützung für numerische, Zeichen - und Datumsdaten und bietet damit die Datenverarbeitungsfunktionen, die Sie von modernen statistischen Software erwarten können. Umfangreiche Funktionsbibliothek EViews enthält eine umfangreiche Bibliothek mit Funktionen zum Arbeiten mit Daten. Neben den standardmäßigen mathematischen und trigonometrischen Funktionen bietet EViews Funktionen für deskriptive Statistiken, kumulative und bewegte Statistiken, Gruppenstatistiken, spezielle Funktionen, spezialisierte Datums - und Zeitreihenoperationen, Workfile, Wertzuordnungen und finanzielle Berechnungen. EViews bietet auch Zufallszahlengeneratoren (Knuth, LEcuyer oder Mersenne-Twister), Dichtefunktionen und kumulative Verteilungsfunktionen für achtzehn verschiedene Verteilungen. Diese können bei der Generierung neuer Serien oder bei der Berechnung von Skalar - und Matrix-Ausdrücken verwendet werden. EViews bietet eine umfangreiche Funktionsbibliothek. Ausgefeilte Ausdrucksbearbeitung Mit den leistungsstarken Tools von EViews für die Ausdrucksbearbeitung können Sie Ausdrücke praktisch überall verwenden, wo Sie eine Serie verwenden möchten. Sie müssen keine neuen Variablen erstellen, um mit dem Logarithmus von Y, dem gleitenden Durchschnitt von W oder dem Verhältnis von X zu Y (oder einem anderen gültigen Ausdruck) zu arbeiten. Stattdessen können Sie den Ausdruck in der Berechnung deskriptiver Statistiken, als Teil einer Gleichung oder Modellspezifikation oder beim Erstellen von Graphen verwenden. Wenn Sie eine Gleichung mit einem Ausdruck für die abhängige Variable prognostizieren, ermöglicht EViews (falls möglich), die zugrundeliegende abhängige Variable zu prognostizieren und das geschätzte Konfidenzintervall entsprechend anzupassen. Wenn zum Beispiel die abhängige Variable als LOG (G) angegeben ist, können Sie entweder das Protokoll oder den Pegel von G prognostizieren und das entsprechende, möglicherweise asymmetrische Konfidenzintervall berechnen. Arbeiten Sie direkt mit Ausdrücken an Stelle von Variablen. Links, Formeln und Werte Maps Link-Objekte ermöglichen es, Serien zu erstellen, die mit Daten in anderen Workfiles oder Workfile-Seiten verknüpft sind. Links ermöglichen das Kombinieren von Daten mit unterschiedlichen Frequenzen oder das Zusammenführen von Daten aus einer Zusammenfassungsseite in eine einzelne Seite, so dass die Daten dynamisch aktualisiert werden, wenn sich die zugrunde liegenden Daten ändern. Ähnlich können innerhalb einer Arbeitsdatei Datenreihen Formeln zugewiesen werden, so dass die Datenreihen automatisch neu berechnet werden, wenn die zugrunde liegenden Daten modifiziert werden. Auf numerische oder alpha-Reihen können Wertkennzeichnungen (z. B. quotHighquot, quotMedquot, quotLowquot, entsprechend 2, 1, 0) angewendet werden, so daß kategorische Daten mit aussagekräftigen Labels angezeigt werden können. Mit eingebauten Funktionen können Sie mit den zugrundeliegenden oder den zugeordneten Werten arbeiten, wenn Sie Berechnungen durchführen. Links können für dynamische Frequenzumsetzung oder Matchmischung verwendet werden. Datenstrukturen und - typen EViews können komplexe Datenstrukturen verarbeiten, einschließlich regelmäßiger und unregelmäßig datierter Daten, Querschnittsdaten mit Beobachtungskennungen und datierten und undatierten Felddaten. Zusätzlich zu numerischen Daten kann eine EViews-Workfile auch alphanumerische Zeichen (Zeichenfolge) und Serien mit Daten enthalten, die alle mit einer umfangreichen Funktionsbibliothek manipuliert werden können. EViews bietet auch eine breite Palette an Tools für das Arbeiten mit Datensätzen (Workfiles), Daten, einschließlich der Kombination von Serien mit komplexen Match Merge-Kriterien und Workfile-Prozeduren zum Ändern der Struktur Ihrer Daten: Join, Append, Subset, Größe, Sortierung und Umgestalten (stack and unstack). EViews-Workfiles können sehr strukturiert sein. Enterprise Edition Unterstützung für ODBC, FAME TM. DRIBase und Haver Analytics Datenbanken Als Teil der EViews Enterprise Edition (eine zusätzliche Kostenoption über EViews Standard Edition) wird Unterstützung für den Zugriff auf Daten in relationalen Datenbanken (über ODBC-Treiber) und Datenbanken in einer Vielzahl von proprietären Formaten zur Verfügung gestellt Durch kommerzielle Daten - und Datenbankanbieter. Open Database Connectivity (ODBC) ist ein Standard, der von vielen relationalen Datenbanksystemen wie Oracle, Microsoft SQL Server und IBM DB2 unterstützt wird. Mit EViews können Sie ganze Tabellen aus ODBC-Datenbanken lesen oder schreiben oder aus den Ergebnissen einer SQL-Abfrage eine neue Arbeitsdatei erstellen. EViews Enterprise Edition unterstützt auch den Zugriff auf FAME TM - Datenbanken (sowohl auf lokaler als auch auf Serverbasis). Global Insights DRIPro - und DRIBase-Datenbanken, Haver Analytics DLX-Datenbanken, Datastream, FactSet und Moodys Economy. Die bekannte, einfach zu bedienende Datenbankoberfläche von EViews wurde auf diese Datenformate erweitert, so dass Sie mit fremden Datenbanken so leicht wie native EViews-Datenbanken arbeiten können. Frequency Conversion Wenn Sie Daten aus einer Datenbank oder aus einer anderen Workfile - oder Workfile-Seite importieren, wird sie automatisch in die Häufigkeit Ihres aktuellen Projekts konvertiert. EViews bietet viele Möglichkeiten der Frequenzumsetzung und unterstützt die Umwandlung von täglichen, wöchentlichen oder unregelmäßigen Daten. Serie kann eine bevorzugte Konvertierungsmethode zugewiesen werden, so dass Sie verschiedene Methoden für verschiedene Serien verwenden können, ohne die Konvertierungsmethode bei jedem Zugriff auf eine Reihe angeben zu müssen. Sie können sogar Links erzeugen, so dass die frequenzkonvertierten Datenreihen automatisch neu berechnet werden, wenn die zugrundeliegenden Daten geändert werden. Geben Sie eine Serien-spezifische automatische Konvertierung an oder wählen Sie eine bestimmte Methode aus. Für Verkaufsinformationen bitte email saleseviews Für technischen Support mailen Sie bitte Supportsviews Bitte geben Sie Ihre Seriennummer mit allen E-Mail-Korrespondenz ein. Weitere Kontaktinformationen finden Sie auf unserer Seite.

No comments:

Post a Comment