如何在R的brms包中全局设置迭代次数与链数?
brms全局设置迭代次数与链数的正确方法
问题描述
在使用brms包批量拟合模型时,希望全局配置迭代次数(iterations)和链数(chains)以避免重复手动指定参数。尝试以下options()设置后,仅mc.cores和brms.backend生效,iter与chains相关设置均未生效:
library(brms) options( brms.iter = 100, # 未生效 mc.iter = 100, # 未生效 brms.chains = 1, # 未生效 mc.chains = 1, # 未生效 mc.cores = 4, # 生效,但命名易混淆(非brms.cores) brms.backend = 'cmdstanr' # 生效 ) mdl <- brm(speed ~ dist, data = cars)
解决方案
brms并未提供brms.iter或mc.iter这类直接的全局选项来控制迭代次数和链数,以下两种方法可实现全局配置:
方法1:使用brms::set_defaults()(推荐)
set_defaults()是brms官方提供的用于设置brm()函数默认参数的工具,可直接指定iter、chains等参数:
library(brms) # 全局设置brm的默认参数 set_defaults(brm, iter = 100, chains = 1, cores = 4, backend = "cmdstanr") # 后续调用brm时自动应用默认参数 mdl <- brm(speed ~ dist, data = cars)
方法2:通过options()设置brms.control
若需将MCMC相关参数统一归类,可设置brms.control全局选项,将iter、chains放入控制列表:
library(brms) options( brms.control = list(iter = 100, chains = 1), mc.cores = 4, brms.backend = "cmdstanr" ) mdl <- brm(speed ~ dist, data = cars)
补充说明
mc.cores生效是因为它属于Stan底层的全局配置选项,而非brms专属;brms.backend是brms官方支持的直接全局选项,因此二者可直接通过options()设置。- 若后续需要临时覆盖全局设置,只需在调用
brm()时手动指定对应参数即可,手动参数优先级高于全局默认值。
内容的提问来源于stack exchange,提问作者mat
相关产品推荐
相关产品推荐

