No tengo claro de inmediato qué centroide desea, pero el centroide que me viene a la mente es el punto en el espacio multivariado en el centro de la masa de los puntos por grupo. Sobre esto, desea una elipse de confianza del 95%. Ambos aspectos se pueden calcular utilizando la ordiellipse()
función en vegano . Aquí hay un ejemplo modificado de ?ordiellipse
pero usando un PCO como un medio para integrar las diferencias en un espacio euclidiano del cual podemos derivar centroides y elipses de confianza para grupos basados en la variable de Gestión de la Naturaleza 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
Ahora mostramos los primeros 2 ejes PCO y agregamos una elipse de confianza del 95% basada en los errores estándar del promedio de las puntuaciones de los ejes. Queremos establecer los errores estándar kind="se"
y utilizar el conf
argumento para proporcionar el intervalo de confianza requerido.
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)
Tenga en cuenta que capturo la salida de ordiellipse()
. Esto devuelve una lista, un componente por grupo, con detalles del centroide y la elipse. Puede extraer el center
componente de cada uno de estos para llegar a los centroides
> 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 el centroide es solo para la solución 2d. Una opción más general es calcular los centroides usted mismo. El centroide es solo los promedios individuales de las variables o, en este caso, los ejes PCO. A medida que trabaja con las diferencias, deben integrarse en un espacio de ordenación para que tenga ejes (variables) de los que pueda calcular promedios. Aquí los puntajes de los ejes están en columnas y los sitios en filas. El centroide de un grupo es el vector de promedios de columna para el grupo. Hay varias formas de dividir los datos, pero aquí utilizo aggregate()
para dividir los puntajes en los primeros 2 ejes PCO en grupos basados Management
y calcular sus promedios
scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)
Esto da:
> 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 es lo mismo que los valores almacenados stats
como extraídos anteriormente. El aggregate()
enfoque generaliza a cualquier número de ejes, por ejemplo:
> 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, los centroides en los dos primeros ejes PCO no cambian cuando pedimos más ejes, por lo que puede calcular los centroides sobre todos los ejes una vez, luego usar cualquier dimensión que desee.
Puede agregar los centroides a la gráfica anterior con
points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)
La trama resultante ahora se verá así
Finalmente, vegan contiene las funciones adonis()
y betadisper()
que están diseñadas para observar las diferencias en los medios y las variaciones de los datos multivariados de manera muy similar a los documentos / software de Martí. betadisper()
está estrechamente relacionado con el contenido del documento que cita y también puede devolverle los centroides.