My problem is the statistical analysis of community data with gradients of environmental data.

I have a table of species occurrences (from metabarcoding) per sample site and measurements of environmental parameters (like pH, nutrient concentration, ...). We did all our samples in technical triplicates. That is, we took each sample three times and ran it trough our complete lab process.

Now these replicates are obviously not statistically independent from each other so I have to take that into account when doing statistical test on the data.

I want to test if the environmental data we measured explain the variance of the metabarcoding data. For this I have so far considered Canonical Correspondence Analysis and PERMANOVA. If I understand what I read correctly, in a linear model I would have to include a "random effect" of the replicate (right?). As far as I can see I can not include such an effect in the before mentioned tests.

I found in a FAQ of the vegan package the statement that this is not possible (at least in vegan) and as a work around they suggest to use partial CCA or include a "strata argument" in the PERMANOVA. I think this is not possible to use in my case, because this would imply that the effect of the replicate number is consistent over the sample sites.

The only other idea I have dome up with so fat is to average over the replicates, but I would rather find a different solution.

Any ideas or pointers would be greatly appreciated.

I cross posted this on Biostars where I got the suggestion to ask here.


1 Answer 1


First I I'd like to understand your question better. When you say replicates you say that you sample the same site three times for detecting species presence via metabarcoding, right? Do you happen to have the same amount of replicates for your environmental variables? If so, it's simple you can use a two-table ordination technique (also called constrained or canonical ordination), like CCA or RDA. The choice will depend on how effectively you sampled the length of the environmental gradients you're working on. For a start I'd choose RDA and then test the significance of the first canonical axis. The "strata argument" you mentioned can also be applied in this case. It works by constraining the randomizations to determine significance to each strata (in your case the three replicates for each site), it's the same with a repeated measures design. But this would only work with you also had repeated measures for the environmental variables. If you have only data for species presence, then we'd need another solution. Take a look at the Chapter 5 of the Borcard's book Numerical ecology with R, it explains all that I spoke about. There's also the R scripts you might find usefull. I cannot see how you'd use a PERMANOVA in this case, since you have two tables, not just one.

  • $\begingroup$ Yes we also measured each environmental variable 3 times. I am just concerned that the replicates are not independent measurements. So why would it be ok to treat them exactly like normal (independent) measurements? Thanks for the book tip. I will have a look at it. $\endgroup$
    – lelle
    Aug 9, 2016 at 10:09
  • $\begingroup$ Exactly, they are not independent because there's a temporal autocorrelation. So that's why you should constrain the randomizations using the strata argument. $\endgroup$ Aug 10, 2016 at 14:23
  • $\begingroup$ Ok, but a) this option only exists for the PERMANOVA (at least in vegan). The cca/rda function don't have it. Any idea how to deal with non-independent samples for these? b) would the strata option not model it in a way where it assumes that the effect of the replicate is consistent? My sampling is random so if a replicate is replicate number 1 or number 2 really can not have a consistent effect over different samples. Thanks for helping at this level of detail. $\endgroup$
    – lelle
    Aug 11, 2016 at 8:42
  • 1
    $\begingroup$ I had the same design in my paper in Hydrobiologia. See the last part of this sweave file you have to transform the replicated elements into factors and then add the argument stratra="element" in the function anova(), which is when you test for significance. $\endgroup$ Aug 12, 2016 at 15:01

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.