I have data from 7 sites, which are under 3 types of AMD impairment (2 impaired, 3 recovered, 2 unimpaired); each site has 3 different treatments (Undisturbed Upstream, Disturbed, Undisturbed Downstream). Sites were sampled right before the treatment (day 0), and then 5, 10, 15, and 30 days after treatment.

I want to see if there are any significant differences in macro measurements (abundance, richness, feeding groups, etc.) over time across the AMD impairment types and the treatments.

My first thought is a repeated-measures ANOVA like:

Macro_abund ~ AMD_Impairment*Treatment*Day + Error(Site/Impairment*Section)

Using function aov in R, I get an error that the model is singular.

I'm beginning to wonder if repeated measures ANOVA is an inappropriate analysis, but I'm not sure what a better alternative would be.

  • 2
    $\begingroup$ You haven't given anyone enough detail to connect your substantive description of your problem to the code you tried and failed with. A minimal example of data and code would help. But you haven't mentioned Section in the description, so maybe that is the problem. $\endgroup$
    – user101089
    Feb 22, 2017 at 2:23
  • $\begingroup$ At this point, the answer is that you are doing something wrong. $\endgroup$
    – Carl
    Feb 22, 2017 at 4:51
  • $\begingroup$ Why not fit a smaller model first then gradually build up to what you think you need? $\endgroup$
    – mdewey
    Feb 22, 2017 at 14:01

1 Answer 1


Usually that error means you do not have a independent variable for each dependent variable. Ex: you are missing data somewhere. You can either fill in these missing values, or drop those rows.

If the idea of dropping an observation/row entirely rubs you the wrong way, according to another forum you could look into conducting the analysis as a linear mixed model. I too am having issues determining what goes in the line of code where you have "site."

Macro_abund ~ AMD_Impairment*Treatment*Day + Error(Site/Impairment*Section)

Where you have "site" I have an ID number for each observation per treatment (CODE) per SITE (each row = 1 observation).

My code: x1.aov<-aov(X1 ~ MONTH * SITE * CODE + Error(ID/(SITE * CODE)), data=HNME1)

Someone else also recommended changing your "SITE" or in my case- "ID" to a factor. HNME1$ID <- factor(HNME1$ID) Hope this helps a little bit!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.