用R来做时间序列

star2017 1年前 ⋅ 9819 阅读

from http://blog.sina.com.cn/s/blog_6bb07f830100xh0y.html

第一部分:怎么将数组转化为时间序列?
ts(x, start=1,frequency=4) # 将x转化为时间序列model

通常状况下,当frequency=4,12等特殊的时间遍历变量,时间序列会自动变成按照季度或者按照月来组织,当frequency=4,如果start是第三个季度,可以用ts(x, start(1980,3),frequency=4)来描述

第二部分:ARMA模型理论篇

X[t] = a[1]X[t-1] + … + a[p]X[t-p] + e[t] + b[1]e[t-1] + … + b[q]e[t-q]

p:AR的阶数
p表示时间序列的相关性,即当时状态最多与p时刻前的状态有关,用偏自相关函数判断,偏自相关系数表现为p阶截尾,表示给定x[t-1], …x[t-p+1]后,x[t-p]对x[t]的影响程度
d:差分阶数
q:MA的阶数,误差项的相关系数,用自相关函数判断,自相关系数表现为q阶截尾,自相关系数表示x[t]与x[t+q]的相关系数

AR模型特点:偏自相关系数p阶截尾,自相关系数拖尾
MA模型特点:自相关系数q阶截尾,偏自相关系数拖尾
ARMA模型特点:自相关系数拖尾,偏自相关系数拖尾,其中偏自相关系数p阶显著,自相关系数q阶显著

第三部分:ARMA模型实践篇

R中时间序列的函数:arima(x, order=c(p,d,q))
x = arima.sim(list(order=c(1,0,0), ar=.9), n=100) + 50

arima(x, order = c(1, 0, 0))
Call:
arima(x = x, order = c(1, 0, 0))

Coefficients:
         ar1  intercept ----------请注意这里的intercept其实表示mean
      0.8517    50.9829 --------ar1下面的系数表示AR模型中的系数
s.e.  0.0527     0.6601

请注意:这个结果表达的含义是:
x(t+1)-50.9829=0.8517*(x(t)-50.9829)+w(t)

而不是:x(t+1)=0.8517*x(t)+50.9829+w(t)

预测函数:predict(model, n.ahead=T)

注意:不要轻易尝试d不等于0的情况,R的diff模型存在很多和常规不一样的地方。非常容易出错

第四部分:趋势项分解

model<-stl(x, s.windows=period)

分解后:
model$time.series[,1]:趋势项
model$time.series[,2]:季节项
model$time.series[,3]:时间序列项

stl似乎并没有提供自带的预测方法,而事实上,从图中其实能够很容易的看出trend和季节项,不如采用回归来完成这件事:

Q = factor(rep(1:4,21)) # make (Q)uarter factors [that's repeat 1,2,3,4, 21 times] trend = time(jj)-1970 # not necessary to "center" time, but the results look nicer reg = lm(log(jj)~0+trend+Q, na.action=NULL) # run the regression without an intercept

附录:做时间序列经常用到的小trick
一、平滑函数:filter
k = c(.5,1,1,1,.5) # k is the vector of weights
k = k/sum(k)
[1] 0.125 0.250 0.250 0.250 0.125
k_smooth = filter(x, sides=2, k)

二、差分函数:diff
diff(x, lag=1,differences=1)
lag:差分间距
differences:差分的次数
当lag=m,diff=1
结果为: a[m+1]-a[1], a[m+2]-a[2], …

当lag=m,diff=2
第一步:先做一次lag=m的差分,得到:
a[m+1]-a[1], a[m+2]-a[2], …
第二步:即:令b[1] = b[m+1]-a[1], b[2] = b[m+2] – a[2], …,再做一次lag=2的差分
b[m+1]-b[1], b[m+2]-b[2], …

参考资料:http://www.stat.pitt.edu/stoffer/tsa2/R_time_series_quick_fix.htm

原创文章,作者:xsmile,如若转载,请注明出处:http://www.17bigdata.com/%e7%94%a8r%e6%9d%a5%e5%81%9a%e6%97%b6%e9%97%b4%e5%ba%8f%e5%88%97/

更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: