在拟合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
中的这些值对应于参数的标准差,而不是其方差。
它就像一个符咒:(