rstanarm先前位置必须大于0

时间:2017-12-26 16:48:06

标签: r stan rstanarm

我正在尝试使用先前的分层收缩在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))

1 个答案:

答案 0 :(得分:2)

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

有关详细信息,请参阅priorstan_lm参数的文档。