r - JAGS 中正常密度的零技巧
问题描述
在 Alain F. Zuur 等人的《GLM 和 GLMM 初学者指南》一书的第 200-202 页中,引入了零技巧方法,它是拟合 JAGS 中任何分布的有效方法。该技术需要对密度函数取对数。对于正态密度,它的对数形式在书中出现如下:
JAGS 代码如下:
cat("
model{
#1A. Diffuse normal priors for the regression
# coefficients
for (i in 1:K) { beta[i] ~ dnorm(0, 0.0001) }
#1B. half-Cauchy(25) prior for the variance
num ~ dnorm(0, 0.0016)
denom ~ dnorm(0, 1)
sigma <- abs(num / denom)
#2. Likelihood
C <- 10000
for (i in 1:N){
Zeros[i] ~ dpois(Zeros.mean[i])
Zeros.mean[i] <- -L[i] + C
l1[i] <- -0.5 * log(2 * 3.1415) –
0.5 * log(sigma)
l2[i] <- -0.5 * pow(Biomass[i]-mu[i],2)/sigma
L[i] <- l1[i] + l2[i]
mu[i] <- eta[i]
eta[i] <- inprod(beta[],X[i,])
}
}
",fill = TRUE)
作者明确建模sigma
为遵循半柯西(25)分布,因此很明显sigma
代码中的 代表标准偏差而不是方差。这表明sigma^2
应该在代码中使用对数密度公式所示的。但是,对象 l1[i] 使用0.5 * log(sigma)
代替0.5 * log(sigma^2)
,类似地,l2[i] 包括sigma
代替sigma^2
分母。
我想知道为什么公式和相应的代码似乎对待sigma
不同。
解决方案
推荐阅读
- tensorflow - 关于简单 Keras 和 Tensorflow 代码性能的问题
- jquery - 使用 jquery 过滤具有多个下拉列表的表
- c++ - 尽管使用 XP 工具集,但应用程序无法在 Windows XP 上运行。需要解决问题的想法
- unit-testing - 如何模拟 ES6 单元测试的依赖关系?
- kubernetes - kubectl:从明文中的秘密中获取特定值
- laravel-5 - 错误 sh: 1: cross-env: Permission denied on new Kubuntu 18 os
- vba - 将 Outlook 电子邮件作为 .msg 文件保存到我的内部驱动器
- xslt - 将上下文项的属性传递给 fn:id()
- python - 根据属性计算类的实例
- r - 如何从 brms 模型 (tidybayes) 中提取交互项的整洁绘图