【问题标题】:How to include two observed time series in state space model如何在状态空间模型中包含两个观察到的时间序列
【发布时间】:2019-01-03 00:28:58
【问题描述】:

我正在使用“状态空间建模:局部线性趋势”示例 (https://www.statsmodels.org/stable/examples/notebooks/generated/statespace_local_linear_trend.html)。我正在尝试修改代码以使用两个观察到的时间序列(即两个观察方程)。

我已经修改了设计矩阵(在 init 方法中)和“obs_cov”(在更新方法中)以考虑两个观察到的时间序列,但结果只估计了一个 epsilon .

class LocalLinearTrend(sm.tsa.statespace.MLEModel):
    def __init__(self, endog):
        .
        .
        .
        # Initialize the matrices
        self.ssm['design'] = np.array([[1, 0],
                                  [1, 0]])      # <--- added this
        .
        .
        .


    def update(self, params, *args, **kwargs):
        .
        .
        .
        self.ssm['obs_cov', 0, 0] = params[0]
        self.ssm['obs_cov', 1, 1] = params[0]      # <--- added this
        .
        .
        .

我希望结果方差参数(在变量“params”中)包含 4 个元素(每个观察方程一个 epsilon 以及对应于两个状态变量的 chi 和 zeta 值),但它只包含 3 个元素(chi 、zeta 和单个 epsilon)

【问题讨论】:

    标签: python statsmodels


    【解决方案1】:

    你在正确的轨道上。这里的问题是params 是一个参数数组,params[0] 指的是第一个参数。因此,以下几行:

    self.ssm['obs_cov', 0, 0] = params[0]
    self.ssm['obs_cov', 1, 1] = params[0]
    

    将观察协方差矩阵的两个对角元素设置为相同的值。

    您想要添加一个新参数,您可以通过向param_namesstart_params 属性添加一个新参数来实现。例如,你想要这样的东西:

    @property
    def param_names(self):
        return ['sigma2.measurement.v1', 'sigma2.measurement.v2', 'sigma2.level', 'sigma2.trend']
    
    @property
    def start_params(self):
        std = np.std(self.endog, axis=0)
        return np.r_[std, 1., 1.]
    

    然后,在你的 update 方法中,你会想要这样的东西:

    def update(self, params, **kwargs):
        params = super(LocalLinearTrend, self).update(params, **kwargs)
    
        # Observation covariance
        self.ssm['obs_cov',0,0] = params[0]
        self.ssm['obs_cov',1,1] = params[1]
    
        # State covariance
        self.ssm[self._state_cov_idx] = params[2:]
    

    (注意:添加新参数时,您通常还需要调整transform_paramsuntransform_params 以强制对参数空间进行任何限制。但是,您链接的示例LocalLinearTrend 类中这些函数的版本to 将继续为上面定义的新参数向量工作,所以在这种情况下,您不需要在那里做任何事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多