1.生成时间序列
ts()
ts(data = NA, start = 1, end = numeric(), frequency = 1, deltat = 1, ts.eps = getOption("ts.eps"), class =, names = )
data是数值向量或矩阵,数据框将被强制转化为数值向量;start是收集数据的第一年集第一个间隔期,如2018年第1季度,start = c(2018 , 1);end指终止时间点;frequency指定数据在一年中的频数,如月份为12,季度为4;deltat是frequency的倒数,两者设置其一;names为命名。
可以用plot.ts()绘制时间序列图
2.时间序列的分解
主要有4种影响因素:T(长期趋势),S(季节变动),C(循环变动),e(不规则变动)
估计趋势、季节性、不规则:
decompose()
decompose(x, type = c("additive", "multiplicative"), filter = NULL)
x是时间序列对象;type指定季节分解的形式,选择加法模型还是乘法模型;filter是滤波系数。
stl():使用Loess方法
stl(x, s.window, s.degree = 0,...)
x是时间序列的对象;s.window为字符串“periodic”或Loess方法提取季节的跨度,应为奇数值,没有默认值;s.degree是局部多项式拟合季节性提取的程度,0或1。
两种方法的结果都可以用plot()进行绘制。
3.指数平滑法
HoltWinters()
HoltWinders(x, alpha = NULL, beta = NULL, gamma = NULL, seasonal = c("additive", "multiplicative"), start.periods = 2, l.start = NULL, b.start = NULL, s.start = NULL, optim.start = c(alpha = 0.3, beta = 0.1, gamma = 0.1), optim.control = list())
x是时间序列的对象;alpha、beta、gamma是过滤系数,当beta和gamma都为FALSE时,使用简单指数平滑法(没有趋势,没有季节性),当只有gamma为FALSE时,使用Holt双参数线性指数平滑法(拟合非季节性模型),都不为FALSE时,使用Winters线性和季节性指数平滑法;seasonal选择加法模型还是乘法模型;start.periods是初始时期,用于初始值的自动检验,必须大于等于2;l.start、b.start和s.start分别表示水平、趋势和季节部分的初始值
输出的结果中,alpha、beta和gamma分别对应当前时点的水平、趋势部分的斜率和季节性部分,取值都在0~1,越接近1说明近期观测值再预测中占据的权重越大。
可用forecast()进行预测
4.残差的白噪声检验
相关图检验
acf()
acf(x, lag.max = NULL, type = c("correlation", "covariance", "partial"), plot = TRUE, na.action = na.fail, demean = TRUE, ...)
x为时间序列对象,检验时取模型的残差,model$residuals;lag.max指定计算自相关的最大滞后阶数;type指定计算自相关系数的方式;plot表示是否绘制自相关图。
自相关图中,如果自相关系数迅速衰落,落入边界内,就可能是白噪声;若超过边界,表示存在相关关系,在哪期落入,就是自相关的阶数。
Ljung-Box检验
Box.test()
Box.test(x, lag = 1, type = c("Box-Pierce", "Ljung-Box"), fitdf = 0)
x是检验的时间序列,检验时取模型的残差,model$residuals;lag指定计算相关系数的最大阶数;type指明检验类型,使用Ljung-Box;fitdf指明自由度。
根据检验的P值判断,原假设为不存在自相关。
5.ARIMA模型分析
arima()
arima(x, order = c(0, 0, 0), seasonal = list(order = c(0, 0, 0), period = NA),...)
x是单变量的时间序列;order按顺序设置p,d,q的值;seasonal是季节性部分
也可以通过forecast包中的auto.arima()函数获取恰当的模型参数,参数“ic”设置为BIC,要求较严格。