这是一个初始化函数的示例,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
。