Hi, I don't understand what the meaning of the following lines returned by model.matrix(). Can somebody help me understand it? What can they be used for? attr(,"assign") [1] 0 1 2 2 attr(,"contrasts") attr(,"contrasts")$A [1] "contr.treatment" attr(,"contrasts")$B [1] "contr.treatment" Regards, Peng> a=2 > b=3 > n=4 > A = rep(sapply(1:a,function(x){rep(x,n)}),b) > B = as.vector(sapply(sapply(1:b, function(x){rep(x,n)}), function(x){rep(x,a)})) > Y = A + B + rnorm(a*b*n) > fr = data.frame(Y=Y,A=as.factor(A),B=as.factor(B)) > afit=aov(Y ~ A + B,fr) > model.matrix(afit)(Intercept) A2 B2 B3 1 1 0 0 0 2 1 0 0 0 3 1 0 0 0 4 1 0 0 0 5 1 1 0 0 6 1 1 0 0 7 1 1 0 0 8 1 1 0 0 9 1 0 1 0 10 1 0 1 0 11 1 0 1 0 12 1 0 1 0 13 1 1 1 0 14 1 1 1 0 15 1 1 1 0 16 1 1 1 0 17 1 0 0 1 18 1 0 0 1 19 1 0 0 1 20 1 0 0 1 21 1 1 0 1 22 1 1 0 1 23 1 1 0 1 24 1 1 0 1 attr(,"assign") [1] 0 1 2 2 attr(,"contrasts") attr(,"contrasts")$A [1] "contr.treatment" attr(,"contrasts")$B [1] "contr.treatment"
On Sep 17, 2009, at 11:13 AM, Peng Yu wrote:> Hi, > > I don't understand what the meaning of the following lines returned by > model.matrix(). Can somebody help me understand it? What can they be > used for? > > attr(,"assign") > [1] 0 1 2 2 > attr(,"contrasts") > attr(,"contrasts")$A > [1] "contr.treatment" > > attr(,"contrasts")$B > [1] "contr.treatment"?contrasts. ---direct quote--- contr.treatment contrasts each level with the baseline level (specified by base): the baseline level is omitted. Note that this does not produce ?contrasts? as defined in the standard theory for linear models as they are not orthogonal to the intercept. ---end quote--- Also read through (again?): ?aov -- David.> > Regards, > Peng > >> a=2 >> b=3 >> n=4 >> A = rep(sapply(1:a,function(x){rep(x,n)}),b) >> B = as.vector(sapply(sapply(1:b, function(x){rep(x,n)}), function(x) >> {rep(x,a)})) >> Y = A + B + rnorm(a*b*n) >> fr = data.frame(Y=Y,A=as.factor(A),B=as.factor(B)) >> afit=aov(Y ~ A + B,fr) >> model.matrix(afit) > (Intercept) A2 B2 B3 > 1 1 0 0 0 > 2 1 0 0 0 > 3 1 0 0 0 > 4 1 0 0 0 > 5 1 1 0 0 > 6 1 1 0 0 > 7 1 1 0 0 > 8 1 1 0 0 > 9 1 0 1 0 > 10 1 0 1 0 > 11 1 0 1 0 > 12 1 0 1 0 > 13 1 1 1 0 > 14 1 1 1 0 > 15 1 1 1 0 > 16 1 1 1 0 > 17 1 0 0 1 > 18 1 0 0 1 > 19 1 0 0 1 > 20 1 0 0 1 > 21 1 1 0 1 > 22 1 1 0 1 > 23 1 1 0 1 > 24 1 1 0 1 > attr(,"assign") > [1] 0 1 2 2 > attr(,"contrasts") > attr(,"contrasts")$A > [1] "contr.treatment" > > attr(,"contrasts")$B > [1] "contr.treatment"David Winsemius, MD Heritage Laboratories West Hartford, CT
This describes the way in which categorical variables are coded in the model. In this case, we see "treatment" coding, although this can go by different names in textbooks (for example, reference cell coding). attr(,"assign") [1] 0 1 2 2 means that the first column of the model matrix corresponds to the intercept, the second column corresponds to the first variable A, and the third and fourth columns correspond to the second variable B. A has 2 levels so it can be represented by 1 column. Similarly, B has 3 levels so it is represented by 2 columns. For variable A, the regression coefficient represents an estimated contrast (difference) between the two levels when B is held constant. On Thu, Sep 17, 2009 at 11:13 AM, Peng Yu <pengyu.ut@gmail.com> wrote:> Hi, > > I don't understand what the meaning of the following lines returned by > model.matrix(). Can somebody help me understand it? What can they be > used for? > > attr(,"assign") > [1] 0 1 2 2 > attr(,"contrasts") > attr(,"contrasts")$A > [1] "contr.treatment" > > attr(,"contrasts")$B > [1] "contr.treatment" > > Regards, > Peng > > > a=2 > > b=3 > > n=4 > > A = rep(sapply(1:a,function(x){rep(x,n)}),b) > > B = as.vector(sapply(sapply(1:b, function(x){rep(x,n)}), > function(x){rep(x,a)})) > > Y = A + B + rnorm(a*b*n) > > fr = data.frame(Y=Y,A=as.factor(A),B=as.factor(B)) > > afit=aov(Y ~ A + B,fr) > > model.matrix(afit) > (Intercept) A2 B2 B3 > 1 1 0 0 0 > 2 1 0 0 0 > 3 1 0 0 0 > 4 1 0 0 0 > 5 1 1 0 0 > 6 1 1 0 0 > 7 1 1 0 0 > 8 1 1 0 0 > 9 1 0 1 0 > 10 1 0 1 0 > 11 1 0 1 0 > 12 1 0 1 0 > 13 1 1 1 0 > 14 1 1 1 0 > 15 1 1 1 0 > 16 1 1 1 0 > 17 1 0 0 1 > 18 1 0 0 1 > 19 1 0 0 1 > 20 1 0 0 1 > 21 1 1 0 1 > 22 1 1 0 1 > 23 1 1 0 1 > 24 1 1 0 1 > attr(,"assign") > [1] 0 1 2 2 > attr(,"contrasts") > attr(,"contrasts")$A > [1] "contr.treatment" > > attr(,"contrasts")$B > [1] "contr.treatment" > > ______________________________________________ > R-help@r-project.org mailing list > stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > R-project.org/posting-guide.html<r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]