ems(Model,randomvars[,marg:T] [,restrict:F] [,nonhier:T] [,keep:T]\ [,print:T]), CHARACTER scalar model, CHARACTER vector randomvars |

ems(Model,Randomvars) computes the expected mean squares for the terms in the ANOVA for the model given in CHARACTER scalar Model. Randomvars is a CHARACTER vector specifying the names of factors in the model which are random. Randomvars can also be REAL with integer elements specifying the index of a factor in the model. If there are no random factors, Randomvars should be NULL. In this default use, ems() computes sequential (Type I) sums of squares for the the restricted (mixed effects add to zero across fixed factors) model, prints these expected means squares for each term, and returns no value. Contributions from random terms are shown as multiples of the variance component (for example, 16V(a.b)); contributions from fixed terms are shown as a multiple of a quadratic function for the term, for example, 32Q(c). In a balanced design, the Q() function is the sum of the squared coefficients divided by degrees of freedom, for example, sum(c^2)/(K-1). In an unbalanced situation, Q(c) is a more complicated quantity defined using matrix algebra. See below for the use of keywords to change the action of ems(). ems() works only for factors -- no variates are allowed in the model. ems() works for both balanced and unbalanced data. ems() assumes that if a factor first appears in an interaction, then that factor is nested in the other terms of the interaction. For example, if the first appearance of factor c is in the term a.b.c, then c is assumed nested in the a.b combinations. This nesting is assumed in the remainder of the model. That is, continuing the example, if there is a later term c.d, it will be interpreted as a.b.c.d even though a.b.c.d is not specifically in the model. When a term contains the first appearance in the model of more than one factor, ems() assumes that the new factors are merged to make a single factor, whose number of levels is the product of the numbers of levels in the factors being merged. For example, if the first appearance of factors b and c with 5 and 3 levels, respectively is in the term a.b.c, then b and c together are considered a single factor with 15 levels. This grouping is assumed in the remainder of the model. That is, continuing the example, if there is a later term c.d, it will be interpreted as b.c.d even though b.c.d is not specifically in the model. This grouped factor is interpreted as random if any of the factors in the group is random. ems() uses the "synthesis" method of Hartley, as explained in 10.5.2 of R. R. Hocking (1985), The Analysis of Linear Models, Brooks/Cole, Belmont, CA. The examples below are based on balanced two factor and three factor models with a total of 64 responses. All factors have 2 levels so two factor and three factor models have 16 and 8 replications, respectively. In some examples, one of the responses is set to MISSING to destroy balance. A fully nested model, with c fixed and both d and e random. Cmd> ems("y=c/d/e",vector("d","e")) EMS(CONSTANT) = V(ERROR1) + 8V(c.d.e) + 16V(c.d) + 64Q(CONSTANT) EMS(c) = V(ERROR1) + 8V(c.d.e) + 16V(c.d) + 32Q(c) EMS(c.d) = V(ERROR1) + 8V(c.d.e) + 16V(c.d) EMS(c.d.e) = V(ERROR1) + 8V(c.d.e) EMS(ERROR1) = V(ERROR1) A 3 factor crossed model, with c and d fixed, e random. Cmd> ems("y=c*d*e",3) # e is factor 3 EMS(CONSTANT) = V(ERROR1) + 32V(e) + 64Q(CONSTANT) EMS(c) = V(ERROR1) + 16V(c.e) + 32Q(c) EMS(d) = V(ERROR1) + 16V(d.e) + 32Q(d) EMS(c.d) = V(ERROR1) + 8V(c.d.e) + 16Q(c.d) EMS(e) = V(ERROR1) + 32V(e) EMS(c.e) = V(ERROR1) + 16V(c.e) EMS(d.e) = V(ERROR1) + 16V(d.e) EMS(c.d.e) = V(ERROR1) + 8V(c.d.e) EMS(ERROR1) = V(ERROR1) A 2 factor crossed model with unbalanced data, c fixed and d random Cmd> y1 <- y[1]; y[1] <- ? # make data unbalanced Cmd> ems("y=c*d",2) # d is factor 2 EMS(CONSTANT) = V(ERROR1) + 0.0080645V(c.d) + 31.508V(d) + 0.0079365Q(c) + 63Q(CONSTANT) EMS(c) = V(ERROR1) + 15.746V(c.d) + 0.0081925V(d) + 31.492Q(c) EMS(d) = V(ERROR1) + 0.0042316V(c.d) + 31.484V(d) EMS(c.d) = V(ERROR1) + 15.742V(c.d) EMS(ERROR1) = V(ERROR1) Use of Keywords to change the action of ems(). ems(Model,Randomvars,keep:T) suppresses printed output but returns a structure (described below) containing the results. If you want the printed output too, use keep:T,print:T. ems(Model,Randomvars,marg:T) computes expected mean squares based on adjusted (Type III) sums of squares. ems(Model,Randomvars,restrict:F) computes expected mean squares assuming no marginal restrictions on any random effects in the model that have two or more dimensions. Thus, for example, when the model is "y=c+D+c.D", where c is fixed and D is random, it is not assumed that the c.D effects sum to zero for each level of D. ems(Model,Randomvars,nonhier:T) computes expected mean squares for an analysis of variance that does not enforce the usual MacAnova hierarchy assumptions. That is, for example, model "y=a+b+c+a.b.c" does not imply that the two-way interaction degrees of freedom are part of the "a.b.c" term. You cannot use anova() to compute such an analysis although it can be done (if you know how) using swp(). These keywords can be used together. For example, ems(Model,Randomvars, marg:T,restrict:F) provides answers equivalent to the EMS in SAS PROC GLM. More examples, still with y[1] MISSING: Cmd> ems("y=c*d",2,marg:T) # crossed with d random EMS(CONSTANT) = V(ERROR1) + 31.475V(d) + 62.951Q(CONSTANT) EMS(c) = V(ERROR1) + 15.742V(c.d) + 31.475Q(c) EMS(d) = V(ERROR1) + 31.475V(d) EMS(c.d) = V(ERROR1) + 15.742V(c.d) EMS(ERROR1) = V(ERROR1) Cmd> ems("y=c*d",2,restrict:F) # crossed with d random EMS(CONSTANT) = V(ERROR1) + 15.762V(c.d) + 31.508V(d) + 0.0079365Q(c) + 63Q(CONSTANT) EMS(c) = V(ERROR1) + 15.754V(c.d) + 0.0081925V(d) + 31.492Q(c) EMS(d) = V(ERROR1) + 15.746V(c.d) + 31.484V(d) EMS(c.d) = V(ERROR1) + 15.738V(c.d) EMS(ERROR1) = V(ERROR1) Cmd> ems("y=c*d",2,marg:T,restrict:F) # same as SAS PROC GLM EMS(CONSTANT) = V(ERROR1) + 15.738V(c.d) + 31.475V(d) + 62.951Q(CONSTANT) EMS(c) = V(ERROR1) + 15.738V(c.d) + 31.475Q(c) EMS(d) = V(ERROR1) + 15.738V(c.d) + 31.475V(d) EMS(c.d) = V(ERROR1) + 15.738V(c.d) EMS(ERROR1) = V(ERROR1) Cmd> y[1] <- y1 # restore value for y[1] to regain balance Cmd> ems("y=c*d+e+c.d.e",3) EMS(CONSTANT) = V(ERROR1) + 32V(e) + 64Q(CONSTANT) EMS(c) = V(ERROR1) + 8V(c.d.e) + 32Q(c) EMS(d) = V(ERROR1) + 8V(c.d.e) + 32Q(d) EMS(c.d) = V(ERROR1) + 8V(c.d.e) + 16Q(c.d) EMS(e) = V(ERROR1) + 32V(e) EMS(c.d.e) = V(ERROR1) + 8V(c.d.e) EMS(ERROR1) = V(ERROR1) Cmd> ems("y=c*d+e+c.d.e",3,nonhier:T) EMS(CONSTANT) = V(ERROR1) + 32V(e) + 64Q(CONSTANT) EMS(c) = V(ERROR1) + 32Q(c) EMS(d) = V(ERROR1) + 32Q(d) EMS(c.d) = V(ERROR1) + 8V(c.d.e) + 16Q(c.d) EMS(e) = V(ERROR1) + 32V(e) EMS(c.d.e) = V(ERROR1) + 8V(c.d.e) EMS(ERROR1) = V(ERROR1) Note that 'nonhier:T' makes the c.d.e term disappear from the EMS for the fixed terms; compare with the default hierarchical model that precedes it. Structure returned with keep:T When 'keep:T' is an argument, the structure returned has components 'df', 'ss', 'termnames', 'coefs', and 'rterms'. Component Description df REAL Vector of degrees of freedom for all terms in model ss REAL Vector of sums of squares for all terms in model termnames CHARACTER vector of labels for each term coefs REAL matrix with coefs[i,j] the coefficient for term j in the EMS of term i rterms LOGICAL vector with T indicating that a term is random. Components ss and df are just those computed from a MacAnova anova() command (possibly with marg:T as needed), and may not be in conformance with the model as used by ems() for the following reasons: 1. anova() computes only hierarchical models, while you may specify nonhierarchical models in ems() by using nonhier:T. 2. ems() enforces nesting and grouping. If b first appears in a.b then b is nested in a and any appearance of b in a later term implies the presence of a. anova() does no such enforcing. For example, in "y=a+a.b+c+b.c", b.c would be interpreted by ems() as a.b.c while anova() would not include a.b.c in the model. If b and c first appear together, then "y=b.c+d+c.d" is interpreted in ems() as "y=b.c+d+b.c.d". More examples, with 2^2 design in 16 replicates: Cmd> ems("y=c*d",2) EMS(CONSTANT) = V(ERROR1) + 32V(d) + 64Q(CONSTANT) EMS(c) = V(ERROR1) + 16V(c.d) + 32Q(c) EMS(d) = V(ERROR1) + 32V(d) EMS(c.d) = V(ERROR1) + 16V(c.d) EMS(ERROR1) = V(ERROR1) Cmd> ems("y=c*d",2,keep:T) component: df (1) 1 1 1 1 60 component: ss (1) 0.76155 0.036871 0.31116 1.623 56.318 component: termnames (1) "CONSTANT" (2) "c" (3) "d" (4) "c.d" (5) "ERROR1" component: coefs (1,1) 64 0 32 0 1 (2,1) 0 32 0 16 1 (3,1) 0 0 32 0 1 (4,1) 0 0 0 16 1 (5,1) 0 0 0 0 1 component: rterms (1) F F T T

Gary Oehlert 2003-01-15