Functions to compute the logarithm of the mean (and cumulative means) of vectors of logarithms

Description

Given a vector of numeric values of real values represented in log form, logMeanExpLogs computes the logarithm of the mean of the (exponentiated) values. logCumMeanExpLogs computes the logarithm of the cumulative mean.

Usage

1

Arguments

v

A vector of (log) values

Details

Given a vector of values of log values v, one could compute log(mean(exp(v))) in R. However, exponentiating and summing will cause a loss of precision, and possibly an overflow. These functions use the identity

log(e^a + e^b) = a + log[ 1 + e^(b-a) ]

and the method of computing log(1+e^x) that avoids overflow (see the references). The code is written in C for very fast computations.

Value

logMeanExpLogs returns a single value; logCumMeanExpLogs returns a vector of values of the same length as v.

Author(s)

Richard D. Morey (richarddmorey@gmail.com)

References

For details of the approximation of log(1+e^x) used to prevent loss of precision, see http://www.codeproject.com/Articles/25294/Avoiding-Overflow-Underflow-and-Loss-of-Precision.

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Sample 100 values
y = log(rexp(100,1))

# These will give the same value,
# since e^y is "small"
logMeanExpLogs(y)
log(mean(exp(y)))

# We can make e^x overflow by multiplying
# e^y by e^1000
largeVals = y + 1000

# This will return 1000 + log(mean(exp(y)))
logMeanExpLogs(largeVals)

# This will overflow
log(mean(exp(largeVals)))

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.