#加载数据
x=read.table(file.choose())
#生成时间序列对象
xtimeseries
#画时间序列图
plot.ts(xtimeseries)
#增加线性拟合曲线
abline(lm(xtimeseries~time(xtimeseries)))
1、分解时间序列
分解一个时间序列意味着把它拆分成构成元件,一般序列包含一个趋势部分、一个不规则部分,如果是一个季节性时间序列,则还有一个季节性部分。
分解非季节性数据(趋势部分+不规则部分)
估计趋势部分:最常用的方法便是平滑法,比如计算时间序列的简单移动平均。为了更加准确地估计这个趋势部分,我们也许应该尝试下更大的跨度进行平滑。
在R的“TTR”包中的SMA()函数可以用简单的移动平均来平滑时间序列数据
# 使用SMA()函数时,你需要通过参数“n”指定来简单移动平均的跨度
#这仅仅是一个代码例子,该时间序列是有季节变化的
library(TTR)
xtimeseriesSMA
plot.ts(xtimeseriesSMA)
分解季节性数据(季节部分+趋势部分+不规则部分)
#对于可以使用相加模型进行描述的时间序列中的趋势部分和季节性部分,我们可以使用R中“decompose()”函数来估计。这个函数可以估计出时间序列中趋势的、季节性的和不规则的部分,而此时间序列须是可以用相加模型描述的。
xtimeseriescomponents
plot(xtimeseriescomponents)
#从原始时间序列中去除去季节部分。
xtimeseriesseasonallyadjusted
# 我们可以使用“plot()”画出季节性修正时间序列,代码如下:
plot(xtimeseriesseasonallyadjusted)
如果你有一个可用相加模型描述的,并且处于恒定水平和没有季节性变动的时间序列,你可以使用简单指数平滑法对其进行短期预测。
简单指数平滑法提供了一种方法估计当前时间点上的水平。为了准确的估计当前时间的水平,我们使用alpha参数来控制平滑。Alpha的取值在0到1之间。当alpha越接近0的时候,临近预测的观测值在预测中的权重就越小。
2、使用指数平滑法进行预测
指数平滑法可以用于时间序列数据的短期预测。
简单指数平滑法(非季节性变动和处于恒定水平、没明显趋势)
如果你有一个可用相加模型描述的,并且处于恒定水平和没有季节性变动的时间序列,你可以使用简单指数平滑法对其进行短期预测。
# 比如,使用简单指数平滑发对伦敦每年下雨量进行预测,HoltWinters()函数中设定参数beta=FALSE和gamma=FALSE,代码如下:
rainseriesforecasts
#预测的结果值
rainseriesforecasts$fitted
#样本内预测误差的误差平方之和
rainseriesforecasts$SSE
使用R中的“forecast”包中的“forecast.HoltWinters()”函数进行更远时间点上的预测。
library(forecast)
#h参数为预测之后的多少个时间窗口
rainseriescasts2
#绘画预测结果
plot.forecast(rainseriescasts2)
霍尔特指数平滑法(有明显趋势,非季节的相加模型)
如果你的时间序列可以被描述为一个增长或降低趋势的、没有季节性的相加模型,你可以使用霍尔特指数平滑法对其进行短期预测。
Holt指数平滑法估计当前时间点的水平和斜率。其平滑化是由两个参数控制的,alpha,用于估计当前时间点的水平,beta,用于估计当前时间点趋势部分的斜率。
正如简单指数平滑法一样,alpha