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
我有一个相当基本的问题。我正在尝试拟合一个非常基本的 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