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

properties:

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

(method="scaledstineman",

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

below).

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:

library("stinepack")

# 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

slope.

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

ysp=spline(x,y,n=length(xo))

# plot the results

plot(x,y,ylim=c(-1.5,1.5))

points(xo,y1,cex=1/5,col=2)

points(xo,y2,cex=1/5,col=3)

points(xo,y3,cex=1/5,col=4)

points(ysp,cex=1/5,col=5)

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

c(2,3,4,5),lty=1)

Sincerely,

Halldor

--

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]

https://stat.ethz.ch/mailman/listinfo/r-packages

Programming list archiving by: Enterprise Git Hosting