Dans ce cas, le NaN
(pas un nombre) est renvoyé car le calcul des débordements exponentiels en arithmétique double précision.
Une expression algébriquement équivalente, développée dans une série MacLaurin autour de , est0
exp(x)1+exp(x)=11+exp(−x)=1−exp(−x)+exp(−2x)−⋯.
Comme il s'agit d'une série alternée, l'erreur commise lors de la suppression d'un terme n'est pas supérieure à la taille du terme suivant. Ainsi, lorsque , l'erreur n'est pas supérieure à rapport à la valeur réelle. C'est beaucoup plus précis que n'importe quel calcul statistique doit être, donc vous êtes bien en remplaçant la valeur de retour par dans cette situation.x>710exp(−710)≈10−308≈2−1024 1
Fait intéressant, R
ne produira pas de NaN
moment où l'exponentielle se déverse . Ainsi, vous pouvez simplement choisir la version la plus fiable du calcul, en fonction du signe de x
, comme dans
f <- function(x) ifelse(x < 0, exp(x) / (1 + exp(x)), 1 / (1 + exp(-x)))
Ce problème apparaît dans presque toutes les plates-formes informatiques (je n'ai pas encore vu d'exception) et elles varient dans la façon dont elles gèrent les débordements et les débordements. Les exponentielles sont connues pour créer ce genre de problèmes, mais elles ne sont pas seules. Par conséquent, il ne suffit pas d'avoir une solution R
: un bon statisticien comprend les principes de l'arithmétique informatique et sait comment les utiliser pour détecter et contourner les particularités de son environnement informatique.