14163 2

[程序分享] 使用filter函数进行线性过滤时间序列数据,来分析时间序列数据变化的趋势变化 [推广有奖]

  • 5关注
  • 8粉丝

已卖:376份资源

博士生

38%

还不是VIP/贵宾

-

威望
0
论坛币
3141 个
通用积分
73.8548
学术水平
37 点
热心指数
36 点
信用等级
23 点
经验
33667 点
帖子
298
精华
0
在线时间
141 小时
注册时间
2012-11-23
最后登录
2022-9-18

楼主
奇渥温·沙加 发表于 2015-12-4 21:09:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

使用filter函数进行线性过滤时间序列数据,来分析时间序列数据变化的趋势变化。Filter函数是一个过滤函数,具体使用方法为filter(时间序列向量Xfilter=c(组成的线性模型系数)method=“过滤的样式”,sides=12)。其中第一个参数X是时间序列向量数据,如果是数值向量,可以用ts函数进行时间序列转化,第二个参数filter表示组成的模型中各项的系数情况,第三个参数method可以选择为“recursive递归方法”或是“convolution卷积方法”,当选择recursive递归方法时,不用添加sides参数,选择使用convolution卷积方法时,sides=1表示单边卷积,sides=2表示双边卷积。

> sales<-read.csv("citysales.csv")#读取文件

> sales

     City ProductA ProductB ProductC

1 Seattle       23       11       12

2  London       89        6       56

3   Tokyo       24        7       13

4  Berlin       36       34       44

5  Mumbai        3       78       14

> sales1<-c(sales$ProductA,sales$ProductB,sales$ProductC) #把数据框变成数值向量

> sales1

[1] 23 89 24 36  3 11  6  7 34 78 12 56 13 44 14

> var(sales1)

[1] 704.1429

> sd(sales1)

[1] 26.53569

> filter(sales1,filter=c(1:4),method="recursive")#对数值向量进行递归处理

Time Series:

Start = 1

End = 15

Frequency = 1

[1]       23      112      182      511     1306     3333     8212    20847

[9]    52528   132268   332725   838289  2110668  5314537 13381654

>  filter(sales1,filter=c(0.2,0.4,0.2,0.4),method="convolution",sides=2)#对数值向量进行双边卷积处理

Time Series:

Start = 1

End = 15

Frequency = 1

[1]   NA 43.8 55.4 20.2 20.6  7.2 15.2 33.0 43.2 45.2 58.6 30.0 45.4   NA

[15]   NA

> sales1

[1] 23 89 24 36  3 11  6  7 34 78 12 56 13 44 14

> rep(sales1,5) #将数值变量进行重复和循环

[1] 23 89 24 36  3 11  6  7 34 78 12 56 13 44 14 23 89 24 36  3 11  6  7 34

[25] 78 12 56 13 44 14 23 89 24 36  3 11  6  7 34 78 12 56 13 44 14 23 89 24

[49] 36  3 11  6  7 34 78 12 56 13 44 14 23 89 24 36  3 11  6  7 34 78 12 56

[73] 13 44 14

> sales.ts<-ts(rep(sales1,5),frequency=12,start=c(2012,1))#使用ts函数把数值向量转化为时间序列向量

> sales.ts

     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

2012  23  89  24  36   3  11   6   7  34  78  12  56

2013  13  44  14  23  89  24  36   3  11   6   7  34

2014  78  12  56  13  44  14  23  89  24  36   3  11

2015   6   7  34  78  12  56  13  44  14  23  89  24

2016  36   3  11   6   7  34  78  12  56  13  44  14

2017  23  89  24  36   3  11   6   7  34  78  12  56

2018  13  44  14                                    

> plot(sales.ts,col="red",pch=16,type="b") #换出图,图中的红色线和点部分,即原始数据所呈现出来的数据变化趋势

> sales.filter1<-filter(sales.ts,c(0,rep(1/3,3)),"convolution",sides=1)#系数为0,1/3,1/3,1/3的单边卷积处理,其中有四个系数,表示移动平均的阶数为4

> lines(sales.filter1,col="blue",lwd=1.2,pch=16)#图中的蓝色线

> sales.filter2<-filter(sales.ts,c(0,rep(1/6,6)),"convolution",sides=1)#进行阶数为6,系数为0,1/6.1/6,1/6,1/6,1/6,1/6单边卷积处理。

> lines(sales.filter2,col="green",pch=16,lwd=1.3)#图中绿色线

> sales.filter3<-filter(sales.ts,filter=c(0,rep(1/10,10)),method="convolution",sides=1)#同理,阶数为10进行单边卷积处理

> lines(sales.filter3,col="brown",pch=16,lwd=1.4)#图中棕色线

> #可以看到移动平均模型的阶数越大,曲线抖动的程度越小,越能反映出数据的长期变化趋势。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:时间序列数据 filter 序列数据 时间序列 R函数 filter method 模型

图片1.png (34.04 KB)

图片1.png

沙发
奇渥温·沙加 发表于 2015-12-4 21:11:31
注意:简单/加权移动平均虽然可以过滤到微小的随机变化,突出长期的数据变化趋势,但是如果使用它进行预测,其对数据实际变化并不敏感,整体上会做相应的平移,而这将导致预测值的滞后性。

藤椅
czttcztt 发表于 2016-2-3 01:22:59
filter里的recursive命令做的其实是自回归,而非移动平均

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 04:35