R 中“积分”函数中的“非有限”函数值错误

问题描述 投票:0回答:2

我定义了一个名为“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)

,然后用两个参数对从负无穷大到正无穷大的函数进行积分。

integrate(fun5,-Inf,Inf,mu=2.198216,lsig=-3)$value

该积分给出了具有 logit 正态分布且 mu = 2.198216 且 sigma = exp(-3) 的随机变量的期望。

出现此错误。

Error in integrate(fun5, -Inf, Inf, mu = 2.198216, lsig = -3) : 
  non-finite function value

由于函数“fun5”是一个介于 0 和 1 之间的随机变量乘以概率密度,因此它在任何地方都应该为正,尽管它可能非常接近于零。我不明白为什么它在某处具有非有限值。

有人可以给建议吗?

r nan numerical-integration
2个回答
3
投票

问题是这个函数

exp(y)/(1+exp(y)) 
当 y 太大时,

四舍五入为 NaN。当 y 太大时,可以用 1 替换它来避免这种情况。这个函数就能发挥作用:

fun5<-function(y,mu=mu0,lsig=-lsig0) {
res = ifelse(y<100, exp(y)/(1+exp(y)) * 1/sqrt(2*pi)/exp(lsig) * exp(-(y-mu)^2/2/exp(lsig)^2),
             1/sqrt(2*pi)/exp(lsig) * exp(-(y-mu)^2/2/exp(lsig)^2))
return(res)}

现在就可以了

integrate(fun5,-Inf,Inf,mu=2.198216,lsig=-3)$value
[1] 0.9

1
投票

我们可以使用,

exp(y)/(1+exp(y)) 
(1 - 1/(1+exp(y)))
相同或也
1/(1+exp(-y))
 

fun5 <- function(y,mu=mu0,lsig=lsig0) 1/(1+exp(-y)) / sqrt(2*pi)/exp(lsig) * exp(-(y-mu)^2/2/exp(lsig)^2)
integrate(fun5,-Inf,Inf,mu=2.198216,lsig=-3)$value  

.

> integrate(fun5,-Inf,Inf,mu=2.198216,lsig=-3)$value
[1] 0.9
© www.soinside.com 2019 - 2024. All rights reserved.