Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于小(1e-4)参数值,无法使用rethinking::quap拟合贝叶斯模型_R_Numerical Methods_Bayesian - Fatal编程技术网

对于小(1e-4)参数值,无法使用rethinking::quap拟合贝叶斯模型

对于小(1e-4)参数值,无法使用rethinking::quap拟合贝叶斯模型,r,numerical-methods,bayesian,R,Numerical Methods,Bayesian,我正试图使用重新思考软件包版本2.13计算p的后验值: rethinking::quap( alist( n ~ dbinom(N, p), p ~ dnorm(1e-4, 0.5e-4) ), data = list(n = 10, N = 10e4), start = list(p = 10 / 10e4) ) 它抛出一个错误: 重新思考时出错::quap(alist(n~dbinom(n,p),p~dnorm(1e-04,5e-05)),: 非有限

我正试图使用
重新思考
软件包版本2.13计算
p
的后验值:

rethinking::quap(
  alist(
    n ~ dbinom(N, p),
    p ~ dnorm(1e-4, 0.5e-4)    
  ),
  data = list(n = 10, N = 10e4),
  start = list(p = 10 / 10e4)
)
它抛出一个错误:

重新思考时出错::quap(alist(n~dbinom(n,p),p~dnorm(1e-04,5e-05)),: 非有限差分值[1] 参数的起始值可能离映射太远。 尝试更好的优先级或使用明确的起始值。 如果对随机开始值进行采样,只需重试即可。 此尝试中使用的起始值: p=1e-04

start
实际上就是地图。
它适用于更大的
p
值。

如何解决该问题?

tl;dr您遇到了数值近似问题;添加
control=list(ndeps=1e-6)
调整有限差分公差是解决该问题的最快方法

或者,您可以更改模型以适应对数刻度上的
p

alist(
    n ~ dbinom2(N, exp(logp)),
    logp ~ dnorm(-4, 2)
)
更一般地说,如果你正在处理一个
p
可能大于(比如)0.5的问题,你可能应该使用
plogis(logit\p)
而不是
exp(log\p)
(我使用log/exp而不是logit(qlogis))来适应对数赔率或logit标度,而不是对数标度/普洛吉斯:因为我首先想到了它,而且大多数人对它更熟悉。)

我尝试过的两种方法不起作用(我认为应该有;我需要进一步挖掘以找出原因):(1)通过
control=list(parscale=1e-4)
指定参数的预期范围;(2)使用
method=“L-BFGS-B”,lower=0
设置概率参数的下限

可悲的现实是,对可能性、后验概率等进行数值评估的工具非常脆弱,以至于你很快就需要了解引擎盖下发生的事情


我们可以通过编写一个
dbinom2()
函数来诊断发生了什么,该函数只是
dbinom
的一个“嘈杂”包装器:


dbinom2您的软件包版本是否与我的软件包版本提供相同的大量错误消息?谢谢,我添加了更多信息。
10 1e+05 1e-04 -2.078512 
10 1e+05 0.0011 -78.1496 
10 1e+05 -9e-04 NaN