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

在重新思考-R时使用先验三角分布,r,rstan,R,Rstan,我使用R中的重新思考包来制作一个简单的线性模型。在下面的代码中,我对因变量使用了先验正态分布,一切正常 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(da

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

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) )
库(重新思考)

col因为
dtriangle
分布不包含
log
参数,这是R/by
重新思考中的概率分布函数所期望的

您可以按如下方式破解
dtriangle
函数:

  • 首先
    dput(dtriangle,file=“my\u dtriangle.R”)
    将功能代码保存到文件中
  • 编辑要读取的第一行
  • source(“my_dtriangle.R”)
    重新定义工作区中的函数

可以想象,如果使用一个具有紧凑支持的函数(即,在限制值范围外的可能性为零),您将遇到进一步的技术问题。

非常感谢,这是一个可以用于许多其他事情的好技巧,我非常感谢您的帮助。不管怎么说,你是对的,现在我遇到了一个问题,因为dtriangle函数的计算需要x值(与R中的所有其他d分布一样),但我认为当使用ej:dnorm并忽略x值时,重新思考使用了另一个stats系列函数文件。是否可以只使用
编写包装函数而不必剪切和粘贴?当你有对数标度时,你通常可以更稳健地直接在对数标度上进行计算。三角形的先验可以有相同的先验,但由于边界位置的不同,它们也会有相同的问题,比如区间上的一致先验。如果质量会延伸到边界之外,边界会将其推离边界,将后验估计推离边界。因此,即使无界估计值在边界附近,边界的存在也会将其推离边界,这对于这类先验来说通常是意外的(通常是因为想要确定解的大致区间和最高密度点)。
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) )
 my_dtriangle <- function (x, a = 0, b = 1, c = (a + b)/2, log=FALSE)
 res <- apply(params, 1, dTest)
 if (log) return(log(res)) else return(res)