veganrda

partial Distance Based RDA - Centroids vanished from Plot


I am trying to fir a partial db-RDA with field.ID to correct for the repeated measurements character of the samples. However including Condition(field.ID) leads to Disappearance of the centroids of the main factor of interest from the plot (left plot below).

The Design: 12 fields have been sampled for species data in two consecutive years, repeatedly. Additionally every year 3 samples from reference fields have been sampled. These three fields have been changed in the second year, due to unavailability of the former fields. Additionally some environmental variables have been sampled (Nitrogen, Soil moisture, Temperature). Every field has an identifier (field.ID). Using field.ID as Condition seem to erroneously remove the F1 factor. However using Sampling campaign (SC) as Condition does not. Is the latter the rigth way to correct for repeated measurments in partial db-RDA??

set.seed(1234)

df.exp <- data.frame(field.ID = factor(c(1:12,13,14,15,1:12,16,17,18)),
                     SC = factor(rep(c(1,2), each=15)),
                     F1 = factor(rep(rep(c("A","B","C","D","E"),each=3),2)),
                     Nitrogen  = rnorm(30,mean=0.16, sd=0.07),
                     Temp  = rnorm(30,mean=13.5, sd=3.9),
                     Moist  = rnorm(30,mean=19.4, sd=5.8))

df.rsp <- data.frame(Spec1 = rpois(30, 5),
                     Spec2 = rpois(30,1),
                     Spec3 = rpois(30,4.5),
                     Spec4 = rpois(30,3),
                     Spec5 = rpois(30,7),
                     Spec6 = rpois(30,7),
                     Spec7 = rpois(30,5))

data=cbind(df.exp, df.rsp)                  



dbRDA <- capscale(df.rsp ~ F1 + Nitrogen + Temp + Moist + Condition(SC), df.exp); ordiplot(dbRDA)
dbRDA <- capscale(df.rsp ~ F1 + Nitrogen + Temp + Moist + Condition(field.ID), df.exp); ordiplot(dbRDA)

enter image description here


Solution

  • You partial out variation due to ID and then you try to explain variable aliased to this ID, but it was already partialled out. The key line in the printed output was this:

    Some constraints were aliased because they were collinear (redundant)
    

    And indeed, when you ask for details, you get

    > alias(dbRDA, names=TRUE)
    [1] "F1B" "F1C" "F1D" "F1E"
    

    The F1? variables were constant within ID which already was partialled out, and nothing was left to explain.