logMeanExpLogs | R Documentation |
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
https://www.codeproject.com/Articles/25294/Avoiding-Overflow-Underflow-and-Loss-of-Precision and
https://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)))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.