在重新思考时使用先验三角分布 - 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")
重新定义工作区中的函数
可以想象,您将 运行 使用具有紧凑支持的函数(即,在受限值范围之外的可能性为零)来解决更多技术问题
我正在使用 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")
重新定义工作区中的函数
可以想象,您将 运行 使用具有紧凑支持的函数(即,在受限值范围之外的可能性为零)来解决更多技术问题