isoreg

0th

Percentile

Isotonic / Monotone Regression

Compute the isotonic (monotonely increasing nonparametric) least squares regression which is piecewise constant.

Keywords
regression, smooth
Usage
isoreg(x, y = NULL)
Arguments
x, y
coordinate vectors of the regression points. Alternatively a single plotting structure can be specified: see xy.coords.
Details

The algorithm determines the convex minorant $m(x)$ of the cumulative data (i.e., cumsum(y)) which is piecewise linear and the result is $m'(x)$, a step function with level changes at locations where the convex $m(x)$ touches the cumulative data polygon and changes slope. as.stepfun() returns a stepfun object which can be more parsimonious.

Value

  • isoreg() returns an object of class isoreg which is basically a list with components
  • xoriginal (constructed) abscissa values x.
  • ycorresponding y values.
  • yffitted values corresponding to ordered x values.
  • yccumulative y values corresponding to ordered x values.
  • iKnotsinteger vector giving indices where the fitted curve jumps, i.e., where the convex minorant has kinks.
  • isOrdlogical indicating if original x values were ordered increasingly already.
  • ordif(!isOrd): integer permutation order(x) of original x.
  • callthe call to isoreg() used.

Note

The code should be improved to accept weights additionally and solve the corresponding weighted least squares problem. Patches are welcome!

concept

monotonic regression

References

Barlow, R. E., Bartholomew, D. J., Bremner, J. M., and Brunk, H. D. (1972) Statistical inference under order restrictions; Wiley, London.

Robertson, T., Wright, F. T. and Dykstra, R. L. (1988) Order Restricted Statistical Inference; Wiley, New York.

See Also

the plotting method plot.isoreg with more examples; isoMDS() from the MASS package internally uses isotonic regression.

Aliases
  • isoreg
Examples
library(stats) require(graphics) (ir <- isoreg(c(1,0,4,3,3,5,4,2,0))) plot(ir, plot.type = "row") (ir3 <- isoreg(y3 <- c(1,0,4,3,3,5,4,2, 3))) # last "3", not "0" (fi3 <- as.stepfun(ir3)) (ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, 3, 8))) cat(sprintf("R^2 = %.2f ", 1 - sum(residuals(ir4)^2) / ((10-1)*var(y4)))) ## If you are interested in the knots alone : with(ir4, cbind(iKnots, yf[iKnots])) ## Example of unordered x[] with ties: x <- sample((0:30)/8) y <- exp(x) x. <- round(x) # ties! plot(m <- isoreg(x., y)) stopifnot(all.equal(with(m, yf[iKnots]), as.vector(tapply(y, x., mean))))
Documentation reproduced from package stats, version 3.3, License: Part of R 3.3

Community examples

Looks like there are no examples yet.