isoreg {modreg} | R Documentation |
Compute the isotonic (monotonely increasing nonparametric) least squares regression which is piecewise constant.
isoreg(x, y = NULL) as.stepfun(x, ...)
x, y |
coordinate vectors of the regression points.
Alternatively a single ``plotting'' structure can be
specified: see xy.coords . |
object |
a isoreg object. |
... |
potentially further arguments passed to methods. |
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.
isoreg()
returns an object of class isoreg
which is
basically a list with components
x |
original (constructed) abscissa values x . |
y |
corresponding y values. |
yf |
fitted values corresponding to ordered x values. |
yc |
cumulative y values corresponding to ordered x values. |
iKnots |
integer vector giving indices where the fitted curve jumps, i.e. where the convex minorant has kinks. |
isOrd |
logical indicating if original x values were ordered increasingly already. |
ord |
if(!isOrd) : integer permutation order(x) of
original x . |
call |
the call to isoreg() used. |
The code should be improved to accept weights additionally and
solve the corresponding weighted least squares problem.
``Patches are welcome!''
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.
the plotting method plot.isoreg
with more examples;
isoMDS()
from the MASS
package internally
uses isotonic regression.
(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" library(stepfun) (fi3 <- as.stepfun(ir3)) (ir4 <- isoreg(1:10, y4 <- c(5, 9, 1:2, 5:8, 3, 8))) cat("R^2 =", formatC(sum(residuals(ir4)^2) / (9*var(y4)), dig=2),"\n")