'non-finite' 'integrate' R 函数中的函数值错误
'non-finite' function value error in 'integrate' function in R
我定义了一个名为 '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
此积分给出随机变量的期望值,该变量具有 mu = 2.198216 和 sigma = exp(-3) 的对数正态分布。
发生此错误。
Error in integrate(fun5, -Inf, Inf, mu = 2.198216, lsig = -3) :
non-finite function value
由于函数 'fun5' 是一个介于 0 和 1 之间的随机变量乘以概率密度,因此它应该处处为正,尽管它可能非常接近于零。我不明白为什么它在某处具有非有限值。
有人可以给点建议吗?
问题是函数
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
我们可以使用
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
我定义了一个名为 '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
此积分给出随机变量的期望值,该变量具有 mu = 2.198216 和 sigma = exp(-3) 的对数正态分布。
发生此错误。
Error in integrate(fun5, -Inf, Inf, mu = 2.198216, lsig = -3) :
non-finite function value
由于函数 'fun5' 是一个介于 0 和 1 之间的随机变量乘以概率密度,因此它应该处处为正,尽管它可能非常接近于零。我不明白为什么它在某处具有非有限值。
有人可以给点建议吗?
问题是函数
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
我们可以使用
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