Hallo, I'm facing a problem and I would really appreciate your support. I have to translate some Matalb code in R that I don't know very well but I would like to. I have to interpolate 5 point with a cubic spline function and then I expect my function returns the Y value as output a specific X value inside the evaluation range. Let's suppose that: 1- *X = [-10, -5, 0, 5, 10]* 2 - *Y = [12, 10, 8, 7, 6]* 3 - *I have to interpolate with a cubic spline assuming x=11* In Matlab I used this function: *y = interp1(X, Y, x, "cubic"); * How can I do the same in R? Many thanks in advance for your reply and support! Kindly Steve -- View this message in context: http://r.789695.n4.nabble.com/cubic-spline-tp4651537.html Sent from the R help mailing list archive at Nabble.com.
cubic spline
9 messages · Steve Stephenson, Jorge I Velez, David Winsemius +3 more
An embedded and charset-unspecified text was scrubbed... Name: not available URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20121202/c02f9643/attachment.pl>
Hi Jorge, many thanks for your suggestion! I tried the function you mentioned and it looks working!! Now I have just to check that splint (R) and interp1 (Matlab) functions provide me the same results. Kind regards! Steve -- View this message in context: http://r.789695.n4.nabble.com/cubic-spline-tp4651537p4651555.html Sent from the R help mailing list archive at Nabble.com.
On Dec 1, 2012, at 5:09 AM, Steve Stephenson wrote:
Hallo, I'm facing a problem and I would really appreciate your support. I have to translate some Matalb code in R that I don't know very well but I would like to. I have to interpolate 5 point with a cubic spline function and then I expect my function returns the Y value as output a specific X value inside the evaluation range. Let's suppose that: 1- *X = [-10, -5, 0, 5, 10]* 2 - *Y = [12, 10, 8, 7, 6]* 3 - *I have to interpolate with a cubic spline assuming x=11* In Matlab I used this function: *y = interp1(X, Y, x, "cubic"); * How can I do the same in R? Many thanks in advance for your reply and support!
splinefun( x = c(-10, -5, 0, 5, 10),
y = c(12, 10, 8, 7, 6),
method="natural")(11)
[1] 5.785714
David Winsemius, MD Alameda, CA, USA
David Winsemius <dwinsemius at comcast.net>
on Sat, 1 Dec 2012 09:25:42 -0700 writes:
> On Dec 1, 2012, at 5:09 AM, Steve Stephenson wrote:
>> Hallo, I'm facing a problem and I would really appreciate
>> your support. I have to translate some Matalb code in R
>> that I don't know very well but I would like to. I have
>> to interpolate 5 point with a cubic spline function and
>> then I expect my function returns the Y value as output a
>> specific X value inside the evaluation range. Let's
>> suppose that: 1- *X = [-10, -5, 0, 5, 10]* 2 - *Y = [12,
>> 10, 8, 7, 6]* 3 - *I have to interpolate with a cubic
>> spline assuming x=11*
>>
>> In Matlab I used this function:
>>
>> *y = interp1(X, Y, x, "cubic"); *
>>
>> How can I do the same in R? Many thanks in advance for
>> your reply and support!
> splinefun( x = c(-10, -5, 0, 5, 10), y = c(12, 10, 8, 7, 6),
method="natural")(11) [1] 5.785714
Yes, indeed, or simple spline(....)
but definitely *no* need to use a function from an extra CRAN
package .. as someone else ``erronously'' suggested.
Note that
spline() and splinefun()
together with
approx() and approxfun()
are among the several hundred functions that were already
part of "pre-alpha" R, i.e., before R had a version number or *any* packages ...
and yes, the README then started with the two lines
| R Source Code (Tue Jun 20 14:33:47 NZST 1995)
| Copyright 1993, 1994, 1995 by Robert Gentleman and Ross Ihaka
and it would be *really* *really* great
if people did not add stuff to their packages that has
been part of R for longer than they have even heard of R.
Martin Maechler, ETH Zurich
Martin Maechler <maechler <at> stat.math.ethz.ch> writes: [snip]
but definitely *no* need to use a function from an extra CRAN package .. as someone else ``erronously'' suggested. Note that spline() and splinefun() together with approx() and approxfun() are among the several hundred functions that were already part of "pre-alpha" R, i.e., before R had a version number or *any* packages ... and yes, the README then started with the two lines | R Source Code (Tue Jun 20 14:33:47 NZST 1995) | Copyright 1993, 1994, 1995 by Robert Gentleman and Ross Ihaka and it would be *really* *really* great if people did not add stuff to their packages that has been part of R for longer than they have even heard of R. Martin Maechler, ETH Zurich
To be fair, the 'fields' package has a pretty long history too -- I think it may have been ported from an S-PLUS 'package' (or whatever the correct terminology is) that existed quite a while ago. I think it was the FUNFITS module. From http://lib.stat.cmu.edu/S/: funfits FUNFITS is a comprehensive S-Plus module for fitting functions and nonlinear time series, including multivariate splines, Kriging and neural networks. Contributed by Doug Nychka (nychka at ucar.edu). [25/Apr/96] [24/Mar/97][24/Sep/99] (3 kbytes). The actual compressed tar file is available as funfits23.tar.gz in the S collection. Access this file via FTP, or the WWW, but not e-mail. (596k). Older version avaulable at funfits.tar.Z A quick look at funfits.tar.Z suggests that 'splint' existed in that version, in 1996 -- so respectably old.
but definitely *no* need to use a function from an extra CRAN package .. as someone else ``erronously'' suggested.
Except that Matlab's interp1() 'cubic' method does not use cubic spline
interpolation, but Moler's 'pchip' approach, a piecewise cubic Hermite
interpolation. Thus the results are different:
% Matlab:
interp1(X, Y, 11, 'cubic') %=> 5.8000
interp1(X, Y, 15, 'cubic') %=> 5.0000
# R:
spfun <- splinefun( X, Y, "natural")
spfun(11) #=> 5.785714
spfun(15) #=> 4.928571
spfun <- splinefun( X, Y, "monoH.FC")
spfun(11) #=> 5.8
spfun(15) #=> 5.0
Unfortunately, if the points are not monotonic, the 'monoH.FC' method does
not exactly agree with the 'pchip' approach, i.e. does not in general return
the same results.
By the way, pchip() in package 'pracma' implements Moler's approach and does
return the same (interpolation and extrapolation) results as interp1() with
the 'cubic' option in Matlab.
Hans Werner
Martin Maechler <maechler <at> stat.math.ethz.ch> writes:
David Winsemius <dwinsemius <at> comcast.net>
on Sat, 1 Dec 2012 09:25:42 -0700 writes:
> On Dec 1, 2012, at 5:09 AM, Steve Stephenson wrote:
>> Hallo, I'm facing a problem and I would really appreciate
>> your support. I have to translate some Matalb code in R
>> that I don't know very well but I would like to. I have
>> to interpolate 5 point with a cubic spline function and
>> then I expect my function returns the Y value as output a
>> specific X value inside the evaluation range. Let's
>> suppose that: 1- *X = [-10, -5, 0, 5, 10]* 2 - *Y = [12,
>> 10, 8, 7, 6]* 3 - *I have to interpolate with a cubic
>> spline assuming x=11*
>>
>> In Matlab I used this function:
>>
>> *y = interp1(X, Y, x, "cubic"); *
>>
>> How can I do the same in R? Many thanks in advance for
>> your reply and support!
> splinefun( x = c(-10, -5, 0, 5, 10), y = c(12, 10, 8, 7, 6),
method="natural")(11) [1] 5.785714 Yes, indeed, or simple spline(....) but definitely *no* need to use a function from an extra CRAN package .. as someone else ``erronously'' suggested. Note that spline() and splinefun() together with approx() and approxfun() are among the several hundred functions that were already part of "pre-alpha" R, i.e., before R had a version number or *any* packages ... and yes, the README then started with the two lines | R Source Code (Tue Jun 20 14:33:47 NZST 1995) | Copyright 1993, 1994, 1995 by Robert Gentleman and Ross Ihaka and it would be *really* *really* great if people did not add stuff to their packages that has been part of R for longer than they have even heard of R. Martin Maechler, ETH Zurich
Dear all, many thanks for your answer and support!! Steve -- View this message in context: http://r.789695.n4.nabble.com/cubic-spline-tp4651537p4651698.html Sent from the R help mailing list archive at Nabble.com.
Ben Bolker <bbolker at gmail.com>
on Sat, 1 Dec 2012 21:49:47 +0000 writes:
> Martin Maechler <maechler <at> stat.math.ethz.ch> writes:
> [snip]
>> but definitely *no* need to use a function from an extra
>> CRAN package .. as someone else ``erronously'' suggested.
>>
>> Note that spline() and splinefun() together with approx()
>> and approxfun() are among the several hundred functions
>> that were already part of "pre-alpha" R, i.e., before R
>> had a version number or *any* packages ... and yes, the
>> README then started with the two lines
>>
>> | R Source Code (Tue Jun 20 14:33:47 NZST 1995) |
>> Copyright 1993, 1994, 1995 by Robert Gentleman and Ross
>> Ihaka
>>
>> and it would be *really* *really* great if people did not
>> add stuff to their packages that has been part of R for
>> longer than they have even heard of R.
>>
>> Martin Maechler, ETH Zurich
> To be fair, the 'fields' package has a pretty long
> history too -- I think it may have been ported from an
> S-PLUS 'package' (or whatever the correct terminology is)
> that existed quite a while ago.
> I think it was the FUNFITS module. From
> http://lib.stat.cmu.edu/S/:
> funfits
> FUNFITS is a comprehensive S-Plus module for fitting
> functions and nonlinear time series, including
> multivariate splines, Kriging and neural networks.
> Contributed by Doug Nychka (nychka at ucar.edu). [25/Apr/96]
> [24/Mar/97][24/Sep/99] (3 kbytes). The actual compressed
> tar file is available as funfits23.tar.gz in the S
> collection. Access this file via FTP, or the WWW, but not
> e-mail. (596k). Older version avaulable at funfits.tar.Z
> A quick look at funfits.tar.Z suggests that 'splint'
> existed in that version, in 1996 -- so respectably old.
Good point, Ben, thank you!
and of course Hans Borcher's one is even more relevant to the
original question.
Martin