R语言中时间序列的内容主要有:时间序列的创建,ARMA模型的建立与自相关和偏自相关函数。
一、 时间序列的创建
时间序列的创建函数为:ts().函数的参数列表如下:
ts(data = NA, start = 1, end = numeric(),frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), class = , names = )
参数说明:data:这个必须是一个矩阵,或者向量,再或者数据框frame
Frequency:这个是时间观测频率数,也就是每个时间单位的数据数目
Start:时间序列开始值,允许第一个个时间单位出现数据缺失
举例:ts(matrix(c(NA,NA,NA,1:31,NA),byrow=T,5,7),frequency=7,names=c("Sun","Mon ","Tue", "Wen" ,"Thu","Fri"," Sat"))
运行上面的代码就可以得到一个日历:
Sun Mon Tue Wen Thu Fri Sat
NA NA NA 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 NA
在R语言中本身也有不少数据集,比如统计包中的sunspots,你可以通过函数data(sunspots)来调用它们。
二、 一些时间序列模型
这里主要介绍AR,MA,随机游走,余弦曲线趋势,季节趋势等
首先介绍一下AR模型:AR模型,即自回归(AutoRegressive,AR)模型,数学表达式为: AR :y(t)=a1y(t-1)+...any(t-n)+e(t)
其中,e(t)为均值为0,方差为某值的白噪声信号。
那么产生AR模型的数据,我们就有两种方法:1、调用R中的函数filter(线性滤波器)去产生AR模型;2、根据AR模型的定义自己编写函数
先说第一种方法:调用R中的函数filter(线性滤波器)去产生AR模型
介绍函数filter的用法如下:
filter(x, filter, method = c("convolution", "recursive"),
sides = 2, circular = FALSE, init)
对于AR(2)模型x(t)=x(t-1)--0.9x(t-2)+e(t)
w<-rnorm(550)#我们假定白噪声的分布是正态的。
x<-filter(w,filter=c(1,-0.9),"recursive")
#方法:无论是“卷积”或“递归”(可以缩写)。如果使用移动平均选择“卷积”:如果“递归”便是选择了自回归。
再说第二种方法:依据定义自己编程产生AR模型,还是以AR(2)模型x(t)=x(t-1)--0.9x(t-2) +e(t)为例,可编写函数如下:
w<-rnorm(550)
AR<-function(w){
x<-w
x[2]=x[1]+w[1]
for(i in 3:550)
x[i]=x[i-1]-0.9*x[i-2]+w[i]
x
}
调用AR(W)即可得到。如果对相同的随机数,我们可以发现两个产生的时间序列是一致的。当然对于第二种方法产生的序列需要转换为时间序列格式,用as.ts()处理。
类似的,我们给出MA,随机游走的模拟:
MA模型:
w<-rnorm(500)
v<-filter(w,sides=2,rep(1,3)/3)
随机游走:
w<-rnorm(200)
x<-cumsum(w)#累计求和,seeexample:cumsum(1:!0)
wd<-w+0.2
xd<-cumsum(wd)