Hello, I have what should be an easy question. I'm a new r user and making the transition from menus to the command line so as to do batch processing of tons of data. One of my data streams needs to be detrended. It's a vector of numbers that follows a negative exponential decay. I need to fit a curve to it and use the residuals as an object. The data looks something like this: foo.dat <- (0.83 * exp(-0.017 * 1:1000) + 0.5) + rnorm(1000,0,0.05) plot(foo.dat, type = "l") That is an example the parameters for foo.dat change slightly. So, I need to fit a neg exponential curve to that type of data without specifying the parameters beforehand and save the residuals as an object. It will have to accomadate being in a loop. How can I do this? Regards, CG
If you don't need the parameters in the curve, it seems like library(modreg) lines(supsmu(1:1000, foo.dat), lwd=3) gives a very reasonable result. HTH, Andy> -----Original Message----- > From: C Grant [mailto:cgrant02589 at yahoo.com] > Sent: Tuesday, January 28, 2003 6:39 PM > To: r-help at stat.math.ethz.ch > Subject: [R] Curve Fitting Question - Newbie > > > Hello, I have what should be an easy question. I'm a > new r user and making the transition from menus to the > command line so as to do batch processing of tons of > data. One of my data streams needs to be detrended. > It's a vector of numbers that follows a negative > exponential decay. I need to fit a curve to it and use > the residuals as an object. The data looks something > like this: > > foo.dat <- (0.83 * exp(-0.017 * 1:1000) + 0.5) + > rnorm(1000,0,0.05) > plot(foo.dat, type = "l") > > That is an example the parameters for foo.dat change > slightly. So, I need to fit a neg exponential curve to > that type of data without specifying the parameters > beforehand and save the residuals as an object. It > will have to accomadate being in a loop. > > How can I do this? > > Regards, CG > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help >------------------------------------------------------------------------------
One way would be to use the nls package:
library(nls)
foo.dat <- (0.83 * exp(-0.017 * 1:1000) + 0.5) + rnorm(1000,0,0.05) # your y
values
foo.dat <- data.frame(cbind(foo.dat, 0:999)) # create some x values in a data
frame
names(foo.dat) <- c("y", "x") # give them names
model <- nls( y ~ N * exp(-r * x) + c, start = list( N = 1, r = .01, c = 0),
data = foo.dat) # assume you have reasonable guesses for the starting parameter
values
resid(model) # display residuals
Cheers,
Simon.
Simon Blomberg
Consumer Research Unit
Centre for Mental Health Research, Australian National University
Simon.Blomberg at anu.edu.au +61 (2) 6125 3379
-----Original Message-----
From: C Grant [mailto:cgrant02589 at yahoo.com]
Sent: Wednesday, 29 January 2003 10:39 AM
To: r-help at stat.math.ethz.ch
Subject: [R] Curve Fitting Question - Newbie
Hello, I have what should be an easy question. I'm a
new r user and making the transition from menus to the
command line so as to do batch processing of tons of
data. One of my data streams needs to be detrended.
It's a vector of numbers that follows a negative
exponential decay. I need to fit a curve to it and use
the residuals as an object. The data looks something
like this:
foo.dat <- (0.83 * exp(-0.017 * 1:1000) + 0.5) +
rnorm(1000,0,0.05)
plot(foo.dat, type = "l")
That is an example the parameters for foo.dat change
slightly. So, I need to fit a neg exponential curve to
that type of data without specifying the parameters
beforehand and save the residuals as an object. It
will have to accomadate being in a loop.
How can I do this?
Regards, CG
______________________________________________
R-help at stat.math.ethz.ch mailing list
http://www.stat.math.ethz.ch/mailman/listinfo/r-help