Dear Richard, How about this:
ord <- order(mtcars$hp) mtcars$hp <- mtcars$hp[ord] mtcars$mpg <- mtcars$mpg[ord] plot(mpg ~ hp, data=mtcars) for (p in 1:6){ m <- lm(mpg ~ poly(hp, p), data=mtcars) lines(mtcars$hp, fitted(m), lty=p, col=p) } legend("topright", legend=1:6, lty=1:6, col=1:6, title="order", inset=0.02) I hope this helps, John ----------------------------------------------------------------- John Fox Professor Emeritus McMaster University Hamilton, Ontario, Canada Web: https://socialsciences.mcmaster.ca/jfox/ > -----Original Message----- > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Richard > Sherman > Sent: Wednesday, August 22, 2018 7:07 PM > To: r-help@r-project.org > Subject: [R] graphing repeated curves > > Hi all, > > I have a simple graphing question that is not really a graphing question, but > a > question about repeating a task. > > I’m fiddling with some of McElreath’s Statistical Rethinking, and there’s a > graph illustrating extreme overfitting (a number of polynomial terms in x > equal to the number of observations), a subject I know well having taught it > to > grad students for many years. > > The plot I want to reproduce has, in effect: > > m1 <- lm( y ~ x) > m2 <- lm( y ~ x + x^2) > > …etc., through lm( y ~ x + x^2 + x^3 + x^4 + x^5 + x^6 ), followed by some > plot() or lines() or ggplot2() call to render the data and fitted curves. > > Obviously I don’t want to run such regressions for any real purpose, but I > think > it might be useful to learn how to do such a thing in R without writing down > each lm() call individually. It’s not obvious where I’d want to apply this, > but I > like learning how to repeat things in a compact way. > > So, something like: > > data( mtcars ) > d <- mtcars > v <- c( 1 , 2 , 3 , 4 , 5 , 6 ) > m1 <- lm( mpg ~ hp , data = d ) > > and then somehow use for() with an index or some flavor of apply() with the > vector v to repeat this process yielding > > m2 <- lm( mpg ~ hp + I( hp ^2 ) , data=d) > m3 <- lm( mpg ~ hp + I( hp^2 ) + I(hp^3) , data=d ) > > … and the rest through m6 <- lm( mpg ~ hp + I(hp^2) + I(hp^3) + I(hp^4) + > I(hp^5) + I(hp^6) , data=d ) > > But finding a way to index these values including not just each value but each > value+1 , then value+1 and value+2, and so on escapes me. Obviously I don’t > want to include index values below zero. > > === > Richard Sherman > rss....@gmail.com > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.