我想brms::brm
仅为某些系数并根据函数手动设置模型的起始值(不是:先验)。
我当前的代码看起来像这样(你可以忽略x
变量 and unit
,我只想操纵z
andas.factorF1
的起始值as.factorF2
):
library(tidyverse)
library(brms)
df <- data.frame(x1 = rnorm(100, mean = 1, sd = 2),
x2 = rnorm(100, mean = 2, sd = 2),
x3 = rnorm(100, mean = 3, sd = 2),
z = rnorm(100, mean = 4, sd = 2),
Fa = wakefield::r_sample_factor(n = 100, x = c(1, 2, 3)),
unit = wakefield::r_sample_factor(n = 100, x = 1:10),
Y = rnorm(100, mean = 15, sd = 5)
) %>% tibble::tibble()
brmsmodel <- brm(Y ~ as.factor(Fa) + # Fa has levels 1, 2, 3
x1 + x2 + x3 + z + (1 + x1 | unit),
data = df,
prior = c(prior(normal(0, 1), class = "b", coef = "z"),
prior_string("normal(0, 1)", class = "b", coef = paste("as.factorFa", 2:3, sep=""))),
chains = 1, iter = 25, warmup = 10, seed = 123,
init = "0")
此代码有效;但是,我想inits
手动设置一些起始值 () 以从均匀分布中提取(X ~ U[0,1])
,类似于先验。
我想要这样的东西(伪代码)
inits: 1) init = runif(0, 1), class = "b", coef = "z"
2) init = runif(0, 1), class = "b", coef = "as.factorFa2"
3) init = runif(0, 1), class = "b", coef = "as.factorFa2"
other inits: random
唯一的其他类似问题没有得到解答,也没有明确要求为某些系数起始值调用函数。
我只找到inits = "0"
(将所有起始值设置为 0)或默认的inits = "random"
. 有人可以建议如何做到这一点吗?提前致谢!