如何用Stats Models的Local Linear Trend模型处理缺失值
statsmodels Local Linear Trend 状态空间模型缺失值自动处理方案
自定义的Local Linear Trend类继承自sm.tsa.statespace.MLEModel时,默认未启用缺失值透传逻辑,而官方预实现的SARIMAX类已经内置了相关配置,因此可以直接由卡尔曼滤波模块处理缺失值。可通过以下配置实现缺失值自动处理:
- 步骤1:实例化模型时显式指定缺失值处理参数
实例化Local Linear Trend模型时传入missing='none'参数,告诉statsmodels不要提前删除、校验缺失值,直接将完整序列透传给卡尔曼滤波模块,由滤波逻辑原生处理缺失观测:# 原实例化代码 # mod = LocalLinearTrend(endog) # 修改为以下代码 mod = LocalLinearTrend(endog, missing='none') - 步骤2:拟合时增加适配参数(可选)
若拟合时出现协方差计算异常,可在调用fit()方法时传入cov_type='robust',适配缺失值带来的样本量变化:res = mod.fit(cov_type='robust') - 步骤3:版本校验
若配置后仍然全空,可将statsmodels升级到0.12.0及以上稳定版本,旧版本对自定义状态空间模型的缺失值支持存在已知缺陷。
可使用简易测试序列验证效果,构造包含随机缺失值的时序输入:
import numpy as np endog = np.array([1.1, 2.3, np.nan, 4.7, 5.2, np.nan, 7.9, 8.4]) mod = LocalLinearTrend(endog, missing='none') res = mod.fit() # 输出滤波结果验证缺失位置是否有有效值 print(res.filtered_state)
正常输出中原来为NaN的观测位置会生成对应的状态估计值,不会出现全空的情况。
内容的提问来源于stack exchange,提问作者Andrew Doherty
相关产品推荐
相关产品推荐

