Para ver cómo tratar este tipo de diferencias, primero observamos un resultado matemático útil sobre las diferencias de exponenciales:
$$\begin{equation} \begin{aligned} \exp(\ell_1) - \exp(\ell_2) &= \exp(\ell_1) (1 - \exp(-(\ell_1 - \ell_2))). \\[6pt] \end{aligned} \end{equation}$$
Este resultado convierte la diferencia en un producto, lo que nos permite presentar la diferencia logarítmica como
$$\begin{equation} \begin{aligned} \ell_- &= \ln \big( \exp(\ell_1) - \exp(\ell_2) \big) \\[6pt] &= \ln \big( \exp(\ell_1) (1 - \exp(-(\ell_1 - \ell_2))) \big) \\[6pt] &= \ell_1 + \ln (1 - \exp(-(\ell_1 - \ell_2))). \\[6pt] \end{aligned} \end{equation}$$
En el caso de que $\ell_1 = \ell_2$ obtenemos la expresión $\ell_+ = \ell_1 + \ln 0 = -\infty$ . Utilizando el Ampliación de la serie Maclaurin para $\ln(1-x)$ obtenemos la fórmula:
$$\begin{equation} \begin{aligned} \ell_- &= \ell_1 - \sum_{k=1}^\infty \frac{\exp(-k(\ell_1 - \ell_2))}{k} \quad \quad \quad \text{for } \ell_1 \neq \ell_2. \\[6pt] \end{aligned} \end{equation}$$
Desde $\exp(-(\ell_1 - \ell_2)) < 1$ los términos de esta expansión disminuyen rápidamente (más rápido que el decaimiento exponencial). Si $\ell_1 - \ell_2$ es grande, entonces los términos disminuyen particularmente rápido. En cualquier caso, esta expresión nos permite calcular la suma logarítmica a cualquier nivel de precisión deseado, truncando la suma infinita a un número deseado de términos.
Implementación en R base: Es posible calcular con precisión esta diferencia logarítmica en base R
utilizando el log1p
función. Es una función primitiva del paquete base que calcula el valor de $\ln(1+x)$ para un argumento $x$ (con un cálculo preciso incluso para $x \ll 1$ ). Esta función primitiva puede utilizarse para obtener una función simple para la diferencia logarítmica:
logdiff <- function(l1, l2) { l1 + log1p(-exp(-(l1-l2))); }
Aplicación con VGAM
paquete: Machler (2012) analiza los problemas de precisión en la evaluación de la función $\ln(1-\exp(-|x|))$ y sugiere que el uso de la base R
funciones puede implicar una pérdida de precisión. Es posible calcular esta diferencia logarítmica con mayor precisión al utilizar el log1mexp
en la función VGAM
paquete. Esto le da una función alternativa para la diferencia logarítmica:
logdiff <- function(l1, l2) { l1 + VGAM::log1mexp(l1-l2); }
0 votos
"donde las probabilidades correspondientes exp(1) y exp(2) son demasiado pequeñas para distinguirse de cero" - Creo que quieres decir uno en lugar de cero?
0 votos
@Don Hatch: En el contexto de las pequeñas probabilidades normalmente se dará el caso de que $\ell_1$ y $\ell_2$ son números negativos de gran magnitud, por lo que $\exp(\ell_1) \approx \exp(\ell_1) \approx 0$ . Las primeras son las probabilidades logarítmicas y las segundas son las probabilidades reales, que se aproximan a cero.
0 votos
¿Por qué convertir las probabilidades logarítmicas en lugar de limitarse a tomar la diferencia de los logaritmos de las probabilidades, que es lo mismo que examinar el logaritmo del cociente de probabilidades? Esto último parecería más lógico, porque si hicimos una transformación logarítmica por una buena razón, no deberíamos abandonar esa buena razón volviendo a transformar antes de hacer un cálculo, sino que deberíamos hacer las pruebas en el sistema transformado preferido.
0 votos
@Carl: Hay muchos casos en los que se desea sumar o restar pequeños valores de probabilidad. En estos casos, realizar una operación completamente diferente (por ejemplo, la proporción) no es útil. El propósito de la transformación logarítmica es poder almacenar probabilidades muy pequeñas en una escala en la que se puedan distinguir de cero.
0 votos
La cuestión es que si la proporción es significativamente diferente de 1, las probabilidades no son entonces las mismas aunque las probabilidades brutas no difieran de cero.
0 votos
Con todo respeto, no creo que esa observación tenga ninguna relevancia aquí. En esta pregunta se pregunta cómo tomar la diferencia de pequeñas probabilidades que se representan en una escala logarítmica. Tú estás hablando de hacer una operación totalmente diferente (tomar su cociente), que te permite ver si las probabilidades son las mismas, pero no responde a la pregunta.