pandas autocorr() 和 statsmodels ARIMA 之间的参数估计差异

Difference in parameter estimates between pandas autocorr() and statsmodels ARIMA

我有一个相当基本的问题。我正在尝试拟合一个非常基本的 AR1 模型 y(t) = a + b* y(t-1) + epsilon

示例数据:

import numpy as np
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
np.random.seed(42)
lData = np.random.normal(size=100)
lData = pd.Series(lData)
lData.autocorr()

以上代码给出自相关系数为-0.0215481

lAR1 = ARIMA(lData, order = (1,0,0))
lAR1_fit = lAR1.fit()
lAR1.params

以上代码给出的 ar.L1 估计为 -0.021392

这两个结果不应该一样吗?我做错了什么?

谢谢。

这里有两点。

首先,AR(1) 模型中系数的估计与(自动)相关无关,而是 lData[1:]lData[:-1] 上的回归系数,可以手动计算

np.corrcoef(lData[1:],lData[:-1])*np.std(lData[1:])/np.std(lData[:-1])

等于-0.0215023:

array([[ 0.99787211, -0.0215023 ],
       [-0.0215023 ,  0.99787211]])

其次,ARIMA 实现了许多产生略有不同结果的拟合方法,请参阅 docs 据我所知,默认值是 'innovations_mle',如

lAR1_fit = lAR1.fit(method = 'innovations_mle')

产生与没有 method = ... 规范相同的结果。

据我所知,最接近滞后值标准回归的是 'yule_walker' 方法:

lAR1_fit = lAR1.fit(method = 'yule_walker')

这会产生 -0.021508,这与我们在回归计算中手工得到的结果非常接近——差异可以归因于数值计算中的舍入误差

const    -0.103945
ar.L1    -0.021508
sigma2    0.816144
dtype: float64