2016-02-03 33 views
2

我试图使用索引作为响应(D47),温度作为预测因子(Temp)并考虑离散变量(材料)的随机效应来建模贝叶斯回归。我发现了关于非等级回归的非常好的信息,有些帖子甚至包括这些模型的预测策略。尽管如此,在我的模型中预测D47值时,我发现了一个显着的问题,主要是因为随机截取。JAGS随机效应模型预测

在预测JAGS回归期间有没有办法处理随机截距?

谢谢您的回答,

克里斯蒂安

model1<-"model { 
# Priors 
mu_int~dnorm(0, 0.0001) # Mean hyperparameter for random intercepts 
sigma_int~dunif(0, 100) # SD hyperparameter for random intercepts 
tau_int <- 1/(sigma_int*sigma_int) 
for (i in 1:n) { 
alpha[i]~dnorm(mu_int, tau_int) # Random intercepts 
} 
beta~dnorm(0, 0.01) # Common slope 
sigma_res~dunif(0, 100) # Residual standard deviation 
tau_res <- 1/(sigma_res*sigma_res) 
# Likelihood 
for (i in 1:n) { 
mu[i] <- alpha[Mat[i]]+beta*Temp[i] # Expectation 
D47[i]~dnorm(mu[i], tau_res) # The actual (random) responses 
} 
}" 
+1

什么,具体而言,是“显着问题“? –

+0

问题是:我可以使用这个JAGS模型预测D47值吗?我还没有找到任何关于基于JAGS随机拦截模型的预测的信息。谢谢 – CristianR

回答

3

当然,你可以用随机拦截的预测,所有你需要做的是将其指定为某种形式的导出量的。

尝试在模型中添加这样的内容。

for(i in 1:(n)){ 
D47_pred[i] <- dnorm(mu[i], tau_res) 
} 

然后跟踪D47_pred作为参数。

编辑:

此外,你需要改变你如何指定为前随机拦截。这将需要几步(更新代码来自评论)。

您需要在您的数据列表中添加一个新常数,该常数表示向量Mat中唯一组的数量。我已经标记它M在这种情况下(例如,4组垫,M = 4)

for (j in 1:(M)){ 
alpha[j] ~ dnorm(mu_int, tau_int) # Random intercepts 
} 

该规范只是使随机拦截的正确数量模型

+0

我真的很感谢你的帮助和解释!这解决了我的问题。谢谢! – CristianR

+0

亲爱的@M_Fidino,我已经在Alpha上列出了你的建议,但是我有一个错误: 'jags.model错误(file = textConnection(model1),data = dat,inits = list(init.rng1 ,: 运行时错误: 第7行编译错误。 尝试重新定义节点alpha [18]',有没有其他替代您的建议?谢谢! – CristianR

+0

哦!我认为你需要做的是这个而不是.. 。你需要在你的数据列表中添加一个新的常量,它表示向量Mat中唯一的组的数量,在这种情况下我标记为M(例如Mat中的4个组,M = 4) 对于(j,1:(M)){ alpha [j]〜dnorm(mu_int,tau_int) }' 发生此错误的原因是您在“Mat”向量中有重复的数字,并且您正在告诉它有效地写入其自身,而不希望这样做。这个规范只是为你的模型做了正确数量的随机截取。 –