我对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]);
导致错误节点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)。
答案 0 :(得分: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邮件列表(Martyn Plummer定期监控)上获得更快的响应。
答案 1 :(得分: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
或u
中没有缺失值,因为无法部分观察到多变量节点。
问候! :)