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

时间:2016-03-22 11:31:48

标签: r nan integrate

我定义了一个名为'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-normal分布,mu = 2.198216,sigma = exp(-3)。

发生此错误。

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

由于函数'fun5'是0到1之间的随机变量乘以概率密度,因此它应该是正的,尽管它可能非常接近于零。我不明白为什么它在某处具有非有限价值。

有人可以提出建议吗?

2 个答案:

答案 0 :(得分: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 :(得分: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