Testing the Effect of a Factor within each Level of another Factor with R-Package {contrast}

February 27, 2012

(This article was first published on theBioBucket*, and kindly contributed to R-bloggers)

This is a small example of how custom contrasts can easily be applied with the contrast-package. The package-manual has several useful explanations and the below example was actually grabbed from there.
This example can also be applied to a GLM but I choose to use a LM because the coefficients are more easily interpreted.


dat <- data.frame(var1 = as.factor(rep(c("a","b"), each = 8)),
var2 = as.factor(rep(c("c","d"), 8)),
response = round(rnorm(16, 10, 4), 0))

mod <- lm(response ~ var1 * var2, data = dat)
interaction.plot(dat$var2, dat$var1, dat$response)

# the intercept in the first line of summary(mod) tests var1a_var2c == 0
# in the second line of summary(mod) you test var1a_var2c - var1b_var2c == 0,
# which is the effect of var1 within var2c
# in the third line you test var1a_var2c - var1a_var2d == 0,
# which is the effect of var2 within var1a
# in the fourth line you test the interaction, which is:
# (var1a_var2c - var1a_var2d) - (var1b_var2c - var1b_var2d) == 0

# relevel var2, then the intercept is var1a_var2d
# and the second line tests var1a_var2d - var1b_var2d == 0,
# which is the effect of var1 within var2d
dat1 <- dat
dat1$var2 <- relevel(dat$var2, ref = "d")
mod1 <- lm(response ~ var1 * var2, data = dat1)

# test this with calling contrast():
var2_in_var1 <- contrast(mod,
list(var2 = levels(dat$var2), var1 = "b"),
list(var2 = levels(dat$var2), var1 = "a"))
print(var2_in_var1, X = TRUE)

To leave a comment for the author, please follow the link and comment on their blog: theBioBucket*.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Tags: ,

Comments are closed.

Search R-bloggers


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)