在 rstanarm 中指定每个预测变量的先验

r_u*_*ser 4 r bayesian rstan rstanarm

我正在通过 rstanarm 开发一个贝叶斯回归模型,该模型将多项式、二项式和尺度因变量的尺度预测器结合起来。作为常规模型,我的模型如下所示:

````
 *
 deaths - scale
 gender - binomial
 hours - scale
 time - multinomial (i.e., morning, night, afternoon)
 *
lm(deaths ~ gender + hours + time)
Run Code Online (Sandbox Code Playgroud)

我试图通过 rstanarm 通过贝叶斯方法创建相同的模型,但是我对如何将不同的先验应用于每个预测变量感到困惑。

````
For example, lets say:
1. gender follows a beta prior
2. hours follows a normal prior
3. time follows a student_t
Run Code Online (Sandbox Code Playgroud)

我将如何实施这些信息?

感谢任何帮助,谢谢!

eip*_*i10 5

\xce\xb21 \xe2\x88\x88 (\xe2\x88\x9215,\xe2\x88\x925) 表示(基于先验信息)我们期望 x1 的系数大致在 -15 到 - 范围内5,因此我们选择平均值 = -10 和 sd = 5 的正态先验,这将大部分先验概率置于 -15 和 -5 之间,并且对该范围之外的值更加怀疑。同样,\xce\xb22 \xe2\x88\x88 (\xe2\x88\x921,1) 意味着我们期望x2的系数在 -1 到 1 的范围内,因此我们选择平均值=0 的正态先验,并且标准差=2。这些先前的选择在小插图中表示为 \xce\xb2\xe2\x88\xbcNormal((\xe2\x88\x9210,0),(5,0,0,2)) (均值和方差的矩阵形式/协方差)。

\n

举一个具体的例子,假设我们想要将以下模型与mtcars数据框拟合:

\n
mpg ~  wt + hp + cyl\n
Run Code Online (Sandbox Code Playgroud)\n

我们想要指定三个预测变量的先验。假设我们想要均值分别为 -1、0、1 和标准差为 4、2、3 的高斯先验。我们按如下方式创建它们:

\n
my_prior <- normal(location = c(-1, 0, 1), scale = c(4, 2, 3), autoscale = FALSE)\n
Run Code Online (Sandbox Code Playgroud)\n

类似地,我们可以为截距和误差标准差创建先验(这就是prior_aux本例中的情况):

\n
my_prior_intercept <- student_t(4, 0, 10, autoscale=FALSE)\nmy_prior_aux <- cauchy(0, 3, autoscale=FALSE)\n
Run Code Online (Sandbox Code Playgroud)\n

那么模型函数为:

\n
m1 = stan_glm(mpg ~  wt + hp + cyl, data = mtcars, \n              prior = my_prior, \n              prior_intercept=my_prior_intercept,\n              prior_aux=my_prior_aux)\n
Run Code Online (Sandbox Code Playgroud)\n

  • “stan_glm”的帮助意味着您必须选择一个函数,当我尝试组合它们时出现错误。帮助中说:“prior 应该调用 rstanarm 提供的各种函数之一来指定先验。” (2认同)
  • 在某些情况下,您可以有效地获得两个不同的。例如,如果您想要正态和学生 t 先验,请使用“student_t”函数,但将自由度(“df”参数)设置得很大(因为随着 df 的增加,t 分布接近正态分布)在你想成为正常人之前。您想到了哪些先验组合? (2认同)