【问题标题】:OpenBUGS: missing value in Bernoulli distributionOpenBUGS:伯努利分布中的缺失值
【发布时间】:2012-03-16 23:21:55
【问题描述】:

我正在尝试通过 R (R2OpenBUGS) 使用 OpenBUGS 将观察“时间”建模为随机变量。如果所有观察时间都可用(没有 NA)一切正常,但如果我将其中一个时间设置为 NA,则什么也不会发生。我用 WinBUGS 测试了相同的代码,我得到陷阱错误'NIL dereference (read)'。所以我的问题是我的代码真的有问题吗,还是我的模型对于 BUGS 来说太奇怪了?

我的模型是这样的:

model{
 for(i in 1:k){
  obs[i] ~ dbern(p) #is the observation done at time 1 or 2?
  y[(i-1)*2 + obs[i]+1] <- x[i]
 }    
 for(i in 1:n){    
   y[i] ~ dnorm(mu,tau) 
 }    
 mu ~ dnorm(0,0.0001)
 tau~ dgamma(0.001,0.001)  
 p ~ dunif(0,1) 
}

R 代码如下所示:

library(R2OpenBUGS)
x<-obs<-rep(NA,5)
for(i in 1:k)
{
  obs[i]<-sample(c(0,1),1) #observation time of ith observation
  x[i]<-rnorm(1) #observed values
}

obs[2]<-NA #one of the sampling times is missing
INITS <- list(list(tau=1,mu=0,p=0.5))
DATA  <- list(x=x,n=n,k=k,obs=obs)

ob <- bugs(
  data=DATA,
  inits=INITS,
  parameters.to.save=c("tau","mu","p","y"),
  model.file="BUGSModel.R",
  n.chains=1,
  n.iter=50,
  n.burnin=10,
  n.thin=1,    
  DIC=FALSE)

【问题讨论】:

    标签: r bayesian missing-data r2winbugs winbugs14


    【解决方案1】:

    如果我能很好地理解你的问题,那么你是在问这个表达是否

    obs[i] ~ dbern(p)
    

    对于 Win/OpenBUGS 来说很奇怪,因此它不会处理缺失值。不,我不这么认为; bugs 能够以这种方式处理缺失值,它甚至可以通过后验分布来估算它们。

    但我强烈怀疑

    y[(i-1)*2 + obs[i]+1] <- x[i]
    

    真的很奇怪!当您强制使用为空的观察值obs[i] 计算索引时,这可能会导致问题出现。这真的很奇怪,你应该尝试找到另一种方法来做到这一点。首先尝试简化模型以跳过此规则,我敢打赌问题会消失。

    【讨论】:

    • @Hemmo,很高兴听到它有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多