2016-06-21 46 views
2

我正在使用RJAGS构建分层贝叶斯线性回归模型,并且我想约束三个参数值的总和,使其平均值为1.3。那就是:使用RJAGS在贝叶斯线性回归中约束参数

的模型是:

Y = B1 * X1 + B2 * X2 + B3 * X3 + ... + BN * XN

而且,

B1 + B2 + B3〜dnorm(1.3,1 /(0.2)^ 2)

有没有可能这样做?使用一行代码来分配上一行中的参数总和似乎不起作用。

第二个最好的选择是完全约束参数(B1 + B2 + B3 = 1.3),但我不知道该怎么做。

在此先感谢您的帮助!

干杯!

+1

是否有可能根据B1来重新表达B2和B3?这将更容易限制值,因为只有'B1'需要被约束,并且可能是另一个分裂参数。 – colin

回答

2

一种方法是通过类比层次“ANOVA”风格的模型。在这些模型中,每个组的平均值是从基线$ \ beta_0 $开始的偏转$ \ beta_j $,并且偏转被迫总和为零。与你的情况类比是将三个回归系数重新编码为基线系数的和至零偏差,并且基线来自平均值为1.3的正常前值。

你可以看到JAGS型号规格的例子进行方差分析的Doing Bayesian Data Analysis 2nd Ed.第19章这里适应他们的想法是这样的(我已经抑制I指数):

mu <- sum(b[1:3]*x[1:3]) 
# Prior on unconstrained baseline a0 and deflections a[j]: 
a0 ~ dnorm(1.3 , 1/0.2^2) 
for (j in 1:3) { a[j] ~ dnorm(0,1/10^2) } 
# Convert a0,a[j] to sum-to-zero b0,b[j]: 
for (j in 1:3) { m[j] <- a0 + a[j] } 
b0 <- mean(m[1:3]) 
for (j in 1:3) { b[j] <- m[j] - b0 } 

至少,这是一个想法...