On May 11, 2011, at 12:51 , Lars Bishop wrote: > 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?
It's not actually using contr.treatment, it's just calling contr.identity with contrasts=TRUE... I don't think there's a painless way to avoid this. The closest I can think of is cI <- contr.treatment formals(cI)$contrasts <- FALSE dd <- data.frame(a = gl(3,4), b = gl(4,1,12)) model.matrix(~ C(a,cI,3) + C(b,cI,4), dd) -- Peter Dalgaard Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ R-help@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.