Я хотел бы запустить модель с распределенной переменной Tweedie, используя JAGS через R. Я знаю, что JAGS не имеет стандартного распределения Tweedie, но его можно указать как составную гамму/Пуассона. К сожалению, я не могу понять, как это закодировать в JAGS. Я написал ниже на основе кода, извлеченного из различных источников, чтобы просто попытаться восстановить параметры среднего значения, мощности и фи из случайной величины Tweedie. В настоящее время он не выполняется из-за недопустимых родительских значений y, предположительно потому, что y[i] появляется в правой и левой частях выражения. Это так, как было написано в исходном коде, но я явно неправильно его использую. Любые указания о том, как правильно указать это распределение, были бы высоко оценены и, вероятно, имели бы более широкое применение, поскольку я не смог найти каких-либо простых закодированных примеров того, как настроить модели Tweedie в JAGS.
y = mgcv::rTweedie(mu=rep(2,100),p=1.33,phi=1)
jags_data = list(y=y,n=length(y))
jags_model =
"model{
for (i in 1:n) {
lambda[i] <- pow(mu,2-p)/(phi *(2-p))
num[i] ~ dpois(lambda[i])
shape[i,1] <- num[i]*((2-p)/(p-1))
rate[i,1] <- 1/(phi*(p-1)*pow(mu,p-1))
shape[i,2] <- 1
rate[i,2] <- exp(-lambda[i])
# Takes shape/rate parameter 1 if y > 0 and 2 if y = 0
y[i] ~ dgamma(shape[i,1+equals(y[i],0)],rate[i,1+equals(y[i],0)])
}
mu ~ dunif(0,100)
p ~ dunif(1,2) ## Tweedie power parameter
phi ~ dunif(0,30) ## Dispersion parameter
}
"
model_file = tempfile(fileext = 'txt')
writeLines(jags_model,model_file)
jm = rjags::jags.model(
file = model_file,
data = jags_data,
n.chains = 3,
n.adapt = 1500
)