gpt4 book ai didi

r - 如何在 brms 中正确使用 set_prior() 以及从矩阵中提取的值,例如先验(正常(先验[i,1],先验[i,2]))

转载 作者:行者123 更新时间:2023-12-03 08:04:38 25 4
gpt4 key购买 nike

我想创建一组参数用于 R 中的 brms 模型:

library(brms)

tmp <- prior(normal(10,2), nlpar = "x")

理想情况下,我想从导入的矩阵中提取每个先验值(例如 normal(10,2)),例如:

priors <- cbind(c(10,20,30,40), c(2,4,6,8))

i <- 1
tmp <- prior(normal(priors[i,1], priors[i,2]), nlpar = "x")

但是,这会产生以下输出:

#b_x ~ normal(priors[i, 1], priors[i, 2])

而不是数值:

#b_x ~ normal(10, 2)

我意识到这可能非常基本,但我无法找出正确的方法来做到这一点。我试过:

prior(normal(as.numeric(priors[i,1]), as.numeric(priors[i,2])), nlpar = "x")
prior(normal(as.list(priors[i,1]), as.list(priors[i,2])), nlpar = "x")
prior(normal(paste(priors[i,1]), paste(priors[i,2])), nlpar = "x")
prior(normal(get(priors[i,1]), paste(get[i,2])), nlpar = "x")

有人可以告诉我我哪里出错了吗?按位置 [,] 提取似乎适用于其他函数,例如 lm(priors[,1]~priors[,2])

最佳答案

另一种方法是使用函数 brms::stanvar()。看看它的man page here 。这是有利的,因为您可以更改 stanvar() 中的先验值并重新拟合模型,而无需重新编译它。由于 brms 是 Stan 的包装器,因此这相当于将先验分布的超参数作为 Stan 模型中的data block 的一部分进行传递。

每次调用 stanvar() 都需要两个参数,即值和一个字符串,该字符串是稍后可以在 prior() 内部使用的变量名称。然后使用 + 将每个单独的变量组合在一起,并将其传递给 brm()stanvars 参数。

对于您的示例,您可以这样做:

prior_params <- stanvar(priors[i, 1], 'prior_mean') + stanvar(priors[i, 2], 'prior_sd')

x_prior <- prior(normal(prior_mean, prior_sd), nlpar = 'x')

brm(..., prior = x_prior, stanvars = prior_params)

关于r - 如何在 brms 中正确使用 set_prior() 以及从矩阵中提取的值,例如先验(正常(先验[i,1],先验[i,2])),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72822645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com