在重新思考时使用先验三角分布 - R

Use a prior triangular distribution in rethinking - R

我正在使用 R 中的 rethinking 包制作一个简单的线性模型。在下面的代码中,我对因变量使用了先验正态分布,一切正常。

library(rethinking)
col <- alist(
  courework_n ~ dnorm(mean,0.2),
  mean <- a + b*result_n + c,
  a ~ dnorm(0,10),
  b ~ dnorm(0,10),
  c ~ dnorm(0,10)
)
colmap <- map( col , data.frame(data) )

但是当我使用 R 不直接支持的三角分布包时,出现以下错误

Error in map(col, data.frame(data)) : unused argument (log = TRUE)

这是定义三角分布模型的代码

install.packages("RTriangle") 
library(triangle)

col <- alist(
  courework_n ~ dtriangle(0,1,mode),
  moda <- a + b*result_n + c,
  a ~ dnorm(0,10),
  b ~ dnorm(0,10),
  c ~ dnorm(0,10)
)

col_map <- map( col , data.frame(data) )

因为 dtriangle 分布没有像 R/by rethinking.

中的概率分布函数那样包含 log 参数

您可以破解 dtriangle 函数,如下所示:

  • dput(dtriangle,file="my_dtriangle.R")将函数代码保存到文件
  • 将第一行编辑为
 my_dtriangle <- function (x, a = 0, b = 1, c = (a + b)/2, log=FALSE)
  • 将最后一行代码 (return(apply(params, 1, dTest))) 更改为:
 res <- apply(params, 1, dTest)
 if (log) return(log(res)) else return(res)
  • source("my_dtriangle.R") 重新定义工作区中的函数

可以想象,您将 运行 使用具有紧凑支持的函数(即,在受限值范围之外的可能性为零)来解决更多技术问题