brms 包中prior_summary 输出中的空白单元格是什么意思?

机器算法验证 事先的 斯坦
2022-03-21 08:53:41

该包是一个 R 包,用于使用 Stan 作为后端的类似语法的brms贝叶斯模型。lme4在包中,有一个选项可以在不指定任何先验的情况下拟合模型。在这种情况下,根据文档,包默认选择非信息或弱信息先验。特别是,根据一个小插曲,对于总体级别的参数,默认值是不合适的,而对于组级别的参数,SD 的默认值是学生的t

当我使用默认先验(没有先验信息可言)拟合模型时,我想看看实际使用的先验是什么。该函数prior_summary打印出拟合模型后使用的先验。

但是,我无法理解打印输出。在这里,模型是distance | cens(censored) ~ (segdist + tonedist | participant) + (1|variable)

                  prior     class      coef       group resp dpar nlpar bound
1   student_t(3, 4, 10) Intercept                                            
2  lkj_corr_cholesky(1)         L                                            
3                               L           participant                      
4   student_t(3, 0, 10)        sd                                            
5                              sd           participant                      
6                              sd Intercept participant                      
7                              sd   segdist participant                      
8                              sd  tonedist participant                      
9                              sd              variable                      
10                             sd Intercept    variable                      
11  student_t(3, 0, 10)     sigma                                            

如您所见,有许多行没有事先指定。为此,我想到了两个原因:

可能性1:那些空白行适合不正确的先验。考虑这一点的一个原因是all函数中有一个参数,文档描述如下:显示模型中可能具有先验(TRUE)或仅具有适当先验(FALSE)的所有参数?'。将其设置为 FALSE 后,除 1、2、4 和 11 之外的所有行都被删除,似乎暗示它们具有不正确的先验。

然而,这似乎很奇怪,因为 SD 有一个不正确的先验,这是他们不应该的。此外,我不确定像 3、4、5 和 9 这样的线实际上是什么。4 特别是不能指模型的残差标准差,因为那是sigma,所以不清楚人口级别的 sd 在这里做什么。

可能性 2:第 2 行和第 4 行是标题,并暗示以下所有行都有该标题。这在第 2 行的情况下似乎是有道理的。假设class列中的L 是cor(相关性;我在文档中的任何地方都找不到L类)的替代,那么先验是有道理的。participant(我在分组中只有相关性,因为 for variable,只有一个随机截距。)同样,所有组级效应都有学生的t先验,这是预期的行为。

这是我觉得比较明智的猜测。但是,它并没有解释 的奇怪行为all,因为第 3 行和第 5-10 行会有适当的先验,即使all=FALSE根据文档也应该显示出来。此外,第 5 行和第 9 行仍然有点神秘,尽管我可以将它们解释为“继承”第 4 行的先验并将它们“传递”到截距和斜率的“副标题”。

我的任何猜测都正确吗?

PS 的文档prior_summary是 p.133 of this

1个回答

可能性 2 是正确的。brms 中的先验规范是分层的,如果指定了参数类的全局先验,它将用于该类的所有系数,除非系数有自己的先验。在后一种情况下,改为使用特定于系数的先验。

您还可以通过从拟合模型对象中提取 stan 代码stancode()来查看实际指定了哪种先验。

关于您的其他问题:

IndeedLcor类相关,其中L是相关矩阵的 Cholesky 因子,这是模型中实际使用的。

我看到文档具有all误导性。它所做的基本上只是显示 brmsprior 对象中具有非空先前列的那些行。