[R] graphing repeated curves

Fox, John j|ox @end|ng |rom mcm@@ter@c@
Thu Aug 23 02:29:21 CEST 2018


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-bounces using r-project.org] On Behalf Of Richard
> Sherman
> Sent: Wednesday, August 22, 2018 7:07 PM
> To: r-help using 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.pdx using gmail.com
> 
> ______________________________________________
> R-help using 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.


More information about the R-help mailing list