2

我对 JAGS 有一个“简单”的问题,这让我抓狂。实质上,请考虑以下有效的示例:

x2[i] ~ dnorm(mu[i,1], tau1);
u[i] ~ dnorm(mu[i,2], tau2);

这里,x2 是一个可观察变量(即数据),而 u 是一个潜在变量。在示例中,两者都是独立于两个不同的正态分布绘制的。但是,我希望它们(可能)依赖,即从一个多元正态分布中得出。所以我想做:

c(x2[i], u[i]) ~ dmnorm(mu[i,1:2], Omega[1:2,1:2]);

不幸的是,这不起作用,因为这种语法不正确。但是,尝试了许多不同的语法后,它们都不起作用。例如,

y[i,1] <- x2[i];
y[i,2] <- u[i];
y[i,1:2] ~ dmnorm(mu[i,1:2], Omega[1:2,1:2]);

导致错误Node y[1,1:2] 与先前定义的节点重叠,这是显而易见的。那么我能做什么呢?请帮帮我,我要生气了...

更新:我发现我至少可以做到以下几点:(在 R 中:)

p <- 1/(1+exp(-x2));
t <- rep(10000, length(x2));
s <- rbinom(length(x2), t, p2);

(在 JAGS 中:)

nul[i,1] <- 0;
nul[i,2] <- 0;
e[i,1:2] ~ dmnorm(nul[i,1:2], Omega[1:2,1:2]);
u[i] <- mu[i,2] + e[i,2];
x2g[i] <- mu[i,1] + e[i,1];
pg[i] <- 1/(1+exp(-x2g[i]));
s[i] ~ dbin(pg[i], t[i]);

这可行(有点),但当然会降低效率,因为可观察变量(x2)被视为只是间接可观察的(通过 s)。

4

2 回答 2

0

您定义 y 两次一次:

y[i,1] <- x2[i];
y[i,2] <- u[i];

而一旦进入

y[i,1:2] ~ dmnorm(mu[i,1:2], Omega[1:2,1:2]);

你也许可以逃脱:

x2[i] <- y[i,1];

或者你可以简单地写出回归(毕竟它是双变量的,所以不是那么困难)。

您还可以在 JAGS 邮件列表(M​​artyn Plummer 定期监控)上获得更快的响应。

于 2015-09-16T19:22:54.173 回答
0

您可以data按如下方式使用该块:

data{
    for(i in 1:length(x2)) {
        y[i,1] <- x2[i]
        y[i,2] <- u[i]
    }
}
model{
    for(i in 1:length(x2)) {
        y[i,1:2] ~ dmnorm(mu[i,], Tau)
    }
    # ... definition of mu, Tau, and their prior distribution
}

x2但是,请确保or中没有缺失值u,因为无法部分观察到多变量节点。

问候!:)

于 2016-02-12T11:57:44.777 回答