mm_quantile() -- Empirical quantile function
real matrix mm_quantile(X [, w, P, altdef])
real rowvector mm_median(X [, w])
real rowvector mm_iqrange(X [, w, altdef])
X: real matrix containing data (rows are observations, columns variables)
w: real colvector containing weights
P: real matrix containing probabilities (default is P = (0, .25, .5, .75, 1)')
altdef: real scalar causing interpolation formula to be used
mm_quantile() applies to P the inverse empirical cumulative distribution function of X (the so called quantile function). That is, mm_quantile() returns the quantiles X corresponding to the probabilities provided by P. For example,
mm_quantile(x, 1, 0.25)
returns the first quartile (i.e. the 0.25-quantile) of x.
Note that mm_quantile() works column by column. If P has one column and X has several columns, then the quantiles corresponding to P are computed for each column of X. If X has one column and P has several columns, then the quantile function of X is applied to each column of P. If X and P both have several columns, then the number of columns is required to be the same and quantiles are computed column by column.
mm_median() and mm_iqrange() are wrappers for mm_quantile() and return the median (the 0.5-quantile) and the inter-quartile range (IQR = 0.75-quantile - 0.25-quantile).
w specifies weights associated with the observations (rows) in X. Omit w, or specify w as 1 to obtain unweighted results. Note that the arguments in the above functions must not contain missing values.
altdef!=0 in mm_quantile() and mm_iqrange() uses an interpolation formula for calculating the quantiles (see remarks below).
: x = invnormal(uniform(10000,1)) : mm_quantile(x, 1, (0.25 \ 0.5 \ 0.75)) 1 +----------------+ 1 | -.6673752219 | 2 | -.0021958246 | 3 | .6880046299 | +----------------+
: mm_median(x, 1), mm_iqrange(x, 1) 1 2 +-------------------------------+ 1 | -.0021958246 1.355379852 | +-------------------------------+
The default for mm_quantile() is to apply a discontinuous quantile function using averages where the empirical distribution function is flat (this corresponds to Definition 2 in Hyndman and Fan 1996). The same method is used by summarize and is the default method in _pctile. However, if altdef!=0 is specified, a piecewise linear continuous function according to Definition 6 in Hyndman and Fan (1996) is applied. This is also used by centile and by _pctile with the altdef option.
Unlike centile and _pctile, mm_quantile() allows using weights with the interpolation method (altdef!=0). This functionality, however, is only intended to be used with (integer) frequency weights.
mm_quantile(X, w, P, altdef): X: n x 1 or n x k w: n x 1 or 1 x 1 P: r x 1 or r x k altdef: 1 x 1 result: r x 1 or r x k
mm_median(X, w): X: n x k w: n x 1 or 1 x 1 result: 1 x k
mm_iqrange(X, w, altdef): X: n x k w: n x 1 or 1 x 1 altdef: 1 x 1 result: 1 x k
mm_quantile(): p < 0 is treated as p = 0, p > 1 as p = 1.
Weights should not be negative.
Results may be misleading if altdef!=0 is used with non-integer weights.
mm_quantile.mata, mm_median.mata, mm_iqrange.mata
Hyndman, R. J., Fan, Y. (1996). Sample Quantiles in Statistical Packages. The American Statistician 50:361-365.
Ben Jann, ETH Zurich, firstname.lastname@example.org
Online: help for mm_ecdf(), summarize, pctile, centile, invcdf (if installed), moremata