logMeanExpLogs {BayesFactor} | R Documentation |
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)
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, and logSummaryStats
returns a list of the
log mean, log variance, and cumulative log means.
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
https://www.codeproject.com/Articles/25294/Avoiding-Overflow-Underflow-and-Loss-of-Precision and
https://www.johndcook.com/blog/standard_deviation/.
Examples
# 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)))