2012-02-03 5 views
0

私はジャグを使用しています。パラメータθを推定するために2つの異なるモデルを定義しました。なぜこの2つのモデルはシータ1とシータ2の異なるサンプルを返しますか?誰かが私を助けることができましたか?このモデルが異なるサンプルを返す理由

#MODEL 1 
model { 
    for (i in 1:nFlip) { 
     y[i] ~ dbern (theta[ mdlI ]) 
    } 

    theta[1] <- 1/(1+exp(-nu)) 
    theta[2] <- exp(-eta) 
    nu ~ dnorm(0,.1)  # 0,.1 vs 1,1 
    eta ~ dgamma(.1,.1) # .1,.1 vs 1,1 

    # Prob dos modelos 
    mdlI ~ dcat (mdlProb[]) 
    mdlProb[1] <- .5 
    mdlProb[2] <- .5 

} 

#MODEL 2 
model { 
    for (i in 1:nFlip) { 
     # Likelihood: 
     y[i] ~ dbern(theta) 
    } 
    # Prior 
    theta <- ((2-mdlIdx) * 1/(1+exp(-nu)) # theta from model index 1 
      + (mdlIdx-1) * exp(-eta)) # theta from model index 2 
    nu ~ dnorm(0,.1)  # 0,.1 vs 1,1 
    eta ~ dgamma(.1,.1) # .1,.1 vs 1,1 
    # Hyperprior on model index: 
    mdlIdx ~ dcat(modelProb[]) 
    modelProb[1] <- .5 
    modelProb[2] <- .5 
} 

ご協力いただきありがとうございます。 Diogo Ferrari

答えて

1

サンプルはランダムであるため、異なると思われますが、平均値は匹敵します(ひどく偏っていますが、別の問題です)。

以下のデータを使用しました。

nFlip <- 100 
y <- ifelse( 
    sample(c(TRUE,FALSE), nFlip, replace=TRUE), # Choose a coin at random 
    sample(0:1, nFlip, p=c(.5,.5), replace=TRUE), # Fair coin 
    sample(0:1, nFlip, p=c(.1,.9), replace=TRUE) # Biased coin 
) 
# Models 
m1 <- " 
model { 
    for (i in 1:nFlip) { 
     y[i] ~ dbern (theta[ mdlI ]) 
    } 
    theta[1] <- 1/(1+exp(-nu)) 
    theta[2] <- exp(-eta) 
    nu ~ dnorm(0,.1) 
    eta ~ dgamma(.1,.1) 
    mdlI ~ dcat (mdlProb[]) 
    mdlProb[1] <- .5 
    mdlProb[2] <- .5 
} 
" 
m2 <- " 
model { 
    for (i in 1:nFlip) { 
     y[i] ~ dbern(theta) 
    } 
    theta <- ((2-mdlIdx) * 1/(1+exp(-nu)) 
      + (mdlIdx-1) * exp(-eta)) 
    theta1 <- 1/(1+exp(-nu)) 
    theta2 <- exp(-eta) 
    nu ~ dnorm(0,.1) 
    eta ~ dgamma(.1,.1) 
    mdlIdx ~ dcat(modelProb[]) 
    modelProb[1] <- .5 
    modelProb[2] <- .5 
} 
" 

と計算を以下のように実行した。鎖が収束していることを確認するために、彼らが識別されるように、あなたのモデルを作成する方法方法についてのアドバイスについて

library(rjags) 
m <- jags.model(textConnection(m1), n.chains=2) 
s <- coda.samples(m, "theta", n.iter=1e4, thin=100) 
plot(s) # One of the probabilities is around 1, the other around .7 

m <- jags.model(textConnection(m2), n.chains=2) 
s <- coda.samples(m, c("theta1", "theta2"), n.iter=1e4, thin=100) 
plot(s) # Similar estimates 

https://stats.stackexchange.com/はより良い場所かもしれません。

+0

実際には、2つのモデルはthetaの異なるサンプルを返します。モデルを実行し、これをプロットしますか? – Diogo

+0

実際には、2つのモデルはthetaの異なるサンプルを返します。モデルを実行し、これをプロットしますか?m1 < - jags.model(textConnection(m1)、n.chains = 2) s1 < - coda.samples(m1、c( "theta"、 'mdlI')、n.iter = 1e4、thin = 10)m2 < - jags.model(textConnection(m2)、n.chains = 2) s2 < - coda.samples(m2、c( "theta"、 "mdlIdx")、n.iter = 1e4、thin = 10) mcmcChain1 < - as.matrix(S1) mcmcChain2 < - as.matrix(S2) HIST(mcmcChain1 [2]) HIST(mcmcChain1 [3]) インデックス< - mcmcChain2 [1] == 1 hist(mcmcChain2 [index、2]) hist(mcmcChain2 [!index、2]) – Diogo

+0

ここにいくつかの問題があります。 1. 'mcmcChain2'にはあなたの考えが含まれていません(次元を確認してください - 実際に何が入っているのか分かりません)。 2.チェーンが収束していない可能性があります。それらをさらに動かすと、0、.7、および1の4つの分布すべてに3つのピークが表示されます。 3.モデルが誤って指定されている:2つの確率が切り替わります時々から。そのため、事後分布にはいくつかのモードがあります。 'theta1

関連する問題