2016-09-21 8 views
0

私は今、ベクトルに適合するように、normalとlognormalという2つのコンポーネントを含む混合モデルを使用しています。 私はここに、ぎざぎざを使用しようとしたコードである:普通+対数正規混合モデルのフィッティングに関する質問

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チェーン(index = 1 = normal、index = 0 = lognormal)の各ステップでどの分布が選択されるかがわかります。さらに、インデックスの合計を取ってMCMCチェーンのステップ数で割って、1が選択された時間の割合(通常)を得ることができます。

+0

こんにちは、ありがとうございます!私はあなたのコードを試しましたが、エラーメッセージは "モデルファイルの解析中にエラーが発生しました: 4行目に構文エラーがあります(" –

+0

ああ、潜在的な[i]〜(dlnorm(mu1、tau1)*(1-index [i (dnorm(mu2、τ2)))+(dnorm(mu2、τ2)* index [i] * index [i]) 'それがうまくいくかどうか確認してください。 –

関連する問題