R: Find Tuning Constant(s) for "lqq" and "ggw" Psi Functions

psi.findc {robustbase} | R Documentation

## Find Tuning Constant(s) for "lqq" and "ggw" Psi Functions

### Description

Find psi function tuning constant sets for `"LQQ"` and `"GGW"` psi (ψ) functions by specifying largest descent (minimal slope), efficiency and or breakdown point.

`.psi.const()` is called from `lmrob.control()` to set the tuning constants for psi and chi for `"LQQ"` and `"GGW"` psi. Unless the specified tuning constants are from fixed small set where the computations are stored precomputed, `.psi.const()` calls the corresponding `.psi.<psi>.findc()`.

### Usage

    .psi.ggw.findc(ms, b, eff = NA, bp = NA,
                   subdivisions = 100L,
                   rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol,
                   tol = .Machine$double.eps^0.25, ms.tol = tol/64, maxiter = 1000)

    .psi.lqq.findc(ms, b.c, eff = NA, bp = NA,
                   interval = c(0.1, 4), subdivisions = 100L,
                   rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol,
                   tol = .Machine$double.eps^0.25, maxiter = 1000)
    .psi.const(cc, psi)

### Arguments

`ms` | number, the minimal slope, typically negative.
`b, b.c` | number, specifying b or b/c for `"ggw"` or `"lqq"` respectively.
`eff` | a number (or `NA`), the desired efficiency, in [0,1] of the estimator. If `NA`, `bp` must be specified as valid number.
`bp` | a number (or `NA`), the desired breakdown point of the estimator, in [0,1].
`interval` | for finding c via `uniroot()`.
`subdivisions` | passed to `integrate()`.
`rel.tol, abs.tol` | relative and absolute tolerance for `integrate()`.
`tol` | relative tolerance for `uniroot()`.
`ms.tol` | relative tolerance for the internal `.psi.ggw.finda()`, eventually passed to `optimize` inside (internal) `.psi.ggw.mxs()`.
`maxiter` | maximal number of iterations for `uniroot()`.

`cc` | (for `.psi.const()`:) numeric vector of length 4, containing all constants `c(ms, b*, eff, bp)`, where `b* = b` for `"ggw"` and `b* = b.c` for `"lqq"`, and one of `(eff, bp)` is `NA`.
`psi` | a string, either `"ggw"` or `"lqq"`.

### Details

For some important special cases, the result of `.psi.*.findc()` are stored precomputed for efficiency reasons. These cases are (the defaults for `tuning.chi` and `tuning.psi` respectively in `lmrob.control()`s result,

`tuning.chi` | `tuning.psi`
`c(-0.5, 1.5, NA, 0.5)` | `c(-0.5, 1.5, 0.95, NA)`

and for `"ggw"` additionally, these four cases:

`tuning.chi` | `tuning.psi`
| `c(-0.5, 1.5, 0.85, NA)`
`c(-0.5, 1, NA, 0.5)` | `c(-0.5, 1, 0.95, NA)`
| `c(-0.5, 1, 0.85, NA)`

Note that for `"ggw"`, exactly these 2+4 = 6 cases also allow fast ρ and χ (aka rho~(.), see `Mchi`), function evaluations. For all other tuning constant settings, rho() evaluations are based on numerical integration via R's own `Rdqags()` C function (part of R's official API).

### Value

a `numeric` vector of constants, for `"lqq"` or `"ggw"` psi functions, respectively:

`"lqq"`:

  (b, c, s) = (b/c * c, c, s = 1 - min_slope),

`"ggw"`:

  (0, a, b, c, rho(Inf)).

`.psi.const(cc, psi)` returns the argument `cc` with the above constant vectors as attribute `"constants"`, in the case of `psi = "lqq"` in all cases (since robustbase version >= 0.93), for `psi = "ggw"` only in the non-standard cases.

### Author(s)

Manuel Koller (original) and Martin Maechler (arguments, export, docs).

### References

See the vignette about “psi-Functions Available in Robustbase”.

### See Also

`Mpsi()` etc for the psi function definitions; `.Mpsi.tuning.defaults`, etc, for tuning constants' defaults for `lmrob()`.

### Examples

    (c.ge95 <- .psi.ggw.findc(ms = -0.5, b = 1.5, eff = 0.95))
    (c.ge90 <- .psi.ggw.findc(ms = -0.5, b = 1.5, eff = 0.90))
    (c.gb50 <- .psi.ggw.findc(ms = -0.5, b = 1.5,  bp = 0.50))
    stopifnot(all.equal(c.ge95, c(0, 1.386362,   1.5, 1.0628199,  4.7773893), tol = 1e-5),
              all.equal(c.ge90, c(0, 1.0282811,  1.5, 0.87086259, 3.2075233), tol = 1e-5),
              all.equal(c.gb50, c(0, 0.20367394, 1.5, 0.29591308, 0.37033962),tol = 1e-5))

    (cl.e.95 <- .psi.lqq.findc(ms = -0.5, b.c = 1.5, eff = .95))
    (cl.b.50 <- .psi.lqq.findc(ms = -0.5, b.c = 1.5,  bp = .50))
    stopifnot(all.equal(cl.e.95, c(1.4734061,  0.98227073, 1.5), tol = 1e-5),
              all.equal(cl.b.50, c(0.40154568, 0.26769712, 1.5), tol = 1e-5))

[Package robustbase version 0.93-9 Index]