如何使用Rjags随机初始化链?

问题描述 投票:0回答:1

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

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提供的值中的尺寸不匹配

bayesian jags rjags
1个回答
0
投票

这里是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))
}

但是同样,您想在rnormrlnormrunif中指定其他参数。

© www.soinside.com 2019 - 2024. All rights reserved.