第二章 金融时间序列线性模型
时间序列是指将某一个统计指标在不同时间上的各个数值,按时间先后顺序排列而成的序列。时间序列的发展可以追溯到1927年Yule提出的AR模型和1937年Walker提出的MA模型及将两个模型合并得到的ARMA模型;随后标志性的事件包括1970年Box和Jenkins中提出的ARIMA模型, 1982年Engle提出的ARCH模型, 1985年Bollerslov针对多变量的情况提出的GARCH模型。
1、相关性
1.1 皮尔逊(Pearson)相关系数(通常简称为相关系数)衡量两个变量间的线性相关关系。
但金融指标,特别是各种金融资产收益率的相关性,远非线性相关性这么简单,往往表现出很强的非线性关系。
1.2 斯皮尔曼(Spearman)ρ_s是基于随机变量秩的相关系数,因此通常也被称为Spearman秩相关系数。斯皮尔曼相关系数可看作是Pearson相关系数衍生出的一种度量方法,该方法基于秩的理论,不需要假设变量之间是线性关系,也不是对原始数据直接进行计算,而是将原始数据的秩作为变量计算Spearman相关系数。
1.3 Kendall相关系数τ,又称Kendall秩相关系数,它也是一种秩相关系数。Kendall相关系数τ反映了一致数对和非一致数对的关系。
相关性python代码
import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import pearsonr, spearmanr, kendalltau
# 读取数据
da = pd.read_csv("E://Chapter2/pfyh.txt", header=0)
# 提取数据
x = da['gs'] #工商银行收益率数据
y = da['pf'] #浦发银行收益率数据
# 绘制散点图
plt.scatter(x, y)
plt.xlabel("工商银行月收益率")
plt.ylabel("浦发银行月收益率")
plt.show()
# 计算皮尔逊相关系数
pearson_corr, _ = pearsonr(x, y)
print(f"皮尔逊相关系数: {pearson_corr}")
# 计算斯皮尔曼相关系数
spearman_corr, _ = spearmanr(x, y)
print(f"斯皮尔曼相关系数: {spearman_corr}")
# 计算肯德尔相关系数
kendall_corr, _ = kendalltau(x, y)
print(f"肯德尔相关系数: {kendall_corr}")
2、平稳性
2.1 弱平稳/宽平稳:①如果一个时间序列{x_t}的均值、方差在时间过程上保持常数,②并且在任何两时期内的协方差仅依赖于该两时期间的距离或滞后阶数,而不依赖于计算这个协方差的实际时间,则称时间序列{x_t}是弱平稳的。
2.2 严平稳:如果对所有的t,任意正整数m和任意n个正整数(t_1,⋯,t_n),(x_t_1,⋯,x_t_n)的联合分布与(x_t_1+m,⋯,x_t_n+m)的联合分布是相同的,即:
2.3 自协方差函数(自相关函数的分子):对给定的整数k,称协方差γ_k=Cov(x_t,x_t−k)为时间序列{x_t}的间隔(也称为滞后)为的自协方差(auto-covariance)。
2.4 自相关函数:x_t与x_t−k的相关系数称为x_t的间隔(也称为滞后)为k的自相关(lag-k autocorrelation)系数,通常记为ρ_k。其定义为:
2.5 自相关函数检验
①单个自相关函数检验→使用t统计量检验:
对一个给定的正整数k,如检验:
检验统计量为:
如果{x_t}是平稳高斯序列,且满足当j>k时ρ_j=0,则该t-ratio统计量渐近服从标准正态分布。这时我们可以采用p值来判断是否拒绝原假设,如p很小就拒绝原假设。
②联合检验序列X_t的多个自相关系数是否同时为0→Ljung-Box检验:
一个线性时间序列模型可完全由其ACF来刻画,并且线性时间序列的建模用样本ACF来决定数据的线性动态关系。在许多金融应用中,我们经常需要联合检验x_t的多个自相关系数是否同时为0。
Ljung和Box(1978)提出了如下统计量:
通常会计算出不同滞后阶数的Q统计量、自相关系数和偏自相关系数(一般地,取m=log(T))。类似地,也可采用p值来判断是否拒绝原假设。当p-value<0.05(一般都用1%, 5%, 10%), 拒绝原假设H0,结果显著,序列相关;当p-value>0.05,接受原假设H0,结果不显著,序列不相关,认为是白噪序列。
平稳性检验python代码
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import acf
import numpy as np
# 读取数据
d = pd.read_csv("E://Chapter2/szzz.txt", header=0) #读取上证指数csv文件
# 将索引收益率转换为时间序列
sse = pd.Series(d['IdxMonRet'], index=pd.date_range(start='1991-01', periods=len(d), freq='M'))
# 绘制时间序列图
plt.figure(figsize=(10, 6))
plt.plot(sse)
plt.xlabel("年份")
plt.ylabel("月收益率")
plt.title("上证综指月收益率")
plt.show()
# 计算自相关函数
lag = 24
acf_values = acf(sse, nlags=lag, fft=True)
# 绘制自相关图
plt.figure(figsize=(10, 6))
plt.stem(acf_values[:lag+1], use_line_collection=True)
plt.xlabel("Lag")
plt.ylabel("自相关值")
plt.title("上证综指月收益率自相关图")
plt.show()
2.6 白噪声过程
如果时间序列x_t是一个具有有限均值和有限方差的独立同分布随机变量序列,则称{x_t}为一个白噪声序列(white noise)。事实上,白噪声序列的自相关函数为零(ρ_0=1除外)。对于白噪声序列,所有自相关函数为零。特别地,若x_t还服从均值为0、方差为σ^2的正态分布,则称这个序列为高斯白噪声(Gaussian white noise)。
在实际应用中,如果样本自相关函数近似为零(ACF图中都位于控制线之内或基本不超出控制线),则可认为该序列是白噪声的样本。