Генерация прогнозов с помощью JAGS
У меня есть параметризованная линейная гауссовская байесовская сеть, и я пытаюсь делать прогнозы по модели, используя rjags
, Я могу сделать это для одного наблюдения, но не знаю, как пройти несколько наблюдений. Вот пример
library(rjags)
library(coda)
Начальная модель
mod <- textConnection("model {
mpg.hat <- (34.96055404 - 3.35082533* wt - 0.01772474* disp)
wt ~ dnorm(3.21725, 1/0.9784574^2)
disp ~ dnorm(230.7219, 1/123.9387^2)
mpg ~ dnorm(mpg.hat, 1/2.916555^2)
}")
# Evaluate and get prediction when wt=1 and disp is hidden
m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1, disp=NA))
update(m, 10000)
cs <- coda.samples(m, c("mpg", "wt", "disp"), 1e5)
summary(cs)
Это работает, как и ожидалось, однако у меня есть несколько строк данных, для которых я хочу сгенерировать прогнозы. Если я попытаюсь продлить data=list(
аргумент для включения большего количества строк выдает ошибку. Таким образом, после перезапуска текста модели и следующей команды я получаю ошибку
m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1:2, disp=1:2))
Ошибка в jags.model(mod, n.chains = 1, n.adapt = 1000, data = list(wt = 1:2,:
Ошибка в узле dnorm(230.722,(a1/(a123.939^2)))
Несоответствие длины в узле::setValue
Как мне расширить это на большее количество наблюдений?
1 ответ
Вам нужно перебрать строки:
mod <- textConnection("model {
for (n in 1:N) {
mpg.hat[n] <- (34.96055404 - 3.35082533* wt[n] - 0.01772474* disp[n])
mpg[n] ~ dnorm(mpg.hat[n], 1/2.916555^2)
wt[n] ~ dnorm(3.21725, 1/0.9784574^2)
disp[n] ~ dnorm(230.7219, 1/123.9387^2)
}
}")
Обратите внимание, вам нужно будет добавить N
к вашему списку данных:
data = list(N = 1, wt = 1, disp = NA)
data = list(N = 2, wt = 1:2, disp = 1:2)