2024-04-20 14:13:39 发布
网友
我遵循了pymc3中关于线性回归的第一个教程。我试着让它适应一个不同的功能,那就是:
Y_obs = log (x+a)^2 / (x-c)^2
如您所见,c为负数可能更好。因此,我想知道如何用负值来定义c的先验值。{1分布,但仅限于负分布。在
c
一般来说,我想知道是否可以设置参数的界限?在
例如,在设置的模型中使用Stan(或pyStan),可以编写:
在[0,1]中设置p\。在
要获得一个约束为负值的变量,可以定义一个正变量并取其负值:
a = pm.HalfNormal('a', sd=1) b = -a
如果您想访问跟踪中的值,可以告诉pymc3将其包装在pm.Deterministic中(在这种简单的情况下,可能没有用处…)
pm.Deterministic
使用pm.Bound添加任意约束:
pm.Bound
NegNormal = pm.Bound(pm.Normal, lower=-np.inf, upper=0) a = NegNormal('a', mu=0, sd=1)
但请记住,这不会改变正态分布的密度,所以它不会再积分到1。通常这并不重要,因为logp中的差异将是一个常量,我们不关心大多数事情的常量。如果它是重要的(如果下限或上限是一个变量的话),您可以通过使用pm.DensityDist定义自己的发行版来解决这个问题(顺便说一下,stan中有相同的问题,尽管它支持使用T[a,b]语法的截断分布)。在
pm.DensityDist
要获得一个约束为负值的变量,可以定义一个正变量并取其负值:
如果您想访问跟踪中的值,可以告诉pymc3将其包装在
^{pr2}$pm.Deterministic
中(在这种简单的情况下,可能没有用处…)使用
pm.Bound
添加任意约束:但请记住,这不会改变正态分布的密度,所以它不会再积分到1。通常这并不重要,因为logp中的差异将是一个常量,我们不关心大多数事情的常量。如果它是重要的(如果下限或上限是一个变量的话),您可以通过使用
pm.DensityDist
定义自己的发行版来解决这个问题(顺便说一下,stan中有相同的问题,尽管它支持使用T[a,b]语法的截断分布)。在相关问题 更多 >
编程相关推荐