Best way to plot interaction effects from a linear model


In an effort to help populate the R tag here, I am posting a few questions I have often received from students. I have developed my own answers to these over the years, but perhaps there are better ways floating around that I don't know about.

The question: I just ran a regression with continuous y and x but factor f (where levels(f) produces c("level1","level2"))

 thelm <- lm(y~x*f,data=thedata)

Now I would like to plot the predicted values of y by x broken down by groups defined by f. All of the plots I get are ugly and show too many lines.

My answer: Try the predict() function.

##restrict prediction to the valid data 
##from the model by using thelm$model rather than thedata

 thedata$yhat <- predict(thelm,


Are there other ideas out there that are (1) easier to understand for a newcomer and/or (2) better from some other perspective?

2/8/2015 5:00:54 PM

Accepted Answer

The effects package has good ploting methods for visualizing the predicted values of regressions.


model.lm <- lm(formula=y ~ x*f,data=thedata)
9/8/2009 5:26:04 PM

Huh - still trying to wrap my brain around expand.grid(). Just for comparison's sake, this is how I'd do it (using ggplot2):

thedata <- data.frame(predict(thelm), thelm$model$x, thelm$model$f)

ggplot(thedata, aes(x = x, y = yhat, group = f, color = f)) + geom_line()

The ggplot() logic is pretty intuitive, I think - group and color the lines by f. With increasing numbers of groups, not having to specify a layer for each is increasingly helpful.

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow