R: Weighted Arithmetic Mean

weightedMean {matrixStats} | R Documentation

## Weighted Arithmetic Mean

### Description

Computes the weighted sample mean of a numeric vector.

### Usage

    weightedMean(x, w = NULL, idxs = NULL, na.rm = FALSE, refine = FALSE,
      ...)

### Arguments

`x` | a `numeric` `vector` containing the values whose weighted mean is to be computed.
`w` | a vector of weights the same length as `x` giving the weights to use for each element of `x`. Negative weights are treated as zero weights. Default value is equal weight to all values.
`idxs` | A `vector` indicating subset of elements to operate over. If `NULL`, no subsetting is done.
`na.rm` | a logical value indicating whether `NA` values in `x` should be stripped before the computation proceeds, or not. If `NA`, no check at all for `NA`s is done. Default value is `NA` (for efficiency).
`refine` | If `TRUE` and `x` is `numeric`, then extra effort is used to calculate the average with greater numerical precision, otherwise not.
`...` | Not used.

### Value

Returns a `numeric` scalar. If `x` is of zero length, then `NaN` is returned, which is consistent with `mean`().

### Missing values

This function handles missing values consistently `weighted.mean`. More precisely, if `na.rm = FALSE`, then any missing values in either `x` or `w` will give result `NA_real_`. If `na.rm = TRUE`, then all `(x, w)` data points for which `x` is missing are skipped. Note that if both `x` and `w` are missing for a data points, then it is also skipped (by the same rule). However, if only `w` is missing, then the final results will always be `NA_real_` regardless of `na.rm`.

### Author(s)

Henrik Bengtsson

### See Also

`mean`() and `weighted.mean`.

### Examples

    x <- 1:10
    n <- length(x)

    w <- rep(1, times = n)
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

    # Pull the mean towards zero
    w[1] <- 5
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

    # Put even more weight on the zero
    w[1] <- 8.5
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

    # All weight on the first value
    w[1] <- Inf
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

    # All weight on the last value
    w[1] <- 1
    w[n] <- Inf
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

    # All weights set to zero
    w <- rep(0, times = n)
    m0 <- weighted.mean(x, w)
    m1 <- weightedMean(x, w)
    stopifnot(identical(m1, m0))

[Package matrixStats version 0.54.0 Index]