Friday 2 June 2017

8 Punkt Gleitender Mittel Filter Matlab

Ich habe eine Matrix-Zeitreihen-Daten für 8 Variablen mit etwa 2500 Punkten (10 Jahre mon-fri) und möchte den Durchschnitt, Varianz, Schiefe und Kurtosis auf gleitender Basis berechnen. Lets sagen Frames 100 252 504 756 - Ich möchte die vier Funktionen oben auf über jedem der (Zeit-) Frames, auf einer täglichen Basis zu berechnen, so dass die Rückkehr für Tag 300 in dem Fall mit 100 Tag Frame, wäre Mittelwert Varianz Schiefe Kurtosis aus dem Zeitraum day201-day300 (100 Tage insgesamt). und so weiter. Ich weiß, das bedeutet, ich würde ein Array-Ausgang, und die erste Frame-Anzahl von Tagen wäre NaNs, aber ich kann nicht herausfinden, die erforderliche Indizierung, um diese getan. Jul 23, 2010, 10:31:25 pm »Dies ist eine interessante Frage, weil ich denke, die optimale Lösung ist anders für den Mittelwert, als es für die anderen Beispiel Statistiken ist. Ive lieferte ein Simulationsbeispiel unten, dass Sie durcharbeiten können. Zuerst wählen Sie einige beliebige Parameter und simulieren einige Daten: Für den Mittelwert verwenden Sie Filter, um einen gleitenden Durchschnitt zu erhalten: Ich hatte ursprünglich gedacht, dieses Problem mit conv wie folgt zu lösen: Aber wie PhilGoddard in den Kommentaren darauf hinwies, vermeidet der Filteransatz die Notwendigkeit für die Schleife. Beachten Sie auch, dass Ive gewählt, um die Termine in der Ausgangsmatrix entsprechen die Daten in X so in späteren Arbeit können Sie die gleichen Indizes für beide verwenden. Somit werden die ersten WindowLength-1-Beobachtungen in MeanMA nan sein. Für die Varianz, kann ich nicht sehen, wie man entweder Filter oder conv oder sogar eine laufende Summe verwenden, um die Dinge effizienter zu machen, so dass ich stattdessen die Berechnung manuell bei jeder Iteration: Wir könnten etwas beschleunigen, indem wir die Tatsache, dass wir bereits haben Berechnet den durchschnittlichen gleitenden Durchschnitt. Ersetzen Sie einfach die innerhalb der Schleife Linie in der oben mit: Allerdings bezweifle ich, dies wird viel Unterschied machen. Wenn jemand eine schlaue Weise sehen kann, um Filter oder conv zu verwenden, um die sich bewegende Fensterabweichung zu erhalten, ist sehr interessiert, es zu sehen. Ich lasse den Fall der Schiefe und Kurtosis auf die OP, da sie im Wesentlichen genau das gleiche wie das Varianzbeispiel sind, aber mit der entsprechenden Funktion. Ein letzter Punkt: Wenn Sie die oben in eine allgemeine Funktion konvertiert wurden, könnten Sie in eine anonyme Funktion als eines der Argumente übergeben, dann hätten Sie eine gleitende durchschnittliche Routine, die für willkürliche Auswahl von Transformationen funktioniert. Endpunkt, Endpunkt: Für eine Sequenz von Fensterlängen, einfach Schleife über den gesamten Code-Block für jede Fensterlänge. Ja, die Filterfunktion ist zwar besser für den Mittelwert - aber das wollte ich für mehrere verschiedene Funktionen tun, nicht nur für den Mittelwert. Nur meine Antwort geschrieben, weil es für mich gearbeitet und ich dachte, es könnte jemand anderem zu helfen. Ndash Dexter Morgan Apr 15 14 um 12: 40 Ich muss einen gleitenden Durchschnitt über eine Datenreihe innerhalb einer for-Schleife berechnen. Ich muss den gleitenden Durchschnitt über N9 Tage bekommen. Das Array Im-Berechnen ist 4 Reihe von 365 Werten (M), die selbst Mittelwerte eines anderen Satzes von Daten sind. Ich möchte die Mittelwerte meiner Daten mit dem gleitenden Durchschnitt in einem Diagramm darstellen. Ich googeln ein wenig über gleitende Durchschnitte und den conv Befehl und fand etwas, das ich versuchte, in meinem Code umzusetzen: So grundsätzlich berechne ich meinen Durchschnitt und plot ihn mit einem (falschen) gleitenden Durchschnitt. Ich wählte die wts Wert direkt an der Mathworks-Website, so dass ist falsch. (Quelle: mathworks. nl/help/econ/moving-average-trend-estimation. html) Mein Problem aber ist, dass ich nicht verstehe, was dieses wts ist. Könnte jemand erklären, wenn es etwas mit den Gewichten der Werte zu tun hat: das ist in diesem Fall ungültig. Alle Werte werden gleich gewichtet. Und wenn ich das völlig falsch mache, könnte ich etwas Hilfe dabei haben Mein aufrichtigster Dank. Die Verwendung von conv ist eine hervorragende Möglichkeit, einen gleitenden Durchschnitt zu implementieren. In dem Code, den Sie verwenden, ist wts, wie viel Sie jeden Wert wiegen (wie Sie ahnen). Die Summe dieses Vektors sollte immer gleich Eins sein. Wenn Sie jeden Wert gleichmäßig gewichten und eine Größe N bewegten Filter dann tun möchten, würden Sie tun möchten Mit dem gültigen Argument in conv wird mit weniger Werten in Ms, als Sie in M ​​haben. Verwenden Sie diese, wenn Sie dont die Auswirkungen von Nullpolsterung. Wenn Sie die Signalverarbeitung Toolbox haben, können Sie cconv verwenden, wenn Sie einen kreisförmigen gleitenden Durchschnitt ausprobieren möchten. Etwas wie Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie havent bereits. Sie können Filter verwenden, um einen laufenden Durchschnitt zu finden, ohne eine for-Schleife zu verwenden. Dieses Beispiel findet den laufenden Durchschnitt eines 16-Element-Vektors unter Verwendung einer Fenstergröße von 5. 2) glatt als Teil der Curve Fitting Toolbox (die in den meisten Fällen verfügbar ist) yy glatt (y) glättet die Daten in dem Spaltenvektor Y unter Verwendung eines gleitenden Durchschnittsfilters. Die Ergebnisse werden im Spaltenvektor yy zurückgegeben. Die Standardspanne für den gleitenden Durchschnitt ist 5.


No comments:

Post a Comment