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.
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:
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
<- varpart(spe.hel, env.chem, env.topo)
spe.part.all $part # access results! spe.part.all
## 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
<- rda(mite.spe.hel ~ ., data = mite.pcnm)
full.spat
# Sélection progressive des variables spatiales
<- ordiR2step(rda(mite.spe.hel ~ 1, data = mite.pcnm),
spat.sel scope = formula(full.spat), R2scope = RsquareAdj(full.spat)$adj.r.squared,
direction = "forward", trace = FALSE)
$call spat.sel
## 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
<- subset(mite.env, select = c(SubsDens, WatrCont))
mite.subs
# Variables spatiales significatives
<- subset(mite.pcnm, select = names(spat.sel$terminfo$ordered))
mite.spat # pour rapidement accèder aux variables sélectionnées
Étape 3: Partitionnement de la variation dans la matrice d’abondances.
<- varpart(mite.spe.hel, mite.subs, mite.spat)
mite.part $part$indfract # extraire résultats mite.part
## 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!