# Re: [R] finding derivative of a data series in R

Date: Fri, 27 May 2011 11:51:39 -0400

Here is a simple demo of how to use it:

source("h:/features.R")

n <- 200
x <- sort(runif(n))
y <- exp(-0.2 * sin(2*pi*x)) + rnorm(n, sd=0.05)

ans <- features(x, y, fits.return=TRUE, control=list(plot.it=TRUE))

fits <- attr(ans, "fits")

plot(fits\$x, fits\$fits1, type="l", xlab="x", ylab="First derivative")

yexact <- -0.2 * 2*pi * cos(2*pi*x) * exp(-0.2 * sin(2*pi*x))

lines(x, yexact, col=2)

# Similarly, you can also look at the smoothed second derivative

Ravi.

Assistant Professor,
Division of Geriatric Medicine and Gerontology School of Medicine Johns Hopkins University

Ph. (410) 502-2619

-----Original Message-----
From: r-help-bounces_at_r-project.org [mailto:r-help-bounces_at_r-project.org] On Behalf Of nandan amar Sent: Friday, May 27, 2011 10:44 AM
To: r-help; Dennis Murphy
Subject: Re: [R] finding derivative of a data series in R

However if we have some discrete data set like daily temperature etc how can we can differentiate it
because as.expression(D()) will not work then

On 27 May 2011 16:52, nandan amar <nandan.amar_at_gmail.com> wrote:
> Thanks Dennis.
> I got you.
> My main consern was how to differentiate a series correctly.
> I think the first procedure is more accurate.
> Regards.
>
> On 27 May 2011 16:27, Dennis Murphy <djmuser_at_gmail.com> wrote:
>> Hi:
>>
>> A function and its spline approximation are not equivalent functions,
>> hence neither are their corresponding derivatives. I modified an
>> example from the splinefun() help page to illustrate this.
>>
>> op <- par(mfrow = c(2, 1))
>> x <- seq(1, 9, by = 0.01)
>> # u is the true function, u1-u3 are its symbolic derivatives wrt x
>> # u1 = f', u2 = f'', u3 = f'''
>> u <- expression(sin(pi * (x - 0.5)))
>> u1 <- as.expression(D(u, 'x'))
>> u2 <- as.expression(D(u1, 'x'))
>> u3 <- as.expression(D(u2, 'x'))
>> plot(x, eval(u), type = 'l', ylim = c(-30, 30),
>>     ylab = "", xlab = "",
>>     main = expression(f(x) == sin(pi * (x - 0.5))))
>> lines(x, eval(u1), type = 'l', col = 'red')
>> lines(x, eval(u2), type = 'l', col = 'blue')
>> lines(x, eval(u3), type = 'l', col = 'green')
>> # legend('topright', legend = c("f", "f'", "f''", "f'''"),
>> #        col = c('black', 'red', 'blue', 'green'), lwd = 2)
>>
>> # y2 is an evaluation of u at each x point
>> y2 <- sin((x-0.5)*pi)
>> # Construct the spline function approximation to u
>> f <- splinefun(x, y2)
>> # Plot the interpolation function and its first three derivatives
>> curve(f(x), 1, 10, col = "black", lwd = 1.5, ylim = c(-30, 30),
>>      ylab = "", main = 'Spline interpolation of f')
>> curve(f(x, deriv=1), 1, 10, col = 'red', lwd = 1.5, add = TRUE)
>> curve(f(x, deriv=2), 1, 10, col = 'blue', lwd = 1.5, add = TRUE)
>> curve(f(x, deriv=3), 1, 10, col = 'green', lwd = 1.5, add = TRUE)
>> par(op)
>>
>> Notice that the peaks and troughs of the derivatives of the spline
>> approximation are not at the same x locations as in the original
>> function. Also notice the linearity in the derivatives when x is
>> between 9 and 10.
>>
>> I suppose you could improve the approximations by setting some knot
>> points, but I don't have the time to chase down that hypothesis for
>> you right now. I'll leave that as homework :)
>>
>> Your example is simpler since it is polynomial, but the concept is the
>> same: the derivative of the interpolator shouldn't necessarily match
>> the derivative of the function exactly. Obviously, though, you want
>> them to be close.
>>
>> HTH,
>> Dennis
>>
>> On Fri, May 27, 2011 at 1:23 AM, nandan amar <nandan.amar_at_gmail.com> wrote:
>>> Dear All,
>>> I tried following for getting derivative of a polynomial in R
>>>
>>> i<- -10:10
>>> x<-i*i*i+3*i*i+2
>>> fun_spline<-splinefun(i,x)
>>> plot(x,type="l")
>>> lines(x,fx_spline(x, deriv=1), col='green')
>>> lines(x,fx_spline(x, deriv=2), col='green')
>>>
>>> Now when I plot
>>> 3*i*i + 6*i and 6*i + 6
>>> the plot was not same for first deivative.
>>> where as the 2nd derivative was same
>>>
>>> Is this a correct method for getting derivative.
>>> where am I doing wrong as first derivative  lines(x,fx_spline(x,
>>> deriv=1), col='green') is not correct.
>>>
>>> amar
>>> --
>>> Amar Kumar Nandan
>>>
>>> ______________________________________________
>>> R-help_at_r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>
>
>
> --
> Amar Kumar Nandan
> Karnataka, India, 560100
> http://aknandan.co.nr
>

--
Amar Kumar Nandan
Karnataka, India, 560100
http://aknandan.co.nr

R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.

R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Fri 27 May 2011 - 15:54:07 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

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 Fri 27 May 2011 - 18:10:10 GMT.

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