2016-09-21 82 views
0

我现在正在使用包含两个组件的混合模型:正态和对数正态以适应矢量。 我尝试使用JAGS,这里是代码:关于拟合正常+对数正态混合模型的问题

model { 
    for(i in 1:N) { 
    y[i] <- latent[i,index[i]+1] 
    index[i] ~dbern(pi) 
    latent[i,1]~ dlnorm(mu1,tau1) 
    latent[i,2]~ dnorm(mu2,tau2)} 
    pi ~ dbeta(0.5,0.5) 
    mu1 ~ dnorm(0.4,0.000001) 
    tau1~ dgamma(0.001,0.001) 
    mu2 ~ dnorm(4,0.000001) 
    tau2~ dgamma(0.001,0.001) 
} 

然而,它不与错误消息工作“Y [1]是一个逻辑节点,并且不能观察到”。 我也试过

y[i] <- pi*z1+(1-pi)*z2 

z1 ~ dnorm(mu1,tau1) 

z2 ~ dlnorm(mu2,tau2) 

...

,但它给了同样的错误消息。看来我必须分配一个分配给y [i]。任何人都可以帮助克服这个问题吗?或者用于解决这种混合模型的其他方法也将被赞赏!

回答

0

如果你只是想这两款机型搭配,你可以做这样的事情:

model { 
    for(i in 1:N) { 
    index[i] ~dbern(pi) 
    latent[i]~ (dlnorm(mu1,tau1)*(1-index[i]))+(dnorm(mu2,tau2)*index[i]) 
} 
    pi ~ dbeta(0.5,0.5) 
    mu1 ~ dnorm(0.4,0.000001) 
    tau1~ dgamma(0.001,0.001) 
    mu2 ~ dnorm(4,0.000001) 
    tau2~ dgamma(0.001,0.001) 
} 

这样一来,在它要么选择使用对数正态分布或正常模式模型的每个步骤。如果您跟踪index它会告诉您在MCMC链中每个步骤选择哪个分配(索引= 1 =正常,索引= 0 =对数正态分布)。此外,您可以将指数和除以MCMC链中的步数之和,以获得选择1的时间比例(正常)。

+0

您好,非常感谢您的回复!我尝试了你的代码,但是错误信息是“Error line parsing model file: syntax error on line 4 near”(“” –

+0

Ah。Change'latent [i]〜(dlnorm(mu1,tau1)*(1-index [i ])+ dnorm(mu2,tau2))+(dnorm(mu2,tau2)* index [i])到'y [i]〜(dlnorm(mu1,tau1)*(1-index [i])) * index [i])'看看是否有效,如果有的话,我会编辑答案。 –