【问题标题】:rstanarm Prior location must be greater than 0rstanarm 优先位置必须大于 0
【发布时间】:2017-12-26 16:48:05
【问题描述】:

我正在尝试使用分层收缩先验在 rstanarm 中拟合线性模型。但是,我确实收到一条错误消息,指出先验位置必须大于 0。

Error: location > 0 is not TRUE

我有点惊讶,因为 hs() 之前没有位置参数。我尝试使用标准法线先验拟合相同的模型,但我得到了同样的错误,这对我来说没有多大意义,因为 0 居中先验是默认选项。

我查看了 github 存储库中的 stan_lm.Rstan_lm.fit.R 文件,但我无法找到此错误的来源。

下面我包含了复制错误的代码,请注意,此示例中的先验选择可能不是很合适,但这段代码的唯一目的是说明我遇到的错误:

library(rstanarm)
library(tidyverse)
library(MASS)
nObs <- 400
x <- mvrnorm(n = nObs, mu = c(0, 0, 0),
             diag(c(0.5, 1, 2)))
y <- (x %*% c(0.3, 0.4, 0.5)) + rnorm(n = nObs, 0, 1)
fullData <- cbind(y, x) %>% as.data.frame

model0 <- stan_lm(y ~ -1 + x, data = fullData,
                  prior = normal(location = 0, scale = 1))
model1 <- stan_lm(y ~ -1 + x, data = fullData,
                  prior = hs(df = 1, global_df = 1, global_scale = 0.01,
                             slab_df = 4, slab_scale= 2.5))

【问题讨论】:

    标签: r stan rstanarm


    【解决方案1】:

    尝试使用stan_glm 来拟合您的正常线性模型。 stan_lm 函数需要在 R^2 上指定先验,而不是回归系数 - 因此位置必须 > 0。

    有关详细信息,请参阅 stan_lm 中的 prior 参数的文档。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-30
      • 2016-03-16
      • 2020-10-22
      • 2013-02-04
      • 2016-01-28
      • 1970-01-01
      相关资源
      最近更新 更多