Skip to contents

A variation of ecdf() that can be applied to weighted samples.


weighted_ecdf(x, weights = NULL, na.rm = FALSE)



numeric vector: sample values


Weights for the sample. One of:

  • numeric vector of same length as x: weights for corresponding values in x, which will be normalized to sum to 1.

  • NULL: indicates no weights are provided, so the unweighted empirical cumulative distribution function (equivalent to ecdf()) is returned.


logical: if TRUE, corresponding entries in x and weights are removed if either is NA.


weighted_ecdf() returns a function of class "weighted_ecdf", which also inherits from the stepfun() class. Thus, it also has plot() and print()

methods. Like ecdf(), weighted_ecdf() also provides a quantile() method, which dispatches to weighted_quantile().


Generates a weighted empirical cumulative distribution function, \(F(x)\). Given \(x\), a sorted vector (derived from x), and \(w_i\), the corresponding weight for \(x_i\), \(F(x)\) is a step function with steps at each \(x_i\) with \(F(x_i)\) equal to the sum of all weights up to and including \(w_i\).


weighted_ecdf(1:3, weights = 1:3)
#> Step function
#> Call: weighted_ecdf(1:3, weights = 1:3)
#>  x[1:3] =      1,      2,      3
#> 4 plateau levels =      0, 0.16667,    0.5,      1
plot(weighted_ecdf(1:3, weights = 1:3))

quantile(weighted_ecdf(1:3, weights = 1:3), 0.4)
#> 40% 
#> 2.2