在重新思考中使用先前的三角分布 - R.

时间:2017-11-24 16:19:38

标签: 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(data) )

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

  

地图错误(col,data.frame(data)):未使用的参数(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) )

1 个答案:

答案 0 :(得分:1)

因为dtriangle分布未包含log参数,因为R / rethinking中的概率分布函数是预期的。

您可以按如下方式破解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")重新定义工作区中的功能

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