# [R] Name for factor's levels with contr.sum

Prof Brian Ripley ripley at stats.ox.ac.uk
Thu Jul 14 10:19:26 CEST 2005

```One way to do this generally is to make a copy of contr.sum, rename it,
and set the dimnames appropriately.

I think contr.treatment is misleading (it labels contrasts of two levels
by just one of them), and Christoph's labels are informative but
impractically long.  But if you want to label each contrast by the level
it contrasts with the rest,

cont <- array(0, c(lenglev, lenglev - 1),
list(levels, levels[-lenglev]))

in a modified contr.sum will do it. E.g.

> z <- factor(letters[1:3])
> contr.treatment(z)
b c
a 0 0
b 1 0
c 0 1
> contr.sum(z)
[,1] [,2]
a    1    0
b    0    1
c   -1   -1
> mycontr.sum(z)
a  b
a  1  0
b  0  1
c -1 -1

On Wed, 13 Jul 2005, Christoph Buser wrote:

> Dear Ghislain
>
> I do not know a general elegant solution, but for some
> applications the following example may be helpful:
>
> ## Artificial data for demonstration: group is fixed, species is random
> dat <- data.frame(group = c(rep("A",20),rep("B",17),rep("C",24)),
>                  species = c(rep("sp1", 4), rep("sp2",5),   rep("sp3",5),
>                    rep("sp4",6),  rep("sp5",2),  rep("sp6",5),  rep("sp7",3),
>                    rep("sp8",3), rep("sp9",4), rep("sp10",6),  rep("sp11",6),
>                    rep("sp12",6), rep("sp13",6)),
>                  area = rnorm(61))
>
> ## You can attach a contrast at your fixed factor of interest "group"
> ## Create the contrast you like to test (in our case contr.sum for 3
> ## levels)
> mat <- contr.sum(3)
> ## You can add the names you want to see in the output
> ## Be carefull that you give the correct names to the concerned
> ## column. Otherwise there is the big danger of misinterpretation.
> colnames(mat) <- c(": A against rest", ": B against rest")
> ## Attatch the contrast at your factor "group"
> dat[,"group"] <- C(dat[,"group"],mat)
> ## Now calculate the lme
> library(nlme)
> reg.lme <- lme(area ~ group, data = dat, random = ~ 1|species)
> summary(reg.lme)
>
> Maybe someone has a better idea how to do it generally.
>
> Hope this helps
>
> Christoph Buser
>
> --------------------------------------------------------------
> Christoph Buser <buser at stat.math.ethz.ch>
> Seminar fuer Statistik, LEO C13
> ETH (Federal Inst. Technology)	8092 Zurich	 SWITZERLAND
> phone: x-41-44-632-4673		fax: 632-1228
> http://stat.ethz.ch/~buser/
> --------------------------------------------------------------
>
>
> Ghislain Vieilledent writes:
> > Good morning,
> >
> > I used in R contr.sum for the contrast in a lme model:
> >
> > > options(contrasts=c("contr.sum","contr.poly"))
> > > Septo5.lme<-lme(Septo~Variete+DateSemi,Data4.Iso,random=~1|LieuDit)
> > > intervals(Septo5.lme)\$fixed
> > lower est. upper
> > (Intercept) 17.0644033 23.106110 29.147816
> > Variete1 9.5819873 17.335324 25.088661
> > Variete2 -3.3794907 6.816101 17.011692
> > Variete3 -0.5636915 8.452890 17.469472
> > Variete4 -22.8923812 -10.914912 1.062558
> > Variete5 -10.7152821 -1.865884 6.983515
> > Variete6 0.2743390 9.492175 18.710012
> > Variete7 -23.7943250 -15.070737 -6.347148
> > Variete8 -21.7310554 -12.380475 -3.029895
> > Variete9 -27.9782575 -17.480555 -6.982852
> > DateSemi1 -5.7903419 -1.547875 2.694592
> > DateSemi2 3.6571596 8.428417 13.199675
> > attr(,"label")
> > [1] "Fixed effects:"
> >
> > How is it possible to obtain a return with the name of my factor's levels as
> > with contr.treatment ?
> >
> > Thanks for you help.
> >
> > --
> > Ghislain Vieilledent
> > 30, rue Bernard Ortet 31 500 TOULOUSE
> > 06 24 62 65 07
> >
> > 	[[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

```