Learn R Programming

robustbase (version 0.95-1)

scaleTau2: Robust Tau-Estimate of Scale

Description

Computes the robust \(\tau\)-estimate of univariate scale, as proposed by Maronna and Zamar (2002); improved by a consistency factor,

Usage


scaleTau2(x, c1 = 4.5, c2 = 3.0, na.rm = FALSE, consistency = TRUE,
          mu0 = median(x),
          sigma0 = median(x.), mu.too = FALSE, iter = 1, tol.iter = 1e-7)

Value

numeric vector of length one (if mu.too is FALSE as by default) or two (when mu.too = TRUE) with robust scale or (location,scale) estimators

\(\hat\sigma(x)\) or

\((\hat\mu(x),\hat\sigma(x))\).

Arguments

x

numeric vector

c1,c2

non-negative numbers, specifying cutoff values for the biweighting of the mean and the rho function respectively.

na.rm

a logical value indicating whether NA values should be stripped before the computation proceeds.

consistency

logical indicating if the consistency correction factor (for the scale) should be applied.

mu0

the initial location estimate \(\mu_0\), defaulting to the median.

sigma0

the initial scale estimate \(s_0\), defaulting to the MAD; may be set to a positive value when the MAD is zero.

mu.too

logical indicating if both location and scale should be returned or just the scale (when mu.too=FALSE as by default).

iter

positive integer or logical indicating if and how many iterations should be done. The default, iter = 1 computes the “traditional” tau-estimate of scale.

tol.iter

if iter is true, or iter > 1, stop the iterations when \(|s_n - s_o| \le \epsilon s_n\), where \(\epsilon :=\)tol.iter, and \(s_o\) and \(s_n\) are the previous and current estimates of \(\sigma\).

Author

Original by Kjell Konis with substantial modifications by Martin Maechler.

Details

First, \(s_0\) := MAD, i.e. the equivalent of mad(x, constant=1) is computed. Robustness weights \(w_i := w_{c1}((x_i - med(X))/ s_0)\) are computed, where \(w_c(u) = max(0, (1 - (u/c)^2)^2)\). The robust location measure is defined as \(\mu(X) := (\sum_i w_i x_i)/(\sum_i w_i)\), and the robust \(\tau (tau)\)-estimate is \(s(X)^2 := s_0^2 * (1/n) \sum_i \rho_{c2}((x_i - \mu(X))/s_0)\), where \(\rho_c(u) = min(c^2, u^2)\).
When iter=TRUE or iter > 1, the above estimate is iterated in a fixpoint iteration, setting \(s_0\) to the current estimate \(s(X)\) and iterating until the number of iterations is larger than iter or the fixpoint is found in the sense that \
scaleTau2(*, consistency=FALSE) returns \(s(X)\), whereas this value is divided by its asymptotic limit when consistency = TRUE as by default.

Note that for n = length(x) == 2, all equivariant scale estimates are proportional, and specifically, scaleTau2(x, consistency=FALSE) == mad(x, constant=1). See also the reference.

References

Maronna, R.A. and Zamar, R.H. (2002) Robust estimates of location and dispersion of high-dimensional datasets; Technometrics 44(4), 307--317.

Yohai, V.J., and Zamar, R.H. (1988). High breakdown-point estimates of regression by means of the minimization of an efficient scale. Journal of the American Statistical Association 83, 406--413.

See Also

Sn, Qn, mad; further covOGK for which scaleTau2 was designed.

Examples

Run this code
x <- c(1:7, 1000)
sd(x) # non-robust std.deviation
scaleTau2(x)
scaleTau2(x, mu.too = TRUE)
(sI  <- scaleTau2(c(x,Inf), mu.too = TRUE))
(sIN <- scaleTau2(c(x,Inf,NA), mu.too = TRUE, na.rm=TRUE))
stopifnot({
  identical(sI, sIN)
  all.equal(scaleTau2(c(x, 999), mu.too = TRUE), sIN,
            tol = 1e-15)
})

if(doExtras <- robustbase:::doExtras()) {
 set.seed(11)
 ## show how much faster this is, compared to Qn
 x <- sample(c(rnorm(1e6), rt(5e5, df=3)))
 (system.time(Qx <- Qn(x)))         ## 2.04 [2017-09, lynne]
 (system.time(S2x <- scaleTau2(x))) ## 0.25    (ditto)
 cbind(Qn = Qx, sTau2 = S2x)
}##       Qn    sTau2
##  1.072556 1.071258

Run the code above in your browser using DataLab