I think your way is probably the easiest (shockingly). For instance, here are some alternatives - I think in both cases you have to calculate the coefficient of determination (R^2) manually. My understanding is that multiple R^2 in your case is the usual R^2 because you only have one predictor variable, and the adjusted R^2 considers the degrees of freedom and penalizes for additional predictors. Which is better... depends? (Perhaps more stats-savvy people can help you on that one. I'm a chemical engineer so I unjustifiably claim ignorance).
## Data input input <- "Year Count 1999 3 2000 5 2001 9 2002 30 2003 62 2004 154 2005 245 2006 321" dat <- read.table(textConnection(input),header=TRUE) dat[,] <- lapply(dat,function(x) x-x[1]) # shifting in origin; will need to add back in later ## Nonlinear least squares plot(dat) out <- nls(Count~b0*exp(b1*Year),data=dat, start=list(b0=1,b1=1)) lines(dat[,1],fitted(out),col=2) out <- nls(Count~b0+b1*Year+b2*Year^2,data=dat, #polynomial start=list(b0=0,b1=1,b2=1)) lines(dat[,1],fitted(out),col=3) ## Optim f <- function(.pars,.dat,.fun) sum((.dat[,2]-.fun(.pars,.dat[,1]))^2) fitFun <- function(b,x) cbind(1,x,x^2)%*%b expFun <- function(b,x) b[1]*exp(b[2]*x) plot(dat) out <- optim(c(0,1,1),f,.dat=dat,.fun=fitFun) lines(dat[,1],fitFun(out$par,dat[,1]),col=2) out <- optim(c(1,1),f,.dat=dat,.fun=expFun) lines(dat[,1],expFun(out$par,dat[,1]),col=3) --- Andrew Clegg <[EMAIL PROTECTED]> wrote: > Hi folks, > > I've looked through the list archives and online resources, but I > haven't really found an answer to this -- it's pretty basic, but I'm > (very much) not a statistician, and I just want to check that my > solution is statistically sound. > > Basically, I have a data file containing two columns of data, call it > data.tsv: > > year count > 1999 3 > 2000 5 > 2001 9 > 2002 30 > 2003 62 > 2004 154 > 2005 245 > 2006 321 > > These look exponential to me, so what I want to do is plot these > points on a graph with linear axes, and add an exponential curve over > the top. I also want to give an R-squared for the fit. > > The way I did it was like so: > > > # Read in the data, make a copy of it, and take logs > data = read.table("data.tsv", header=TRUE) > log.data = data > log.data$count = log(log.data$count) > > # Fit a model to the logs of the data > model = lm(log.data$count ~ year, data = log.data) > > # Plot the original data points on a graph > plot(data) > > # Draw in the exponents of the model's output > lines(data$year, exp(fitted(model))) > > > Is this the right way to do it? log-ing the data and then exp-ing the > results seems like a bit of a long-winded way to achieve the desired > effect. Is the R-squared given by summary(model) a valid measurement > of the fit of the points to an exponential curve, and should I use > multiple R-squared or adjusted R-squared? > > The R-squared I get from this method (0.98 multiple) seems a little > high going by the deviation of the last data point from the curve -- > you'll see what I mean if you try it. > > Thanks in advance for any help! > > Yours gratefully, > > Andrew. > > ______________________________________________ > R-help@stat.math.ethz.ch 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@stat.math.ethz.ch 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.