如何在R中创建自己的过滤器功能

时间:2018-04-22 01:34:25

标签: r

我正在尝试使用循环来创建自己的stats::filter(method = "recursive")函数。根据文件:

  

对单变量时间序列或每个系列应用线性过滤   分别为多变量时间序列。   注意,在递归>中,在滞后0处存在隐含系数1。过滤器,给出

     

y [i] = x [i] + f 1 * y [i-1] + ... + f [p] * y [i-p]

此外,从previous post这里有一个例子:

> filter(1:5, f1, method="recursive")
[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

这是我最好的尝试:

x    <- seq(2, 6)
f1   <- .5
y[1] <- 1

for (i in x) {
  y[i] <- x[i] + f1*y[i-1]
  print(y[i-1])
}

[1] 1
[1] 3.5
[1] 5.75
[1] 7.875
[1] 9.9375

这应该是结果

> stats::filter(1:5, .5, method = "recursive")
[1] 1.0000 2.5000 4.2500 6.1250 8.0625

1 个答案:

答案 0 :(得分:0)

这解决了它:

> x    <- seq(2, 6)
> f1   <- .5
> y[1] <- 1

> for (i in x) {
>   y[i] <- x[i-1] + f1*y[i-1]
>   print(y[i-1])
> }


[1] 1
[1] 2.5
[1] 4.25
[1] 6.125
[1] 8.0625