【问题标题】:Strange behavior of 'integrate' function“整合”功能的奇怪行为
【发布时间】:2016-02-02 04:53:27
【问题描述】:

下面的代码是计算logit-正态分布随机变量的期望,参数为mu和sigma(mu是mu,lsig是sigma的对数)。

fun5 = function(y,mu=mu0,lsig=lsig0) {
  res = exp(y)/(1+exp(y)) * 1/sqrt(2*pi)/exp(lsig) * exp(-(y-mu)^2/2/exp(lsig)^2)
  return(res)
}
el = 17
integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value

我们应该把这个函数从负无穷积分到正无穷大,但我不知道怎么做,只知道有限区间的积分。 因此,我尝试从“足够宽”的区间(从 -el 到 +el)进行整合。 当 'el' 大于 0.5 时,它似乎可以正常工作(此积分的真实值为 0.585)。 但是当 el 是 14 和 15 时,这很奇怪。有人知道为什么会这样吗?

> el = 10
> integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value
[1] 0.585
> el = 13
> integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value
[1] 0.585
> el = 14
> integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value
[1] 2.975338e-05
> el = 15
> integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value
[1] 1.134474e-05
> el = 16
> integrate(fun5,-el,el,mu=0.3434108,lsig=-3.5)$value
[1] 0.585

【问题讨论】:

  • 你可以使用integrate(fun5, -Inf, Inf, mu = 0.3434108, lsig = -3.5)

标签: r integrate


【解决方案1】:

我想知道你是否理解 R 设计者允许 -InfInf 作为界限,实际上鼓励用户使用它们,尤其是当这些界限中的一个或两个远离所谓的“主要界限”时支持”:

> integrate(fun5,-Inf,Inf, mu=0.3434108, lsig=-3.5)$value
[1] 0.585

【讨论】:

  • 我不知道 Inf 和 -Inf 是允许的。这解决了我目前的问题。但我仍然想知道为什么会出现这种奇怪的结果。
  • (我认为):如果在值变化最小的范围内选择限制,则会弄乱一些进行自适应计算的算法所需的梯度计算。我很高兴听到比这种“挥手”回应更明智的答案。但是,如果这个答案有用,您至少应该支持它。而且,更重要的是,您应该仔细检查其他有针对性答案的问题并对其进行投票。
猜你喜欢
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 2015-11-22
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多