使用filter函数进行线性过滤时间序列数据,来分析时间序列数据变化的趋势变化。Filter函数是一个过滤函数,具体使用方法为filter(时间序列向量X,filter=c(组成的线性模型系数),method=“过滤的样式”,sides=1或2)。其中第一个参数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)#图中棕色线
> #可以看到移动平均模型的阶数越大,曲线抖动的程度越小,越能反映出数据的长期变化趋势。


雷达卡





京公网安备 11010802022788号







