我们正在使用R中的pomp
包拟合一个模型,并希望对我们正在估计的参数设置一些边界,因为它们正在探索一个无意义的空间,我们希望将其排除在该参数空间之外。我们当前的“最佳选择”是转换C中模型代码中的参数,将其限制在上限和下限之间。例如,如果我们想将参数beta
限制在0到0.05之间,我们可以对估计的参数进行logit变换,使其介于0到1之间,然后乘以上限,这就是我们在C
片段中定义模型的代码:beta = ((exp(est_beta)/(1+exp(est_beta))*max_beta;
其中est_beta
是从-Inf到Inf的空间中的参数估计,max_beta
是上限。
所以我的问题是,有没有一种更优雅的方法来1)在pomp
模型中对参数估计施加边界,或者2)在C
中施加边界或创建截断变量?
1条答案
按热度按时间os8fio9y1#
pomp
确实有一个显式工具,用于在核心模型代码之外定义这些转换:www.example.comhttps://kingaa.r-universe.dev/manual/pomp.html#parameter_trans请注意,估算软件经常使用诸如logit之类的低水平转换来实现边界,因此我不会认为这是不优雅的!(例如,Stan:https://mc-stan.org/docs/2_22/reference-manual/variable-transforms-chapter.html)
但是,使用强先验以避免对无意义的空间进行采样可能更有意义。