Não estou imediatamente esclarecido qual centróide você deseja, mas o centróide que vem à mente é o ponto no espaço multivariado no centro da massa dos pontos por grupo. Sobre isso, você deseja uma elipse de 95% de confiança. Ambos os aspectos podem ser calculados usando a ordiellipse()
função no vegan . Aqui está um exemplo modificado de ?ordiellipse
mas usando um PCO como um meio para incorporar as diferenças em um espaço euclidiano do qual podemos derivar centróides e elipses de confiança para grupos com base na variável Gerenciamento da Natureza 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
Agora, exibimos os 2 primeiros eixos PCO e adicionamos uma elipse de 95% de confiança com base nos erros padrão da média das pontuações do eixo. Queremos erros padrão para definir kind="se"
e usar o conf
argumento para fornecer o intervalo de confiança necessário.
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)
Observe que eu capturei a saída de ordiellipse()
. Isso retorna uma lista, um componente por grupo, com detalhes do centróide e da elipse. Você pode extrair o center
componente de cada um deles para chegar aos centróides
> 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
Observe que o centróide é apenas para a solução 2D. Uma opção mais geral é calcular você mesmo os centróides. O centróide é apenas a média individual das variáveis ou, neste caso, os eixos PCO. Como você está trabalhando com as diferenças, elas precisam ser incorporadas em um espaço de ordenação para que você tenha eixos (variáveis) dos quais você pode calcular as médias. Aqui, as pontuações do eixo estão em colunas e os sites em linhas. O centróide de um grupo é o vetor de médias da coluna para o grupo. Existem várias maneiras de dividir os dados, mas aqui eu uso aggregate()
para dividir as pontuações nos 2 primeiros eixos PCO em grupos com base Management
e calcular suas médias
scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)
Isto dá:
> 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
que é igual aos valores armazenados stats
como extraídos acima. A aggregate()
abordagem generaliza para qualquer número de eixos, por exemplo:
> 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
Obviamente, os centróides nos dois primeiros eixos PCO não mudam quando solicitamos mais eixos; portanto, você pode computar os centróides em todos os eixos uma vez e depois usar a dimensão que desejar.
Você pode adicionar os centróides ao gráfico acima com
points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)
O gráfico resultante será agora parecido com este
Finalmente, o vegan contém as funções adonis()
e betadisper()
que são projetadas para observar diferenças nas médias e variações de dados multivariados de maneira muito semelhante aos documentos / software de Marti. betadisper()
está intimamente ligado ao conteúdo do artigo que você cita e também pode devolver os centróides para você.