如何从数据生成状态空间模型?如何用statsmodels提取SARIMAX对应矩阵?
SARIMAX状态空间矩阵提取方法
可以直接通过statsmodels获取SARIMAX对应的状态空间所有矩阵系数,操作逻辑如下:
拟合SARIMAX模型后,结果对象内置的ssm属性即为当前参数对应的状态空间实例,所有标准状态空间矩阵均存储在该实例中,可通过属性名或键值直接调取。
常用矩阵对应调取方式
- 状态转移矩阵(T):
ssm['transition']或ssm.transition - 观测矩阵(Z):
ssm['design']或ssm.design - 状态扰动协方差矩阵(Q):
ssm['state_cov']或ssm.state_cov - 观测扰动协方差矩阵(H):
ssm['obs_cov']或ssm.obs_cov - 状态截距向量(c):
ssm['state_intercept']或ssm.state_intercept - 观测截距向量(d):
ssm['obs_intercept']或ssm.obs_intercept - 初始状态均值:
ssm.initial_state_mean - 初始状态协方差:
ssm.initial_state_cov
代码示例
import numpy as np from statsmodels.tsa.statespace.sarimax import SARIMAX # 模拟测试序列 np.random.seed(42) y = np.random.normal(size=120) # 拟合SARIMAX模型 model = SARIMAX(y, order=(1,1,1), seasonal_order=(1,1,1,12)) results = model.fit(disp=False) # 读取状态空间实例 ssm = results.ssm # 提取对应矩阵 transition_mat = ssm['transition'] design_mat = ssm['design'] state_cov_mat = ssm['state_cov'] obs_cov_mat = ssm['obs_cov']
如果需要获取卡尔曼滤波每一步迭代对应的动态矩阵,可从results.filter_results属性中调取对应字段。
内容的提问来源于stack exchange,提问作者giulia
相关产品推荐
相关产品推荐

