日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

ARMA 时间序列模型

發(fā)布時(shí)間:2024/3/26 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARMA 时间序列模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

更好的理解協(xié)方差以及相關(guān)系數(shù)

###X因素和Y因素協(xié)方差公式:

自相關(guān)系數(shù)ACF

直觀上來說,ACF 描述了一個(gè)觀測值和另一個(gè)觀測值之間的自相關(guān),包括直接和間接的相關(guān)性信息。

其實(shí)自相關(guān)系數(shù)可以這么理解:把一列數(shù)據(jù)按照滯后數(shù)拆成兩列數(shù)據(jù),在對這兩列數(shù)據(jù)做類似相關(guān)系數(shù)的操作。

這組數(shù)據(jù)是求滯后數(shù)為2的自相關(guān)系數(shù),則變成求{x1,x2,…,x8}和{x3,x4,…,x10}兩者的“相關(guān)系數(shù)”,相關(guān)系數(shù)打引號是因?yàn)檫@個(gè)相關(guān)系數(shù)的公式和以往的有點(diǎn)不一樣。下面看一下公式的對比:

所以,我們可以這么理解自相關(guān)系數(shù), 她就是用來表達(dá)一組數(shù)據(jù)前后數(shù)據(jù) (自己和自己) 的相關(guān)性的。

PACF 是部分自相關(guān)函數(shù)或者偏自相關(guān)函數(shù)。基本上,它不是找到像ACF這樣的滯后與當(dāng)前的相關(guān)性,而是找到殘差(在去除了之前的滯后已經(jīng)解釋的影響之后仍然存在)與下一個(gè)滯后值的相關(guān)性。因此,如果殘差中有任何可以由下一個(gè)滯后建模的隱藏信息,我們可能會(huì)獲得良好的相關(guān)性,并且在建模時(shí)我們會(huì)將下一個(gè)滯后作為特征。請記住,在建模時(shí),我們不想保留太多相互關(guān)聯(lián)的特征,因?yàn)檫@會(huì)產(chǎn)生多重共線性問題。因此,我們只需要保留相關(guān)功能。

直觀上來說,PACF 只描述觀測值 y t y_{t} yt? 和其滯后項(xiàng) y t ? k y_{t-k} yt?k? 之間的直接關(guān)系,調(diào)整了其他較短滯后項(xiàng)( y t ? 1 y_{t-1} yt?1? , y t ? 2 y_{t-2} yt?2? …… y t ? k ? 1 y_{t-k-1} yt?k?1? )的影響。

###截尾與拖尾
####拖尾是指序列以指數(shù)率單調(diào)遞減或震蕩衰減,而截尾指序列從某個(gè)時(shí)間點(diǎn)變得非常小。

出現(xiàn)以下情況,通常視為(偏)自相關(guān)系數(shù)d階截尾:

在最初的d階明顯大于2倍標(biāo)準(zhǔn)差范圍 之后幾乎95%的(偏)自相關(guān)系數(shù)都落在2倍標(biāo)準(zhǔn)差范圍以內(nèi) 且由非零自相關(guān)系數(shù)衰減為在零附近小值波動(dòng)的過程非常突然 出現(xiàn)以下情況,通常視為(偏)自相關(guān)系數(shù)拖尾: 如果有超過5%的樣本(偏)自相關(guān)系數(shù)都落在兩倍標(biāo)準(zhǔn)差范圍之外 或者是由顯著非0的(偏)自相關(guān)系數(shù)衰減為小值波動(dòng)的過程比較緩慢或非常連續(xù)

截尾是指時(shí)間序列的自相關(guān)函數(shù)(ACF)或偏自相關(guān)函數(shù)(PACF)在某階后均為0的性質(zhì)(比如AR的PACF);拖尾是ACF或PACF并不在某階后均為0的性質(zhì)(比如AR的ACF)。
P 階AR 過程可以寫成下面的式子:

yt?=c+?1?yt?1?+?2?yt?2?+……+?p?/yt?p?+εt?

其中 ε t \varepsilon_{t} εt? 是白噪聲, y t ? 1 y_{t-1} yt?1?, y t ? 2 y_{t-2} yt?2? 是滯后項(xiàng)。階數(shù)P 是滯后值,PACF 曲線在該滯后值首次穿過上限置信區(qū)間。這些P 延遲將作為我們預(yù)測AR 時(shí)間序列的特征。

我們不能在這里使用ACF圖,因?yàn)榧词箤τ谶^去很久遠(yuǎn)的滯后項(xiàng),它也會(huì)顯示出良好的相關(guān)性。如果我們考慮了這么多特征,我們將遇到多重共線性問題。這對于PACF圖來說不是問題,因?yàn)樗鼊h除了之前滯后已經(jīng)解釋的成分,因此我們只得到了與殘差相關(guān)的滯后,比如未被較早的滯后項(xiàng)所解釋的成分。

###時(shí)間序列模型

1.時(shí)間序列模型的作用

對未來的資產(chǎn)價(jià)格預(yù)測模擬序列探索金融時(shí)間序列的趨勢和周期性時(shí)間序列與其他變量的內(nèi)在關(guān)系,為策略提供輔助和增強(qiáng)不同時(shí)間序列之間的關(guān)系,發(fā)現(xiàn)新的策略波動(dòng)率建模,期權(quán)相關(guān)的策略

白噪聲

白噪聲是由一組0均值,不變方差,相互獨(dú)立的元素構(gòu)成,當(dāng)然可以對該元素的分布進(jìn)行假設(shè)(如高斯分布)。白噪聲如同他的名字聽起來一樣是雜亂無章的,各元素之間沒有任何聯(lián)系。由白噪聲組成的序列是隨機(jī)游走,隨機(jī)游走序列的自相關(guān)特點(diǎn)是其自相關(guān)函數(shù)幾乎為1并且衰減很慢,這種特征我們稱為長記憶性(分形中我們會(huì)具體討論)。

自回歸模型(AR模型)

其中,yt是當(dāng)前值;μ是常數(shù)項(xiàng);p是階數(shù);γi是自相關(guān)系數(shù),?t是誤差值。

自回歸模型是描述當(dāng)前值與歷史值之間的關(guān)系的模型,是一種用變量自身的歷史事件數(shù)據(jù)對自身進(jìn)行預(yù)測的方法。

自回歸模型的使用有以下四項(xiàng)限制:

該模型用自身的數(shù)據(jù)進(jìn)行預(yù)測,即建模使用的數(shù)據(jù)與預(yù)測使用的數(shù)據(jù)是同一組數(shù)據(jù);
使用的數(shù)據(jù)必須具有平穩(wěn)性;
使用的數(shù)據(jù)必須有自相關(guān)性,如果自相關(guān)系數(shù)小于0.5,則不宜采用自回歸模型;
自回國模型只適用于預(yù)測與自身前期相關(guān)的現(xiàn)象。

移動(dòng)平均模型(MA模型)

其中各個(gè)字母的意義與AR公式相同,θi為MA公式的相關(guān)系數(shù)。

移動(dòng)平均模型關(guān)注的是自回歸模型中的誤差項(xiàng)的累加。它能夠有效地消除預(yù)測中的隨機(jī)波動(dòng)。

自回歸移動(dòng)平均模型(ARMA模型)

在這個(gè)公式中,p與q分別為自回歸模型與移動(dòng)平均模型的階數(shù),是需要人為定義的。γi與θi分別是兩個(gè)模型的相關(guān)系數(shù),是需要求解的。如果原始數(shù)據(jù)不滿足平穩(wěn)性要求而進(jìn)行了差分,則為差分自相關(guān)移動(dòng)平均模型(ARIMA),將差分后所得的新數(shù)據(jù)帶入ARMA公式中即可。

###如何用PACF圖和ACF圖來確定p、q值?

舉例

可以看到ACF是一個(gè)逐漸趨于0的拖尾,而PACF在7階過后系數(shù)為0,所以模型是AR(7)或AR(8),即ARMA(7,0)或ARMA(8,0)。備選模型ARMA(7,1)。

這樣的圖,可以看到PACF是拖尾,ACF自1階過后都落在2倍標(biāo)準(zhǔn)差范圍內(nèi),所以是MA(1)模型。

最后看一個(gè)ARMA模型的例子:

ACF和PACF都呈現(xiàn)拖尾,在1階位置就開始基本落在2倍標(biāo)準(zhǔn)差范圍,所以是ARMA(1,1)模型。

ARIMA模型的建模過程:

完全代碼:解析版

# statsmodels.tsa.arima_model import ARIMA 導(dǎo)入時(shí)序模塊from statsmodels.tsa.arima_model import ARIMA import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns import statsmodels.api as sm from statsmodels.graphics.api import qqplot# 將list形式轉(zhuǎn)換為矩陣形式 data = [5922, 5308, 5546, 5975, 2704, 1767, 4111, 5542, 4726, 5866, 6183, 3199, 1471, 1325, 6618, 6644, 5337, 7064,2912, 1456, 4705, 4579, 4990, 4331, 4481, 1813, 1258, 4383, 5451, 5169, 5362, 6259, 3743, 2268, 5397, 5821,6115, 6631, 6474, 4134, 2728, 5753, 7130, 7860, 6991, 7499, 5301, 2808, 6755, 6658, 7644, 6472, 8680, 6366,5252, 8223, 8181, 10548, 11823, 14640, 9873, 6613, 14415, 13204, 14982, 9690, 10693, 8276, 4519, 7865, 8137,10022, 7646, 8749, 5246, 4736, 9705, 7501, 9587, 10078, 9732, 6986, 4385, 8451, 9815, 10894, 10287, 9666, 6072,5418] data=pd.Series(data)# 設(shè)置索引 data.index=pd.Index(sm.tsa.datetools.dates_from_range('1901', '1990'))#進(jìn)行一階差分 data1=data.diff(1) data1.dropna(inplace=True)# 畫圖部分省略(根據(jù)自相關(guān)系數(shù)圖確定適合的模型) arma_mod1 = sm.tsa.ARMA(data1, (7, 0)).fit() print(arma_mod1.aic, arma_mod1.bic, arma_mod1.hqic) arma_mod2 = sm.tsa.ARMA(data1, (7, 1)).fit() print(arma_mod2.aic, arma_mod2.bic, arma_mod2.hqic) arma_mod3 = sm.tsa.ARMA(data1, (8, 0)).fit() print(arma_mod3.aic, arma_mod3.bic, arma_mod3.hqic)# 找出最適合的模型 # 由上面可以看出ARMA(7,0)模型最佳 # 第四步:進(jìn)行模型檢驗(yàn) # 首先對ARMA(7,0)模型所產(chǎn)生的殘差做自相關(guān)圖 resid = arma_mod1.resid # 一定要加上這個(gè)變量賦值語句,不然會(huì)報(bào)錯(cuò)resid is not defined ax5 = plt.subplot(2, 2, 1) sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40, ax=ax5) ax6 = plt.subplot(2, 2, 2) sm.graphics.tsa.plot_pacf(resid, lags=40, ax=ax6)# 對適合的模型進(jìn)行自相關(guān)(也就是D-W檢驗(yàn)) print(sm.stats.durbin_watson(arma_mod1.resid.values)) # 并觀察是否為正態(tài)分布 fig = qqplot(resid, line='q', ax=ax7, fit=True)# 最后用Ljung-Box檢驗(yàn):檢驗(yàn)的結(jié)果就是看最后一列前十二行的檢驗(yàn)概率(一般觀察滯后1~12階), # 如果檢驗(yàn)概率小于給定的顯著性水平,比如0.05、0.10等就拒絕原假設(shè),其原假設(shè)是相關(guān)系數(shù)為零。 # 就結(jié)果來看,前12階的P值都是大于0.05,所以在0.05的顯著性水平下,不拒絕原假設(shè),即殘差為白噪聲序列。 r, q, p = sm.tsa.acf(resid.values.squeeze(), qstat=True) data2 = np.c_[range(1, 41), r[1:], q, p] table = pd.DataFrame(data2, columns=['lag', 'AC', 'Q', 'Prob(>Q)'])# 第五步:平穩(wěn)模型預(yù)測,對未來十年進(jìn)行預(yù)測 predict_y = arma_mod1.predict('1990', '2000', dynamic=True) # print(predict_y) ax8 = plt.subplot(2, 2, 4) ax9 = data1.loc['1901':].plot(ax=ax8) predict_y.plot(ax=ax8) plt.show()# 還原到原始序列 ts_restored = pd.Series([data[0]], index=[data.index[0]]).append(data1).cumsum()# 第六步:使用ARIMA模型進(jìn)行預(yù)測 model = ARIMA(ts_restored, order=(7, 1, 0)) # 導(dǎo)入ARIMA模型 result = model.fit(disp=-1) # print(result.summary()) result.conf_int() # 模型診斷,可以發(fā)現(xiàn)所有的系數(shù)置信區(qū)間都不為0;即在5%的置信水平下,所有的系數(shù)都是顯著的,即模型通過檢驗(yàn)。# 最后畫出時(shí)序圖 ax10 = plt.subplot(2, 2, 1) ax10 = ts_restored.loc['1901':].plot(ax=ax10) # 注意起點(diǎn)是從1901開始 result.plot_predict(5, 100, ax=ax10) # 因?yàn)榍懊媸?0個(gè)數(shù),所以加上預(yù)測的10個(gè)就是100 plt.show() # 數(shù)據(jù)預(yù)測并畫圖

效果展示



總結(jié)

以上是生活随笔為你收集整理的ARMA 时间序列模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。