BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
palolix
Pyrite | Level 9

Hi!

I have a Split-plot with 3 Factors; nematode, treatment and cultivar, plus block.  The design is unbalanced because not all levels of the factor "nematode" have the same number of replicates.  Additionaly, is also an incomplete block because one of the 4 blocks only contain 2 levels of "nematode", and only one level of "treatment".  There is still another limitation; not all the levels of "cultivar" correspond to each of the level of "nematode".  For example, the cultivar Nord was only planted where nematode A and B are, but not where nematode C is.  Cultivar Sang, where only planted where nematode A and C are, but not where B is, and cultivar Beretta was planted where nematode B and C are, but not where A is.  So taken these limitations into account, I would first like to know which design do I have exactly?

I analysed the data using the by statement (by nematode and by cultivar), but the problem is that analysing the data separatly (first by nematode and then by cultivar), I loose degrees of freedom, so better to analyse it toghether in a properly way.

I would greatly appreciate some help!

Caroline

1 ACCEPTED SOLUTION

Accepted Solutions
SteveDenham
Jade | Level 19

Another recommended book is Milliken and Johnson's Analysis of Messy Data, both volumes 1 and 3.  In their approach, you essentially set up a one-way analysis of variance, and then compute tests and comparisons using CONTRAST/ESTIMATE/LSMESTIMATE statements.  For instance, you might fit:

proc glimmix;

class nematode cultivar treatment block;

model response=nematode*cultivar*treatment/noint solution;

random block;

lsmeans nematode*cultivar*treatment/e;

run;

From the /e option on the lsmeans statement, you can get the coefficients to construct the tests for main effects and first order interactions.  This is about the only way I know to address the situation you find yourself in.  It is also very appropriate for "wedge" designs.

Steve Denham

View solution in original post

14 REPLIES 14
SteveDenham
Jade | Level 19

This is a classic case where a mixed model approach is absolutely required, but that you may have to fit a cell means model to get what you want, due to the potential inestimability of main effect means.  The difficult situation arises from the block with only one treatment.  However, I again refer to Walt Stroup's Generalized Linear Mixed Models, and in particular to section 2.4.3 "Fixed or Random?: Tough Calls", where a balanced incomplete block design is described.  This should generalize easily to your situation.

Steve Denham

palolix
Pyrite | Level 9

Hi Steve!

thank you again for your help!  I will certainly read that book.  However, what do you mean with fit a cell means model??  Are there special sas statements for this kind of design?

Thank you!

Caroline

SteveDenham
Jade | Level 19

Another recommended book is Milliken and Johnson's Analysis of Messy Data, both volumes 1 and 3.  In their approach, you essentially set up a one-way analysis of variance, and then compute tests and comparisons using CONTRAST/ESTIMATE/LSMESTIMATE statements.  For instance, you might fit:

proc glimmix;

class nematode cultivar treatment block;

model response=nematode*cultivar*treatment/noint solution;

random block;

lsmeans nematode*cultivar*treatment/e;

run;

From the /e option on the lsmeans statement, you can get the coefficients to construct the tests for main effects and first order interactions.  This is about the only way I know to address the situation you find yourself in.  It is also very appropriate for "wedge" designs.

Steve Denham

palolix
Pyrite | Level 9

Thanks a lot Steve! you are greatly helping me.  I was looking at the Contents of Analysis of Messy Data, and it looks very helpfull for my case, so I will try to get that book.  I also ordered that book from Stroup.  Now my question is; are there specific statements in Proc mixed or in glimmix to construct a model which is unbalanced, has an incomplete block, and also missing treatment combinations, like in my situation?


Thank you very much for that model! what about the noint solution? Should I always omit the intercept, or just when dealing with unbalanced design for example?


Caroline

SteveDenham
Jade | Level 19

Noint fits cell means, and solution will return those means as the result.  If you delete noint, the intercept estimate would be the grand mean, and the estimates for each of the combinations of nematode*cultivar*treatment would be deviations from that mean.

As far as specific statements, well, no, you don't really tell MIXED or GLIMMIX that you have some special situation, except by doing things like fitting a cell means model and creating tests using other statements.  One of the great things about a mixed model approach is that you don't need to be concerned about getting an answer when you have unbalance or an incomplete block, since the conditional expectation given the random effects is what you are fitting.  It's the missing treatment combination part that gets tricky.  The highest order interaction will always be estimable, but lower order and main effects may not--hence the use of a cell means model.

Steve Denham

palolix
Pyrite | Level 9

Thank so much Steve!

So by fitting a cell means you mean analysing the data as it were a One-way ANOVA (when actually being a split-plot) in order to solve the problem of missing treatment combinations?

And what about the random error of the split- plot model; blk*trt??  Can I also add it near blk in the random statement?

Thank you!

Caroline

SteveDenham
Jade | Level 19

You analyze it as a one-way anova, but specify the necessary random effects, so that tests generated by contrast/lsmestimate statements are correct.  And, yes, you should add blk*trt into the random statement.  I would do it as follows:

random intercept treatment/subject=block;

I would not be surprised if the block by treatment variance component was zero, though.  If that turns out to be the case, then there are two choices:

1. Use the ddfm=kr option (=kr2 in GLIMMIX) to get the shrinkage estimates with proper standard errors.

2. Use method=laplace or method=quad (only available in GLIMMIX).

Note that these two are mutually exclusive.

Steve Denham

palolix
Pyrite | Level 9

Thank you Steve!

Since I have so many random errors (because of my original split-plot model), I do not know if I can still use your new suggestion (random intercept treatment/subject=blk).  So if not, it should look like this?

proc glimmix;

class blk nematode treatment cultivar;

model y= nematode*treatment*cultivar/noint solution;

random blk blk*nematode  blk*nematode*treatment  blk*nematode*cultivar blk*treatment*cultivar;

lsmeans nematode*treatment*cultivar/e;

run;

But what about the main effects and first order interactions from my original split-plot model: nematode  treatment nematode*treatment cultivar nematode*cultivar treatment*cultivar nematode*treatment*cultivar?

You meant to first run the lsmeans statement with the /e option to get the coefficients in order to construct the tests for these main effects and first order interactions?  So doing this I could latter include these in the model?

Thank you very much!

Caroline

SteveDenham
Jade | Level 19

I stand corrected, and apologize.  You can include them in the model--you just won't be able to get estimable LSmeans for all of them.  Consequently, we generally construct the tests using contrast/lsmestimate statements, but you don't have to.

As far as the random statement, you will probably have more luck with convergence if you use the subject= option.  This would make the statement look like;

random intercept nematode nematode*treatment nematode*cultivar treatment*cultivar/subject=blk;

The resulting code should then give you the tests and lsmeans that are estimable:

proc glimmix;

class blk nematode treatment cultivar;

model y= nematode|treatment|cultivar/ solution;

random intercept nematode nematode*treatment nematode*cultivar treatment*cultivar/subject=blk;

lsmeans nematode*treatment*cultivar/e;

run;

Steve Denham

Message was edited by: Steve Denham

palolix
Pyrite | Level 9

Thanks a lot Steve for your help!

I run your model, it worked and that is what I got in Log, for the first dependent variable analysis:

NOTE: The model does not contain an intercept. Columns of X are scaled only and not centered.

NOTE: Convergence criterion (GCONV=1E-8) satisfied.

NOTE: Estimated G matrix is not positive definite.

Since I got significant p-values for nematode, nematode*treatment and nematode*cultivar, I run the model for second time, replacing the lsmeans statement with these significant effects and interactions, but unfortunately I only got LSM for nematode*cultivar.  For nematode and nematode*treatment  I got Non-est, no Std error and no p-values.

Caroline

SteveDenham
Jade | Level 19

This is what I meant by non-estimable, and why we fit a cell means model.  To get the LSMs for nematode by treatment, you will have to construct them from the available estimates of nematode by treatment by cultivar.  This is why the LSMESTIMATE statement was devised, in my opinion.  Go back to the lsmeans statement with the three-way interaction, add the /e option, and see which combinations need to be made to come up with the LSmeans of interest.

Steve Denham

palolix
Pyrite | Level 9

Hi Steve!

Thanks a lot again!

I run the model again with the lsmeans statement with the three-way interaction, and that is what I got;

In the LSM Table for the nematode*treatment*cultivar interaction, I got all estimates for all combinations, and all p-values significant for all combinations.  In the Solutions for Fixed Effects Table; only for the combinations nematode1*treatment1 and nematode2*treatment1 I got estimates and p-values, for the others combinations corresponding to this interaction, I got estimate 0 and no p-values.

Caroline

SteveDenham
Jade | Level 19

The solutions are going to come up zero for the same reason that the LSmeans are non-estimable.  I think I could derive the proper statements if you could share the three-way LSmeans output, including the /e part.  I assume that you have 3 levels of cultivar, 3 levels of nematode, and a reasonable number of levels of treatment.

Steve Denham

palolix
Pyrite | Level 9

Hi Steve, I really appreciate your help!!!!

I have 3 levels of cultivar, 3 of nematode (but not all levels of nematode correspond to each level of cultivar, that is why I have missing combinations), and only 2 levels of treatment.

So, here is the 3-way LSMEANS Table, and next the Solution Table (I am sorry but I do not know a better option to paste them better)

Nordster110.68200.0982626.940.0201
Sang110.60510.0982626.160.0254
Nordster120.72130.108526.650.0219
Sang120.83150.108527.670.0166
Beretta211.51220.1048214.430.0048
Nordster211.52190.1048214.520.0047
Beretta221.39540.1094212.750.0061
Nordster221.64190.1094215.010.0044
Beretta311.03480.09826210.530.0089
Sang310.93770.0982629.540.0108
Beretta321.32500.1085212.220.0066
Sang321.20050.1085211.07

0.0081

nem 1 0.83150.108557.670.0006
nem 2 1.27100.130559.740.0002
nem 3 1.20050.1085511.070.0001
trt 1-0.26280.10834-2.430.0722
trt 20....
nem*trt 110.036360.0857360.420.6862
nem*trt 120....
nem*trt 210.40690.0888064.580.0038
nem*trt 220....
nem*trt 310....
nem*trt 320....
cultivarBeretta 0.12450.117841.060.3501
cultivarNordster 0.37100.137642.700.0544
cultivarSang 0....
nem*cultivarNordster1 -0.48110.12318-3.910.0045
nem*cultivarSang1 0....
nem*cultivarBeretta2 0....
nem*cultivarNordster2 0....
nem*cultivarBeretta3 0....
nem*cultivarSang3 0....
trt*cultivarBeretta 1-0.027360.15064-0.180.8646
trt*cultivarNordster 1-0.26410.17714-1.490.2101
trt*cultivarSang 10....
trt*cultivarBeretta 20....
trt*cultivarNordster 20....
trt*cultivarSang 20....
nem*trt*cultivarNordster110.45130.151522.980.0967
nem*trt*cultivarSang110....
nem*trt*cultivarNordster120....
nem*trt*cultivarSang120....
nem*trt*cultivarBeretta210....
nem*trt*cultivarNordster210....
nem*trt*cultivarBeretta220....
nem*trt*cultivarNordster220....
nem*trt*cultivarBeretta310....
nem*trt*cultivarSang310....
nem*trt*cultivarBeretta320....
nem*trt*cultivarSang320....

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

What is ANOVA?

ANOVA, or Analysis Of Variance, is used to compare the averages or means of two or more populations to better understand how they differ. Watch this tutorial for more.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 14 replies
  • 4665 views
  • 0 likes
  • 2 in conversation