上一篇文章我们探讨了采用AR模型对时序数据进行建模,总的看来AR模型对金融序列建模并不是很理想。这一节我们主要讨论时序数据移动平均模型。
首先我们介绍MA模型的基本概念:
移动平均模型MA(q)其实和自回归模型有相似之处,不同之处在于移动平均是以过去的残差项也就是白噪声来做线性组合,而AR模型是以过去的观察值来做线性组合。MA的出发点是通过组合残差项来观察残差的振动.
MA(q)模型定义如下:
如果一个单变量时序数据 { y t ; t = 1 , 2 , . . . } \{y_t;t=1,2,...\} { yt;t=1,2,...},
y t = ω t + β 1 ω t − 1 + . . . + β p ω t − p y_t=\omega_t+\beta_1\omega_{t-1}+...+\beta_p\omega_{t-p} yt=ωt+β1ωt−1+...+βpωt−p
= ω t + ∑ t = 1 p β i ω t − i =\omega_t+\sum_{t=1}^{p}\beta_i\omega_{t-i} =ωt+t=1∑pβiωt−i
与前面文章中相同
下面我们以β = 0.6来模拟一个MA(1)过程
# Simulate an MA(1) process
n = int(1000)
# set the AR(p) alphas equal to 0
alphas = np.array([0.])
betas = np.array([0.6])
# add zero-lag and negate alphas
ar = np.r_[1, -alphas]
ma = np.r_[1, betas]
ma1 = smt.arma_generate_sample(ar=ar, ma=ma, nsample=n)
_ = tsplot(ma1, lags=30)
mdl_ma_sim = smt.ARMA(ma1, order=(0, 3)).fit(
maxlag=max_lag, method='mle', trend='nc')
print(mdl_ma_sim.summary())
Y = indexs_logret['国内股票']
max_lag = 30
mdl_ma_gg = smt.ARMA(Y, order=(0, 3)).fit(
maxlag=max_lag, method='mle', trend='nc')
print(mdl_ma_gg.summary())
_ = tsplot(mdl_ma_gg.resid, lags=max_lag)
Y = indexs_logret['香港股票']
max_lag = 30
mdl_ma_gg = smt.ARMA(Y, order=(0, 3)).fit(
maxlag=max_lag, method='mle', trend='nc')
print(mdl_ma_gg.summary())
_ = tsplot(mdl_ma_gg.resid, lags=max_lag)
Y = indexs_logret['国内债券']
max_lag = 30
mdl_ma_gg = smt.ARMA(Y, order=(0, 3)).fit(
maxlag=max_lag, method='mle', trend='nc')
print(mdl_ma_gg.summary())
_ = tsplot(mdl_ma_gg.resid, lags=max_lag)
本文展示了采用Python语言为四个指数时序数据进行移动平均建模,介绍了MA模型等相关概念。