克服错误:rstan :: sampling()初始化失败

时间:2019-07-02 08:31:31

标签: r stan rstan

rstan::sampling()失败,出现以下错误。

[1] "Error in sampler$call_sampler(args_list[[i]]) : Initialization failed."
[1] "error occurred during calling the sampler; sampling not done"
Stan model 'foo' does not contain samples.
Stan model 'foo' does not contain samples.
Stan model 'foo' does not contain samples.
Stan model 'foo' does not contain samples.

其中foo表示stan文件foo.stan的名称。

1 个答案:

答案 0 :(得分:1)

不一致的示例,因此无法初始化:

model <- 
  stan_model(model_code = "parameters { real<lower = 0> y; }
                           transformed parameters { real<upper = -1> z = y; }")

fit <- sampling(model)

这将在RStan 2.18.1中产生以下输出:

> fit <- sampling(model)

SAMPLING FOR MODEL '64719d6dccb64c32b0d897ef1f340d74' NOW (CHAIN 1).
Chain 1: Initialization between (-2, 2) failed after 100 attempts. 
[1] "Error in sampler$call_sampler(args_list[[i]]) : Initialization failed."
error occurred during calling the sampler; sampling not done

这是生成的fit结构的开始:

> str(fit)
Formal class 'stanfit' [package "rstan"] with 10 slots
  ..@ model_name: chr "64719d6dccb64c32b0d897ef1f340d74"
  ..@ model_pars: chr [1:3] "y" "z" "lp__"
  ..@ par_dims  :List of 3
  .. ..$ y   : num(0) 
  .. ..$ z   : num(0) 
  .. ..$ lp__: num(0) 
  ..@ mode      : int 2
  ..@ sim       : list()

因此您可以使用测试

length(fit@sim) == 0

如果有样本,它们将显示为变量sim中的列表。

警告:经常会出现此问题,因为对参数的约束条件不好。 Stan假定模型中支持约束的参数的每个值。如果没有,模型通常将无法初始化。最好的解决方案是将约束约束固定在参数和参数的比例上,以便可以随机初始化模型。如果约束条件制定得当,数值问题也会引起问题。将参数缩放到单位比例会有所帮助。而且,大间隔统一先验可能会成为问题,因为初始化将在中途点附近进行。如果问题得到了很好的解决,并且约束形成得很好,则可以缩短初始化间隔,这将有所帮助。否则,您确实必须提供自己的明智的init才能使事情变得可靠。重试100次已经失败的尝试通常无法正常工作。