0

我想知道是否有人可以在这里帮助我解决问题。我想对下面的泊松对数正态模型进行拟合优度评估(这只是简单的测试模型)。当我注释掉模型运行的 fit <- sum(resi[]) 和 fit.new <- sum(resi.new[]) 行时,我显然需要这些值来进行后验预测检查。

关于为什么这可能不起作用的任何想法?我已经包含了错误消息和模型。

感谢您提供的任何指导!米歇尔

checkForRemoteErrors(val) 中的错误:3 个节点产生错误;第一个错误:运行时错误:第 28 行的编译错误。尺寸不匹配采用 resi.new 的子集

我还应该提到,当我从 fit 和 fit.new 语句中删除括号时,我得到一个不同的错误:

checkForRemoteErrors(val) 中的错误:3 个节点产生错误;第一个错误:运行时错误:第 27 行的编译错误。无法评估 fit.new 的子集表达式

这是模型:

model {

# Priors
for (i in 1:nyear){
alpha[i]~dnorm(0,0.001)
}

beta ~ dnorm(0,0.001)
sigma ~ dunif(0, 10)    
tau <- 1 / (sigma * sigma)

# Likelihood
for (i in 1:n*nyear) {
for (j in 1:J){
y[i,j] ~ dpois(lambda[i,j]) 
log(lambda[i,j]) <- alpha[year[i]] + beta*x[i] + eps[i,j]
eps[i,j] ~ dnorm(0, tau)
resi[i,j] <- pow((y[i,j]-lambda[i,j]),2) / (sqrt(lambda[i,j])+e) 
new.y[i,j] ~ dpois(lambda[i,j])
resi.new[i,j] <- pow((new.y[i,j]-lambda[i,j]),2) / (sqrt(lambda[i,j])+e) 
}
}

fit <- sum(resi[])
fit.new <- sum(resi.new[])

}
4

1 回答 1

0

resi.new并且resi都是 i by j 矩阵。如果您试图获得所有数据点的残差的后验,您可以制作一个临时向量,然后您可以对其求和。像这样的东西应该在模型的最后为你工作(而不是你目前拥有的两行代码

for( j in 1:J){
temp.fit[j] <- sum(resi[ ,j])
temp.fit.new[j] <- sum(resi.new[, j])
}
fit <- sum(temp.fit[])
fit.new <- sum(temp.fit.new[])
于 2018-01-04T15:13:44.973 回答