首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenBUGS:伯努利分布中缺少值

OpenBUGS:伯努利分布中缺少值
EN

Stack Overflow用户
提问于 2012-02-27 21:29:41
回答 1查看 1.2K关注 0票数 4

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

我的模型是这样的:

代码语言:javascript
复制
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代码看起来是这样的:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-28 06:05:59

如果我很好地理解你的问题,你是在问这个表达式

代码语言:javascript
复制
obs[i] ~ dbern(p)

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

但我有强烈的怀疑

代码语言:javascript
复制
y[(i-1)*2 + obs[i]+1] <- x[i]

真的很奇怪!当您强制使用为空的观察obs[i]计算索引时,这可能会给bug带来问题。这真的很奇怪,你应该试着找另一种方法来做。首先,试着简化模型,跳过这个规则,我敢打赌,这个问题就会消失。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9465825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档