Несоответствие размеров при попытке использовать dmulti с rjags
Я пытаюсь подогнать модель ниже, используя rjags, но получаю ошибку несоответствия размеров. Модель хорошо работает в WinBUGS, и я не могу понять, как изменить код. Заранее благодарю за любую помощь.
Данные:
dataset <- list(n1 = 462, n2 = 537,
y1 = structure(.Data = c(37, 55, 7, 363), .Dim = c(2, 2)),
y2 = structure(.Data = c(104, 26, 22, 385), .Dim = c(2, 2)),
Q = 2)
Начальные значения для цепей
inits <- list(pi1 = 0.1, pi2 = 0.3, SeMAT = 0.80, SpMAT = 0.90,
SeCMB = 0.90, SpCMB = 0.9995)
модель
model <-
'model {
y1[1:Q, 1:Q] ~ dmulti(p1[1:Q, 1:Q], n1)
y2[1:Q, 1:Q] ~ dmulti(p2[1:Q, 1:Q], n2)
p1[1, 1] <- pi1 * SeMAT * SeCMB + (1 - pi1) * (1 - SpMAT) * (1 - SpCMB)
p1[1, 2] <- pi1 * SeMAT * (1 - SeCMB) + (1 - pi1) * (1 - SpMAT) * SpCMB
p1[2, 1] <- pi1 * (1 - SeMAT) * SeCMB + (1 - pi1) * SpMAT * (1 - SpCMB)
p1[2, 2] <- pi1 * (1 - SeMAT) * (1 - SeCMB) + (1 - pi1) * SpMAT * SpCMB
p2[1, 1] <- pi2 * SeMAT * SeCMB + (1 - pi2) * (1 - SpMAT) * (1 - SpCMB)
p2[1, 2] <- pi2 * SeMAT * (1 - SeCMB) + (1 - pi2) * (1 - SpMAT) * SpCMB
p2[2, 1] <- pi2 * (1 - SeMAT) * SeCMB + (1 - pi2) * SpMAT * (1 - SpCMB)
p2[2, 2] <- pi2 * (1 - SeMAT) * (1 - SeCMB) + (1 - pi2) * SpMAT * SpCMB
SeMAT ~ dbeta(1, 1)
SpMAT ~ dbeta(1, 1)
SeCMB ~ dbeta(1, 1)
SpCMB ~ dbeta(1, 1)
pi1~ dbeta(1, 1)
pi2 ~ dbeta(1, 1)
}'
writeLines(model, 'model.txt')
jags.mod <- jags.model(file = 'model.txt',
data = dataset,
inits = inits,
n.chains = 3)
ошибка
Ошибка в jags.model(file = "model.txt", data = dataset, inits = inits,: RUNTIME ERROR: Невозможно вставить узел в y1[1:2,1:2]. Несоответствие размеров
1 ответ
Вы хотели указать многомерное распределение, а не многочленное?
Полиномиальное распределение, dmulti
, принимает два параметра:n
целое число, указанное вами, и pi
одномерный вектор, который суммирует с одним.
Ваш p1
а также p2
оба многомерны, но не могут быть с этим распределением.