時系列データの線形フィルタ

Filter が vector から要素を取り出す関数なら filter は何だろう?と思ったので調べてみた。

> ?filter

Linear Filtering on a Time Series

Description:

     Applies linear filtering to a univariate time series or to each
     series separately of a multivariate time series.

Usage:

     filter(x, filter, method = c("convolution", "recursive"),
            sides = 2, circular = FALSE, init)
...

時系列データの線形フィルタを実行するらしい。
recursive と convolution でそれぞれ以下の式が実行された結果が返ってくる。

  • recursive
    • y[i] = x[i] + f[1]*y[i-1] + ... + f[p]*y[i-p]
  • convolution
    • sides=1: y[i] = f[1]*x[i] + ... + f[p]*x[i-(p-1)]
    • sides=2: y[i] = f[1]*x[i] + f[2]*x[i+1] + ... + f[p]*x[i-1^(p/2)p/2]

あまり使うこともなさそうだけど、おもしろそう。
convolution の sides1 はマルコフ性で sides2 は対象点の前後から集めてきてる感じ。

ついでに、recursive を使うとフィボナッチ数列ができるな。

> filter(c(0,1,rep(0,10)), c(1,1), "re")
Time Series:
Start = 1 
End = 12 
Frequency = 1 
 [1]  0  1  1  2  3  5  8 13 21 34 55 89