rstanarm Предыдущее местоположение должно быть больше 0
Я пытаюсь вписать линейную модель в Rstanarm, используя иерархическую сжатие до. Однако я получаю сообщение об ошибке, утверждающее, что местоположение предыдущего должно быть больше 0.
Error: location > 0 is not TRUE
Я немного удивлен, так как hs()
у предварительного нет параметра местоположения. Я попытался установить ту же модель, используя стандартный нормальный предыдущий, и я получаю ту же ошибку, которая не имеет большого смысла для меня, так как 0 по центру приоры являются опцией по умолчанию.
Я посмотрел на stan_lm.R
а также stan_lm.fit.R
файлы в репозиториях GitHub, и я не смог найти источник этой ошибки.
Ниже я включаю код для репликации ошибки, обратите внимание, что выбор приоров в этом примере может быть не очень точным, но единственная цель этой части кода состоит в том, чтобы проиллюстрировать ошибку, которую я получаю:
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 ответ
Попробуйте использовать stan_glm
чтобы соответствовать вашей нормальной линейной модели. stan_lm
Функция требует, чтобы в R^2 был указан предшествующий элемент, а не коэффициенты регрессии - следовательно, местоположение должно быть>0.
Смотрите документацию для prior
параметр в stan_lm
Больше подробностей.