Learn R Programming

BayesFactor (version 0.9.12-4.7)

logMeanExpLogs: 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

logMeanExpLogs(v)

Value

logMeanExpLogs returns a single value, logCumMeanExpLogs returns a vector of values of the same length as v, and logSummaryStats returns a list of the log mean, log variance, and cumulative log means.

Arguments

v

A vector of (log) values

Author

Richard D. Morey (richarddmorey@gmail.com)

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.

References

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

Examples

Run this code

# 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)))

Run the code above in your browser using DataLab