希望有人能帮我解决这个问题,因为我真的被卡住了,没有发现我的编码错误!
我在 JAGS(使用 R2Jags)中拟合零膨胀泊松/负二项式 GLM(无随机效应),参数估计、先验、初始值和链收敛一切都很好。所有结果都完全符合,例如,来自 pscl-package 的估计,包括我对模型中 pearson 残差的计算......
我唯一不能开始工作的是从模型中抽取一个新样本以获得贝叶斯 p 值来评估模型拟合。我之前拟合的“正常”泊松和负二项式模型都给出了预期的重复样本,并且没有出现任何问题。
到目前为止,这是我的代码,但重要的部分是“#New Samples”:
model{
# 1. Priors
beta ~ dmnorm(b0[], B0[,])
aB ~ dnorm(0.001, 1)
#2. Likelihood function
for (i in 1:N){
# Logistic part
W[i] ~ dbern(psi.min1[i])
psi.min1[i] <- 1 - psi[i]
eta.psi[i] <- aB
logit(psi[i]) <- eta.psi[i]
# Poisson part
Y[i] ~ dpois(mu.eff[i])
mu.eff[i] <- W[i] * mu[i]
log(mu[i]) <- max(-20, min(20, eta.mu[i]))
eta.mu[i] <- inprod(beta[], X[i,])
# Discrepancy measures:
ExpY[i] <- mu [i] * (1 - psi[i])
VarY[i] <- (1- psi[i]) * (mu[i] + psi[i] * pow(mu[i], 2))
PRes[i] <- (Y[i] - ExpY[i]) / sqrt(VarY[i])
D[i] <- pow(PRes[i], 2)
# New Samples:
YNew[i] ~ dpois(mu.eff[i])
PResNew[i] <- (YNew[i] - ExpY[i]) / sqrt(VarY[i])
DNew[i] <- pow(PResNew[i], 2)
}
Fit <- sum(D[1:N])
FitNew <- sum(DNew[1:N])
}
最大的问题是,我真的尝试了所有我认为可以/应该起作用的组合和更改,但是当我查看模拟样本时,我在这里得到了这个:
> all.equal( Jags1$BUGSoutput$sims.list$YNew, Jags1$BUGSoutput$sims.list$Y )
[1] TRUE
而且,为了让它变得非常奇怪,当使用 Fit 和 FitNew 的方法时:
> Jags1$BUGSoutput$mean$Fit
[1] 109.7883
> Jags1$BUGSoutput$mean$FitNew
[1] 119.2111
有谁知道我做错了什么?任何帮助将不胜感激!
亲切的问候,乌尔夫