Re: [R] differentiating a numeric vector

From: Ravi Varadhan <rvaradhan_at_jhmi.edu>
Date: Wed, 05 Mar 2008 16:58:16 -0500

Hi,

Here is another approach, in addition to the suggestions made by Spencer and Gabor. It uses the spm() function in SemiPar package. An advantage of this approach is that the smoothing parameter is automatically estimated using REML (here I use default knot locations, but this can be specified explicitly).

You also need to source in the plot.spm() function that I have created by slightly modifying the plot.spm() that comes with SemiPar. This is necessary to obtain numerical values of derivatives at x-locations in addition to simply plotting the derivative curves.

library(SemiPar)

source("plotspm.r")

# An example

k <- 10

x <- sqrt(runif(500))

y <- pnorm(x) + sin(k*pi*x^2) + rnorm(500,mean=0,sd=0.5)

fit<-spm(y ~ f(x, basis="trunc.poly", degree=3), omit.missing=TRUE)

deriv <- plot(fit, drv=1) # plot and store first derivative

deriv2 <- plot(fit, drv=2) # plot and store second derivative

Hope this helps,
Ravi.

Ravi Varadhan, Ph.D.

Assistant Professor, The Center on Aging and Health

Division of Geriatric Medicine and Gerontology

Johns Hopkins University

Ph: (410) 502-2619

Fax: (410) 614-9625

Email: rvaradhan_at_jhmi.edu

Have you looked at the 'fda' package? It has many functions for doing what you want. A strength is that it is a companion package for two books on that and related issues, and includes script files under "~R.installation.directory\library\fda\scripts" to reproduce some of the analyses. It may include more than you want to consider, but for me, too much is usually better than nothing.

```      hope this helps.
Spencer Graves
```

p.s. If you try it and have trouble, please submit another question including commented, minimal, self-contained, reproducible code, as requested in the posting guide
http://www.R-project.org/posting-guide.html.

Levi Waldron wrote:
> What functions exist for differentiating a numeric vector (in my case
> spectral data)? That is, experimental data without an analytical
> function. ie,
>
>
>> x <- seq(1,10,0.1)
>> y=x^3+rnorm(length(x),sd=0.01) #although the real function would be
nothing simple like x^3...
>> derivy <- ....
>>
>
> I know I could just use diff(y) but it would be nice to estimate
> derivatives at the endpoints, calculate higher-order derivatives, and
> maybe have some smoothing options ie by differentiating a spline or
> something like that.
>
> ______________________________________________
> 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.

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 Wed 05 Mar 2008 - 22:02:23 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 Wed 05 Mar 2008 - 23:30:20 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.