-
自迴歸模型的定義
自迴歸模型(Autoregressive Model)是用自身做迴歸變量的過程,即利用前期若干時刻的隨機變量的線性組合來描述以後某時刻隨機變量的線性迴歸模型[1],它是時間序列中的一種常見形式[2]。
-
AR模型的狀態空間形式(AR-Process in State Space Form)
AR模型可以寫成狀態空間模型的形式[4] [5] [6],令:
-
AR模型的求解
AR模型可以採用Yule-Walker方程的形式進行求解[3]。考慮p階AR模型有相應的AR特徵多項式和相應的AR特徵方程:
-
AR模型示例
5 Python對模型參數的求解
這裏加上一點自己在運用模型時的感受,在實際我在運用AR模型進行時序數據的預測時,最常見有兩個板塊:
(一)AR 模型的判定:
這一部分的主要任務是,判斷該問題是否適用 AR 模型建模,以及大致確定階數 p。
如果一個時間序列滿足以下兩個條件:
- ACF 具有拖尾性,即 ACF(k) 不會在 k 大於某個常數之後就恆等於 0。
- PACF 具有截尾性,即 PACF(k) 在 k>p 時變爲 0。
第 2 個條件還可以用來確定階數 p。考慮到存在隨機誤差的存在,因此 PACF 在 p 階延遲後未必嚴格爲 0 ,而是在 0 附近的小範圍內波動。
例如:
從圖中可以看出:1, 2, 4, 8, 20 都可以採用, 進一步理解就是要採用多少階的模型比如AR(1), AR(2)….但是有一點,從AR模型公式看,當階越大,數據處理難度越高。
(二) AR 模型的參數估計:
1. 模型的有效性檢驗:
一個好的擬合模型應該能夠提取觀測值序列中幾乎所有的樣本相關信息,即殘差序列應該爲白噪聲序列。因此,模型的有效性檢驗即爲殘差序列的白噪聲檢驗。如果殘差序列是白噪聲,那麼理論賞其延遲任意階的自相關係數爲 0,考慮數據的偏差,那麼絕大多數應該在 0 附近的範圍內,通常在 95% 的置信水平(2倍標準差)以內。
2. 參數的顯著性檢驗
這一部分的目標是,刪除那些不顯著參數使模型結構最爲精簡。對於模型參數 aj(j=1,…,p) 的檢驗,其原假設和備擇假設分別爲
檢驗統計量爲 t 統計量:
在給定的顯著水平 α 下,當檢驗統計量 T 大部分位於分點,或該統計量的 P 值小於 α 時,則可以以 1-α 的置信水平拒絕原假設,認爲模型參數顯著。反之,則不能顯著拒絕參數爲 0 的假設。
通過python程序可以得到:
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf #自相關圖
def adf_test(ts):
'''
參數值:
1.t統計量的值
2.t統計量的P值
3.延遲階數
4.ADF迴歸和計算的觀測值的個數
5.配合第一個一起看的,是在99%,95%,90%置信區間下的臨界的ADF檢驗的值
'''
adftest = adfuller(ts, autolag='AIC')
adf_res = pd.Series(adftest[0:4],
index=['Test Statistic','p-value','Lags Used','Number of Observations Used'])
for key, value in adftest[4].items():
adf_res['Critical Value (%s)' % key] = value
return adf_res
inputfile = 'D:/Python/Python_learning/Mach_model/AR_model/data.xlsx' #銷量及其他屬性數據
data = pd.read_excel(inputfile, index_col = u'時間')
#發現圖片有明顯的遞增趨勢,可以判斷是非平穩的序列
data_drop = data.dropna() #將數據data dropna()
plot_acf(data_drop) #自相關圖
plt.show()
adf_res = adf_test(data)
print(adf_res)
程序結果:
運用AR模型後的參數
Test Statistic 1.816580
p-value 0.998381
Lags Used 10.000000
Number of Observations Used 26.000000
Critical Value (10%) -2.630095
Critical Value (5%) -2.981247
Critical Value (1%) -3.711212
dtype: float64
從模型中可以看出“Lags Used ”也就是延遲階數爲:10,算是比較大的階數。
同時,可以繪製出它的自相關圖: