Почему в JAGS значение узла не всегда доступно?

#r #statistics #jags

#r #Статистика #jags

Вопрос:

Я новичок в JAGS, но после поиска я не нашел решения или объяснения такого поведения. В основном, в зависимости от того, если (и где) Я передаю 0 значения в мультиномиальное распределение, прогнозы из этого распределения могут отсутствовать. Я упростил это настолько, насколько смог. Вот модель, которую я хочу запустить:

test.bugs

 data{
  for(i in 1:2){
    N[i] <- sum(counts_known[i, 1:6])
  }
}
model {
  for(i in 1:2){
    pi[i, 1:6] ~ ddirich(alpha[1:6])
  
    counts_known[i, 1:6] ~ dmulti(pi[i, 1:6], N[i])
    
    N_unknown[i] ~ dpois(N[i])
    counts_unknown[i, 1:6] ~ dmulti(pi[i, 1:6], N_unknown[i])
    
    # Example of trouble (yes, I could just access N_unknown here but this is a simplified example)
    # summation[2] may not exist
    summation[i] <- sum(counts_unknown[i, 1:6])
  }
}
  

Моя проблема в том, что в зависимости от того, в каком порядке я передаю данные для столбцов counts_known , summation[2] они могут отсутствовать в выходных данных.

R-код для запуска этого:

 library(rjags)

# This works fine
data <- list(
  alpha = rep(1/6, 6),
  counts_known = matrix(c(
    2,2,2,2,2,2,
    2,2,2,0,0,4
  ), nrow=2, ncol=6, byrow=TRUE)
  
)
model <- jags.model("test.bugs", data=data, n.chains=1)
summary(coda.samples(model, variable.names=c("summation", "counts_unknown"), n.iter=1000))
# Output for counts_unknown and summation exist


# Swap columns 5 and 6 to see problem
data <- list(
  alpha = rep(1/6, 6),
  counts_known = matrix(c(
    2,2,2,2,2,2,
    2,2,2,0,4,0
  ), nrow=2, ncol=6, byrow=TRUE)
  
)
model <- jags.model("test.bugs", data=data, n.chains=1)
summary(coda.samples(model, variable.names=c("summation", "counts_unknown"), n.iter=1000))
# Output for most of the counts_unknown and summation[1] exist; about a half of the time summation[2] and counts_unknown[2, 5:6] are missing
# If you see summation[2] on first try, try running the previous line of code again a few times
  

Основываясь на странице справки coda.samples , я знаю, что причина summation[2] исчезновения во втором примере заключается в том, что у него может быть NAS, которые по умолчанию удаляются при передаче, но это просто приводит к вопросам

  1. Почему он генерирует NAs в первую очередь?
  2. В чем разница между двумя примерами, из-за которой первый, по-видимому, работает, когда на практике это одни и те же данные, только переупорядоченные?

Также в качестве примечания, если я запускаю coda.samples na.rm=FALSE и смотрю непосредственно на образцы NaN , которые иногда появляются для этих подозрительных столбцов.

Спасибо за любую помощь, и я использую JAGS 4.3.0.

Комментарии:

1. Это интересный вопрос, но я подозреваю, что немногие люди, читающие этот форум, готовы ответить на него, поскольку он довольно специализированный. Мой совет — попробовать форум, посвященный JAGS, или список рассылки r-help, или, может быть stats.stackexchange.com .

2. Спасибо! Я новичок в размещении вопросов здесь и предположил, что правильно помеченные вопросы в конечном итоге будут видны другим сайтам Stack Exchange, поэтому я попробую это.

3. Нет проблем, удачи.