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.

Reply via email to