2016-03-22 7 views
-1

I definiert ist, eine Funktion ‚fun5‘ wie folgt aufgerufen:‚nicht finite‘ Funktionswert Fehler in Funktion in R ‚integrieren‘

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) 

, dann die Funktion von minus unendlich bis plus unendlich mit zwei Parametern integriert .

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

Dieses Integral gibt die Erwartung einer Zufallsvariablen, die logit-Normalverteilung mit mu = 2,198216 und Sigma = exp (-3) hat.

Dieser Fehler ist aufgetreten.

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

Da die Funktion ‚fun5‘ eine Zufallsvariable zwischen 0 und 1 durch Wahrscheinlichkeitsdichte multipliziert, sollte es positiv überall sein, obwohl es sehr nahe bei Null sein könnte. Ich verstehe nicht, warum es irgendwo einen nicht endlichen Wert hat.

Kann jemand einen Rat geben?

Antwort

3

Das Problem ist, dass die Funktion

exp(y)/(1+exp(y)) 

zu NaN gerundet wird, wenn y zu groß ist. Sie können vermeiden, dass es durch 1 ersetzt wird, wenn y zu groß ist. Diese Funktion wird der Trick spielen:

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)} 

und jetzt wird diese

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

arbeiten wir verwenden können, dass
exp(y)/(1+exp(y))  die gleiche wie (1 - 1/(1+exp(y))) ist oder auch 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