What is the conversion of the following equation into log space?

$bf2 = 1 + (p * (bf1 - 1))$

Given log.bf1 (log Bayes factor), how do I get to log.bf2 without having to compute bf1, but instead using log.bf1?

Context: Numerical issues are arising because bf1 is often very large or very small. Hence, the computations are performed in log space to avoid numerical over/underflow.

  • $\begingroup$ Please explain what "numerical issues" are arising and (if possible) tell us why they happen. For instance, would it be because $\text{bf}_1$ is very large, very close to $0,$ very close to $1,$ or something else? $\endgroup$
    – whuber
    Jan 9 '19 at 16:28
  • $\begingroup$ Thanks. I have added a clarification to the question. $\endgroup$ Jan 9 '19 at 16:41
  • 1
    $\begingroup$ Have a look at how other people have defined functions such as log1p_exp, that should help. $\endgroup$
    – Björn
    Jan 9 '19 at 16:44
  • $\begingroup$ Thank you, I'm currently using numerical work arounds like that. The aim of my question was check if there really aren't any mathematical tricks I could use instead. $\endgroup$ Jan 9 '19 at 17:59

To simplify the notation, write $x$ for $\text{bf}_1$ and $x^\prime$ for $\text{bf}_2.$ By subtracting $1$ from each side, write their relation as

$$y^\prime = x^\prime - 1 = p(x - 1) = py.$$

Let $s = \operatorname{signum}(y)$ be the sign of $y$ (equal to $1$ when $y\gt 0,$ $-1$ when $y \lt 0,$ and $0$ when $y=0$). Multiplying by $s$ to make both sides nonnegative (assuming $p\ge 0$) allows us to take logarithms, giving

$$\log(s y^\prime) = \log(s y) + \log(p).$$


By representing the information in terms of $s = \operatorname{signum}(x-1)$ together with $\eta = \log|x - 1|,$ the update step merely adds $\log(p)$ to $\eta.$ After a sequence of updates you can recover the final value of $x$ from the final value of $\eta$ as $$x = s \exp(\eta) + 1.$$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.