0

我想brms::brm仅为某些系数并根据函数手动设置模型的起始值(不是:先验)。

我当前的代码看起来像这样(你可以忽略x变量 and unit,我只想操纵zandas.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". 有人可以建议如何做到这一点吗?提前致谢!

4

0 回答 0