Functions to compute the logarithm of the mean (and cumulative means) of vectors of logarithms
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.
logMeanExpLogs(v)
v |
A vector of (log) values |
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.
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.
Richard D. Morey (richarddmorey@gmail.com)
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 and http://www.johndcook.com/blog/standard_deviation/.
# 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)))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.