一般处理时间序列的基本过程:(无季节趋势)
注:上图中LB检验的统计量纠正:n*(n+2),而不是n*(n-2)
几种基础时间序列模型(模型的具体形式补充见文末):
目录
以《应用时间序列分析》王燕,第四版中p94-p96页中17题数据为例
基础介绍:
一、Python处理
重点参考文章:
时间序列模型(ARIMA和ARMA)完整步骤详述_Foneone的博客-CSDN博客_arma_order_select_ic
1.1.step1:平稳性检验与白噪音检验
首先可以绘制线图直接观察数据走势粗略判断平稳性,既无趋势也无周期;
df.plot(color='blue',title='data-17') #绘制时间序列的线图
1.1.1平稳性检验:ADF检验
· 检验假设:H0:存在单位根 vs H1:不存在单位根
如果序列平稳,则不应存在单位根,所以我们希望能拒绝原假设
· python代码:adfuller
from statsmodels.tsa.stattools import adfuller
adftest = adfuller(x, autolag='AIC') #ADF检验
检验结果如下:
adftest[0]:ADF检验的t值; adftest[1]:ADF检验的t值的p值; adftest[4:6]:ADF检验对应三个置信度(1%,5%,10%)的t值,可以直接将 adftest[0]与这三个值做比较;
由本输出结果来看-5.7185显著小于后面三个t值,且p值接近为0,因而在1%的显著水平下拒绝原假设,认为该序列平稳;
1.1.2差分修正:
若不平稳可以考虑做差分运算修正为平稳序列。若差分后平稳,则对原序列建立ARIMA模型。
· python代码:timeseries.diff( )
#### 差分运算
def diff(timeseries):
d1_sale=timeseries.diff(periods=1).dropna()#dropna删除NaN
d1_sale.plot(color='orange',title='diff1')
return d1_sale
1.1.3白噪音检验:L-B统计量/Q统计量
· 检验假设与统计量:
(上图a.中的“残差”应当替换为“序列”)通常m取【n/10】or【根号n】若观测量较小也可以取【n/4】;若拒绝原假设则认为不是白噪音检验
· python代码:acorr_ljungbox
from statsmodels.stats.diagnostic import acorr_ljungbox #白噪声检验
test_value = acorr_ljungbox(timeseries, lags=1)
检验结果如下:
test_value[1]为p值,所以可以在5%的显著水平下认为该序列不是一个白噪音序列
1.2.step2:模型识别与定阶
1.2.1法一:观察ACF与PACF的拖尾与截尾
· python代码:
plot_acf(timeseries,lags) #lags:延迟阶数
plot_pacf(timeseries,lags)
import statsmodels.api as sm
from statsmodels.graphics.tsaplots import plot_acf,plot_pacf
def determinate_order_acf(timeseries):
plot_acf(timeseries,lags=30) #自己定延迟数
plot_pacf(timeseries,lags=30)
plt.show()
输出结果如下: