Ich suche einige einfache (dh - keine mathematische Notation, lang reproduzierbaren Code) Beispiele für die filter
Funktion in R Ich denke, ich habe meinen Kopf rund um die Faltungs-Methode, aber Ich bleibe bei der Verallgemeinerung der rekursiven Option. Ich habe verschiedene Dokumente gelesen und gekämpft, aber die Hilfe ist nur ein bisschen undurchsichtig für mich.einfache Beispiele für Filterfunktion, rekursive Option speziell
Hier sind die Beispiele, die ich bisher herausgefunden:
# Set some values for filter components
f1 <- 1; f2 <- 1; f3 <- 1;
Und wir gehen:
# basic convolution filter
filter(1:5,f1,method="convolution")
[1] 1 2 3 4 5
#equivalent to:
x[1] * f1
x[2] * f1
x[3] * f1
x[4] * f1
x[5] * f1
# convolution with 2 coefficients in filter
filter(1:5,c(f1,f2),method="convolution")
[1] 3 5 7 9 NA
#equivalent to:
x[1] * f2 + x[2] * f1
x[2] * f2 + x[3] * f1
x[3] * f2 + x[4] * f1
x[4] * f2 + x[5] * f1
x[5] * f2 + x[6] * f1
# convolution with 3 coefficients in filter
filter(1:5,c(f1,f2,f3),method="convolution")
[1] NA 6 9 12 NA
#equivalent to:
NA * f3 + x[1] * f2 + x[2] * f1 #x[0] = doesn't exist/NA
x[1] * f3 + x[2] * f2 + x[3] * f1
x[2] * f3 + x[3] * f2 + x[4] * f1
x[3] * f3 + x[4] * f2 + x[5] * f1
x[4] * f3 + x[5] * f2 + x[6] * f1
Jetzt ist, wenn ich meine armen kleinen Hirnstamm bin zu verletzen. ich es geschafft, das grundlegendste Beispiel, um herauszufinden, in diesem Beitrag mit Informationen: https://stackoverflow.com/a/11552765/496803
filter(1:5, f1, method="recursive")
[1] 1 3 6 10 15
#equivalent to:
x[1]
x[2] + f1*x[1]
x[3] + f1*x[2] + f1^2*x[1]
x[4] + f1*x[3] + f1^2*x[2] + f1^3*x[1]
x[5] + f1*x[4] + f1^2*x[3] + f1^3*x[2] + f1^4*x[1]
Kann jemand einen ähnlichen Code zur Verfügung stellen, was ich mit filter = c(f1,f2)
und filter = c(f1,f2,f3)
oben für die Faltung Beispiele für die rekursive Version?
> filter(1:5, f1, method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 6 10 15
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2
> y4 <- x[4] + f1*y3
> y5 <- x[5] + f1*y4
> c(y1,y2,y3,y4,y5)
[1] 1 3 6 10 15
und ...
> filter(1:5, c(f1,f2), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 14 26
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2
> y5 <- x[5] + f1*y4 + f2*y3
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 14 26
:
Antworten sollten die Ergebnisse der Funktion entsprechen: mit @ agstudy die saubere Antwort
filter(1:5, c(f1,f2), method="recursive")
[1] 1 3 7 14 26
filter(1:5, c(f1,f2,f3), method="recursive")
[1] 1 3 7 15 30
EDIT
Zum Abschluss
an d ...
> filter(1:5, c(f1,f2,f3), method="recursive")
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1 3 7 15 30
> y1 <- x[1]
> y2 <- x[2] + f1*y1
> y3 <- x[3] + f1*y2 + f2*y1
> y4 <- x[4] + f1*y3 + f2*y2 + f3*y1
> y5 <- x[5] + f1*y4 + f2*y3 + f3*y2
> c(y1,y2,y3,y4,y5)
[1] 1 3 7 15 30
Denken Sie an 'filter' wie durch Ihre ursprünglichen Vektor treten, die Gewichte der Anwendung und bei jedem Schritt summiert werden. Der rekursive Filter ist genau wie der Faltungsfilter, außer dass die Gewichte f1, ..., fn automatisch c (1, f1, ..., fn) werden und bei jedem Schritt 1 auf den aktuellen Wert angewendet wird, während f1, ..., fn werden auf die letzten n Werte des neu erstellten korrigierten Vektors anstelle der ursprünglichen Werte angewendet. Bei Faltung (mit Standardseiten = 2) überspannen die Gewichtungen den aktuellen Wert, wobei die nächsten n/2 ursprünglichen Werte auf der einen Seite und die vorherigen n/2 ursprünglichen Werte auf der anderen Seite liegen. –