'integrate' 函数的奇怪行为

Strange behavior of 'integrate' function

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

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

我们应该对这个函数从负无穷大到正无穷大进行积分,但我不知道如何做,只知道有限区间积分。 因此,我尝试从 'wide enough' 区间(从 -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

我想知道您是否了解 R 设计者允许 -InfInf 作为界限,并且实际上鼓励用户使用它们,尤其是当其中一个或两个界限与实际界限相去甚远时可能被称为 "predominant support":

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