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

Christoph Buser buser at stat.math.ethz.ch
Thu Jul 14 12:28:15 CEST 2005


This is exactly what I've been looking for (without success)
when I was speaking about a more elegant and general solution. 

I agree with your argument that labels might be misleading.  
Nevertheless if a user is aware what contr.sum calculates, it is
practical to have an annotation. 

Thank you very much for the solution.

Regards,

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/
--------------------------------------------------------------



Prof Brian Ripley writes:
 > 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




More information about the R-help mailing list