logMeanExpLogs: Functions to compute the logarithm of the mean (and...

View source: R/logMean.R

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


BayesFactor documentation built on May 29, 2024, 3:09 a.m.