5 votos

Cómo evaluar la correlación cuando cada variable se mide por repeticiones independientes?

Yo con frecuencia medir varias variables, en múltiples repeticiones, en muchos sitios. Por ejemplo, yo podría medir la abundancia bacteriana bacteriana y tasas de crecimiento, cada uno en 3 repeticiones, en muchos sitios. Cada repetición es independiente muestreados y a cada variable se midió en una muestra diferente (es decir, yo no puedo medir la abundancia bacteriana y la tasa de crecimiento en la misma muestra).

Me gustaría probar la correlación entre esas variables. El problema es que, dado que las variables se miden de forma independiente, las variables no están emparejados. Replicar 1 de Una variable no está relacionada con replicar la 1 de la variable B, más de lo que es para replicar 2 de la variable B.

Me podría poner a prueba la correlación entre el promedio de repeticiones en cada sitio, pero que parece contundente, ya que se pierde información acerca de la variación entre repeticiones para cada parámetro. Puedo imaginar algún tipo de remuestreo enfoque, donde puedo seleccionar aleatoriamente una repetición para cada variable en cada sitio. Hay una manera mejor?

1voto

Anthony Cramp Puntos 126

Por tu descripción creo que la única manera viable de ir es lo que usted no quiere hacer: Utilice el cubo como el nivel de análisis. Es decir, agregar las 3 mediciones dentro de cada segmento y su maridaje. Con este enfoque se debe eficazmente aggegate el error de medición.

He hecho una simulación y comparación de este método con un segundo enfoque en el que he utilizado todos los posibles emparejamientos por el cubo para la estimación de la correlación. Los resultados muestran, el método de agregación es mejor en la recuperación de la original de correlación:

# I use R and the mvtnorm library to generate the data
library(mvtnorm)

set.seed(12345) # make reproducible

nbuckets <- 50  #number of buckets
r.buckets <- 0.5  # correlation across buckets

# generate data
Cor <- array(c(1, r.buckets, r.buckets, 1), dim=c(2,2))
d.bucket <- rmvnorm(nbuckets, sigma = Cor)
measurement.error = 0.5 # size of eror in relation to sd of the data
data <- vector("list", nbuckets)

for (bucket in seq_len(nbuckets)) {
    data[[bucket]] <- list(x = rep(d.bucket[bucket, 1], 3) + rnorm(3, measurement.error), y = rep(d.bucket[bucket, 2], 3) + rnorm(3, sd = measurement.error))
}
# Note that there are separate error terms for the two types of measurements 

# aggregating per bucket:
data.agg <- lapply(data, function(x) data.frame(x = mean(x[[1]]), y = mean(x[[2]])))
data.agg <- do.call("rbind", data.agg)
cor(data.agg$x, data.agg$y) # should give .408

# using all pairs:
all.pairs <- lapply(data, function(x) data.frame(x = x[[1]], y = x[[2]][c(1:3,3:1,2,1,3,2,3,1,1,3,2,3,1,2)]))
all.pairs <- do.call("rbind", all.pairs)
cor(all.pairs$x, all.pairs$y) # should give .321

Si permiten incluso más grande error de medición (a pesar de que ya es grande) la diferencia se mantiene. Si usted permite que un solo término de error dentro de cada segmento, los resultados serán mucho más cercana al valor real de la r y la diferencia entre los métodos de disminución. Sin embargo, la agregación sigue siendo la mejor táctica.

Te recomiendo jugar con ella un poco más realista de los valores. Usted puede incluso aplicar un enfoque bootstrap como era su pensamiento inicial.

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