Python構建ARIMA模型

1 可視化分析

1.1 空氣質量和空氣檢測成分分析

import pandas as pd
from statsmodels.stats.diagnostic import acorr_ljungbox # 白噪聲檢驗

filename = r'C:\Users\Administrator\Desktop\data.csv'
data = pd.read_csv(filename)
plt.rcParams['font.sans-serif'] = ['SimHei']  ##能顯示中文
sns.catplot(x='質量等級', y='SO2', kind='box',data=data)
plt.title('SO2和質量等級的箱線圖')

在這裏插入圖片描述

由上圖可知,在中度污染時,SO2的中位數含量高於污染程度爲優的含量,有理由認爲SO2的含量對空氣質量影響不大。
-------------------------------------------根據以上原理,分別做其它空氣成分含量圖。--------------

1.2 不同時間段空氣質量下的空氣含量成分分析

爲了進一步探究連續不同時間段空氣質量下的空氣含量成分分析,對空氣質量、時間、成分進行對比篩選,分析如下:

在這裏插入圖片描述

1.3 季節和空氣成分含量分析

plt.rcParams['font.sans-serif'] = ['SimHei']
sns.catplot(x='季節', y='SO2', kind='box',data=data)
plt.title('SO2和季節的箱線圖')

在這裏插入圖片描述

2 時間序列ARIMA模型分析

2.1 ARMA模型概述

ARMA模全稱爲自迴歸移動平均模型(Auto-regressive Moving Average Model,簡稱 ARMA)是研究時間序列的重要方法。其在經濟預測過程中既考慮了經濟現象在時間序列上的依存性, 又考慮了隨機波動的干擾性, 對經濟運行短期趨勢的預測準確率較高, 是近年應用比較廣泛的方法之一。ARMA模型是由美國統計學家G.E.P.Box 和 G.M.Jenkins在20世紀70年代提出的著名時序分析模型,即自迴歸移動平均模型。ARMA模型有自迴歸模型AR(q)、移動平均模型MR(q)、自迴歸移動平均模型ARMA(p,q) 3種基本類型。其中ARMA(p,q)自迴歸移動平均模型,模型可表示爲:

其中,爲自迴歸模型的階數,爲移動平均模型的介數;表示時間序列在時刻的值;爲自迴歸係數;表示移動平均係數;表示時間序列在時期的誤差或偏差。
2.2 趨勢分析和單位根檢驗
對AQI進行時序圖的折線分析如下,發現AQI具備一定的下降趨勢,時間序列數據不夠平穩,因此對數據進行一階差分。
plt.plot(data[u’AQI’])
plt.title(‘不同時間段AQI折線趨勢圖’)
在這裏插入圖片描述
一階差分後的時序圖

AQIdata=data[u’AQI’]
D_data = AQIdata.diff().dropna()
plt.plot(D_data)
plt.title(‘一階差分後不同時間段AQI折線趨勢圖’)
在這裏插入圖片描述
由上圖可知,一階差分後數據趨於穩定,因此對數據進一步進行ADF單位根檢驗,得出檢驗水平如下:
print(u’差分序列的白噪聲檢驗結果爲:’, acorr_ljungbox(D_data, lags=1))

一階差分的AQI單位根檢驗
t-Statistic Prob1*
Augmented Dickey- Fuller Test Statistic -6.214 0.0000
Test Critical Values 1% level -3.527
5% level -2.903
10% level -2.589
print(‘一階差分序列的檢驗結果爲:’,adfuller(D_data))

由相伴概率知,P遠遠小於0,01,因此認爲序列是平穩的。
2.3模型的識別與選擇
計算出樣本自相關係數和偏相關係數的值之後,我們主要是根據它們表現出來的性質,選擇適當的ARMA模型擬合觀察值序列。這個過程實際上就是要根據樣本自相關係數和偏相關係數的性質估計自相關階數 和移動平均階數,因此模型的識別過程也成爲定階過程。一般ARMA模型定階的基本原則如表2示:

表2 ARMA(p,q)模型選擇原則
ACF PACF 模型定階
拖尾 p階截尾 AR§模型
q階截尾 拖尾 MA(q)模型
拖尾 拖尾 ARMA(p,q)模型

利用Python對差分數據進行操作,可得樣本自相關係數和偏相關係數圖如圖所示:
在這裏插入圖片描述
在這裏插入圖片描述
通過對一階差分的對數序列的自相關係數和偏相關係數圖的分析觀察,可以知道模型大致可選取兩種模型。第一種,自相關係數爲拖尾,而偏相關係數爲一階截尾。此時選取模型可以爲ARIMA(1,1,2)模型。第二種,自相關二階截尾,而偏相關係數爲一階截尾。此時選取模型可以爲ARIMA(2,1,1)模型。
2.4參數估計
選擇擬合好後的模型之後,下一步就是要利用序列的觀察值確定該模型的口徑,即估計模型中未知參數的值。對於一個非中心化ARMA(p,q)模型,有
式中,

該模型共含個未知參數:。對於未知參數的估計方法有三種:矩估計﹑極大似然估計和最小二乘估計。其中本文使用最小二乘估計法對序列進行參數估計。
在ARMA(p,q)模型場合,記

殘差項爲:

殘差平方和爲:

是殘差平方和達到最小的那組參數值即爲的最小估計值。
使用Python操作可得序列兩種可能的參數估計圖如下圖所示:

fit model

from pandas import read_csv
from pandas import datetime
from pandas import DataFrame
from statsmodels.tsa.arima_model import ARIMA
from matplotlib import pyplot

import pandas as pd
filename = r'C:\Users\Administrator\Desktop\data.csv'
data = pd.read_csv(filename)
model = ARIMA(data.AQI, order=(2,1,1))
model_fit = model.fit(disp=0)
print(model_fit.summary())

模型結果如下:

假設AQI用Y表示,則

model = ARIMA(data.AQI, order=(1,1,2))
model_fit = model.fit(disp=0)
print(model_fit.summary())

通過畢竟AIC和BIC選擇模型ARIMA(2,1,1).得到模型的表達公式結果爲:
在這裏插入圖片描述

在這裏插入圖片描述

# plot residual errors


residuals = DataFrame(model_fit.resid)
residuals.plot()
pyplot.show()
residuals.plot(kind='kde')
pyplot.show()
print(residuals.describe())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章