Chapitre 8 Partitionnement de la variation

Le partitionnement de la variation est un type d’analyse qui combine à la fois la RDA et la RDA partielle pour diviser la variation d’une matrice de variable réponse en deux, trois ou quatre jeux de données explicatives. Par exemple, on pourrait partitionner la variation dans une matrice de communauté en fonctiond e variables abiotiques et biotiques, ou de variables locales et à large échelle.

La structure d'un partitionnement de la variation.

Figure 8.1: La structure d’un partitionnement de la variation.

Le résultat d’un partitionnement de la variation est généralement représenté par un diagramme de Venn sur lequel sont annotés les pourcentages de variance expliquée par chacun des jeux de données explicatives. Dans le cas où on partionnerait la variation entre deux matrices explicatives, le résultat pourrait être représenté comme suit:

Représentation des résultats d'un partitionnement de la variation.

Figure 8.2: Représentation des résultats d’un partitionnement de la variation.

Ici, les fraction représentent:

  • La fraction \([a + b + c]\) est la variance expliquée par \(X1\) et* \(X2\) ensemble, calculée à partir d’une RDA de \(Y\) par \(X1 + X2\).
  • La fraction \([d]\) est la variance inexpliquée par \(X1\) et* \(X2\) ensemble, obtenue à partir de la même RDA que ci-dessus.
  • La fraction \([a]\) est la variance expliquée par \(X1\) seulement, calculée en faisant une RDA partielle de \(Y\) par \(X1 | X2\) (en contrôlant pour \(X2\)).
  • La fraction \([c]\) est la variance expliquée par \(X2\) seulement, calculée en faisant une RDA partielle de \(Y\) par \(X2 | X1\) (en contrôlant pour \(X1\)).
  • La fraction \([b]\) est calculée par soustraction, c’est-à-dire \(b = [a + b] + [b + c] - [a + b + c].\) Comme \([b]\) n’est pas le résultat d’une RDA, il est impossible de tester sa significativité. Elle peut également être négative, ce qui indique que la matrice de réponse est mieux expliquée par la combinaison de \(X1\) et \(X2\) que par l’une ou l’autre des matrices prise individuellement.

8.1 Partitionnement de la variation dans R

Pour démontrer comment le partitionnement des variations fonctionne dans R, nous allons partitionner la variation de la composition des espèces de poissons entre les variables chimiques et topographiques. La fonction varpart() de vegan nous facilite la tâche.

# Partitionner la variation de la composition des espèces
# de poissons
spe.part.all <- varpart(spe.hel, env.chem, env.topo)
spe.part.all$part  # access results!
## No. of explanatory tables: 2 
## Total variation (SS): 14.07 
##             Variance: 0.50251 
## No. of observations: 29 
## 
## Partition table:
##                      Df R.squared Adj.R.squared Testable
## [a+c] = X1            7   0.60579       0.47439     TRUE
## [b+c] = X2            3   0.41526       0.34509     TRUE
## [a+b+c] = X1+X2      10   0.73414       0.58644     TRUE
## Individual fractions                                    
## [a] = X1|X2           7                 0.24135     TRUE
## [b] = X2|X1           3                 0.11205     TRUE
## [c]                   0                 0.23304    FALSE
## [d] = Residuals                         0.41356    FALSE
## ---
## Use function 'rda' to test significance of fractions of interest

On peut ensuite visualiser les résultats avec la fonction plot().

# Visualiser les résultats avec un diagramme Venn
plot(spe.part.all,
     Xnames = c("Chem", "Topo"), # noms des matrices explicatives
     bg = c("seagreen3", "mediumpurple"), alpha = 80,
     digits = 2,
     cex = 1.5)

Les variables chimiques expliquent 24.1% de la variation de la composition des espèces de poissons, les variables topographiques expliquent 11.2% de la variation de la composition des espèces de poissons, et ces deux groupes de variables conjointement expliquent 23.3% de la variation de la composition des espèces de poissons.

Soyez prudent lorsque vous rapportez les résultats du partitionnement de la variation ! La fraction partagée [b] ne représente pas un effet d’interaction des deux matrices explicatives. Considérez-la comme un chevauchement entre \(X1\) et \(X2\). Elle représente la fraction partagée de la variation expliquée lorsque les deux sont incluses dans le modèle, c’est-à-dire la partie de la variation qui ne peut être attribuée à \(X1\) ou \(X2\) séparément. En d’autres termes, le partitionnement de la variation ne peut pas démêler les effets de la chimie et de la topographie pour 23.3% de la variation de la composition de la communauté de poissons.

8.2 Tester la significativité

La sortie de la fonction varpart() rapporte le \(R^2\) ajusté pour chaque fraction, mais vous remarquerez que le tableau n’inclut aucun test de signification statistique. Cependant, la colonne Testable identifie les fractions qui peuvent être testées pour leur signification en utilisant la fonction anova.cca(), tout comme nous l’avons fait avec le RDA !

X1 [a+b]: Chimie sans tenir compte de topographie

# [a+b] Chimie sans tenir compte de topographie
anova.cca(rda(spe.hel, env.chem))
## Permutation test for rda under reduced model
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(X = spe.hel, Y = env.chem)
##          Df Variance      F Pr(>F)    
## Model     7  0.30442 4.6102  0.001 ***
## Residual 21  0.19809                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

X2 [b+c] Topographie sans tenir compte de chimie

# [b+c] Topographie sans tenir compte de chimie
anova.cca(rda(spe.hel, env.topo))
## Permutation test for rda under reduced model
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(X = spe.hel, Y = env.topo)
##          Df Variance     F Pr(>F)    
## Model     3  0.20867 5.918  0.001 ***
## Residual 25  0.29384                 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

X1 | X2 [a] Chimie seulement (ajusté pour tenir compte de topographie)

# [a] Chimie seulement
anova.cca(rda(spe.hel, env.chem, env.topo))
## Permutation test for rda under reduced model
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(X = spe.hel, Y = env.chem, Z = env.topo)
##          Df Variance      F Pr(>F)    
## Model     7  0.16024 3.0842  0.001 ***
## Residual 18  0.13360                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

C’est une RDA partielle!

X2 | X1 [c] Topographie (ajusté pour tenir compte de chimie)

# [c] Topographie seulement
anova.cca(rda(spe.hel, env.chem, env.topo))
## Permutation test for rda under reduced model
## Permutation: free
## Number of permutations: 999
## 
## Model: rda(X = spe.hel, Y = env.chem, Z = env.topo)
##          Df Variance      F Pr(>F)    
## Model     7  0.16024 3.0842  0.001 ***
## Residual 18  0.13360                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Toutes les fractions testables dans le partitionnement de la variation sont statistiquement significatives!

8.3 Défi 3

Partitionnez la variation de l’abondance des espèces de mites entres des variables de substrat (SubsDens, WatrCont) et des variables spatiales significatives.

  • Quelle est la proportion de variance expliquée par le substrat? par l’espace?
  • Quelles sont les fractions significatives?
  • Diagramme Venn des résultats!

Chargez les variables spatiales:

data("mite.pcnm")

Rappel de fonctions utiles:

ordiR2step()
varpart()
anova.cca(rda())
plot()

8.3.1 Défi 3: Solution

Étape 1: Sélection de variables spatiales significatives.

Il y a beaucoup de variables spatiales dans ce jeu de données (22 !). Nous devrions sélectionner les plus importantes, pour éviter de surcharger le modèle.

# Modèle RDA avec tous les variables spatiales
full.spat <- rda(mite.spe.hel ~ ., data = mite.pcnm)

# Sélection progressive des variables spatiales
spat.sel <- ordiR2step(rda(mite.spe.hel ~ 1, data = mite.pcnm),
    scope = formula(full.spat), R2scope = RsquareAdj(full.spat)$adj.r.squared,
    direction = "forward", trace = FALSE)
spat.sel$call
## rda(formula = mite.spe.hel ~ V2 + V3 + V8 + V1 + V6 + V4 + V9 + 
##     V16 + V7 + V20, data = mite.pcnm)

Étape 2: Créer sous-groupes de variables explicatives.

# Variables de substrat
mite.subs <- subset(mite.env, select = c(SubsDens, WatrCont))

# Variables spatiales significatives
mite.spat <- subset(mite.pcnm, select = names(spat.sel$terminfo$ordered))
# pour rapidement accèder aux variables sélectionnées

Étape 3: Partitionnement de la variation dans la matrice d’abondances.

mite.part <- varpart(mite.spe.hel, mite.subs, mite.spat)
mite.part$part$indfract  # extraire résultats
##                 Df R.squared Adj.R.squared Testable
## [a] = X1|X2      2        NA    0.05901929     TRUE
## [b] = X2|X1     10        NA    0.19415929     TRUE
## [c]              0        NA    0.24765221    FALSE
## [d] = Residuals NA        NA    0.49916921    FALSE
  • Quelle est la proportion de variance expliquée par le substrat? 5.9%
  • Quelle est la proportion de variance expliquée par l’espace? 19.4%

Étape 4: Quelles sont les fractions significatives?

[a]: Substrat seulement

anova.cca(rda(mite.spe.hel, mite.subs, mite.spat))
...
## Model: rda(X = mite.spe.hel, Y = mite.subs, Z = mite.spat)
##          Df Variance      F Pr(>F)    
## Model     2 0.025602 4.4879  0.001 ***
## Residual 57 0.162583                  
...

[c]: Espace seulement

anova.cca(rda(mite.spe.hel, mite.spat, mite.subs))
...
## Model: rda(X = mite.spe.hel, Y = mite.spat, Z = mite.subs)
##          Df Variance      F Pr(>F)    
## Model    10  0.10286 3.6061  0.001 ***
## Residual 57  0.16258                  
...

Étape 5: Visualiser les résultats avec un diagramme Venn.

plot(mite.part,
     digits = 2,
     Xnames = c("Subs", "Space"), # titre des fractions
     cex = 1.5,
     bg = c("seagreen3", "mediumpurple"), # ajoutez des couleurs!
     alpha = 80)

Alors, quels sont les effets de substrat et de l’espace sur les abondances d’espèces de mites?

Indice: Pourquoi on trouve un effet si important de l’espace?

L’espace explique la plupart de la variation dans la communauté: elle explique 19.4% (p = 0.001) de la variation seule, et 24.8% est expliqué conjointement par l’espace et le substrat. Le susbtrat n’explique que ~6% (p = 0.001) de la variation entre sites sans l’effet de l’espace. Notez également que la moitié de la variation n’est pas expliquée par les variables que nous avons incluses dans le modèle (regardez les résidus !), le modèle pourrait donc être amélioré.

Cet effet élevé de l’espace pourrait être un signe qu’un processus écologique spatial est important ici (comme la dispersion, par exemple). *Cependant, il pourrait aussi nous indiquer que nous manquons une variable environnementale importante dans notre modèle, qui varie elle-même dans l’espace!