[R] Help with contrasts

From: Lars Bishop <lars52r_at_gmail.com>
Date: Wed, 11 May 2011 06:51:10 -0400


Hi,

I need to build a function to generate one column for each level of a factor in the model matrix created on an arbitrary formula (instead of using the available contrasts options such as contr.treatment, contr.SAS, etc).

My approach to this was first to use the built-in function for contr.treatment but changing the default value of the contrasts argument to FALSE (I named this function "contr.identity" and it shown at the bottom of the email for reference).

So this function works fine,

> contr.identity(4)

  1 2 3 4
1 1 0 0 0
2 0 1 0 0
3 0 0 1 0
4 0 0 0 1

> contr.treatment(4)

  2 3 4
1 0 0 0
2 1 0 0
3 0 1 0
4 0 0 1

However, when I try to create a model matrix using contr.identity specified in options(), it actually uses the contr.treatment option. Why is that? Any hint on how can I do this?

options(contrasts = c('contr.identity', 'contr.poly')) options("contrasts")
dd <- data.frame(a = gl(3,4), b = gl(4,1,12)) model.matrix(~ a + b, dd) #creates 2 columns for a and 3 for b instead of 3 and 4, respectively

contr.identity <-

    function(n, base = 1, contrasts = FALSE, sparse = FALSE) {

    if(is.numeric(n) && length(n) == 1L) {   if(n > 1L) levels <- as.character(seq_len(n))   else stop("not enough degrees of freedom to define contrasts")     } else {
 levels <- as.character(n)
 n <- length(n)

    }

    contr <- .Diag(levels, sparse=sparse)     if(contrasts) {
 if(n < 2L)

     stop(gettextf("contrasts not defined for %d degrees of freedom",
                          n - 1L), domain = NA)
 if (base < 1L | base > n)
     stop("baseline group number out of range")
 contr <- contr[, -base, drop = FALSE]

    }
    contr
}

Thanks for any help,
Lars.

        [[alternative HTML version deleted]]



R-help_at_r-project.org 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. Received on Wed 11 May 2011 - 10:54:32 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 11 May 2011 - 12:00:06 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive