飞道的博客

如何Python或者R语言中实现用ARIMA模型输出参数实施预测

243人阅读  评论(0)

针对文章如何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+ϕ1yt1+ϕ2yt2+ϵ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 (ytc)=ϕ1(yt1c)+ϕ2(yt2c)+ϵ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+ϕ1yt1+ϕ2yt2+ϵ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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场