5 votos

Restringido permutaciones

Tengo algunos datos multivariantes y desea investigar el efecto de algunos gradiente ambiental. Quiero usar capscale, pero no sé cómo lidiar con el esquema de permutación. He hecho algo de artificial de datos, con 20 sitios a lo largo de un gradiente ("env"):

######### create some species data along a gradient
df <- structure(list(site = 1:20, 
                     sp1 = c(7L, 4L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp2 = c(1L, 2L, 4L, 7L, 8L, 7L, 4L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp3 = c(0L, 0L, 0L, 0L, 0L, 1L, 2L, 4L, 7L, 8L, 7L, 4L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp4 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 4L, 7L, 8L, 7L, 4L, 2L, 1L, 0L), 
                     sp5 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 4L, 7L, 8L), 
                     sp6 = c(0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp7 = c(0L, 0L, 0L, 0L, 0L, 0L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp8 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), 
                     sp9 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 4L, 1L, 0L, 0L)), 
                .Names = c("site", "sp1", "sp2", "sp3", "sp4", "sp5", "sp6", "sp7", "sp8", "sp9"), 
                class = "data.frame", row.names = c(NA, -20L))

# add some linear responses
df$sp6 <- round(seq(1, 8, 7/19), digits = 2) # linear response
df$sp7 <- round(seq(1, 4, 3/19), digits = 2) # no so strong linear response
df$sp9 <- round(seq(1, 6, 5/19), digits = 2)

# gradient
df$env <- 1:20

Si probé solo una vez me gustaría hacer algo como esto:

# db-RDA sampled at one time
require(vegan)
mod <- capscale(df[ ,-c(1, 10)] ~ env, data = df, distance = "bray")
anova(mod, by = "terms", step = 999)  # assess the "significance" of contraining variable
plot(mod)

Ahora imagina que probé los mismos datos instante, pero en tres meses diferentes:

# now we replate exactly the same data 2 more times 
repdf <- rbind(df, df, df)  
repdf$time <- rep(1:3, each = nrow(df))
repdf$site <- factor(repdf$site)

Si yo uso sin restricciones de permutaciones, a continuación, esto no captura las medidas repetidas y el valor de p sería a la baja.

Yo podría restringir las permutaciones dentro de cada uno de los sitios (usando los estratos = sitio en vegano), pero esto únicamente destruye el efecto temporales y rinde a un p de 1 (debido a que cada permuation es el mismo):

repmod <- capscale(repdf[ ,-c(1, 11, 12)] ~ env, data = repdf, distance = "bray") # db-RDA
anova(repmod, by = "terms", strata = repdf$site, step = 999)  

Mi pregunta: ¿Cómo debo restringir las permutaciones evaluar el efecto del gradiente de tomar esta correlación temporal en cuenta? Lo permutationscheme debo usar?

Algunas ideas: a) Permutar los estratos ( = sitios), pero no dentro de los estratos. Esto destruirá el env de gradiente, por lo que el p-valor es determinado solamente por esto.

b) Incluir el "tiempo" en el modelo (con interacciones) y la carrera por el tiempo de efecto de diferentes permutación-esquema (permutar dentro de los sitios) que para env (permutar sitios, pero no dentro de los sitios).

Yo sé acerca de la permutar paquete y puede incorporar en permutest.cca, así que mi pregunta es más teórico.

2voto

David J. Sokol Puntos 1730

Si env es la variable que interesa entonces tenemos que probar el "efecto" de esta variable en términos de la varianza explicada por env. Para hacer la prueba usando una permutación necesitamos pensar acerca de lo que es y no es intercambiable bajo la hipótesis Nula de que estamos probando. En este caso, el valor Null no es efecto de la env así que bajo este los sitios son libremente intercambiables. Dentro de site, las muestras podría ser permutados, pero debemos de utilizar un cambio cíclico de permutación lugar de la libertad de permutación para preservar las autocorrelaciones. Si los tres puntos en el tiempo son los mismos en todos los sitios es posible que también desea restringir la permutación de modo que la misma permutación se utiliza en todos los sitios, así que conservar las correlaciones entre site.

Si time es una molestia variable que no está interesado en, me gustaría hacer un análisis parcial, acondicionado en time para eliminar y ver el efecto de la env. Para ello, incluya + Condition(time) en el modelo de fórmula.

> mod <- capscale(repdf[, -c(1,11:12)] ~ env + Condition(time), data = repdf)
> mod
Call: capscale(formula = repdf[, -c(1, 11:12)] ~ env +
Condition(time), data = repdf)

              Inertia Proportion Rank
Total         38.1148     1.0000     
Conditional    0.0000     0.0000    1
Constrained   16.5286     0.4337    1
Unconstrained 21.5862     0.5663    9
Inertia is mean squared Euclidean distance 

Eigenvalues for constrained axes:
 CAP1 
16.53 

Eigenvalues for unconstrained axes:
     MDS1      MDS2      MDS3      MDS4      MDS5      MDS6 
8.890e+00 7.312e+00 4.611e+00 4.793e-01 1.560e-01 1.370e-01 
     MDS7      MDS8      MDS9 
7.542e-06 5.719e-06 3.341e-06

A permutar estratos (aquí site), puede utilizar permutar. Mezclar sólo los estratos como bloques de tres muestras, un control adecuado del objeto sería:

ctrl <- with(repdf, permControl(strata = site,
                                within = Within(type = "none"),
                                blocks = Blocks(type = "free")))

Si usted quisiera permutar dentro de site queremos usar este

ctrl <- with(repdf, permControl(strata = site,
                                within = Within(type = "series",
                                                constant = TRUE),
                                blocks = Blocks(type = "free")))

El constant = TRUE fuerzas de la misma al azar cambios cíclicos que se debe aplicar en cada site.

Aún controlando time (acondicionado en análisis parcial) esto sólo elimina un efecto lineal de la time así que podría haber algún resto de autocorrelación en los residuos que se utilizan luego como los datos de respuesta en el modelo de probar el efecto de la env, de ahí la razón para el uso de permutaciones cíclicas aunque controlamos time en el modelo.

Algo a tener en cuenta es que cuando permuting estratos, usted tiene que tener un diseño equilibrado, como aquí, con el mismo número de muestras dentro de cada nivel de strata. El código que genera las permutaciones de objetos de control no aplica ya que está diseñado para ser muy de propósito general. Hay una función permCheck() que existe para comprobar un determinado objeto de control y el equilibrio es una de las comprobaciones realizadas. Cuando nos interfaz de permutar con vegana velaremos por el cumplimiento de equilibrio utilizando permCheck() pero no creo permCheck() funciona correctamente en la versión actual de permutar.

Por supuesto, nosotros (bueno, yo) aún no ha interconectado permutar y vegana, sin embargo, tendrás que hackear el anova() método para generar el permutaciones.


[Disculpas por no responder antes, a pesar de ser alertado por @chlalanne en Twitter - mi respuesta no tiene nada que ver con la concesión de una recompensa, yo tenía un poco de 11 meses de edad que dormía en mi pecho la mayoría de los últimos días que restringían mi escribir ;-)]

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X