Re: [Rd] splinefun gives incorrect derivs when extrapolating to the (PR#13139)

From: <berwin_at_maths.uwa.edu.au>
Date: Tue, 07 Oct 2008 13:50:03 +0200 (CEST)


--MP_/kvy20nVajVG/n.8m=_ZjLAX

Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

On Tue, 7 Oct 2008 19:31:03 +0800
Berwin A Turlach <berwin_at_maths.uwa.edu.au> wrote:

> The attached patch (against the current SVN version of R) implements
> the latter strategy. With this patch applied, "make check
> FORCE=FORCE" passes on my machine. The version of R that is build
> seems to give the correct answer in your example:

Perhaps I should have thought a bit more about this. For a natural spline c[1] is zero, and d[1] is typically not but for evaluations left of the first knot it should be taken as zero. So the attached patch solves the problem in what some might consider a more elegant manner. :)

With the patch "make check FORCE=FORCE" works on my machine and it also solves your example:

R> x <- 1:10
R> y <- sin(x)
R> 
R> splfun <- splinefun(x,y, method='natural')
R> 
R> # these should be linear (and are)
R> splfun( seq(0,1, 0.1) )  

 [1] 0.5682923 0.5956102 0.6229280 0.6502459 0.6775638 0.7048816  [7] 0.7321995 0.7595174 0.7868352 0.8141531 0.8414710
R> 
R> # these should all be the same
R> splfun( seq(0,1, 0.1), deriv=1 )  

 [1] 0.2731787 0.2731787 0.2731787 0.2731787 0.2731787 0.2731787  [7] 0.2731787 0.2731787 0.2731787 0.2731787 0.2731787
R> 
R> # these should all be 0
R> splfun( seq(0,1, 0.1), deriv=2 )

 [1] 0 0 0 0 0 0 0 0 0 0 0
R> splfun( seq(0,1, 0.1), deriv=3 )
 [1] 0 0 0 0 0 0 0 0 0 0 0

HTH. Cheers,         

        Berwin

--MP_/kvy20nVajVG/n.8m=_ZjLAX

Content-Type: text/plain; name=R-patch1
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=R-patch1

Index: src/library/stats/R/splinefun.R


Index: src/library/stats/man/splinefun.Rd


 ## Manual spline evaluation --- demo the coefficients : -.x <- get("ux", envir = environment(f)) +.x <- splinecoef$x
 u <- seq(3,6, by = 0.25)
 (ii <- findInterval(u, .x))
 dx <- u - .x[ii]

--MP_/kvy20nVajVG/n.8m=_ZjLAX--



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 07 Oct 2008 - 11:59:27 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 07 Oct 2008 - 12:30:18 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive