2020-03-28 线性时间序列模型

Python017

2020-03-28 线性时间序列模型,第1张

课程采用Ruey S. Tsay的《金融数据分析导论:基于R语言》(Tsay 2013 ) (An Introduction to Analysis of Financial Data with R)作为主要教材之一。

时间序列的线性模型,包括:

股价序列呈现缓慢的、非单调的上升趋势, 局部又有短暂的波动。

可口可乐公司每季度发布的每股盈利数据。 读入:

时间序列图:

序列仍体现出缓慢的、非单调的上升趋势,又有明显的每年的周期变化(称为季节性), 还有短期的波动。

下面用基本R的 plot() 作图并用不同颜色标出不同季节。

现在可以看出,每年一般冬季和春季最低, 夏季最高,秋季介于夏季和冬季之间。

收益率在0上下波动,除了个别时候基本在某个波动范围之内。

用xts包的 plot() 函数作图:

聚焦到2004年的数据:

红色是6月期国债利率, 黑色是3月期国债。 一般6月期高, 但是有些时期3月期超过了6月期,如1980年:

如图标普500月收益率那样的收益率数据基本呈现出在一个水平线(一般是0)上下波动, 且波动范围基本不变。 这样的表现是时间序列“弱平稳序列”的表现。

弱平稳需要一阶矩和二阶矩有限。某些分布是没有有限的二阶矩的,比如柯西分布, 这样的分布就不适用传统的线性时间序列理论。

稍后给出弱平稳的理论定义。

如图2可口可乐季度盈利这样的价格序列则呈现出水平的上下起伏, 如果分成几段平均的话, 各段的平均值差距较大。 这体现出非平稳的特性。

以下为一堆公式推导,具体查看: http://www.math.pku.edu.cn/teachers/lidf/course/fts/ftsnotes/html/_ftsnotes/fts-tslin.html#fig:tslin-intro-sp02

时间序列

自协方差函数

弱平稳序列

图6 是IBM股票月度简单收益率对标普500收益率的散点图。 从图中看出, 两者有明显的正向相关关系。

对于不独立的样本, 比如时间序列样本, 也可以计算相关系数, 其估计合理性需要一些模型假设。

对于联合分布非正态的情况, 有时相关系数不能很好地反映X和Y的正向或者负向的相关。 斯皮尔曼(Spearman)相关系数是计算X的样本的秩(名次)与Y的样本的秩之间的相关系数, 也称为Spearman rank correlation。

另一种常用的非参数相关系数是肯德尔tau(Kendall’s )系数, 反映了一致数对和非一致数对之间的差别。

即两个观测的分量次序一致的概率减去分量次序相反的概率。 一致的概率越大,说明两个的正向相关性越强。

对IBM收益率与标普收益率数据计算这三种相关系数:

自相关函数 (Autocorrelation function, ACF)参见 (何书元 2003 ) P.131 §4.2的例2.1。 原始文献: MAURICE STEVENSON BARTLETT, On the Theoretical Specification and Sampling Properties of Auto-Correlated Time Series, Journal of the Royal Statistical Society (Supplement) 8 (1946), pp. 24-41.

在基本R软件中, acf(x) 可以估计时间序列 x 的自相关函数并对其前面若干项画图。

例:CRSP的第10分位组合的月对数收益率, 1967-1到2009-12。 第10分位组合是NYSE、AMEX、NASDAQ市值最小的10%股票组成的投资组合, 每年都重新调整。

图6: CRSP第10分位组合月对数收益率

用 acf() 作时间序列的自相关函数图:

acf() 的返回值是一个列表,其中 lag 相当于, acf 相当于。 用 plot=FALSE 取消默认的图形输出。

有研究者认为小市值股票倾向于在每年的一月份有正的收益率。

为此,用对的检验来验证。 如果一月份有取正值的倾向, 则相隔12个月的值会有正相关。

计算统计量的值,检验p值:

值小于0.05, 这个检验的结果支持一月份效应的存在性。

Ljung和Box(Ljung and Box 1978 )对Box和Pierce(Box and Pierce 1970 )提出了混成统计量(Portmanteau statistic)

检验方法进行了改进

在R软件中, Box.test(x, type="Ljung-Box") 执行Ljung-Box白噪声检验。 Box.test(x, type="Box-Pierce") 执行Box-Pierce混成检验。 用 fitdf= 指定要减去的自由度个数。

检验IBM股票月收益率是否白噪声。

考虑IBM股票从1926-01到2011-09的月度收益率数据, 简单收益率和对数收益率分别考虑。

读入数据:

读入的是简单收益率的月度数据。 作ACF图:

从ACF来看月度简单收益率是白噪声。

作Ljung-Box白噪声检验, 分别取和:

在0.05水平下均不拒绝零假设, 支持IBM月度简单收益率是白噪声的零假设。

从简单收益率计算对数收益率, 并进行LB白噪声检验:

在0.05水平下不拒绝零假设。

Box-Pierce检验和Ljung-Box检验受到取值的影响, 建议采用, 且序列为季度、月度这样的周期序列时, 应取为周期的整数倍。

对CRSP最低10分位的资产组合的月简单收益率作白噪声检验。

此组合的收益率序列的ACF:

针对和作Ljung-Box白噪声检验:

在0.05水平下均拒绝零假设, 认为CRSP最低10分位的投资组合的月度简单收益率不是白噪声。

有效市场假设认为收益率是不可预测的, 也就不会有非零的自相关。 但是,股价的决定方式和指数收益率的计算方式等可能会导致在观测到的收益率序列中有自相关性。 高频金融数据中很常见自相关性。

常见的白噪声检验还有TREVOR S. BREUSCH (1978) 和LESLIE G. GODFREY (1978)提出的拉格朗日乘子法检验(LM检验)。 零假设为白噪声, 对立假设为AR、MA或者ARMA。 参见:

设是独立同分布的二阶矩有限的随机变量, 称为独立同分布白噪声(white noise)。 最常用的白噪声一般假设均值为零。 如果独立同分布, 称为高斯(Gaussian)白噪声或正态白噪声。

白噪声序列的自相关函数为零(除外)。

实际应用中如果样本自相关函数近似为零 (ACF图中都位于控制线之内或基本不超出控制线), 则可认为该序列是白噪声的样本。

如:IBM月度收益率可以认为是白噪声(见例 3.3 ); CRSP最低10分位投资组合月度收益率不是白噪声(见例 3.4 )。

不是所有的弱平稳时间序列都有这样的性质。 非平稳序列更是不需要满足这些性质。

公式就不赘述

如果从时间序列的一条轨道就可以推断出它的所有有限维分布, 就称其为严平稳遍历的。 这里不给出遍历性的严格定义, 仅给出一些严平稳遍历的充分条件。 可以证明, 宽平稳的正态时间序列是严平稳遍历的, 由零均值独立同分布白噪声产生的线性序列是严平稳遍历的。

Tsay, Ruey S. 2013. 金融数据分析导论:基于R语言 . 机械工业出版社.

何书元. 2003. 应用时间序列分析 . 北京大学出版社.

Box, GEP, and D. Pierce. 1970. “Distribution of Residual Autocorelations in Autoregressive-Integrated Moving Average Time Series Models.” J. of American Stat. Assoc. 65: 1509–26.

Ljung, G., and GEP Box. 1978. “On a Measure of Lack of Fit in Time Series Models.” Biometrika 66: 67–72.

参考学习资料: http://www.math.pku.edu.cn/teachers/lidf/course/fts/ftsnotes/html/_ftsnotes/fts-tslin.html#fig:tslin-intro-sp02

1. Average Methond 平均法:预测未来值等于历史值的平均值

2. Naive Method 傻瓜法:预测未来值等于最后一个样本【对经济、金融时间序列适用】,也称作 random walk forecasts

【补充小知识:ARIMA模型】

3. Seasonal naive method 季节性傻瓜法:适用于强季节性数据,取同上一年同季节的最后一个观测值。

4. Drift method 趋势|漂流法:在傻瓜法的基础上增加一个变量使预测值随着时间变化增加或减少,变量值为历史变量的平均值。

例子:

a. 应用前三种方法看季节性啤酒产量的预测数据

b. 非季节性方式预测谷歌每日收盘股价

这些简单的办法通常是被作为benchmarks而非实际选择的方式。

通过调整历史数据可以简化预测工作。以下有四种数据调整方式:

>monthdays() 可以计算每个月或季度的天数

对任何受人数影响的数据都可以调整为人均值(per-capita data)。例如考虑某地医疗资源的变化情况,可以看每千人床位数的变化,如此可以看是否是真的资源增长还是仅由于当地总人口增加。

受金钱影响的数据最好在建模前进行调整。例如平均新房费用会由于过去几十年的通货膨胀而增长。为了做此调整需用到price index(物价指数)————参考cpi

当数据呈现出序列级上升或下降的变化时,则需要进行数学转换。

1. 取对数

2. 幂变换(power transformation):平方根|立方根

3. Box-cox transformation 

选定转换方式后,完成对模型数据的预测,需要即将预测结果在反向转换为真实数据。反向box-cox转换公式:

幂变换的特点:

1. 原始变量需大于0,若小于0则应对所有变量加一个常数使得yt大于0。

2. 选择简单的λ值,便于理解

3. 预测结果与λ的值相关性较小

4. 通常不需要转换,转换后对预测结果影响不大,但对于预测区间有较大影响

通过数学转化预测后反转的预测值不是预测分布的均值,通常是中位数。(例如,当需要将不同地区的销售预测值加总预估整个国家的预估值时,只能用均值加总而不能用中位数加总)。对于box-cox转换,均值的反转公式为

中位数和均值间的差异即为bias(偏差值),当需要用均值而非中位数时,我们说某一时点的预估值已经进行过偏值调整。

对于大多数时间序列模型,残值是实际值与拟合值之间的差值,可用来检测模型是否足够抓住了数据的信息。好的预测模型的残值有以下两个特点:1. 残值不相关 【不相关证明残值中还有应该用于预估的信息,解决方式见chapter9】;2. 均值为0 【不为0证明预估值时有偏差的,如偏差值为m,则解决方案是对所有预估值加偏差值m】;3. 有连续变量;4. 符合正态分布。

1. Box-Pierce test

2. Ljung-Box test

checkresiduals()可用于检测残值情况

通常在选择模型时会预留出两组,分为实验组(test)和训练组(training),训练组(training)是用来预估预测方法的准确性。通常实验组的大小是总样本的20%。理想状态下,实验组应该至少覆盖所预估的最远时段,但仍需注意:1. 能很好的拟合训练集的模型并不一定能很好的做预测;2. 最佳组合的模型应该满足包含足够的变量;3. 过度拟合模型和未能判别系统性pattern一样失败。

1. window(),可以用于提取部分时间序列

2. subset(),可以通过索引去选择分组

3.head()| tail(),可以取前几个或后几个观测值

预估偏差指预估值与实际值之间的差值。 ,其中训练集(training data)数据为 ,测试集(test data)数据为 。

预估偏差和残值的差异:1.残值是基于训练集计算的,而预估偏差是基于测试集计算的;2. 残值是基于一步测算(one-step forecast)的,而预估偏差则是涉及到多步预估(multi-step forecasts)

最常用的两个规模性检验是基于绝对偏差或平方偏差:

1. MAE(Mean absolute error)平均绝对偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

2. RMSE(Root mean squared error)均方根偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

通常比较一个单一时间序列预估方式或同单位下的几个时间序列,会选择用MAE。降低MAE的方法可预估中位数,降低RMSE则可预估平均值。

,不需考虑单位,因而常被用于比较不同数据集中的预测表现。常用的方式是:

MAPE(Mean absolute percentage error)平均绝对百分比误差=

,范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。

可以看到,MAPE跟MAE很像,就是多了个分母,注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!

由于其对负偏差的惩罚更高,因而又引入了:

sMAPE(symmetric MAPE)对称平均绝对百分比误差=

注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!

用于比较不同单位的不同序列的预估效果。

·非季节性时间序列,一个通用的方式是运用naive forecast的方式定义一个比例偏差值: ,当qj小于1时,则该方法比基于训练集用naive forecast计算的值要更优,反之当qj大于1时则更差。

·季节性时间序列,是运用seasonal forecast的方式定义比例偏差:

MASE(Mean absolute scaled)=

【预估评价指标: 预测评价指标RMSE、MSE、MAE、MAPE、SMAPE_人工智能_藏知阁-CSDN博客 】

####example

accuracy() :Returns range of summary measures of the forecast accuracy. If x is provided, the function measures test set forecast accuracy based on x-f. If x is not provided, the function only produces training set accuracy measures of the forecasts based on f["x"]-fitted(f). All measures are defined and discussed in Hyndman and Koehler (2006).

tsCV()可以用来做时间序列交叉验证

【参考天元大神的小笔记: R语言时间序列分析(七):模型准确度估计 - 知乎 】

预测区间的通用公式:

是h-step预估值的正态分布的预计值,c的对应关系是:

###R中forecast包里常用函数: