[R] general question about plotting multiple regression results

Chuck Cleland ccleland at optonline.net
Thu Apr 19 14:08:12 CEST 2007


Simon Pickett wrote:
> Hi all,
> 
> I have been bumbling around with r for years now and still havent come up
> with a solution for plotting reliable graphs of relationships from a
> linear regression.
> 
> Here is an example illustrating my problem
> 
> 1.I do a linear regression as follows
> 
> summary(lm(n.day13~n.day1+ffemale.yell+fmale.yell+fmale.chroma,data=surv))
> 
> which gives some nice sig. results
> 
> Coefficients:
>              Estimate Std. Error t value Pr(>|t|)
> (Intercept)  -0.73917    0.43742  -1.690 0.093069 .
> n.day1        1.00460    0.05369  18.711  < 2e-16 ***
> ffemale.yell  0.22419    0.06251   3.586 0.000449 ***
> fmale.yell    0.25874    0.06925   3.736 0.000262 ***
> fmale.chroma  0.23525    0.11633   2.022 0.044868 *
> 
> 2. I want to plot the effect of "ffemale.yell", "fmale.yell" and
> "fmale.chroma" on my response variable.
> 
> So, I either plot the raw values (which is fine when there is a very
> strong relationship) but what if I want to plot the effects from the
> model?
> 
> In this case I would usually plot the fitted values values against the raw
> values of x... Is this the right approach?
> 
> fit<-fitted(lm(n.day13~n.day1+ffemale.yell+fmale.yell+fmale.chroma,data=fsurv1))
> 
> plot(fit~ffemale.yell)
> 
> #make a dummy variable across the range of x
> x<-seq(from=min(fsurv1$ffemale.yell),to=max(fsurv1$ffemale.yell), length=100)
> 
> #get the coefficients and draw the line
> co<-coef(lm(fit~ffemale.yell,data=fsurv1))
> y<-(co[2]*x)+co[1]
> lines(x,y, lwd=2)
> 
> This often does the trick but for some reason, especially when my model
> has many terms in it or when one of the independent variables is only
> significant when the other independent variables are in the equation, it
> gives me strange lines.
> 
> Please can someone show me the light?

  Have a close look at John Fox's effects package.  For example, the
following seems to be the kind of thing you want:

fm <- lm(n.day13 ~ n.day1 + ffemale.yell + fmale.yell +
                   fmale.chroma, data=fsurv1)

library(effects)

eff.fm <- effect("ffemale.yell", fm)

plot(eff.fm)

> Thanks in advance,
> 
> Simon.
> 
> Simon Pickett
> PhD student
> Centre For Ecology and Conservation
> Tremough Campus
> University of Exeter in Cornwall
> TR109EZ
> Tel 01326371852
> 
> ______________________________________________
> R-help at 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. 

-- 
Chuck Cleland, Ph.D.
NDRI, Inc.
71 West 23rd Street, 8th floor
New York, NY 10010
tel: (212) 845-4495 (Tu, Th)
tel: (732) 512-0171 (M, W, F)
fax: (917) 438-0894



More information about the R-help mailing list