[R] How to plot linear, cubic and quadratic fitting curve in a figure?

William Dunlap wdunlap at tibco.com
Wed Jun 13 18:54:25 CEST 2012


It is more direct to use predict() instead of reconstructing
by hand the prediction expression from the formula given
to lm().  E.g.,

  > x <- seq(1,6,by=1/4)
  > y <- sin(x) + rnorm(length(x), 0, 1/4)
  > plot(x, y)
  > fits <- lapply(1:3, function(degree)lm(y~poly(x, deg=degree)))
  > xpred <- pretty(x, n=50)
  > predictions <- lapply(fits, predict, newdata=list(x=xpred))
  > invisible(lapply(seq_along(fits), function(i)lines(xpred, predictions[[i]], col=i)))

If you change your fitting function, say to rq, or your formula, say to use a
categorical variable or interaction, you don't have to change anything else,
as the predict method for a model type takes care of the details.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf
> Of Robert Baer
> Sent: Wednesday, June 13, 2012 8:40 AM
> To: Kristi Glover; R-help
> Subject: Re: [R] How to plot linear, cubic and quadratic fitting curve in a figure?
> 
> 
> > dput(test)
> structure(list(sp = c(4L, 5L, 9L, 12L, 14L), env = c(12L, 18L,
> 20L, 17L, 15L)), .Names = c("sp", "env"), class = "data.frame", row.names =
> c(NA,
> -5L))
> > plot(test$sp~test$env, main = "S vs. temp", xlim=c(0,20), ylim=c(0,14),
> > ylab="S",xlab="env")
> > linear<-lm(test$sp~test$env)
> > quadratic<-lm(test$sp~test$env+I(test$env^2))
> > #summary(quadratic)
> > cubic<-lm(test$sp~test$env+I(test$env^2)+I(test$env^3))
> > #summary(cubic)
> > #fitting curve
> > abline(linear)
> >
> Thanks and waiting for your suggestions
> 
> sincerely,
> Kristi Glover
> 
> Try adding the following lines of code
> cq = coef(quadratic)
> cc = coef(cubic)
> newenv = seq(min(test$env), max(test$env), by = (max(test$env) -
> min(test$env))/500)
> sp.quad = cq[1] + cq[2]*newenv +cq[3]*newenv^2
> lines(newenv,sp.quad, col='red')
> 
> sp.cubic = cc[1] + cc[2]*newenv +cc[3]*newenv^2 +cc[4]*newenv^3
> lines(newenv, sp.cubic, col='blue', lty=2)
> 
> ------------------------------------------
> Robert W. Baer, Ph.D.
> Professor of Physiology
> Kirksville College of Osteopathic Medicine
> A. T. Still University of Health Sciences
> 800 W. Jefferson St.
> Kirksville, MO 63501
> 660-626-2322
> FAX 660-626-2965
> 
> ______________________________________________
> 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.



More information about the R-help mailing list