سؤال

أحاول تصميم "وقت" المراقبة كمتغير عشوائي باستخدام OpenBUGS عبر R (R2OpenBUGS).إذا كانت جميع أوقات المراقبة متاحة (لا يوجد NA) فإن كل شيء يعمل، ولكن إذا قمت بتعيين أحد الأوقات على NA، فلن يحدث شيء.لقد اختبرت نفس الكود باستخدام WinBUGS، وحصلت على خطأ اعتراض "NIL dereference (read)".لذا فإن سؤالي هو: هل هناك شيء خاطئ حقًا في الكود الخاص بي، أم أن النموذج الخاص بي غريب جدًا بالنسبة للأخطاء؟

النموذج الخاص بي هو مثل هذا:

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)
هل كانت مفيدة؟

المحلول

إذا فهمت سؤالك جيدًا، فأنت تسأل إذا كان هذا التعبير

obs[i] ~ dbern(p)

يعد أمرًا غريبًا بالنسبة لـ Win/OpenBUGS بحيث لا يتعامل مع القيمة المفقودة.لا، لا أعتقد ذلك؛البق قادر على التعامل مع القيم المفقودة بهذه الطريقة، بل وينسبها - مع التوزيع الخلفي.

ولكن لدي شك قوي في ذلك

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

غريب حقا!قد يتسبب هذا في حدوث مشكلات للأخطاء أثناء إجبارك على حساب الفهرس باستخدام الملاحظة obs[i] وهو فارغ.هذا غريب حقًا، يجب أن تحاول إيجاد طريقة أخرى للقيام بذلك.حاول أولاً تبسيط النموذج لتخطي هذه القاعدة وأراهن أن المشكلة ستختفي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top