0

我正在尝试随机初始化贝叶斯模型的链,今天我手动插入值,如下所示:

inits1 <- list("alpha" = 10, "beta" = 3.2, "lambda" = 2)
inits2 <- list("alpha" = 18, "beta" = 7, "lambda" = 4.6)
inits3 <- list("alpha" = 16, "beta" = 5, "lambda" = 3.1)

model.inits <- list(inits1, inits2, inits3)

我尝试通过以下方式执行它,但导致错误:

inits <- function(){ list("alpha"=rnorm(p), "beta" = rlnorm(p), "lambda" = runif(p))}

其中p->3(模型的参数个数)

跟随错误:

错误:使用 rjags 编译和调整模型时出现以下错误:setParameters(init.values[[i]], i) 中的错误:运行时错误:为 alpha 提供的值中的尺寸不匹配

4

1 回答 1

1

这是一个初始化函数的示例,rjags它最多可用于 8 个链:

inits_func <- function(chain){
  gen_list <- function(chain = chain){
    list( 
      alpha = rnorm(1, 14, 2),
      beta = rlnorm(1, log(5), log(1)),
      lambda = runif(1, 0.05, 5),
      .RNG.name = switch(chain,
                         "1" = "base::Wichmann-Hill",
                         "2" = "base::Marsaglia-Multicarry",
                         "3" = "base::Super-Duper",
                         "4" = "base::Mersenne-Twister",
                         "5" = "base::Wichmann-Hill",
                         "6" = "base::Marsaglia-Multicarry",
                         "7" = "base::Super-Duper",
                         "8" = "base::Mersenne-Twister"),
      .RNG.seed = sample(1:1e+06, 1)
    )
  }
  return(switch(chain,           
                "1" = gen_list(chain),
                "2" = gen_list(chain),
                "3" = gen_list(chain),
                "4" = gen_list(chain),
                "5" = gen_list(chain),
                "6" = gen_list(chain),
                "7" = gen_list(chain),
                "8" = gen_list(chain)
  )
  )
}

需要注意的重要一点是,该函数应该 1) 有一个名为的参数chain,并且 2) 您需要手动指定要为每个链估算的参数数量。

在您的函数中,您已指定p=3. 因此,您最终会为每个链生成三个 alpha、beta 和 lambda 参数。查看您之前使用的列表,似乎每个链都应该有一个 alpha、beta 和 lambda 参数(即,您的模型中只有一个 alpha、beta 和 lambda 参数)。此外,您应该指定参数(例如,正态分布的 mu 和 sd,均匀分布的上限和下限)。我根据您在三个列表中指定的值“目测”了这些。如果您愿意,您也可以大大简化此功能,并且不RNG为每个链指定算法。如果您编写的函数改为:

inits <- function(chain){
 list(
 alpha = rnorm(1),
 beta = rlnorm(1),
 lambda = runif(1))
}

但同样,您希望在 、 和 中指定rnorm其他rlnorm参数runif

于 2020-02-25T14:35:48.120 回答