Learn R Programming

demography (version 1.13)

cm.spline: Monotonic interpolating splines

Description

Perform cubic spline monotonic interpolation of given data points, returning either a list of points obtained by the interpolation or a function performing the interpolation. The splines are constrained to be monotonically increasing (i.e., the slope is never negative).

Usage

cm.splinefun(x, y = NULL, method = "fmm", gulim=0)
cm.spline(x, y = NULL, n = 3*length(x), method = "fmm",
       xmin = min(x), xmax = max(x), gulim=0)

Arguments

x,y
vectors giving the coordinates of the points to be interpolated. Alternatively a single plotting structure can be specified: see xy.coords.
method
specifies the type of spline to be used. Possible values are fmm, natural and periodic.
n
interpolation takes place at n equally spaced points spanning the interval [xmin, xmax].
xmin
left-hand endpoint of the interpolation interval.
xmax
right-hand endpoint of the interpolation interval.
gulim
if gulim!=0 then it is taken as the upper limit on the gradient, and interpolant is gradient limited rather than monotonic.

Value

  • cm.splinereturns a list containing components x and y which give the ordinates where interpolation took place and the interpolated values.
  • cm.splinefunreturns a function which will perform cubic spline interpolation of the given data points. This is often more useful than spline.

Details

These are modifications of the spline and splinefun functions from the stats package. The resulting output is identical except that Hyman Filtering is used to produce co-monotonic interpolation.

References

Forsythe, G. E., Malcolm, M. A. and Moler, C. B. (1977) Computer Methods for Mathematical Computations. Hyman (1983) SIAM J. Sci. Stat. Comput. 4(4):645-654. Dougherty, Edelman and Hyman 1989 Mathematics of Computation, 52: 471-494.

Examples

Run this code
x <- seq(0,4,l=20)
y <- sort(rnorm(20))
plot(x,y)
lines(spline(x, y, n = 201), col = 2) # Not necessarily monotonic
lines(cm.spline(x, y, n = 201), col = 3) # Monotonic

Run the code above in your browser using DataLab