私は本当に立ち往生していて、コーディングエラーが見つからないので、誰かがこれで私を助けてくれることを願っています!
JAGS(R2Jagsを使用)でゼロ膨張ポアソン/負の二項GLM(ランダム効果なし)をフィッティングしていますが、パラメーター推定、事前確率、初期値、およびチェーン収束ですべて問題ありません。すべての結果は、たとえば、モデルのピアソン残差の計算を含む、pscl-パッケージからの推定値と完全に一致しています...
私が作業できない唯一のことは、モデルから新しいサンプルをサンプリングして、モデルの適合性を評価するためのベイジアン 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
私が間違っていることを誰かが手がかりを持っていますか? どんな助けでも大歓迎です!
よろしく、ウルフ