在拟合UnobservedComponents
模型时,是否可以为状态参数的最终值设置上限?
我们想模拟一种贝叶斯方法,用于选择各州的先验分布,并将最终值设置为具有最高初始值的20%的上限(例如,如果我们为本地级别选择先验值,则值为0.1,则最终值最多为0.12)。
背后的动机来自我们从R移植到Python的算法。当我们在给定的测试数据上拟合局部模型时,最终状态sigma最终约为0.3;在R中,存在上限假设,因此最终结果为0.12,这会产生相当大的不同置信区间。现在,我们一直在尝试对statsmodels中的相同行为进行建模。
通过研究代码,我们发现方法transform_params
似乎能够在初始状态引入边界,但是我们不确定如何使用它来设置20%的上限(或者是否设置为是正确的方法。
答案 0 :(得分:0)
刚刚找到了我所寻找的非常简单而精确的解决方案:我们可以使用输入参数$ valgrind ./a.out
==12820== Memcheck, a memory error detector
==12820== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==12820== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==12820== Command: ./a.out
==12820==
==12820==
==12820== HEAP SUMMARY:
==12820== in use at exit: 0 bytes in 0 blocks
==12820== total heap usage: 1 allocs, 1 frees, 8 bytes allocated
==12820==
==12820== All heap blocks were freed -- no leaks are possible
==12820==
==12820== For counts of detected and suppressed errors, rerun with: -v
==12820== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
,它将已经限制了拟合算法搜索最佳值的边界。
下面是一个示例,如果有人需要这样做:
bounds
如果要为级别优化设置0.1的下边界和0.12的上边界,并且它对应于model = UnobservedComponents(data, level='choose level', exog=more data)
bounds = [(None, None) for _ in range(len(model.param_names))]
中的索引1,可以这样进行:
model.param_names
然后只需运行bounds[1] = (0.1, 0.12)
命令:
fit
请记住,model.fit(bounds=bounds)
中的这些值对应于参数的标准偏差,而不是其方差。
它就像一种魅力:)