[Rd] bug in spline()? (PR#653)
Douglas Bates
bates@stat.wisc.edu
04 Sep 2000 16:53:14 -0500
imsw@holyrood.ed.ac.uk writes:
> BUG IN SPLINE()?
>
> Version R-1.0.1, system i486,linux
>
> If the spline(x,y,method="natural") function is given values outside the
> range of the data, it does not give a warning. Moreover, the extrapolated
> value reported is not the ordinate of the natural spline defined by (x,y).
>
> Example. Let x <- c(2,5,8,10) and y <- c(1.2266,-1.7606,-0.5051,1.0390).
> Then interpolate/extrapolate with a natural cubic spline at 1:10 using
> either
>
> spline(x,y,n=10,method="natural",xmin=1,xmax=10)
>
> or
>
> fn <- splinefun(x,y,method="natural")
> fn(1:10)
>
> This gives c(2.5366,1.2266,-0.0834,...,1.0390). I agree with all values
> except that at x=1. The interpolation formula in Green and Silverman's
> book on splines gives the derivative of a natural spline at the first
> knot as f'(x1)=(f2-f1)/(x2-x1) -(1/6)(x2-x1)d, where d=second derivative
> at the second knot. For the above example, d=0.7071, f'(x1)=-1.3493,
> and the natural spline interpolant has value 1.2266-(-1.3493)=2.5759
> at x=1, not 2.5366.
I think the `interpSpline' function in the splines package gives the
desired natural interpolation spline. Perhaps we should change the
underlying code for the spline function.
> library(splines)
> x <- c(2,5,8,10)
> y <- c(1.2266,-1.7606,-0.5051,1.0390)
> ns1 <- interpSpline(y ~ x)
> plot(ns1) # gives a plot that looks reasonable
> points(x,y)
> predict(ns1, 1:10)
$x
[1] 1 2 3 4 5 6 7 8 9 10
$y
[1] 2.5758923 1.2266000 -0.0834080 -1.1577100 -1.7606000 -1.7349409
[7] -1.2378717 -0.5051000 0.2669514 1.0390000
attr(,"class")
[1] "xyVector"
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._