2012-02-03 5 views
0

나는 잼 (Jag)을 사용하고 있으며 두 개의 다른 모델을 정의하여 매개 변수 쎄타를 추정했습니다. 왜이 두 모델은 theta 1과 theta 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 
} 
" 

및 계산을 다음과 같이 실행했다.

체인 수렴했는지 확인하려면 그들이 식별되도록 모델을 작성하는 방법, https://stats.stackexchange.com/ 더 좋은 장소가 될 수있는 방법에 대한 조언
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 

.

+0

실제로 두 모델은 theta에 대해 다른 샘플을 반환합니다. 모델을 실행하고 이것을 계획하십시오. – Diogo

+0

실제로 두 모델은 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로 네 개의 분포에 대해 세 개의 피크가 나타납니다. 3. 모델이 잘못 지정되었습니다. 두 개의 확률이 전환됩니다 때때로. 이것이 사후 분포가 여러 가지 모드를 갖는 이유입니다. 'theta1