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 ?ordiellipse
mais 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' conf
argument 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 center
composant 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 Management
et 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 stats
comme 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

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.