未观察到的零部件:如何在参数更新时设置边界



在拟合UnobservedComponents模型时,是否可以为状态参数的最终值设置上限?

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

背后的动机来自于我们正在从R移植到Python的一种算法。当我们在给定的测试数据上拟合一个局部水平的模型时,最终状态西格玛最终约为0.3;在R中,存在上限假设,因此最终结果为0.12,这产生了相当不同的置信区间。我们一直在尝试在统计模型中模拟同样的行为。

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

刚刚找到了一个非常简单精确的解决方案:我们可以使用输入参数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中的索引1,可以这样做:

bounds[1] = (0.1, 0.12)

然后运行fit命令:

model.fit(bounds=bounds)

请记住,bounds中的这些值对应于参数的标准差,而不是其方差。

它就像一个符咒:(

最新更新