针对文章如何MATLAB实现用ARIMA模型输出参数实施预测的补充解释,因为使用Python和R语言进行AR等时间序列模型估计的时候,尤其是AR模型,由于输出的参数结果和MATLAB的不对应该,可能会产生一定的疑惑,因此在这里说明。同样为上篇文章的数据集为例针对AR(2)模型进行建模和参数估计,并输出参数。
from pandas import read_csv
from statsmodels.tsa.arima.model import ARIMA
series = read_csv('daily-minimum-temperatures.csv', header=0, index_col=0)
model = ARIMA(series, order=(2,0,0))
model_fit = model.fit()
ar_coef = model_fit.params
ar_coef
结果输出:
对比上篇博文中的估计结果:
可以看出 ϕ 1 \phi_1 ϕ1、 ϕ 2 \phi_2 ϕ2和 σ 2 \sigma ^2 σ2基本一致,由于估计方法的差异,略有差别,但是Python估计得到的const和MTALAB估计的Constant也即是方程的常数项有较大差别,这是由于两者的公式写法有区别,具体如下:
MATLAB的公式写法:
y t = c + ϕ 1 y t − 1 + ϕ 2 y t − 2 + ϵ t y_t =c+ \phi_1 y_{t-1} + \phi_2 y_{t-2} + \epsilon_t yt=c+ϕ1yt−1+ϕ2yt−2+ϵt
Python或者R语言的公式写法:
( y t − c ) = ϕ 1 ( y t − 1 − c ) + ϕ 2 ( y t − 2 − c ) + ϵ t (y_t -c)= \phi_1 (y_{t-1}-c) + \phi_2 (y_{t-2}-c) + \epsilon_t (yt−c)=ϕ1(yt−1−c)+ϕ2(yt−2−c)+ϵt
按照MATLAB公式写法可以转化为:
y t = ( 1 − ϕ 1 − ϕ 2 ) c + ϕ 1 y t − 1 + ϕ 2 y t − 2 + ϵ t y_t= (1-\phi_1-\phi_2)c +\phi_1 y_{t-1} + \phi_2 y_{t-2} + \epsilon_t yt=(1−ϕ1−ϕ2)c+ϕ1yt−1+ϕ2yt−2+ϵt
也就是说,MATLAB中的公式写法更像直接在回归模型加上常数项,Python和R则是将数据序列减去一个常数(通常是序列均值),然后进行不带常数项进行估计,可以将MATLAB公式中的常数项记为 c m c_{m} cm,Python中的常数项记为 c p c_{p} cp,根据以上两个公式可以得出两者的关系如下:
c m = ( 1 − ϕ 1 − ϕ 2 ) c p c_m = (1-\phi_1-\phi_2)c_p cm=(1−ϕ1−ϕ2)cp
可以在Python中进行验证:
ar_coef["const"]*(1-ar_coef["ar.L1"]-ar_coef["ar.L2"])
输出结果:
上述结果和Python中的输出结果接近。
基于以上分析,调用Python中的参数进行手动预测的时候,需要注意的点就是清楚了其他预测方式就和MATLAB一致了。
R语言和Python相同,下面贴出R语言的代码,不再进行赘述。
# load data
series <- read.csv("daily-minimum-temperatures.csv",header = TRUE,
sep = ",")
temp <- series$Temp
AR2 <- arima(temp, order=c(2,0,0), method="ML")
AR2
AR2$coef["intercept"]*(1-AR2$coef["ar1"]-AR2$coef["ar2"])
结果输出:
参考文献
[1] https://www.stat.pitt.edu/stoffer/tsa2/Rissues.htm
转载:https://blog.csdn.net/Will_Zhan/article/details/116447338