代码之家  ›  专栏  ›  技术社区  ›  Willian Fuks

不可观察组件:如何设置参数更新的边界?

  •  0
  • Willian Fuks  · 技术社区  · 7 年前

    当安装一个 UnobservedComponents 模型,是否可以为状态参数的最终值设置上限?

    我们想模拟一种贝叶斯方法来选择状态的先验分布,并将最终值设置为初始值的20%的上边界(这样,如果我们选择局部水平的先验值为0.1,则最终值最多为0.12)。

    背后的动机来自于我们从R移植到Python的一个算法。当我们在给定的测试数据上拟合一个局部水平模型时,最终状态sigma最终约为0.3;在R中,存在上边界假设,因此最终结果为0.12,这会产生相当不同的置信区间。我们现在正试图在statsmodels中模拟相同的行为。

    通过研究代码,我们找到了方法 transform_params 它似乎能够在初始状态引入边界,但我们不确定如何使用它来设置20%的上限(或者它是否是正确的方法)。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Willian Fuks    7 年前

    刚刚找到了一个非常简单和精确的解决方案:我们可以使用输入参数 bounds 它已经限制了拟合算法搜索最优值的边界。

    下面是一个例子,以防有人需要这样做:

    model = UnobservedComponents(data, level='choose level', exog=more data)
    bounds = [(None, None) for _ in range(len(model.param_names))]
    

    如果要为级别优化设置下边界0.1和上边界0.12,并且它对应于 model.param_names ,可以这样做:

    bounds[1] = (0.1, 0.12)
    

    那就运行 fit 命令:

    model.fit(bounds=bounds)
    

    记住这些价值观 界限 对应于 标准差 而不是它的方差。

    它就像一个符咒:)