Intervalles de confiance autour d'un centroïde avec similitude de Gower modifiée

9

Je voudrais obtenir des intervalles de confiance de 95% pour les centroïdes sur la base de la similitude de Gower entre certains échantillons multivariés (données communautaires provenant de carottes de sédiments). Jusqu'à présent, j'ai utilisé le vegan{}package dans R pour obtenir une similitude Gower modifiée entre les cœurs (basé sur Anderson 2006; maintenant inclus dans R dans le cadre de vegdist()). Quelqu'un sait-il comment je peux calculer des intervalles de confiance à 95% pour les centroïdes, par exemple, des sites d'échantillonnage, sur la base de la similitude de Gower modifiée?

De plus, si possible, je voudrais tracer ces IC à 95% sur un PCO qui montre les centroïdes, il est donc évident s'ils se chevauchent.

Pour obtenir une similitude Gower modifiée, j'ai utilisé:

dat.mgower <- vegdist(decostand(dat, "log"), "altGower")

Mais pour autant que je sache, vous ne recevez pas de centroïdes vegdist(). J'ai besoin d'obtenir des centroïdes, puis des IC à 95%, puis de les tracer ... dans R. Aide!

Anderson, MJ, KE Ellingsen et BH McArdle. 2006. Dispersion multivariée comme mesure de la diversité bêta. Ecology Letters 9: 683–693.

Margaret
la source
Si vous regardez des grappes en dimensions k, les centroïdes ne sont-ils pas en dimension k? Dans ce cas, vous devez rechercher des régions de confiance et non des intervalles. Toute région de confiance pour une variable comme un centre de grappe dépendrait de tous les composants qui composent l'incertitude de l'estimation. Je pense que cela pourrait être assez complexe et que générer des régions de confiance ne serait pas simple. Ne pourriez-vous pas faire de simulation pour les rapprocher?
Michael R. Chernick
Merci, Michael. Oui, je voulais dire les régions de confiance, qui seraient dans un espace k-dimensionnel où k est le nombre de taxons trouvés dans la communauté. Je ferais des simulations au lieu de les calculer, mais je ne sais pas comment procéder. Des IC approximatifs feraient l'affaire.
Margaret
1
Je vois qu'il y a eu des discussions pendant que j'écrivais ma réponse. Je ne sais pas ce que vous décrivez et j'illustre en termes dekespèces que nous avons jeté cette information loin dans le calcul des différences. Nous pouvons alors calculer les centroïdes dans un espace d'ordination, dans ce cas un PCO des dissimilarités de Gower modifiées. Faites-moi savoir si ce n'est pas ce que vous vouliez et je peux essayer de vous en aider davantage.
Gavin Simpson
1
Une autre approche serait de bootstrap. Pour les n points k-dimensionnels, générez des échantillons bootstrap en échantillonnant n fois avec remplacement à partir de l'ensemble de données. Exécutez l'ensemble de données d'amorçage via l'algorithme de clustering. Répétez cette opération plusieurs fois. Cela vous donnera une distribution des clusters et des centroïdes choisis. Ensuite, pour chaque centroïde (si vous pouvez faire correspondre un échantillon d'amorçage à un autre), vous obtiendrez une distribution des centroïdes pour chaque cluster et à partir de cette construction, des régions de confiance d'amorçage pour eux.
Michael R. Chernick
1
@MichaelChernick Ce n'est peut-être pas trop un problème si les regroupements sont définis a priori selon mon exemple. Ce serait typique du type de données décrites dans l'article que Margaret cite.
Gavin Simpson

Réponses:

5

Je ne sais pas immédiatement quel centroïde vous voulez, mais le centroïde qui me vient à l'esprit est le point dans l'espace multivarié au centre de la masse des points par groupe. À ce sujet, vous voulez une ellipse de confiance à 95%. Les deux aspects peuvent être calculés en utilisant la ordiellipse()fonction en végétalien . Voici un exemple modifié de ?ordiellipsemais en utilisant un PCO comme moyen d'incorporer les dissemblances dans un espace euclidien à partir duquel nous pouvons dériver des centroïdes et des ellipses de confiance pour les groupes basés sur la variable de gestion de la nature Management.

require(vegan)
data(dune)
dij <- vegdist(decostand(dune, "log"), method = "altGower")
ord <- capscale(dij ~ 1) ## This does PCO

data(dune.env) ## load the environmental data

Maintenant, nous affichons les 2 premiers axes PCO et ajoutons une ellipse de confiance à 95% basée sur les erreurs standard de la moyenne des scores des axes. Nous voulons que les erreurs standard soient définies kind="se"et utilisons l' confargument pour donner l'intervalle de confiance requis.

plot(ord, display = "sites", type = "n")
stats <- with(dune.env,
              ordiellipse(ord, Management, kind="se", conf=0.95, 
                          lwd=2, draw = "polygon", col="skyblue",
                          border = "blue"))
points(ord)
ordipointlabel(ord, add = TRUE)

Notez que je capture la sortie de ordiellipse(). Cela renvoie une liste, un composant par groupe, avec des détails sur le centroïde et l'ellipse. Vous pouvez extraire le centercomposant de chacun d'eux pour obtenir les centroïdes

> t(sapply(stats, `[[`, "center"))
         MDS1       MDS2
BF -1.2222687  0.1569338
HF -0.6222935 -0.1839497
NM  0.8848758  1.2061265
SF  0.2448365 -1.1313020

Notez que le centroïde est uniquement pour la solution 2D. Une option plus générale consiste à calculer vous-même les centroïdes. Le centroïde est juste les moyennes individuelles des variables ou dans ce cas les axes PCO. Comme vous travaillez avec les différences, elles doivent être intégrées dans un espace d'ordination afin que vous ayez des axes (variables) dont vous pouvez calculer les moyennes. Ici, les scores des axes sont en colonnes et les sites en lignes. Le centre de gravité d'un groupe est le vecteur des moyennes des colonnes du groupe. Il existe plusieurs façons de diviser les données, mais ici, j'utilise aggregate()pour diviser les scores sur les 2 premiers axes PCO en groupes basés sur Managementet calculer leurs moyennes

scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)

Cela donne:

> cent
  Management       MDS1       MDS2
1         BF -1.2222687  0.1569338
2         HF -0.6222935 -0.1839497
3         NM  0.8848758  1.2061265
4         SF  0.2448365 -1.1313020

qui est la même que les valeurs stockées dans statscomme extrait ci-dessus. L' aggregate()approche se généralise à n'importe quel nombre d'axes, par exemple:

> scrs2 <- scores(ord, choices = 1:4, display = "sites")
> cent2 <- aggregate(scrs2 ~ Management, data = dune.env, FUN = mean)
> names(cent2)[-1] <- colnames(scrs2)
> cent2
  Management       MDS1       MDS2       MDS3       MDS4
1         BF -1.2222687  0.1569338 -0.5300011 -0.1063031
2         HF -0.6222935 -0.1839497  0.3252891  1.1354676
3         NM  0.8848758  1.2061265 -0.1986570 -0.4012043
4         SF  0.2448365 -1.1313020  0.1925833 -0.4918671

De toute évidence, les centroïdes sur les deux premiers axes PCO ne changent pas lorsque nous demandons plus d'axes, vous pouvez donc calculer les centroïdes sur tous les axes une fois, puis utiliser la dimension que vous souhaitez.

Vous pouvez ajouter les centroïdes au tracé ci-dessus avec

points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)

Le tracé résultant ressemblera maintenant à ceci

utilisation de l'ordiellipse

Enfin, vegan contient les fonctions adonis()et betadisper()qui sont conçues pour examiner les différences de moyennes et de variances des données multivariées de manière très similaire aux documents / logiciels de Marti. betadisper()est étroitement lié au contenu du document que vous citez et peut également renvoyer les centroïdes pour vous.

Gavin Simpson
la source
1
Lisez l'aide ?ordiellipsepour plus de détails sur ce qui se fait ici, en particulier dans le calcul de l'intervalle de confiance. Que la théorie corresponde aux données est quelque chose que vous voudrez peut-être examiner avec la simulation ou le rééchantillonnage ou quelque chose plutôt que de compter sur la "théorie".
Gavin Simpson
1
Suite au commentaire et au dernier paragraphe de la réponse; adonis()peut être utilisé pour tester des moyennes similaires (centroïdes) de groupes comme on pourrait utiliser l'ANOVA dans le cas univarié. Un test de permutation est utilisé pour déterminer si les données sont cohérentes avec l'hypothèse nulle de pas de différence de centroïdes. Notez également que les différences de centroïdes peuvent être causées par différentes dispersions de groupes (variances). betadisper()peut vous aider à tester si tel est le cas, en utilisant à nouveau un test basé sur la permutation des distances moyennes des points d'échantillonnage à leur centre de gravité.
Gavin Simpson
@ Gavin-- merci. J'ai fait le test pour mesurer les différences entre les centroïdes en utilisant PERMANOVA et PERMDISP dans PRIMER (qui effectuent la même tâche que adonis()et betadisp(), je crois), je cherchais juste un bon moyen d'afficher les données. J'ai une interaction site x saison pour une conception de mesures répétées, donc je voulais pouvoir montrer facilement quels sites ont montré un effet saisonnier. Je pense que ces ellipses sont ce que je recherche; cet exemple a été très utile.
Margaret
aussi, oui - le centre de masse multivarié pour chaque groupe est le type de centroïde pour lequel j'essayais de calculer les IC.
Margaret
Encore une chose - Si je voulais remplir les ellipses de couleurs différentes en fonction de mes facteurs, y a-t-il un moyen de le faire ordiellipse()sans incorporer une boucle for? J'ai à la fois des saisons et des sites dans mes données, et je voulais montrer les différences de sites dans une parcelle et de saisons dans une autre en les codant par couleur. Pour une raison quelconque, l'utilisation de col = c (1,2,1,2), etc. ne fonctionne pas, ni col = as.numeric (cent ["Site_TP"]). Existe-t-il une manière élégante de procéder?
Margaret