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 ORCID iD [aut, cph, cre]
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 x returning a single numeric value. Defaults to the median of x.

constant

numeric; A scale factor for asymptotic normality. When NULL, it defaults to \sqrt{\frac{\pi}{2}}.

na.rm

logical; If TRUE then NA values are stripped from x before computation takes place.

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 "median" or "mean" which will be used as the function to calculate the central tendency from which to measure the absolute deviations. Defaults to "median".

na.rm

logical; If TRUE then NA values are stripped from x before computation takes place.

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 "median" or "mean" which will be used as the function to calculate the central tendency from which to measure the absolute deviations. Defaults to "median".

factors

character; "CR" will use the factors calculated in Croux & Rousseeuw (1992) while "AA" (the default) will use the factors calculated by the package author. Note that if center == "mean", there are no CR factors and the AA factors will be used.

na.rm

logical; If TRUE then NA values are stripped from x before computation takes place.

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 TRUE then NA values are stripped from x before computation takes place.

maxit

numeric; The maximum number of iterations. Defaults to 80.

tol

numeric; The desired numeric tolerance. Defaults to the square root of .Machine$double.eps or roughly 1.49\times 10^{-8}.

factors

character; "CR" will use the factors calculated in Croux & Rousseeuw (1992) while "AA" (default) will use the factors calculated by the package author.

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

median

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 mad is allowed before being considered too close to 0.

na.rm

logical; If TRUE then NA values are stripped from x before computation takes place.

maxit

numeric; The maximum number of iterations. Defaults to 80.

tol

numeric; The desired numeric tolerance. Defaults to the square root of .Machine$double.eps or roughly 1.49\times 10^{-8}.

madfctrs

character; when passing data to madn, "CR" will use the factors calculated in Croux & Rousseeuw (1992) while "AA" (default) will use the factors calculated by the package author.

usefctrs

logical; If TRUE, then bias factors for robScale itself will be used. If FALSE, the default, or if loc is passed, no factors will be used.

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))