Significación estadística de la diferencia entre distancias

12

Tengo más de 3000 vectores en una cuadrícula bidimensional, con una distribución discreta aproximadamente uniforme. Algunos pares de vectores cumplen una cierta condición. Nota: la condición solo es aplicable a pares de vectores, no a vectores individuales. Tengo una lista de aproximadamente 1500 pares de este tipo, llamémosle grupo 1. El grupo 2 contiene todos los demás pares de vectores. Quiero saber si la distancia entre vectores en un par en el grupo 1 es significativamente menor que la distancia promedio entre dos vectores. ¿Cómo puedo hacer eso?

Prueba estadística : ¿es aplicable el teorema del límite central a mi caso? Es decir, ¿puedo tomar medias de muestras de distancias y usar la prueba t de Student para comparar medias de muestras que cumplen la condición con medias de muestras que no cumplen la condición? De lo contrario, ¿qué prueba estadística sería apropiada aquí?

Tamaño de la muestra y número de muestras : entiendo que hay dos variables aquí, para cada uno de los dos grupos necesito tomar n muestras del tamaño my tomar el promedio de cada una de las muestras. ¿Hay alguna forma de principios para elegir n y m ? ¿Deberían ser lo más grandes posible? ¿O deberían ser lo menos posible, siempre que muestren la significación estadística? ¿Deberían ser iguales para cada uno de los dos grupos? ¿O deberían ser más grandes para el grupo 2, que contiene muchos más pares de vectores?

michau
fuente
1
Normalmente, las personas no tienen la suerte de tener límites definidos para sus puntos de datos, o de lo contrario los límites son complicados. Esto, junto con las correlaciones entre distancias (creadas por la desigualdad del triángulo), impide desarrollar una buena expresión analítica para la distribución muestral de distancias medias. Por lo tanto, típicamente estiman las distribuciones de muestreo de distancias medias mediante un nuevo muestreo de los datos.
whuber
@whuber No estoy seguro si te entiendo correctamente, ¿sugieres que tome n muestras de cada uno de los dos grupos y use la prueba t para comparar las medias de esas muestras? Edité mi pregunta, espero que sea más clara ahora.
michau

Respuestas:

14

La cuestión de "significativamente" diferente siempre, siempre presupone un modelo estadístico para los datos. Esta respuesta propone uno de los modelos más generales que es consistente con la mínima información proporcionada en la pregunta. En resumen, funcionará en una amplia gama de casos, pero puede que no siempre sea la forma más poderosa de detectar una diferencia.

Tres aspectos de los datos realmente importan: la forma del espacio ocupado por los puntos; la distribución de los puntos dentro de ese espacio; y el gráfico formado por los pares de puntos que tienen la "condición", que llamaré el grupo "tratamiento". Por "gráfico" me refiero al patrón de puntos e interconexiones implicados por los pares de puntos en el grupo de tratamiento. Por ejemplo, diez pares de puntos ("bordes") de la gráfica podrían involucrar hasta 20 puntos distintos o tan solo cinco puntos. En el primer caso, no hay dos aristas que compartan un punto común, mientras que en el último caso las aristas consisten en todos los pares posibles entre cinco puntos.

Para determinar si la distancia media entre los bordes en el grupo de tratamiento es "significativa", podemos considerar un proceso aleatorio en el que todos los puntos son permutados aleatoriamente por una permutación . Esto también permuta los bordes: el borde se reemplaza por . La hipótesis nula es que el grupo de tratamiento de aristas surge como una de estas permutaciones. Si es así, su distancia media debería ser comparable a las distancias medias que aparecen en esas permutaciones. Podemos estimar con bastante facilidad la distribución de esas distancias medias aleatorias mediante el muestreo de algunos miles de todas esas permutaciones.σ ( v i , v j ) ( v σ ( i ) , v σ ( j ) ) 3000 ! 10 21,024n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024

(Es de destacar que este enfoque funcionará, con solo modificaciones menores, con cualquier distancia o, de hecho, cualquier cantidad asociada con cada par de puntos posible. También funcionará para cualquier resumen de las distancias, no solo la media).


Para ilustrar, aquí hay dos situaciones que involucran puntos y aristas en un grupo de tratamiento. En la fila superior, los primeros puntos en cada borde se eligieron aleatoriamente entre los puntos y luego los segundos puntos de cada borde se eligieron de forma independiente y aleatoria entre los puntos diferentes de su primer punto. En total, puntos están involucrados en estos bordes.28 100 100 - 1 39 28n=1002810010013928

En la fila inferior, ocho de los puntos fueron elegidos al azar. Los bordes consisten en todos los pares posibles de ellos.2810028

Figura 1

Los histogramas a la derecha muestran las distribuciones de muestreo para permutaciones aleatorias de las configuraciones. Las distancias medias reales para los datos están marcadas con líneas rojas discontinuas verticales. Ambos medios son consistentes con las distribuciones de muestreo: ninguno se encuentra muy a la derecha o a la izquierda.10000

Las distribuciones de muestreo difieren: aunque en promedio las distancias medias son las mismas, la variación en la distancia media es mayor en el segundo caso debido a las interdependencias gráficas entre los bordes. Esta es una razón por la que no se puede utilizar una versión simple del Teorema del límite central: calcular la desviación estándar de esta distribución es difícil.

Aquí hay resultados comparables a los datos descritos en la pregunta: puntos están distribuidos aproximadamente de manera uniforme dentro de un cuadrado y de sus pares están en el grupo de tratamiento. Los cálculos tomaron solo unos segundos, lo que demuestra su viabilidad.1500n=30001500

Figura 2

Los pares en la fila superior nuevamente fueron elegidos al azar. En la fila inferior, todos los bordes en el grupo de tratamiento usan solo los puntos más cercanos a la esquina inferior izquierda. Su distancia media es mucho menor que la distribución de muestreo que se puede considerar estadísticamente significativa.56

En general, la proporción de distancias medias tanto de la simulación como del grupo de tratamiento que son iguales o mayores que la distancia media en el grupo de tratamiento puede tomarse como el valor p de esta prueba de permutación no paramétrica.


Este es el Rcódigo utilizado para crear las ilustraciones.

n.vectors <- 3000
n.condition <- 1500
d <- 2              # Dimension of the space
n.sim <- 1e4        # Number of iterations
set.seed(17)
par(mfrow=c(2, 2))
#
# Construct a dataset like the actual one.
#
# `m` indexes the pairs of vectors with a "condition."
# `x` contains the coordinates of all vectors.
x <- matrix(runif(d*n.vectors), nrow=d)
x <- x[, order(x[1, ]+x[2, ])]
#
# Create two kinds of conditions and analyze each.
#
for (independent in c(TRUE, FALSE)) {
  if (independent) {
    i <- sample.int(n.vectors, n.condition)
    j <- sample.int(n.vectors-1, n.condition)
    j <- (i + j - 1) %% n.condition + 1
    m <- cbind(i,j)
  } else {
    u <- floor(sqrt(2*n.condition))
    v <- ceiling(2*n.condition/u)
    m <- as.matrix(expand.grid(1:u, 1:v))
    m <- m[m[,1] < m[,2], ]
  }
  #
  # Plot the configuration.
  #
  plot(t(x), pch=19, cex=0.5, col="Gray", asp=1, bty="n",
       main="The Data", xlab="X", ylab="Y",
       sub=paste(length(unique(as.vector(m))), "points"))
  invisible(apply(m, 1, function(i) lines(t(x[, i]), col="#80000040")))
  points(t(x[, unique(as.vector(m))]), pch=16, col="Red", cex=0.6)
  #
  # Precompute all distances between all points.
  #
  distances <- sapply(1:n.vectors, function(i) sqrt(colSums((x-x[,i])^2)))
  #
  # Compute the mean distance in any set of pairs.
  #
  mean.distance <- function(m, distances)
    mean(distances[m])
  #
  # Sample from the points using the same *pattern* in the "condition."
  # `m` is a two-column array pairing indexes between 1 and `n` inclusive.
  sample.graph <- function(m, n) {
    n.permuted <- sample.int(n, n)
    cbind(n.permuted[m[,1]], n.permuted[m[,2]])
  }
  #
  # Simulate the sampling distribution of mean distances for randomly chosen
  # subsets of a specified size.
  #
  system.time(
    sim <- replicate(n.sim, mean.distance(sample.graph(m, n.vectors), distances))
  stat <- mean.distance(m, distances)
  p.value <- 2 * min(mean(c(sim, stat) <= stat), mean(c(sim, stat) >= stat))

  hist(sim, freq=FALSE, 
       sub=paste("p-value:", signif(p.value, ceiling(log10(length(sim))/2)+1)),
       main="Histogram of mean distances", xlab="Distance")
  abline(v = stat, lwd=2, lty=3, col="Red")
}
whuber
fuente
¡Muchas gracias! Eso es lo que estaba buscando. ¿Pero le importaría aclarar cómo debe calcularse el valor p? No entiendo la formulación "la proporción de distancias medias tanto de la simulación como del grupo de tratamiento que son iguales o mayores que la distancia media en el grupo de tratamiento". Está hablando de la proporción de dos distancias medias y una de ellas es "distancias medias [...] del grupo de tratamiento que son iguales o mayores a la distancia media en el grupo de tratamiento". Estoy confundido, suena como una tautología. ¿Podría escribir una fórmula o código R para aclararlo?
michau
En cualquier caso, resulta que mi caso es similar a su segundo ejemplo, las distancias medias de permutaciones son alrededor de 22 con la desviación estándar alrededor de 0.3, y la media del grupo de tratamiento es 12. Por lo tanto, parece una clara indicación de que el La diferencia es estadísticamente significativa. Lo único con lo que estoy luchando ahora es la estimación del valor p. De hecho, incluso con una muestra bastante grande de permutaciones (10000), todos los medios sin excepción están en un intervalo bastante estrecho, digamos [21, 23]. ¿Es esto algo que puedo usar para estimar el valor p?
michau
1
Bien, he leído un poco sobre las pruebas de permutación de Monte Carlo ahora. Según tengo entendido: si las medias de todas las 10000 permutaciones que he probado son más altas que la media del grupo de tratamiento, puedo concluir que p <0,0001. ¿Es tan simple como eso?
michau
1
¡Sí, es así de simple! Agregué código al final para calcular y mostrar un valor p de dos colas (que, posiblemente, es el apropiado para su situación). Para un valor p de una cola, use uno mean(c(sim, stat) <= stat)o mean(c(sim, stat) >= stat)según corresponda.
whuber
¡Excelente! La situación con la prueba de una cola es perfectamente clara ahora, pero todavía no entiendo la prueba de dos colas, particularmente la multiplicación por 2. Si 10000 permutaciones me dieron medias en el rango [21, 23], no significa que tanto 12 como 32 están fuera del intervalo de confianza del 99.99%, que corresponde a p <0.0001? ¿No debería simplemente contar las distancias medias que están tan lejos como statdesde el centro de la distribución, en cualquier dirección? Algo así como p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim))).
michau