Calculates weighted quantiles based on the generalized inverse of the weighted ECDF. If no weights are passed, uses stats::quantile().

weighted_quantile(
  x,
  w = NULL,
  probs = seq(0, 1, 0.25),
  na.rm = TRUE,
  names = TRUE,
  ...
)

Arguments

x

Numeric vector.

w

Optional vector of non-negative case weights.

probs

Vector of probabilities.

na.rm

Ignore missing data? Default is TRUE.

names

Return names? Default is TRUE.

...

Further arguments passed to stats::quantile() in the unweighted case. Not used in the weighted case.

Value

A length-one numeric vector.

Examples

n <- 10
x <- seq_len(n)
quantile(x)
#>    0%   25%   50%   75%  100% 
#>  1.00  3.25  5.50  7.75 10.00 
weighted_quantile(x)
#>    0%   25%   50%   75%  100% 
#>  1.00  3.25  5.50  7.75 10.00 
weighted_quantile(x, w = rep(1, n))
#>   0%  25%  50%  75% 100% 
#>    1    3    6    8   10 
quantile(x, type = 1)
#>   0%  25%  50%  75% 100% 
#>    1    3    5    8   10 
weighted_quantile(x, w = x) # same as Hmisc::wtd.quantile()
#>   0%  25%  50%  75% 100% 
#>    1    5    7    9   10 
weighted_quantile(x, w = x, names = FALSE)
#> [1]  1  5  7  9 10
weighted_quantile(x, w = x, probs = 0.5, names = FALSE)
#> [1] 7

# Example with integer weights
x <- c(1, 1:11, 11, 11)
w <- seq_along(x)
weighted_quantile(x, w)
#>   0%  25%  50%  75% 100% 
#>    1    6    9   11   11 
quantile(rep(x, w)) # same
#>   0%  25%  50%  75% 100% 
#>    1    6    9   11   11