Python ARMA MLE(实现文献中的算法) 概述
我正在尝试通过卡尔曼滤波器使用最大似然估计(MLE)实现自回归滑动平均(ARMA)参数优化。我知道我可以使用Python中的statsmodels包来拟合ARMA模型,但我想编写自己的ARMA可能性实现和后续优化,作为未来C/C++实现的原型。另外,当我浏览statsmodels文档时,我发现statsmodels卡尔曼滤波对数似然实现了一个与我在文献中发现的略有不同的表达式 算法 为了计算ARMA对数可能性,我遵循Pearlman 1980年的论文: 高阶自回归移动平均过程精确可能性的算法〉,《生物计量学》67.1(1980):232-233 为了计算初始的p矩阵,我遵循 Gardner,G.,Andrew C.Harvey和Garry DA Phillips。“算法AS 154:通过卡尔曼滤波对自回归移动平均模型进行精确最大似然估计的算法”,《皇家统计学会杂志》。C辑(应用统计)29.3(1980):311-322 对于初始参数值,我目前正在使用statsmodels ARMA模型用于计算ARMA参数初始猜测的内部方法。将来我计划转移到我自己的实现,但我在调试MLE时使用了_fit_start_params 为了优化MLE,我只需在Scipy中使用L-BFGS解算器 代码 这是因为ARMA.\u initial\u p求解的是一个矩阵,其中p[0][0]<0.0。此时,AR参数的当前估计变得非平稳。然后,所有后续迭代都会警告AR和MA参数是非平稳的 问题Python ARMA MLE(实现文献中的算法) 概述,python,algorithm,optimization,kalman-filter,mle,Python,Algorithm,Optimization,Kalman Filter,Mle,我正在尝试通过卡尔曼滤波器使用最大似然估计(MLE)实现自回归滑动平均(ARMA)参数优化。我知道我可以使用Python中的statsmodels包来拟合ARMA模型,但我想编写自己的ARMA可能性实现和后续优化,作为未来C/C++实现的原型。另外,当我浏览statsmodels文档时,我发现statsmodels卡尔曼滤波对数似然实现了一个与我在文献中发现的略有不同的表达式 算法 为了计算ARMA对数可能性,我遵循Pearlman 1980年的论文: 高阶自回归移动平均过程精确可能性的算法〉,
- R趋向于1。对于具有p-AR参数的纯AR过程,它在p步中达到这个极限。基本上,_似然函数中的break语句在Pearlman算法步骤的p次迭代后生效
- L趋向于零向量
- K趋向于F.g.我在计算可能性时通过观察abs(K-F.g)来检查这一点
- 在对数中出现负值警告后,将不再遵守上述限制
def complex_log(val):
'''
Complex logarithm for negative values
Returns log(val) + I*pi
'''
if val < 0.0:
return complex(np.log(np.abs(val)), np.pi)
return np.log(val)
def复杂度日志(val):
'''
负值的复对数
返回日志(val)+I*pi
'''
如果val<0.0:
返回复数(np.log(np.abs(val)),np.pi)
返回np.log(val)
RuntimeWarning: invalid value encountered in log
likelihood += np.log(R[i])
def complex_log(val):
'''
Complex logarithm for negative values
Returns log(val) + I*pi
'''
if val < 0.0:
return complex(np.log(np.abs(val)), np.pi)
return np.log(val)