【问题标题】:brms model not convergingbrms 模型不收敛
【发布时间】:2017-10-17 17:32:22
【问题描述】:

我有这个 brms 模型

library(brms)
library(dplyr)
x = rep( c(-20:20,-20:20), 5)
y = c(x[1:41]^2, (x[42:82]+5)^2)
group = c(rep("A",41), rep("B",41) )
data = data.frame( x= x, y = y , group = group)
f = brm(y~ gp(x, cov ="exp_quad") +(1|group), data = data, control = list( adapt_delta = .95) )
f

并且模型不适合。我收到此错误

Warning messages:
1: The model has not converged (some Rhats are > 1.1). Do not analyse the results! 
We recommend running more iterations and/or setting stronger priors. 
2: There were 1644 divergent transitions after warmup. Increasing adapt_delta above 0.95 may help.
See http://mc-stan.org/misc/warnings.html#divergent-transitions-after-warmup 

知道如何让它适合吗?

【问题讨论】:

  • We recommend ... setting stronger priors. 请参阅betanalpha.github.io/assets/case_studies/gp_part1/part1.html,尤其是从那里链接的第 3 部分。
  • 此外,您的合成数据看起来是奇异的,因为没有差异。许多模型拟合算法都无法处理此类数据。尝试使用错误术语修改 y,例如 rnorm(length(x))

标签: r nonlinear-optimization non-linear-regression stan


【解决方案1】:

Brian 很可能是正确的,您创建了一些没有任何方差的测试数据。例如,假设这是一个玩具数据集,并且您正在使用一个真实的数据集,您需要按照警告消息中的说明进行操作。我会尝试用我在这里所做的更改调用 brm:
f = brm(y~ gp(x, cov ="exp_quad") + (1|group), data = data, control = list( adapt_delta = .99), iter = 6000)

adapt_delta 始终是介于 0 和 1 之间的值,因此如果您收到需要将其设置为高于 0.99 的警告消息,您可以尝试 0.999。您没有在调用中指定迭代次数,所以它使用默认值,我相信是 2000。我已经增加了两倍。此外,如果您的计算机上有多个内核,则应在调用中设置 cores = 4,以便每个链都可以在自己的内核上运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2018-01-07
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多