Intervalos de confianza alrededor de un centroide con similitud de Gower modificada

9

Me gustaría obtener intervalos de confianza del 95% para los centroides basados ​​en la similitud de Gower entre algunas muestras mulivariadas (datos de la comunidad de núcleos de sedimentos). Hasta ahora he usado el vegan{}paquete en R para obtener una similitud de Gower modificada entre los núcleos (basado en Anderson 2006; ahora incluido en R como parte de vegdist()). ¿Alguien sabe cómo puedo calcular los intervalos de confianza del 95% para los centroides de, por ejemplo, los sitios de muestreo, en función de la similitud modificada de Gower?

Además, si es posible, me gustaría trazar estos IC del 95% en un PCO que muestre los centroides, por lo que es evidente si se superponen.

Para obtener una similitud de Gower modificada, utilicé:

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

Pero hasta donde yo sé, no obtienes centroides vegdist(). Necesito obtener centroides, luego IC del 95%, luego trazarlos ... en R. ¡Ayuda!

Anderson, MJ, KE Ellingsen y BH McArdle. 2006. Dispersión multivariante como medida de la diversidad beta. Ecology Letters 9: 683–693.

Margaret
fuente
Si está mirando grupos en dimensiones k, ¿no son los centroides k-dimensionales? En cuyo caso, debe buscar regiones de confianza y no intervalos. Cualquier región de confianza para una variable como un centro de agrupación dependería de todos los componentes que componen la incertidumbre en la estimación. Creo que eso podría ser bastante complejo y que generar regiones de confianza no sería una cuestión simple. ¿No podrías hacer una simulación para aproximarlos?
Michael R. Chernick
Gracias Michael. Sí, me refería a regiones de confianza, que estarían en el espacio k-dimensional donde k es el número de taxones encontrados en la comunidad. Haría simulaciones en lugar de calcularlas, pero no sé cómo hacerlo. Los IC aproximados serían suficientes.
Margaret
1
Veo que ha habido alguna discusión mientras escribía mi Respuesta. No estoy seguro de lo que describe e ilustro es en términos de las especies ya que hemos desechado esa información al calcular las diferencias. Luego podemos calcular los centroides en algún espacio de ordenación, en este caso un PCO de las diferencias de Gower modificadas. Hazme saber si esto no es lo que querías y puedo intentar ayudarte un poco más. k
Gavin Simpson, el
1
Otro enfoque sería el bootstrap. Para los n puntos k-dimensionales, genere muestras de arranque mediante muestreo n veces con reemplazo del conjunto de datos. Ejecute el conjunto de datos de arranque a través del algoritmo de agrupación. Repite esto muchas veces. Esto le dará una distribución de los clústeres y centroides elegidos. Luego, para cada centroide (si puede hacer coincidir una muestra de bootstrap con otra) obtendrá una distribución de los centroides para cada grupo y de esa construcción de regiones de confianza de bootstrap para ellos.
Michael R. Chernick
1
@MichaelChernick Eso puede no ser un problema demasiado si las agrupaciones se definen a priori según mi ejemplo. Eso sería típico del tipo de datos descritos en el documento que cita Margaret.
Gavin Simpson, el

Respuestas:

5

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 ?ordiellipsepero 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 confargumento 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 centercomponente 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 Managementy 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 statscomo 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í

uso de ordiellipse

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.

Gavin Simpson
fuente
1
Lea la ayuda ?ordiellipsepara obtener detalles de lo que se está haciendo aquí, especialmente al calcular el intervalo de confianza. Si la teoría coincide con los datos es algo que quizás desee analizar con simulación o remuestreo o algo más que confiar en la "teoría".
Gavin Simpson, el
1
Además del comentario y el último párrafo de la Respuesta; adonis()se puede usar para probar medias similares (centroides) de grupos como se podría usar ANOVA en el caso univariante. Se usa una prueba de permutación para determinar si los datos son consistentes con la hipótesis nula de que no hay diferencia de centroides. Tenga en cuenta también que las diferencias de los centroides pueden ser causadas por diferentes dispersiones de grupo (varianzas). betadisper()puede ayudarlo a probar si ese es el caso, nuevamente usando una prueba basada en permutación de las distancias promedio de los puntos de muestra a su centroide.
Gavin Simpson, el
@ Gavin-- gracias. Hice la prueba para medir las diferencias entre los centroides usando PERMANOVA y PERMDISP en PRIMER (que realizan la misma tarea que , adonis()y betadisp()creo), solo estaba buscando una buena manera de mostrar los datos. Tengo cierta interacción sitio x temporada para un diseño de medidas repetidas, así que quería poder mostrar fácilmente qué sitios mostraron un efecto estacional. Creo que estas elipses son lo que estoy buscando; Este ejemplo fue muy útil.
Margaret
también, sí, el centro de masa multivariado para cada grupo es el tipo de centroide para el que estaba tratando de calcular los IC.
Margaret
Una cosa más: si quisiera llenar las elipses con diferentes colores dependiendo de mis factores, ¿hay alguna manera de hacerlo ordiellipse()sin incrustar un bucle for? Tengo ambas estaciones y sitios en mis datos, y quería mostrar sitios de diferencias en una parcela y estaciones en otra codificándolos por colores. Por alguna razón, el uso de col = c (1,2,1,2), etc. no funciona, ni col = as.numeric (cent ["Site_TP"]). ¿Hay alguna forma elegante de hacer esto?
Margaret