如何在 JAGS/BUGS 中参数化 Weibull 分布?

机器算法验证 r 分布 错误 锯齿
2022-04-02 23:35:38

根据上一个问题的答案,BUGS 和 R 中的参数化对于哪些分布不同?

我一直在将 R 参数化转换为 JAGS 参数化,但我遇到了错误,所以我提出了一个单独的问题来澄清转换是正确的。

R的?dweibull状态pdf(与a=shapeb=scale):

(a/b)(x/b)a1exp((x/b)a)

JAGS 手册将 pdf 声明为:

νλxν1exp(λxν)

我可以看到 R 使用的参数化有f(b)a但是 JAGS 参数化没有等效的f(λ)ν. 但是当我拥有所有这些计算能力时,我无法让自己拔出铅笔。所以我做了以下经验证明,JAGS参数化不是简单地将形状转换为速率为rate=1/b

下图代表两个样本(下面的代码),

  • R(红色)从YWeibull(a=2,b=50)
  • JAGS (蓝色) 从YWeibull(λ=2,ν=1/50)

在此处输入图像描述

library(rjags)
shape <- 2
rate  <- 50
set.seed(0)
model.string <- 
writeLines(paste("\nmodel{\nbeta ~ dweib (2,",1/rate,")\nY <- beta\n}"), con = 'weibulltest.bug')
j.model  <- jags.model(file = "weibulltest.bug", data = list(x=NA)) #hack
mcmc.object <- coda.samples(model = j.model, variable.names = c('Y'), n.iter = 10000)
Y.jags <- as.matrix(mcmc.object)
Y.r <- rweibull(10000, shape, rate)
plot(density(Y.r), col = 'red', ylim = c(0,0.15))
lines(density(Y.jags), col = 'blue')
1个回答

做代数,我们有λ=(1/b)a(通过使指数内的常数项相等):因为a=ν, 这与a(1/b)a=νλ. 你是对的,我在别处的回答是错误的;如果我不尽快处理它,请随时自行编辑(至少该链接是为了警告人们)...)