Just add "experiment" as an effect to your model, that should account for the shift between experiments and let you gain the power of increased N across experiments to detect effects of concentration and time.
In R, if using ANOVA and treating time as a factor (e.g. not numeric), then do:
library(ez)
ezANOVA(
data = my_data
, dv = .(my_dv)
, wid = .(individual)
, within = .(time)
, between = .(concentration,experiment)
)
However, this:
- treats experiment as a fixed effect, whereas it might more reasonably be considered a random effect (thanks Henrik!)
- treats time as non-continuous
- assumes sphericity across the levels of time
An approach that solves all three issues is to employ a mixed effects model. If you think that the effect of time is linear, then leave time as a numeric variable and do:
library(lme4)
lmer(
data = my_data
, formula = my_dv ~ time*concentration+(1|individual)+(1|experiment)
)
If you don't think time is linear, you could convert it to a factor and repeat the above, or use generalized additive mixed modelling:
library(gamm4)
fit <- gamm4(
data = my_data
, formula = my_dv ~ time+concentration+s(time,by=concentration,bs='tp')
, random = ~ (1|individual) + (1|experiment)
)
print(fit$gam)
That assumes that experiment only shifts the time function, but lets concentration change the shape of the time function. I have a hard time figuring out how to visualise the results from single gamm4 fits, so I usually obtain the fitted model's predictions across the fixed-effects space then bootstrap (in your case, sampling individuals with replacement within each experiment) confidence intervals around these predictions.
Also, all of the above assume that residuals are gaussian; if you're dealing with anything different (eg. binomial data), then you need to change the "family" arguments of lmer and gamm4 (ezANOVA can't do anything but gaussian).