On Mon, Feb 16, 2009 at 5:28 PM, Patrick Giraudoux <patrick.giraud...@univ-fcomte.fr> wrote: > Greg Snow a écrit : >> One approach is to create your own contrasts matrix: >> >> >>> mycmat <- diag(8) >>> mycmat[ row(mycmat) == col(mycmat) + 1 ] <- -1 >>> mycmati <- solve(mycmat) >>> contrasts(agefactor) <- mycmati[,-1] >>> >> >> Now when you use agefactor, the intercept will be the first age group and >> the slopes will be the differences between the pairs of groups (make sure >> that the order of the levels of agefactor is correct). >> >> The difference between this method and the contr.sdif function in MASS is >> how the intercept will end up being interpreted (and the dimnames). >> >> Hope this helps, >> >> > > Actually, exactly what I needed including the reference to contr.sdif in > MASS I did not spot before (although I am a faithful reader of the > yellow book... but so many things still escape to me). Again thanks a lot. > > Patrick >
Glad you were able to solve your problem. Frank replied earlier with the suggestion to use contrast.Design() to perform the tests after the initial model has been fit. Perhaps I am a little denser than normal, but I cannot figure out how to apply contrast.Design() to a similar model with several levels of a factor. Example data: # need these library(lattice) library(Design) # replicate an important experimental dataset set.seed(10101010) x <- rnorm(100) y1 <- x[1:25] * 2 + rnorm(25, mean=1) y2 <- x[26:50] * 2.6 + rnorm(25, mean=1.5) y3 <- x[51:75] * 2.9 + rnorm(25, mean=5) y4 <- x[76:100] * 3.5 + rnorm(25, mean=5.5) d <- data.frame(x=x, y=c(y1,y2,y3,y4), f=factor(rep(letters[1:4], each=25))) # plot xyplot(y ~ x, groups=f, data=d, auto.key=list(columns=4, title='Beard Type', lines=TRUE, points=FALSE, cex=0.75), type=c('p','r'), ylab='Number of Pirates', xlab='Distance from Land') # standard comparison to base level of f summary(lm(y ~ x * f, data=d)) # compare to level 4 of f summary(lm(y ~ x * C(f, base=4), data=d)) # now try with contrast.Design(): dd <- datadist(d) options(datadist='dd') l <- ols(y ~ x * f, data=d) # probably the wrong approach, as the results do not look too familiar: contrast(l, list(f=levels(d$f))) x f Contrast S.E. Lower Upper t Pr(>|t|) -0.3449623 a 0.3966682 0.1961059 0.007184856 0.7861515 2.02 0.0460 -0.3449623 b 0.5587395 0.1889173 0.183533422 0.9339456 2.96 0.0039 -0.3449623 c 4.1511677 0.1889170 3.775962254 4.5263730 21.97 0.0000 -0.3449623 d 4.3510407 0.1888820 3.975904726 4.7261766 23.04 0.0000 This is adjusting the output to a given value of 'x'... Am I trying to use contrast.Design() for something that it was not intended for? Any tips Frank? Cheers, Dylan ______________________________________________ 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.