/* This example is taken from lab12 of Dickey's ST512 website. It is a split-plot experiment with: Y as the response (dry weight) Air as the whole plot factor w/ 2 levels (Yes/No) Tanks as the whole plot units w/ 2 tanks per level of Air Soil as one split-plot factor w/ 3 levels (1,2,3) Variety as another split-plot factor w/ 2 levels (A,B) (Soil and Variety arranged factorially, randomized to subplots. ) Model: Y_ijkl = mu_ijk + T_l(i) + E_ijkl i=1,2 (Air) j=1,2,3 (Soil) k=1,2 (Variety) l=1,2 (tank) Pairwise comparisons of interest are 1) soil 1 vs soil 3, averaging over other factors 2) main effect of air 3) effect of air in variety A, averaging over other factors 4) Variety A air yes vs Variety B air no df for 3) and 4) not obtainable in PROC GLM */ data fish; input tank air $ soil $ var $ Y @@; label Y='Dry Weight'; cards; 1 Yes Clay A 10 1 Yes Sand A 14 1 Yes Silt A 12 1 Yes Clay B 20 1 Yes Sand B 28 1 Yes Silt B 26 2 No Clay A 8 2 No Sand A 12 2 No Silt A 10 2 No Clay B 13 2 No Sand B 15 2 No Silt B 12 3 No Clay A 10 3 No Sand A 14 3 No Silt A 11 3 No Clay B 13 3 No Sand B 17 3 No Silt B 15 4 Yes Clay A 16 4 Yes Sand A 25 4 Yes Silt A 19 4 Yes Clay B 19 4 Yes Sand B 28 4 Yes Silt B 23 ; PROC GLM; CLASS AIR SOIL VAR TANK; MODEL Y = AIR TANK(AIR) SOIL VAR SOIL*VAR AIR*SOIL AIR*VAR AIR*SOIL*VAR; RANDOM TANK(AIR)/TEST; PROC GPLOT;PLOT Y*VAR=AIR; PLOT Y*SOIL=AIR; SYMBOL1 V=DIAMOND H=3 I=NONE C=CYAN; SYMBOL2 V=PLUS H=3 I=NONE C=RED; ** You can also use PROC MIXED and avoid some of the GLM problems**; PROC GLM; CLASS AIR SOIL VAR TANK; title "Aquarium Data"; MODEL Y = AIR TANK(AIR) SOIL VAR SOIL*VAR AIR*SOIL AIR*VAR AIR*SOIL*VAR; RANDOM TANK(AIR)/TEST; Contrast "Soil 1 vs. 3" SOIL -1 0 1; Contrast "Air vs. Not" AIR -1 1/e=TANK*AIR; Contrast "Air in Variety 1 (wrong!)" AIR -1 1 AIR*VAR -1 0 1 0; PROC MIXED method=type3; CLASS AIR SOIL VAR TANK; MODEL Y = AIR | SOIL | VAR /ddfm=Satterthwaite; RANDOM TANK(AIR); Contrast "Soil 1 vs. 3" SOIL -1 0 1; Contrast "Air vs. Not" AIR -1 1; ** No e= here **; Contrast "Air in Variety 1 (right!)" AIR -1 1 AIR*VAR -1 0 1 0; Estimate "Variety A air vs Variety B not" air*variety -1 0 0 1; /*Why didn't it work? Fix it! */ lsmeans AIR*VAR; run;