2017-03-01 1 views
1

Le fichier d'aide de metaMDS {vegan} mentionne que l'on peut également utiliser un objet dist au lieu de données de communauté dans l'argument comm. Donc, si je lance ce qui suit, pourquoi ai-je des résultats différents? Est-ce que je fais quelque chose de mal ici et metaMDS finit par calculer des dissimilarités de dissimilarités?metaMDS {vegan} distances au lieu de matrice communautaire

library(vegan) 
data(varespec) 
vare_dist <- vegdist(varespec, method="bray") 
vare_mds <- metaMDS(comm = vare_dist, autotransform = FALSE) 
# actually autotransform = FALSE doesn't seem to change the results 
plot(vare_mds, type = "t") 

vare_mds_2 <- metaMDS(comm = varespec, distance = "bray", k =2) 
plot(vare_mds_2, display = "sites", type = "t") 

# plots above are different and the stress values below as well 
vare_mds$stress; vare_mds_2$stress 
# [1] 0.1000211 
# [1] 0.1843196 

ce SO question Je mise en jachère si que l'utilisation du autotransform = FALSE fixerait la question. Cependant, je pense que les valeurs ne sont pas si extrêmes pour déclencher un besoin de transformation, donc ne semble pas s'appliquer ici. Aussi ce discussion ne m'a pas beaucoup aidé. Plus précisément, j'ai un dist objet de courir unifrac {picante} et je pensais pouvoir l'utiliser dans metaMDS {vegan}. PS: malheureusement, je ne suis pas écologiste et je fais de mon mieux pour mettre le jargon à l'ordre du jour. Je ne peux que vous demander votre extrême patience.

+1

Vous n'avez pas besoin de spéculer: la sortie 'metaMDS' vous dira si des transformations ont été utilisées. Regardez la ligne 'Data:' de la sortie. –

Répondre

2

En bref, étant donné les mêmes options, metaMDS() appelé avec dissemblances et de la communauté entraînera le même modèle si commencé à partir de la même graine aléatoire (nMDS implique un algorithme itératif en utilisant des emplacements de départ aléatoires). Si vous n'utilisez pas la même graine aléatoire pour les deux ajustements dans votre exemple, ce n'est pas la source du problème, cependant. Vos deux appels donnent lieu à des ajustements différents car les données d'entrée sont différentes en raison des valeurs par défaut pour autotransform avec les données de la communauté et les dissimilarités.

autotransformest ayant une différence car elle affecte les données qui sont converties en dissimilarités. Pensez-y comme une étape de pré-traitement, un que vous n'avez pas vous quand vous avez créé vos dissimilarités. Par conséquent, vous devez ajouter autotransform = FALSE à l'appel deuxième, celui avec les données de la communauté.

Si vous exécutez les deux appels suivants

set.seed(1) 
m1 <- metaMDS(comm = vare_dist, autotransform = FALSE) 
set.seed(1) 
m2 <- metaMDS(comm = varespec, distance = "bray", autotransform = FALSE) 

vous verrez que ce sont les mêmes:

> procrustes(m1, m2) 

Call: 
procrustes(X = m1, Y = m2) 

Procrustes sum of squares: 
8.882e-16 

Ce qui précède montre que les configurations sont exactement équivalentes à la précision de la machine, et les statistiques de stress sont égales pour les deux modèles

> m1$stress 
[1] 0.1000211 
> m2$stress 
[1] 0.1000211 

metaMDS() est conçu comme une enveloppe aux fonctions sous-jacentes qui mettent en œuvre nMDS d'une manière particulière (de ?metaMDS, section Détails)

Fonction metaMDS est une fonction wrapper qui appelle plusieurs autres fonctions de combiner de Minchin (1987) recommandations en une commande.

Il prend des décisions sur la base des données d'entrée. Certaines de ces décisions peuvent être prises pour des dissimilarités car, comme c'est le cas avec autotransform, elles sont destinées à être appliquées avant l'analyse.

+0

Salut @Gavin Simpson. Merci pour votre réponse. J'ai remarqué que lorsque vous tracez les deux modèles 'm1' et' m2' dans votre exemple, j'obtiens une répartition de points identique, mais des coordonnées d'axe nMDS différentes. Ainsi, les résultats sont symétriques avec un tracé de 'm1' ressemblant à un zoom de' m2' plot. Est-ce quelque chose dont je devrais m'inquiéter? – Valentin