En este caso, NaN
se devuelve (no un número) porque el cálculo de los desbordamientos exponenciales en aritmética de doble precisión.
Una expresión algebraicamente equivalente, expandida en una serie de MacLaurin alrededor 0 0, es
Exp( x )1 + exp( x )=11 + exp( - x )= 1 - exp( - x ) + exp( - 2 x ) - ⋯ .
Debido a que esta es una serie alterna, el error cometido al descartar cualquier término no es mayor que el tamaño del siguiente término. Así cuandox > 710, el error no es mayor que Exp( - 710 ) ≈10- 308≈2- 1024 relativo al valor verdadero. Eso es mucho más preciso de lo que debe ser cualquier cálculo estadístico, por lo que está bien reemplazando el valor de retorno por1 en esta situación.
Curiosamente, R
no producirá un NaN
cuando el exponencial se desborde . Por lo tanto, podría elegir la versión más confiable del cálculo, según el signo de x
, como en
f <- function(x) ifelse(x < 0, exp(x) / (1 + exp(x)), 1 / (1 + exp(-x)))
Este problema aparece en casi todas las plataformas informáticas (aún no he visto una excepción) y variarán en la forma en que manejan los desbordamientos y los desbordamientos. Los exponenciales son conocidos por crear este tipo de problemas, pero no están solos. Por lo tanto, no es suficiente tener una solución R
: un buen estadístico comprende los principios de la aritmética informática y sabe cómo usarlos para detectar y solucionar las idiosincrasias de su entorno informático.