[R] testing for significantly different slopes
Dylan Beaudette
dylan.beaudette at gmail.com
Thu Mar 6 00:53:30 CET 2008
Thanks for the quick reply.
On Wednesday 05 March 2008, Bill.Venables at csiro.au wrote:
> Generically, let y be the response, f the factor and x the covariate.
> Then
>
> pModel <- lm(y ~ f + x, data) # parallel regressions
> sModel <- lm(y ~ f/x, data) # separate regressions (the '-1' is
> optional)
> anova(pModel, sModel) # tests whether there are differences in
> slopes.
>
> In the example you quote below (which seems oddly familiar...) there are
> only two classes so you get only 1 degree of freedom. Since the tail
> area is 0.064, a strict 5% straight-up-and-down frequentist would say
> you retain the null hypothesis of parallel regressions (i.e. equal
> slopes) at the 0.05 level, but a cautious fence sitter would keep a
> watchful eye on the evidence.
Thanks for the further clarification. I was hoping to get a response by using
that example-- perhaps I should have included a bit more (to follow).
> The same logic applies however many classes the factor has, (or for that
> matter however many covariates). You just get more degrees of freedom
> for the test, and more ways things can depart from parallelism.
Got it.
> What's the problem?
The problem is that I would like to do a pair-wise comparison between the
multiple slopes. For example with this model:
lm1 <- lm (Sepal.Length ~ Species/Sepal.Width -1, data=iris)
# truncated output from summary(lm1)
# just the slope terms
Speciessetosa:Sepal.Width 0.6905 0.1657 4.166 5.31e-05 ***
Speciesversicolor:Sepal.Width 0.8651 0.2002 4.321 2.88e-05 ***
Speciesvirginica:Sepal.Width 0.9015 0.1948 4.628 8.16e-06 ***
If I wanted to test the hypothesis that Speciessetosa:Sepal.Width was
different than Speciesversicolor:Sepal.Width, what course of action should I
take?
I have found an example in the gmodels package, using the estimable()
function, but the documentation is not clear to me. Here is the example:
library(gmodels)
# example from manual
lm1 <- lm (Sepal.Length ~ Sepal.Width + Species + Sepal.Width:Species,
data=iris)
cm <- rbind(
'Setosa vs. Versicolor' = c(0, 0, 1, 0, 1, 0),
'Setosa vs. Virginica' = c(0, 0, 0, 1, 0, 1),
'Versicolor vs. Virginica'= c(0, 0, 1,-1, 1,-1)
)
estimable(lm1, cm)
This *appears* to test what I am after, but I am not clear on how the 'cm'
argument works.
Am I barking up the wrong tree here?
Thanks,
Dylan
>
> Bill Venables
> CSIRO Laboratories
> PO Box 120, Cleveland, 4163
> AUSTRALIA
> Office Phone (email preferred): +61 7 3826 7251
> Fax (if absolutely necessary): +61 7 3826 7304
> Mobile: +61 4 8819 4402
> Home Phone: +61 7 3286 7700
> mailto:Bill.Venables at csiro.au
> http://www.cmis.csiro.au/bill.venables/
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Dylan Beaudette
> Sent: Thursday, 6 March 2008 9:28 AM
> To: r-help at r-project.org
> Subject: [R] testing for significantly different slopes
>
> Hi,
>
> How would one go about determining if the slope terms from an analysis
> of
> covariance model are different from eachother?
>
> Based on the example from MASS:
>
> library(MASS)
>
> # parallel slope model
> l.para <- lm(Temp ~ Gas + Insul, data=whiteside)
>
> # multiple slope model
> l.mult <- lm(Temp ~ Insul/Gas -1, data=whiteside)
>
> # compare nested models:
> anova(l.para, l.mult)
> Analysis of Variance Table
>
> Model 1: Temp ~ Gas + Insul
> Model 2: Temp ~ Insul/Gas - 1
> Res.Df RSS Df Sum of Sq F Pr(>F)
> 1 53 52.045
> 2 52 48.704 1 3.341 3.5673 0.06451 .
>
> It seems like this approach would yield insight into whether or not the
> two
> slope terms (InsulBefore:Gas and InsulAfter:Gas) were different.
> However, is
> there a formal test for this sort of question, and can it be generalized
> to
> differences between more than 2 slope terms?
>
> Thanks,
>
> Dylan
--
Dylan Beaudette
Soil Resource Laboratory
http://casoilresource.lawr.ucdavis.edu/
University of California at Davis
530.754.7341
More information about the R-help
mailing list