我正在尝试通过拟合层次模型来对数据集进行建模。我通过使用下面的Jags代码来做到这一点:
NORM_errors2 <-'model{ # model specifiction
for (i in 1:length(obsval)){
obsval[i] ~ dnorm(val[i],pow(err[i],-2))
val[i] ~ dnorm(cent[I[i]],pow(sig[I[i]],-2))
I[i] ~ dcat(p[])
}
sig[1] ~ dunif(0,2)
sig[2] ~ dunif(0,2)
cent[1] ~ dunif(1,5)
cent[2] ~ dunif(cent[1],5)
p[1] ~ dunif(0,1)
p[2] <-1-p[1]
}
使用以下R代码调用:
NORM_fit <- jags(data = AS_data,
parameters = params0,
model = textConnection(NORM_errors2),
n.chains = 3,
n.iter = 100000,
n.thin = 10,
n.burnin = 30000
)
其中:
AS_data <- list(
obsval = dens,
err = err,
N = 26
)
和:
dens <- c(2.12, 2.71, 3.44, 2.76, 2.72, 0.96, 2, 3.26, 2.5, 1.2, 1.62,
1.96, 2.6, 1.3, 2.67, 4.4, 1.8, 4.9, 2.39, 1.62, 1.47, 0.89,
2.52, 1.21, 0.9, 0.8
)
err <- c(0.04, 0.11, 0.12, 1.2, 0.12, 0.3, 0.6, 0.6, 0.3, 0.4, 0.3,
0.34, 0.5, 0.2, 0.03, 2.1, 0.8, 3.9, 0.9, 1.05, 0.95, 0.13, 0.3,
0.25, 0.1, 0.15
)
对于上下文-我有一个样本,该样本带有污染的测量值和定义的错误“ err”。我试图在这样的假设下建模:观测值来自单分量正态分布,真实的未观测值来自两分量正态模型。
我的问题是,我得到的结果将非零概率返回到低于1的值。从问题的上下文来看,这不可能成立。我的问题是如何让Jags意识到这一约束,以便我可以得到一个更合理的模型,同时仍然保留可靠的区间和点估计。
非常感谢您的帮助:)