monoreg.Rdmonoreg performs monotone regression (either isotonic
or antitonic) with weights.
coordinate vectors of the regression
points. Alternatively a single “plotting” structure can be
specified: see xy.coords.
data weights (default values: 1).
fit a monotonely increasing ("isotonic") or monotonely decreasing ("antitonic") function.
monoreg is similar to isoreg, with the addition
that monoreg accepts weights.
If several identical x values are given as input, the
corresponding y values and the
weights w are automatically merged, and a warning is issued.
The plot.monoreg function optionally plots the cumulative
sum diagram with the greatest convex minorant (isotonic regression)
or the least concave majorant (antitonic regression), see the
examples below.
A list with the following entries:
the sorted and unique x values
the corresponding y values
the corresponding weights
the fitted y values
the type of monotone regression ("isotonic" or "antitonic"
the function call
Robertson, T., F. T. Wright, and R. L. Dykstra. 1988. Order restricted statistical inference. John Wiley and Sons.
# load "fdrtool" library
library("fdrtool")
# an example with weights
# Example 1.1.1. (dental study) from Robertson, Wright and Dykstra (1988)
age = c(14, 14, 8, 8, 8, 10, 10, 10, 12, 12, 12)
size = c(23.5, 25, 21, 23.5, 23, 24, 21, 25, 21.5, 22, 19)
mr = monoreg(age, size)
#> Warning: Duplicated x value (x=14) detected!
#> The corresponding weights and y values will be merged.
#> Warning: Duplicated x value (x=8) detected!
#> The corresponding weights and y values will be merged.
#> Warning: Duplicated x value (x=10) detected!
#> The corresponding weights and y values will be merged.
#> Warning: Duplicated x value (x=12) detected!
#> The corresponding weights and y values will be merged.
# sorted x values
mr$x # 8 10 12 14
#> [1] 8 10 12 14
# weights and merged y values
mr$w # 3 3 3 2
#> [1] 3 3 3 2
mr$y # 22.50000 23.33333 20.83333 24.25000
#> [1] 22.50000 23.33333 20.83333 24.25000
# fitted y values
mr$yf # 22.22222 22.22222 22.22222 24.25000
#> [1] 22.22222 22.22222 22.22222 24.25000
fitted(mr)
#> [1] 22.22222 22.22222 22.22222 24.25000
residuals(mr)
#> [1] 0.2777778 1.1111111 -1.3888889 0.0000000
plot(mr, ylim=c(18, 26)) # this shows the averaged data points
points(age, size, pch=2) # add original data points
###
y = c(1,0,1,0,0,1,0,1,1,0,1,0)
x = 1:length(y)
mr = monoreg(y)
# plot with greatest convex minorant
plot(mr, plot.type="row.wise")
# this is the same
mr = monoreg(x,y)
plot(mr)
# antitonic regression and least concave majorant
mr = monoreg(-y, type="a")
plot(mr, plot.type="row.wise")
# the fit yf is independent of the location of x and y
plot(monoreg(x + runif(1, -1000, 1000),
y +runif(1, -1000, 1000)) )
###
y = c(0,0,2/4,1/5,2/4,1/2,4/5,5/8,7/11,10/11)
x = c(5,9,13,18,22,24,29,109,120,131)
mr = monoreg(x,y)
plot(mr, plot.type="row.wise")
# the fit (yf) only depends on the ordering of x
monoreg(1:length(y), y)$yf
#> [1] 0.0000000 0.0000000 0.3500000 0.3500000 0.5000000 0.5000000 0.6871212
#> [8] 0.6871212 0.6871212 0.9090909
monoreg(x, y)$yf
#> [1] 0.0000000 0.0000000 0.3500000 0.3500000 0.5000000 0.5000000 0.6871212
#> [8] 0.6871212 0.6871212 0.9090909