As is tradition on these posts, I should say I'm relatively new to statistical analysis at this level so if I don't provide enough info off the bat bear with me.

So I've conducted an experiment measuring microbial growth on agar across 3 time points (weeks 4, 6 & 8) and I want to measure how growth varies over time across a series of agar compositions. Thus, I have one continuous ratio DV (growth in mm2), one within-factor IV (time) and one between-factor IV with 10 levels (agar type). For each treatment type n = ~20

Initially I had hoped to use a straightforward mixed ANOVA, but due to biased contamination during the course of my experimental run I ended up with a range of sample sizes resulting in a situation where some diet treatments are down to 13 remaining ID's to the max of 20, which I expect led to the pretty stark violations of the homogeneity of variance assumption within my data I detected via Levene's test (normality is fine beside a few outliers). Transformations helped somewhat, but don't seem to be able to get my data over the line of homogeneity.

I've been hunting for an alternative without the homoscedasticity assumption, and it seems something like mixed effects models or generalised estimating equation (GEE) could have potential, but again my understanding of stats isn't mature enough to really know which would be ideal/ how best to approach that/ if there's some other factor I'm totally missing. Hoping someone can advise here.

Cheers for any help.

  • 1
    $\begingroup$ A mixed effects model might work. Please explain the dimensionality of your data please. You've mentioned 3 variables: the outcome, time and type, but you also say "For each treatment type n = ~20" and you also talk about ID. Are you saying that for each type of agar there are around 20 agar plates (IDs) each measured 3 times, and your research question is centred on how the growth rates vary between the types of agar ? $\endgroup$ Jul 4, 2020 at 13:50
  • $\begingroup$ @RobertLong Pretty much exactly, yes. ID is just each individual replicate, so I plated 20 plates per condition, some of which succumbed to contamination and were removed. What I'm looking to do with this analysis is test if there's a specific interaction effect between the elapsed time and the treatment condition (i.e. some treatments might cause faster initial growth whilst others might be be lagged etc.) before determining what specific diet factors are causing any apparent change. $\endgroup$ Jul 4, 2020 at 14:40

1 Answer 1


You have 10 types of agar (treatments) and for each type there were initially 20 replicated plates (IDs) which were each measured 3 times, at weeks 4, 6 and 8. Due to contamination some plates were lost. The research question is whether rates of growth differ between the different types of agar, and whether the types are associated with differemt initial or later growth.

So you have repeated measures within ID - each one is measured 3 times. One way to control for this non-independence (correlations within ID) is to fit random intercepts for ID. In R, using the lmer function from the lme4 package we would fit:

lmer(y ~ time * type + (1 | ID), data = ...)

This will estimate main effects for time and type, and also the interaction between them. With 3 levels of time and 10 of type this will be quite a lot of individual estimates, but that may be exactly what you want.

Another approach is to realise that ID is nested in type, because each ID is associated with one and only one level of type. Now, in the first model we treated type as fixed which seems perfectly reasonable because you were interested in the "effect" of the type. This may be one of those situations where we might alternatively consider type as random, provided that it will still answer the research question. There are a number of reasons for considering factors as either random or fixed, and one is whether we can consider the sample (ie the 10 types in the experiment) coming from a wider population of types. If we take this approach then we could fit a model with ID nested in type:

lmer(y ~ time + (1 | type / ID), data = ...)

which is the same as:

lmer(y ~ time + (1 | type) + (1 | type:ID), data = ...)

Now, this will not answer the research question because it only fits time as a fixed effect, but, if the data supports such a model, we can also specify random slopes for time, and this will mean that each type has it's own estimate (slope) for time and since time is categorical, this will give seperate estimates for each level of time:

lmer(y ~ time + (time | type) + (1 | type:ID), data = ...)

..and you can then extract the individual estimates (more correctly termed the conditional means of the random effects):

The second model is a bit more ambitious than the first and I wouldn't be surprised if the data doesn't support it, but it's an approach worth knowing about.

In both models you will want to check model assumptions by inspecting residuals of course.

  • 1
    $\begingroup$ Thank you, this is exactly the kind of run-through I was looking for. Will likely with the first model for now but will very much spend some time playing with the second to see if I can work it to the data. Cheers! $\endgroup$ Jul 6, 2020 at 16:05
  • 1
    $\begingroup$ Glad to hear it. You're welcome :) $\endgroup$ Jul 6, 2020 at 18:23

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.