brms嵌套随机效应指定错误及模型设置疑问求助
问题解决与答疑
一、报错原因与修复
你的报错是cor_ar()语法使用错误导致的,具体问题及修复方式如下:
- 嵌套分组结构写法错误:brms中指定嵌套分组需用
gr()函数包裹,不能直接用/连接变量。正确表示var1嵌套在var3中、var3嵌套在var4中的写法是gr(var4, var3, var1)。 - cor_ar参数顺序错误:
cor_ar()第一个参数是自回归阶数(比如AR(1)就传入1),若要基于时间/序列变量var2建模自相关,需通过by参数指定,不能将var2与阶数用+连接。
修正后的完整代码:
result <- brm( bf( mvbind(var9, var10, var15, var16) ~ var2 + var13 + var14 + var19 + var20 + var34 + var46 + var47 + var50 + var51 + var52 + var56 + var57 + var59 + var60 + var62 + var65 + var66 + var89 + var90 + var91 + var92 + var93 + var94 + cor_ar(1, by = var2 | gr(var4, var3, var1)), zi ~ var2 + var5 + var114 + cor_ar(1, by = var2 | gr(var4, var3, var1)) ), data = y, family = zero_inflated_negbinomial(), iter = 1000, chains = 4, future = TRUE )
二、关于两个设置的答疑
1. 使用cor_ar()指定自回归协方差结构
语法修正后这个用法是合理的,补充几点注意事项:
- 若要建模协方差结构而非相关结构,需添加
cov = TRUE参数,示例:cor_ar(1, by = var2, cov = TRUE | gr(var4, var3, var1))。 - 确保
var2是代表时间/观测顺序的变量,自相关结构会基于该变量在分组内的排序计算。 gr()函数参数顺序:最外层分组在前,最内层在后,即gr(外层分组, 中层分组, 内层分组)。
2. 设置future = TRUE实现链的并行计算
这个设置是正确的,但需提前初始化future包的并行策略,否则无法真正启动并行。在运行brms代码前添加以下代码:
library(future) plan(multisession) # 自动适配CPU核心数分配并行进程,RStudio中兼容性更好
内容的提问来源于stack exchange,提问作者StatisticsFanBoy
相关产品推荐
相关产品推荐

