Nesse caso, o NaN
(não é um número) é retornado porque o cálculo do exponencial transborda em aritmética de precisão dupla.
0 0
exp( X )1 + exp( X )= 11 + exp( - x )= 1 - exp( - x ) + exp( - 2 x ) - ⋯ .
x > 710exp(−710)≈10−308≈2−1024 1
Curiosamente, R
não produzirá um NaN
quando o exponencial for insuficiente . Assim, você pode escolher a versão mais confiável do cálculo, dependendo do sinal de x
, como em
f <- function(x) ifelse(x < 0, exp(x) / (1 + exp(x)), 1 / (1 + exp(-x)))
Esse problema aparece em quase todas as plataformas de computação (ainda não vi uma exceção) e elas variam na maneira como lidam com estouros e subfluxos. Os exponenciais são notórios por criar esses tipos de problemas, mas não estão sozinhos. Portanto, não basta apenas ter uma solução R
: um bom estatístico entende os princípios da aritmética computacional e sabe como usá-los para detectar e solucionar as idiossincrasias de seu ambiente de computação.