Subject: [R-pkgs] Stineman interpolation package

The package STINEPACK is now available on CRAN.

This package implements the stineman interpolation method, and is coded
entirely in R
(no Fortan or C libraries). The interpolation method is very robust, and
does not yield
spurious oscillations near spikes or steps. The original article (Stineman
1980) describes
this method as "consistently well behaved".

The interpolation is done in the stinterp routine, and depending on
arguments passed to it, this routine
may call other routines to estimate the slope of the interpolating function.
If the slope is known it can be
explicitly included in stinterp.

The interpolation method is described in an article by Russell W. Stineman
in the July 1980 issue of
Creative Computing with a note from the editor stating that while they were
"not an academic journal
but once in a while something serious and original comes in" adding that
this was "apparently a
real solution" to a well known problem.

According to Stineman, the interpolation procedure has "the following

1. If values of the ordinates of the specified points change monotonically,
and the slopes of the
line segments joining the points change monotonically, then the
interpolating curve and its
slope will change monotonically.
2. If the slopes of the line segments joining the specified points change
monotonically, then the
slopes of the interpolating curve will change monotonically.
3. Suppose that the conditions in (1) or (2) are satisfied by a set of
points, but a small change
in the ordinate or slope at one of the points will result conditions (1) or
(2) being not longer
satisfied. Then making this small change in the ordinate or slope at a point
will cause no more
than a small change in the interpolating curve."

The method is based on rational interpolation with specially chosen rational
functions to satisfy the
above three conditions.

Slopes computed at the given points with the methods provided by the
'stinterp' function satisfy
Stineman's requirements. The original method suggested by Stineman
the default, and "stineman") result in lower slopes near abrupt steps or
spikes in the point sequence,
and therefore a smaller tendency for overshooting. The method based on a
second degree polynomial
(method="parabola") provides better approximation to smooth functions, but
it results in
in higher slopes near abrupt steps or spikes and can lead to some
overshooting where Stineman's
method does not. Both methods lead to much less tendency for 'spurious'
oscillations than traditional
interplation methods based on polynomials, such as splines (see the example

Stineman states that "The complete assurance that the procedure will never
generate 'wild' points
makes it attractive as a general purpose procedure".

This interpolation method has been implemented in Matlab and Python in
addition to R

An example follows:


# make a function with a sharp spike
x <- seq(0,2*pi,by=pi/6)
y <- sin(x)
y[3] <- -1.5

# interpolate to a finer axis, try all three methods for estimating the
xo <- seq(0,2*pi,by=pi/150)
y1 <- stinterp(x,y,xo,method="sc")$y
y2 <- stinterp(x,y,xo,method="st")$y
y3 <- stinterp(x,y,xo,method="pa")$y

# compare with standard spline

# plot the results

legend(3, 1, c("Scaled Stineman", "Stineman", "Parabolic", "Spline"), col =

Halldór Björnsson
Deildarstj. Ranns. & Þróun
Veðursvið Veðurstofu Íslands

Halldór Bjornsson
Weatherservice R & D
Icelandic Met. Office

[[alternative HTML version deleted]]

R-packages mailing list
[email protected]

Programming list archiving by: Enterprise Git Hosting