| Type: | Package |
| Title: | Robust Estimation in Very Small Samples |
| Version: | 3.0.0 |
| Date: | 2026-03-18 |
| Description: | Implements and enhances the estimation techniques described in Rousseeuw & Verboven (2002) <doi:10.1016/S0167-9473(02)00078-6> for the location and scale of very small samples. |
| License: | BSD_2_clause + file LICENSE |
| URL: | https://github.com/aadler/revss |
| BugReports: | https://github.com/aadler/revss/issues |
| Encoding: | UTF-8 |
| Suggests: | covr, tinytest |
| NeedsCompilation: | yes |
| Packaged: | 2026-03-18 04:13:51 UTC; Parents |
| Author: | Avraham Adler |
| Maintainer: | Avraham Adler <Avraham.Adler@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-03-18 04:30:02 UTC |
Robust Estimation in Very Small Samples
Description
Implements and enhances the estimation techniques described in Rousseeuw & Verboven (2002) <doi:10.1016/S0167-9473(02)00078-6> for the location and scale of very small samples.
Details
The DESCRIPTION file:
| Package: | revss |
| Type: | Package |
| Title: | Robust Estimation in Very Small Samples |
| Version: | 3.0.0 |
| Date: | 2026-03-18 |
| Authors@R: | c(person(given = "Avraham", family = "Adler", role = c("aut", "cph", "cre"), email = "Avraham.Adler@gmail.com", comment = c(ORCID = "0000-0002-3039-0703"))) |
| Description: | Implements and enhances the estimation techniques described in Rousseeuw & Verboven (2002) <doi:10.1016/S0167-9473(02)00078-6> for the location and scale of very small samples. |
| License: | BSD_2_clause + file LICENSE |
| URL: | https://github.com/aadler/revss |
| BugReports: | https://github.com/aadler/revss/issues |
| Encoding: | UTF-8 |
| Suggests: | covr, tinytest |
| NeedsCompilation: | yes |
| Author: | Avraham Adler [aut, cph, cre] (ORCID: <https://orcid.org/0000-0002-3039-0703>) |
| Maintainer: | Avraham Adler <Avraham.Adler@gmail.com> |
| Archs: | x64 |
Index of help topics:
adm Mean Absolute Deviation from the Median or Mean
admn Mean Absolute Deviation from the Median or Mean
for Small Samples
madn Median Absolute Deviation from the Median or
Mean for Small Sample Size
revss-package Robust Estimation in Very Small Samples
robLoc Robust Estimate of Location
robScale Robust Estimate of Scale
Author(s)
Avraham Adler [aut, cph, cre] (ORCID: <https://orcid.org/0000-0002-3039-0703>)
Maintainer: Avraham Adler <Avraham.Adler@gmail.com>
Mean Absolute Deviation from the Median or Mean
Description
Compute the mean absolute deviation from the median, also known as the average deviation to the median (ADM) and (by default) adjust by a factor for asymptotically normal consistency.
Usage
adm(x, center = NULL, constant = NULL, na.rm = FALSE)
Arguments
x |
numeric; A vector of values. |
center |
optional; The central value from which to measure the average
distance. It can either be a scalar numeric value or a
function on |
constant |
numeric; A scale factor for asymptotic normality.
When |
na.rm |
logical; If |
Details
ADM = C\frac{1}{n}\sum_{i=1}^n{|x_i - \textrm{center}(x)|}
where C is the consistency constant and center defaults to
median.
The ADM is the average distance, as an absolute value, between each observation and the central observation—usually the median. In statistical literature this is also called the mean absolute deviation around the median. Unfortunately, this shares the same acronym as the median absolute deviation (MAD), which is the median equivalent of this function.
General practice is to adjust the factor for asymptotically normal consistency.
In large samples, assuming the Gaussian distribution, the mean absolute
deviation from the median approaches \sqrt{\frac{2}{\pi}},
the same value as the mean absolute deviation from the mean
(Pham-Gia & Hung 2001). This latter statistic may be returned by passing
center = mean(x) in the function call, where x is whatever is
being passed in the first position.
Given the asymptotic behavior, the default is to multiple the results by the
reciprocal—\sqrt{\frac{\pi}{2}}. However, it is
important to note that this asymptotic behavior may not hold with the
smaller sample sizes for which this package is intended.
If na.rm is TRUE then NA values are stripped from x
before computation takes place. If this is not done then an NA value in
x will cause mad to return NA.
Value
A numeric value representing the average absolute deviation from the requested central tendency adjusted by the constant.
Author(s)
Avraham Adler Avraham.Adler@gmail.com
References
Nair, K. R. (1947) A Note on the Mean Deviation from the Median. Biometrika, 34, 3/4, 360–362. doi:10.2307/2332448
Pham-Gia, T. and Hung, T. L. (2001) "The mean and median absolute deviations," Mathematical and Computer Modelling, 34 (7–8), 921–936. doi:10.1016/s0895-7177(01)00109-1
See Also
See admn for the small-sample bias-corrected version of this
function, mad in stats for the median absolute
deviation from the median, and madn for the
small-sample bias-corrected version of mad.
Examples
adm(c(1:9))
x <- c(1,2,3,5,7,8)
c(adm(x), adm(x, constant = 1))
Mean Absolute Deviation from the Median or Mean for Small Samples
Description
Compute the mean absolute deviation from the median, also known as the average deviation to the median (ADM) and adjust by applying factors calculated specifically for small-sample size to achieve unbiased asymptotic normal consistency.
Usage
admn(x, center = c("median", "mean"), na.rm = FALSE)
Arguments
x |
numeric; A vector of values. |
center |
character; either |
na.rm |
logical; If |
Details
ADM = a_n\sqrt{\frac{\pi}{2}}\frac{1}{n}\sum_{i=1}^n{|x_i -
\textrm{center}(x)|}
Similar to Croux & Rousseeuw (1992), a large-scale Monte-Carlo simulation was
performed to calculate correction factors to make the standard ADM
estimate more unbiased for small samples. It is called \textrm{ADM}_n,
to differentiate it from the more standard \textrm{ADM}, given the
a_n multiplier is dependent on n—the size of the sample.
This function differs from its larger-scale version, adm, in other
ways. First, it only accepts "median" or "mean" as its central
tendency, and not a scalar value or any other scalar-valued function, as the
factors were only calculated for those two functions. Also, it does not allow
passing a user-defined constant, as the intent is to return the unbiased
estimate assuming normality.
If na.rm is TRUE then NA values are stripped from x
before computation takes place. If this is not done then an NA value in
x will cause madn to return NA.
Value
A numeric value representing the average absolute deviation from the requested central tendency adjusted by the asymptotic normality constant and the small-sample bias-reduction constant.
Author(s)
Avraham Adler Avraham.Adler@gmail.com
References
Croux, Christophe and Rousseeuw, Peter J. (1992) "Time-Efficient Algorithms for Two Highly Robust Estimators of Scale", Computational Statistics, Vol. 1, 411–428. doi:10.1007/978-3-662-26811-7_58
See Also
See adm for the large-sample version of this function,
mad in stats for the median absolute deviation
from the median, and madn in this package for the
small-sample bias-corrected version of mad.
Examples
admn(c(1:9))
admn(c(1:9), center = "mean")
Median Absolute Deviation from the Median or Mean for Small Sample Size
Description
The median absolute deviation (MAD) is actually the median absolute
deviation from the median. For small samples, the normal bias correction of
1.4826 has been shown by Croux & Rousseeuw (1992) to be insufficient.
This function can apply the n-specific b_n correction factors
found in that paper. It also can apply factors found by a significantly larger
Monte-Carlo simulation for either the median absolute distance from the median
or from the mean.
Usage
madn(x, center = c("median", "mean"), factors = c("AA", "CR"), na.rm = FALSE)
Arguments
x |
numeric; A vector of values. |
center |
character; either |
factors |
character; |
na.rm |
logical; If |
Details
MAD_n = b_n\;1.4826\;\underset{i}{\textrm{med}}\;|x_i -
\underset{j}{\textrm{med}}\;x_j|
where b_n is calculated either by Croux & Rousseeuw (1992) or by
Adler (unpublished).
Croux & Rousseeuw (1992) used Monte-Carlo methods to calculate correction
factors to make the standard MAD estimate more unbiased for small
samples. They called this new function \textrm{MAD}_n to differentiate it
from \textrm{MAD}, given the b_n multiplier is dependent on
n—the size of the sample. This function can apply those factors to the
mad function already existing in stats.
Inspired by Croux & Rousseeuw, the package author ran a significantly larger Monte-Carlo simulation for both the median absolute deviation from the median and the median absolute deviation from the mean. This function can use those factors as well.
However, unlike mad, this function only accepts "median" or
"mean" as its central tendency, and not a scalar value or any other
scalar-valued function, as the factors were only calculated for those two
functions. Also, it does not allow passing a user-defined constant, as the
intent is to return the unbiased estimate assuming normality.
If na.rm is TRUE then NA values are stripped from x
before computation takes place. If this is not done then an NA value in
x will cause madn to return NA.
Value
A numeric value representing the median absolute deviation from the requested central tendency adjusted by the asymptotic normality constant and the small-sample bias constant.
Author(s)
Avraham Adler Avraham.Adler@gmail.com
References
Croux, Christophe and Rousseeuw, Peter J. (1992) "Time-Efficient Algorithms for Two Highly Robust Estimators of Scale", Computational Statistics, Vol. 1, 411–428. doi:10.1007/978-3-662-26811-7_58
See Also
See adm in this package for the average/mean deviation from the
median, mad from stats for the
“standard” median absolute deviation from the median, and
Sn and Qn from
robustbase for other robust measures of scale by Croux & Rousseeuw.
Examples
x <- 1:5
madn(x)
madn(x, center = "mean")
# The length 5 CR correction constant is 1.206
all.equal(madn(x, factors = "CR"), 1.206 * mad(x))
# The length 5 AA constant for deviation from median is 1.2167
all.equal(madn(x), 1.2167 * mad(x))
# The length 5 AA constant for deviation from mean is 1.0750
all.equal(madn(x, center = "mean"),
mad(x, center = mean(x)) * 1.0750)
Internal revss Functions
Description
Internal revss functions
Details
These are not to be called directly by the user.
Robust Estimate of Location
Description
Compute the robust estimate of location for very small samples.
Usage
robLoc(x, scale = NULL, na.rm = FALSE, maxit = 80L, tol = NULL,
factors = c("AA", "CR"))
Arguments
x |
numeric; A vector of values. |
scale |
numeric; The scale, if known, can be used to enhance the estimate for the location. Defaults to unknown. |
na.rm |
logical; If |
maxit |
numeric; The maximum number of iterations. Defaults to 80. |
tol |
numeric; The desired numeric tolerance. Defaults to the
square root of |
factors |
character; |
Details
Computes the M-estimator for location using the logistic \psi function of
Rousseeuw & Verboven (2002, 4.1). If there are three or fewer entries, the
function defaults to the median.
If the scale is known and passed through scale, the algorithm uses the
suggestion in Rousseeuw & Verboven section 5 (2002), substituting the known
scale for the mad.
If na.rm is TRUE then NA values are stripped from x
before computation takes place. If this is not done then an NA value in
x will return an error.
The tolerance and number of iterations are similar to those in existing base R functions.
Rousseeuw & Verboven suggest using this function when there are 3–8 samples. It is implied that having more than 8 samples allows the use of more standard estimators.
Value
Solves for the robust estimate of location, T_n, which is the solution
to
\frac{1}{n}\sum_{i = 1}^n\psi\left(\frac{x_i - T_n}{S_n}\right) = 0
where S_n is fixed at mad(x). The \psi-function selected
by Rousseeuw & Verboven is:
\psi_{log}(x) = \frac{e^x - 1}{e^x + 1}
This is equivalent to 2 * plogis(x) - 1.
Author(s)
Avraham Adler Avraham.Adler@gmail.com
References
Croux, Christophe and Rousseeuw, Peter J. (1992) "Time-Efficient Algorithms for Two Highly Robust Estimators of Scale", Computational Statistics, Vol. 1, 411–428. doi:10.1007/978-3-662-26811-7_58
Rousseeuw, Peter J. and Verboven, Sabine (2002) Robust estimation in very small samples. Computational Statistics & Data Analysis, 40, (4), 741–758. doi:10.1016/S0167-9473(02)00078-6
See Also
Examples
robLoc(c(1:9))
x <- c(1,2,3,5,7,8)
robLoc(x)
Robust Estimate of Scale
Description
Compute the robust estimate of scale for very small samples.
Usage
robScale(x, loc = NULL, implbound = 1e-4, na.rm = FALSE, maxit = 80L,
tol = NULL, madfctrs = c("AA", "CR"), usefctrs = FALSE)
Arguments
x |
numeric; A vector of values. |
loc |
numeric; The location, if known, can be used to enhance the estimate for the scale. Defaults to unknown. |
implbound |
numeric; The smallest value that |
na.rm |
logical; If |
maxit |
numeric; The maximum number of iterations. Defaults to 80. |
tol |
numeric; The desired numeric tolerance. Defaults to the
square root of |
madfctrs |
character; when passing data to |
usefctrs |
logical; If |
Details
Computes the M-estimator for scale using a smooth \rho-function defined as
the square of the logistic \psi function used in location estimation
(Rousseeuw & Verboven, 2002, 4.2). When the sequence of observations is too
short for a robust estimate, the scale estimate will default to mad so
long as mad has not “imploded”, i.e. it is greater than
implbound which defaults to 0.0001. When mad has imploded,
adm is used instead.
If the location is known and passed through loc, the algorithm uses the
suggestion in Rousseeuw & Verboven section 5 (2002) converting the observations
to distances from 0 and iterating on the adjusted sequence. In this case, the
large-scale simulation indicated that there was no bias, so usefctrs is
ignored.
If na.rm is TRUE then NA values are stripped from x
before computation takes place. If this is not done then an NA value in
x will return an error.
The tolerance and number of iterations are similar to those in existing base R functions.
Rousseeuw & Verboven suggest using this function when there are 3–8 samples. It is implied that having more than 8 samples allows the use of more standard estimators.
Value
Solves for the robust estimate of scale, S_n, which is the solution
to
\frac{1}{n}\sum_{i = 1}^n\rho\left(\frac{x_i - T_n}{S_n}\right) = \beta
where T_n is fixed at median(x) and \beta is fixed at
0.5. The \rho-function selected by Rousseeuw & Verboven is based on the
square of the \psi-function used in robLoc. Specifically
\rho_{log}(x) = \psi_{log}^2\left(\frac{x}{0.37394112142347236}\right)
The constant 0.37394112142347236 is necessary so that
\beta = \int\rho(u)\;d\Phi(u)=0.5
Author(s)
Avraham Adler Avraham.Adler@gmail.com
References
Croux, Christophe and Rousseeuw, Peter J. (1992) "Time-Efficient Algorithms for Two Highly Robust Estimators of Scale", Computational Statistics, Vol. 1, 411–428. doi:10.1007/978-3-662-26811-7_58
Rousseeuw, Peter J. and Verboven, Sabine (2002) Robust estimation in very small samples. Computational Statistics & Data Analysis, 40, (4), 741–758. doi:10.1016/S0167-9473(02)00078-6
See Also
See adm, mad, and madn for more
basic robust estimators of scale.
See Qn and Sn in the
robustbase package
for more specialized robust scale estimators for larger samples. These last two
are based on code written by Peter Rousseeuw.
Examples
robScale(c(1:9))
x <- c(1,2,3,5,7,8)
c(robScale(x), robScale(x, loc = 5))