我想创建一组参数,用于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块的一部分.

每个对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相关问答推荐

具有相同条宽 * 和 ** 在 * 多个 * 图上相同条距的条图

如何使用R以NASAGIBS.ViirsEarthAtNight2012风格绘制自定义 map

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

删除facet_wrap标签之间的水平线

使用R的序列覆盖

在R中列表的结尾添加数字载体

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

我不能在docker中加载sf

根据多个条件增加y轴高度以适应geom_text标签

错误:非常长的R行中出现意外符号

在不丢失空值的情况下取消列出嵌套列表

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

Geom_Hline将不会出现,而它以前出现了

具有重复元素的维恩图

将箭头绘制在图形外部,而不是图形内部

为什么我对圆周率图的蒙特卡罗估计是空的?

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

无法将条件case_when()应用于使用!!创建的新变量Mutations

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

在ggploy中创建GeV分布时出错