Chapitre 10 Transformations

Les communautés échantillonnées dans des conditions environnementales homogènes ou courtes peuvent avoir des compositions d’espèces avec peu de zéros, de sorte que les distances euclidiennes pourraient suffire à les caractériser.

Néanmoins, c’est rarement la réalité.

Les espèces peuvent être très fréquentes lorsque les conditions sont favorables, ou absentes de nombreux sites. Parfois, cette asymétrie peut introduire des problèmes parasites dans nos analyses.

Nous devons alors transformer nos données de composition pour les analyser de manière appropriée.

Dans R, nous pouvons compter sur vegan::decostand() pour de nombreux types de transformations.

Jetez un coup d’oeil à l’aide de cette fonction pour voir les options disponibles :

?decostand()

10.1 Transformation présence-absence

Nous pouvons changer l’argument method en "pa" dans vegdist() pour transformer nos données d’abondance en données de présence-absence :

Si \(y_{ij} \geq 1\), alors, \(y'_{ij} = 1\).

Rappelons notre jeu de données spe :

spe[1:6, 1:6]
##   CHA TRU VAI LOC OMB BLA
## 1   0   3   0   0   0   0
## 2   0   5   4   3   0   0
## 3   0   5   5   5   0   0
## 4   0   4   5   5   0   0
## 5   0   2   3   2   0   0
## 6   0   3   4   5   0   0

Transformons les abondances spe en présences-absences :

spe.pa <- decostand(spe, method = "pa")
spe.pa[1:6, 1:6]
##   CHA TRU VAI LOC OMB BLA
## 1   0   1   0   0   0   0
## 2   0   1   1   1   0   0
## 3   0   1   1   1   0   0
## 4   0   1   1   1   0   0
## 5   0   1   1   1   0   0
## 6   0   1   1   1   0   0

10.2 Transformation des profils d’espèces

Il arrive que l’on veuille supprimer les effets des unités très abondantes. Nous pouvons transformer les données en profils d’abondance relative des espèces à l’aide de l’équation suivante :

\[y'_{ij} = \frac{y_{ij}}{y_{i+}}\]

\(yi+\) indique le nombre total de l’échantillon sur toutes les espèces \(j=1,...,m\), pour le \(i\)-ième échantillon.

Dans decostand(), nous pouvons utiliser la méthode avec "total" :

spe.total <- decostand(spe, method = "total")
spe.total[1:5, 1:6]
##   CHA        TRU        VAI        LOC OMB BLA
## 1   0 1.00000000 0.00000000 0.00000000   0   0
## 2   0 0.41666667 0.33333333 0.25000000   0   0
## 3   0 0.31250000 0.31250000 0.31250000   0   0
## 4   0 0.19047619 0.23809524 0.23809524   0   0
## 5   0 0.05882353 0.08823529 0.05882353   0   0

10.3 Transformation de Hellinger

Nous pouvons prendre la racine carrée de la transformation du profil d’espèce et obtenir la transformation de Hellinger, qui possède de très bonnes propriétés mathématiques et nous permet de réduire les effets des valeurs de \(y_{ij}\) qui sont extrêmement grandes.

\[y'_{ij} = \sqrt{\frac{y_{ij}}{y_{i+}}}\]

Dans decostand(), nous pouvons changer l’argument method avec "hellinger" :

spe.total <- decostand(spe, method = "hellinger")
spe.total[1:5, 1:6]
##   CHA       TRU       VAI       LOC OMB BLA
## 1   0 1.0000000 0.0000000 0.0000000   0   0
## 2   0 0.6454972 0.5773503 0.5000000   0   0
## 3   0 0.5590170 0.5590170 0.5590170   0   0
## 4   0 0.4364358 0.4879500 0.4879500   0   0
## 5   0 0.2425356 0.2970443 0.2425356   0   0

10.4 Normalisation par le score Z

La normalisation par le score Z, également connue sous le nom de normalisation par le score standard, est une technique utilisée pour transformer une distribution de données en une distribution normale standard avec une moyenne de 0 et un écart-type de 1. Elle consiste à soustraire la moyenne des données et à la diviser par l’écart-type.

La normalisation des variables environnementales est cruciale, car il est impossible de comparer les effets de variables ayant des unités différentes :

## `?`(decostand)
env.z <- decostand(env, method = "standardize")

Cela permet de centrer et d’échelonner les variables afin de rendre votre analyse en cours plus appropriée :

apply(env.z, 2, mean)
##           das           alt           pen           deb            pH 
##  1.000429e-16  1.814232e-18 -1.659010e-17  1.233099e-17 -4.096709e-15 
##           dur           pho           nit           amm           oxy 
##  3.348595e-16  1.327063e-17 -8.925898e-17 -4.289646e-17 -2.886092e-16 
##           dbo 
##  7.656545e-17
apply(env.z, 2, sd)
## das alt pen deb  pH dur pho nit amm oxy dbo 
##   1   1   1   1   1   1   1   1   1   1   1

Nous verrons plus de détails sur cette transformation dans les prochaines sections !

10.4.0.1 Petite révision

Association - “terme général décrivant toute mesure ou tout coefficient permettant de quantifier la ressemblance ou la différence entre des objets ou des descripteurs. Dans une analyse entre descripteurs, zéro signifie qu’il n’y a pas d’association.” (Legendre et Legendre 2012).

Similarité - une mesure qui est “maximale (S=1) lorsque deux objets sont identiques et minimale lorsque deux objets sont complètement différents.” (Legendre et Legendre 2012).

La distance (également appelée dissimilarité) - est une mesure qui est “maximale (D=1) lorsque deux objets sont complètement différents”. (Legendre et Legendre 2012). Distance ou dissimilarité (D) = 1-S

Le choix d’une mesure d’association dépend de vos données, mais aussi de ce que vous savez, d’un point de vue écologique, à propos de vos données.

Voici quelques mesures de dissimilarité (distance) couramment utilisées (d’après Gotelli et Ellison 2004) :

Nom de la mesure Propriété Description
Euclidean Metric Distance between two points in 2D space.
Manhattan Metric Distance between two points, where the distance is the sum of differences of their Cartesian coordinates, i.e. if you were to make a right able between the points.
Chord Metric This distance is generally used to assess differences due to genetic drift.
Mahalanobis Metric Distance between a point and a set distribution, where the distance is the number of standard deviations of the point from the mean of the distribution.
Chi-square Metric Similar to Euclidean.
Bray-Curtis Semi-metric Dissimilarity between two samples (or sites) where the sum of lower values for species present in both samples are divided by the sum of the species counted in each sample.
Jaccard Metric Description
Sorensen’s Semi-metric Bray-Curtis is 1 - Sorensen

10.4.1 Autres métriques d’association

Données environnementales quantitatives

Examinons les associations entre les variables environnementales (également connues sous le nom d’analyse des modes Q) :

`?`(dist)

# matrice de distance euclidienne des variables
# environnementales standardisées
env.de <- dist(env.z, method = "euclidean")

windows()  # Créer une fenêtre graphique séparée
coldiss(env.de, diag = TRUE)

Nous pouvons alors examiner la dépendance entre les variables environnementales (également connue sous le nom d’analyse de mode R) :

(env.pearson <- cor(env))  # Calcul du r de Pearson entre les variables
round(env.pearson, 2)  # Arrondit les coefficients à 2 points décimaux 
(env.ken <- cor(env, method = "kendall"))  # Corrélation de rang du tau de Kendall
round(env.ken, 2)

La corrélation de Pearson mesure la corrélation linéaire entre deux variables. Le tau de Kendall est une corrélation de rang, ce qui signifie qu’il quantifie la relation entre deux descripteurs ou variables lorsque les données sont ordonnées au sein de chaque variable.

Dans certains cas, il peut y avoir des types mixtes de variables environnementales. Le mode Q peut toujours être utilisé pour trouver des associations entre ces variables environnementales. Pour ce faire, nous commencerons par créer un exemple de cadre de données :

var.g1 <- rnorm(30, 0, 1)
var.g2 <- runif(30, 0, 5)
var.g3 <- gl(3, 10)
var.g4 <- gl(2, 5, 30)

(dat2 <- data.frame(var.g1, var.g2, var.g3, var.g4))

str(dat2)
summary(dat2)

Une matrice de dissimilarité peut être générée pour ces variables mixtes à l’aide de la matrice de dissimilarité de Gower :

?daisy #Cette fonction peut gérer les NA dans les données 
(dat2.dg <- daisy(dat2, metric="gower")) 
coldiss(dat2.dg)

Défi 1 - Avancé Calculez la dissimilarité de Bray-Curtis et la dissimilarité de Gower de l’abondance des espèces CHA, TRU et VAI pour les sites 1, 2 et 3 (en utilisant les cadres de données “spe” et “env”) sans utiliser la fonction decostand().

Défi 1 - Solution avancée

Sous-ensembler des données sur les espèces de sorte que seuls les sites 1 et 2 soient inclus et que seules les espèces CHA, TRU et VAI soient prises en compte.

spe.challenge <- spe[1:3, 1:3]  #”[1:3,” refers to rows 1 to 3 while “,1:3]” refers to the first 3 species columns (in #this case the three variables of interest)

Déterminer l’abondance totale des espèces pour chaque site d’intérêt (somme des trois lignes). Ce chiffre servira de dénominateur dans l’équation ci-dessus.

(Abund.s1 <- sum(spe.challenge[1, ]))
(Abund.s2 <- sum(spe.challenge[2, ]))
(Abund.s3 <- sum(spe.challenge[3, ]))
# () around code will cause output to print right away in
# console

Calculez maintenant la différence d’abondance des espèces pour chaque paire de sites. Par exemple, quelle est la différence entre l’abondance de CHA et de TRU dans le site 1 ? Vous devez calculer les différences suivantes : CHA et TRU site 1 CHA et VAI site 1 TRU et VAI site 1 CHA et TRU site 2 CHA et VAI site 2 TRU et VAI site 2 CHA et TRU site 3 CHA et VAI site 3 TRU et VAI site 3

Spec.s1s2 <- 0
Spec.s1s3 <- 0
Spec.s2s3 <- 0
for (i in 1:3) {
    Spec.s1s2 <- Spec.s1s2 + abs(sum(spe.challenge[1, i] - spe.challenge[2,
        i]))
    Spec.s1s3 <- Spec.s1s3 + abs(sum(spe.challenge[1, i] - spe.challenge[3,
        i]))
    Spec.s2s3 <- Spec.s2s3 + abs(sum(spe.challenge[2, i] - spe.challenge[3,
        i]))
}

Prenez maintenant les différences que vous avez calculées comme numérateur dans l’équation de la dissimilarité de Bray-Curtis et l’abondance totale des espèces que vous avez déjà calculée comme dénominateur.

(db.s1s2 <- Spec.s1s2/(Abund.s1 + Abund.s2))  #Site 1 comparé au site 2
(db.s1s3 <- Spec.s1s3/(Abund.s1 + Abund.s3))  #Site 1 comparé au site 3
(db.s2s3 <- Spec.s2s3/(Abund.s2 + Abund.s3))  #Site 2 comparé au site 3 

Vous devriez trouver des valeurs de 0,5 pour le site 1 vers le site 2, 0,538 pour le site 1 vers le site 3 et 0,053 pour le site 2 vers le site 3.

Vérifiez vos résultats manuels avec ceux que vous obtiendriez en utilisant la fonction vegdist() avec la méthode de Bray-Curtis :

(spe.db.challenge <- vegdist(spe.challenge, method = "bray"))

Une matrice ressemblant à celle-ci est produite, qui devrait être identique à vos calculs manuels :

Site 1 Site 2
Site 2 0.5 --
Site 3 0.538 0.0526

Pour la dissimilarité de Gower, procédez de la même manière mais utilisez l’équation appropriée :

# Calculez le nombre de colonnes dans votre jeu de données
M <- ncol(spe.challenge)

# Calculez les différences d'abondance entre les paires de
# sites pour chaque espèce
Spe1.s1s2 <- abs(spe.challenge[1, 1] - spe.challenge[2, 1])
Spe2.s1s2 <- abs(spe.challenge[1, 2] - spe.challenge[2, 2])
Spe3.s1s2 <- abs(spe.challenge[1, 3] - spe.challenge[2, 3])
Spe1.s1s3 <- abs(spe.challenge[1, 1] - spe.challenge[3, 1])
Spe2.s1s3 <- abs(spe.challenge[1, 2] - spe.challenge[3, 2])
Spe3.s1s3 <- abs(spe.challenge[1, 3] - spe.challenge[3, 3])
Spe1.s2s3 <- abs(spe.challenge[2, 1] - spe.challenge[3, 1])
Spe2.s2s3 <- abs(spe.challenge[2, 2] - spe.challenge[3, 2])
Spe3.s2s3 <- abs(spe.challenge[2, 3] - spe.challenge[3, 3])

# Calculer l'étendue de l'abondance de chaque espèce entre
# les sites
Range.spe1 <- max(spe.challenge[, 1]) - min(spe.challenge[, 1])
Range.spe2 <- max(spe.challenge[, 2]) - min(spe.challenge[, 2])
Range.spe3 <- max(spe.challenge[, 3]) - min(spe.challenge[, 3])

# Calculer la dissimilarité de Gower
(dg.s1s2 <- (1/M) * ((Spe2.s1s2/Range.spe2) + (Spe3.s1s2/Range.spe3)))
(dg.s1s3 <- (1/M) * ((Spe2.s1s3/Range.spe2) + (Spe3.s1s3/Range.spe3)))
(dg.s2s3 <- (1/M) * ((Spe2.s2s3/Range.spe2) + (Spe3.s2s3/Range.spe3)))

# Comparez vos résultats
(spe.db.challenge <- vegdist(spe.challenge, method = "gower"))