/* swamp.sas */ /* Swamp pH example from Allen and Cady */ options ls=72 ps=60; data swamp; infile 'swamp.dat'; input loc $ type $ ph; /* fit the cell means model */ proc glm; class loc type; model ph = loc*type / noint solution clparm; estimate 'away mean' loc*type 1 1 1 0 0 0 / divisor=3; estimate 'near mean' loc*type 0 0 0 1 1 1 / divisor=3; estimate 'a-n contrast' loc*type 1 1 1 -1 -1 -1 / divisor=3; estimate 'mesic mean' loc*type 1 0 0 1 0 0 / divisor=2; estimate 'north mean' loc*type 0 1 0 0 1 0 / divisor=2; estimate 'shrub mean' loc*type 0 0 1 0 0 1 / divisor=2; estimate 'm-s contrast' loc*type 1 0 -1 1 0 -1 / divisor=2; estimate 'n-(m+s) contrast' loc*type -1 2 -1 -1 2 -1 / divisor=4; estimate 'wt away mean' loc*type 8 2 6 0 0 0 / divisor=16; estimate 'wt near mean' loc*type 0 0 0 6 8 5 / divisor=19; estimate 'wt a-n contrast' loc*type 76 19 57 -48 -64 -40 / divisor=152; estimate 'wt mesic mean' loc*type 8 0 0 6 0 0 / divisor=14; estimate 'wt north mean' loc*type 0 2 0 0 8 0 / divisor=10; estimate 'wt shrub mean' loc*type 0 0 6 0 0 5 / divisor=11; estimate 'wt m-s contrast' loc*type 88 0 -84 66 0 -70 / divisor=154; estimate 'wt n-(m+s) contrast' loc*type -32 20 -24 -24 80 -20 / divisor=100; contrast 'loc main effect' loc*type 1 1 1 -1 -1 -1; contrast 'type main effect' loc*type 1 0 -1 1 0 -1, loc*type -1 2 -1 -1 2 -1; contrast 'interaction' loc*type 1 0 -1 -1 0 1, loc*type -1 2 -1 1 -2 1; contrast 'loc main effect' loc*type 1 1 1 -1 -1 -1; contrast 'type main effect' loc*type 1 0 -1 1 0 -1, loc*type -1 2 -1 -1 2 -1; contrast 'wt loc main effect' loc*type 76 19 57 -48 -64 -40; contrast 'wt type main effect' loc*type 88 0 -84 66 0 -70, loc*type -32 20 -24 -24 80 -20; contrast 'wt m-s contrast' loc*type 88 0 -84 66 0 -70; contrast 'wt n-(m+s) contrast' loc*type -32 20 -24 -24 80 -20; output out=new p=cellmean r=resid; title 'swamp pH example: cell means model'; /* get residual and interaction plots */ proc plot data=new; plot resid*cellmean/vref=0; plot cellmean*loc=type; plot cellmean*type=loc; /* examine residuals */ proc univariate data=new plot; var resid; proc rank data=new normal=blom out=new2; var resid; ranks nscore; proc plot data=new2; plot nscore*resid; /* fit the effects model */ proc glm; class loc type; model ph = loc type loc*type/ss1 ss2 ss3 ss4; means loc type loc*type/deponly; lsmeans loc type loc*type/stderr; title 'swamp pH example: effects model loc first'; proc glm; class loc type; model ph = type loc type*loc/ss1 ss2 ss3 ss4; title 'swamp pH example: effects model type first'; run;