Signification statistique de la différence entre les distances

12

J'ai plus de 3000 vecteurs sur une grille bidimensionnelle, avec une distribution discrète approximativement uniforme. Certaines paires de vecteurs remplissent une certaine condition. Remarque: la condition n'est applicable qu'aux paires de vecteurs, pas aux vecteurs individuels. J'ai une liste d'environ 1500 de ces paires, appelons-le groupe 1. Le groupe 2 contient toutes les autres paires de vecteurs. Je veux savoir si la distance entre les vecteurs d'une paire du groupe 1 est nettement inférieure à la distance moyenne entre deux vecteurs. Comment puis je faire ça?

Test statistique : le théorème central limite est-il applicable à mon cas? Autrement dit, puis-je prendre des moyennes d'échantillons de distances et utiliser le test t de Student pour comparer des moyennes d'échantillons qui remplissent la condition avec des moyennes d'échantillons qui ne remplissent pas la condition? Sinon, quel test statistique serait approprié ici?

Taille de l'échantillon et nombre d'échantillons : Je comprends qu'il y a deux variables ici, pour chacun des deux groupes, je dois prélever n échantillons de la taille m et prendre la moyenne de chacun des échantillons. Existe-t-il un moyen de choisir n et m selon des principes ? Doivent-ils être aussi grands que possible? Ou devraient-ils être aussi peu que possible, tant qu'ils montrent la signification statistique? Devraient-ils être les mêmes pour chacun des deux groupes? Ou devraient-ils être plus grands pour le groupe 2, qui contient beaucoup plus de paires de vecteurs?

michau
la source
1
Normalement, les gens n'ont pas la chance d'avoir des limites précises pour leurs points de données - sinon les limites sont compliquées. Ceci, avec les corrélations entre les distances (créées par l'inégalité du triangle), empêche de développer une belle expression analytique pour la distribution d'échantillonnage des distances moyennes. Par conséquent, ils estiment généralement les distributions d'échantillonnage des distances moyennes en rééchantillonnant à partir des données.
whuber
@whuber Je ne sais pas si je vous comprends bien, suggérez-vous de prélever n échantillons dans chacun des deux groupes et d'utiliser le test t pour comparer les moyennes de ces échantillons? J'ai édité ma question, j'espère que c'est plus clair maintenant.
michau

Réponses:

14

La question des différences «significatives» toujours suppose toujours un modèle statistique pour les données. Cette réponse propose l'un des modèles les plus généraux qui soit cohérent avec les informations minimales fournies dans la question. En bref, cela fonctionnera dans un large éventail de cas, mais ce n'est peut-être pas toujours le moyen le plus puissant pour détecter une différence.

Trois aspects des données comptent vraiment: la forme de l'espace occupé par les points; la répartition des points dans cet espace; et le graphe formé par les paires de points ayant la "condition" - que j'appellerai le groupe "traitement". Par «graphique», j'entends la configuration des points et des interconnexions impliquée par les paires de points dans le groupe de traitement. Par exemple, dix paires de points ("arêtes") du graphique pourraient impliquer jusqu'à 20 points distincts ou aussi peu que cinq points. Dans le premier cas, deux arêtes ne partagent pas un point commun, tandis que dans le second cas, les arêtes sont constituées de toutes les paires possibles entre cinq points.

Pour déterminer si la distance moyenne entre les bords du groupe de traitement est «significative», nous pouvons considérer un processus aléatoire dans lequel tous les points sont permutés au hasard par une permutation . Cela permute également les arêtes: l'arête est remplacée par . L'hypothèse nulle est que le groupe de traitement des bords apparaît comme l'une de ces permutations. Dans l'affirmative, sa distance moyenne devrait être comparable aux distances moyennes figurant dans ces permutations. Nous pouvons assez facilement estimer la distribution de ces distances moyennes aléatoires en échantillonnant quelques milliers de toutes ces permutations.σ ( v i , v j ) ( v σ ( i ) , v σ ( j ) ) 3000 ! 10 21024n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024

(Il est à noter que cette approche fonctionnera, avec seulement des modifications mineures, avec n'importe quelle distance ou même n'importe quelle quantité associée à chaque paire de points possible. Elle fonctionnera également pour tout résumé des distances, pas seulement la moyenne.)


Pour illustrer, voici deux situations impliquant points et bords dans un groupe de traitement. Dans la rangée supérieure, les premiers points de chaque bord ont été choisis au hasard parmi les points, puis les deuxièmes points de chaque bord ont été choisis indépendamment et au hasard parmi les points différents de leur premier point. Au total, points sont impliqués dans ces arêtes.28 100 100 - 1 39 28n=1002810010013928

Dans la rangée du bas, huit des points ont été choisis au hasard. Les bords se composent de toutes les paires possibles d'entre eux.2810028

Figure 1

Les histogrammes à droite montrent les distributions d'échantillonnage pour permutations aléatoires des configurations. Les distances moyennes réelles des données sont marquées par des lignes rouges verticales en pointillés. Les deux moyennes sont cohérentes avec les distributions d'échantillonnage: aucune ne se situe loin à droite ou à gauche.10000

Les distributions d'échantillonnage diffèrent: bien qu'en moyenne les distances moyennes soient les mêmes, la variation de la distance moyenne est plus importante dans le second cas en raison des interdépendances graphiques entre les bords. C'est une des raisons pour lesquelles aucune version simple du théorème central limite ne peut être utilisée: le calcul de l'écart type de cette distribution est difficile.

Voici des résultats comparables aux données décrites dans la question: points sont répartis approximativement uniformément dans un carré et de leurs paires sont dans le groupe de traitement. Les calculs n'ont pris que quelques secondes, démontrant leur praticabilité.1500n=30001500

Figure 2

Les paires de la rangée du haut ont de nouveau été choisies au hasard. Dans la rangée du bas, tous les bords du groupe de traitement n'utilisent que les points les plus proches du coin inférieur gauche. Leur distance moyenne est tellement inférieure à la distribution d'échantillonnage que cela peut être considéré comme statistiquement significatif.56

En général, la proportion des distances moyennes à la fois la simulation et le groupe de traitement qui sont égales ou supérieures à la distance moyenne du groupe de traitement peut être considéré comme la p-valeur de ce test de permutation non paramétrique.


Il s'agit du Rcode utilisé pour créer les illustrations.

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
la source
Merci beaucoup! Voilà ce que je cherchais. Mais voudriez-vous clarifier comment la valeur de p devrait être calculée? Je ne comprends pas la formulation "la proportion de distances moyennes à la fois de la simulation et du groupe de traitement qui sont égales ou supérieures à la distance moyenne dans le groupe de traitement". Vous parlez de la proportion de deux distances moyennes et l'une d'elles est «les distances moyennes par rapport au [...] groupe de traitement qui sont égales ou supérieures à la distance moyenne du groupe de traitement». Je suis confus, cela ressemble à une tautologie. Pourriez-vous écrire une formule ou un code R pour le rendre plus clair?
michau
Dans tous les cas, il s'avère que mon cas est similaire à votre deuxième exemple, les distances moyennes de permutations sont d'environ 22 avec l'écart-type autour de 0,3, et la moyenne du groupe de traitement est de 12. Il semble donc que la la différence est statistiquement significative. La seule chose avec laquelle je me bats maintenant est l'estimation de la valeur de p. En fait, même avec un échantillon de permutations assez important (10000), tous les moyens sans exception sont dans un intervalle assez étroit, disons [21, 23]. Est-ce quelque chose que je peux utiliser pour estimer la valeur de p?
michau
1
OK, j'ai lu un peu sur les tests de permutation de Monte Carlo maintenant. Selon ma compréhension: si la moyenne de toutes les 10000 permutations que j'ai essayées est supérieure à la moyenne du groupe de traitement, je peux conclure que p <0,0001. C'est aussi simple que ça?
michau
1
Oui, il est aussi simple que cela! J'ai ajouté du code à la fin pour calculer et afficher une valeur p bilatérale (qui, sans doute, est celle qui convient à votre situation). Pour une valeur p unilatérale, utilisez soit mean(c(sim, stat) <= stat)ou mean(c(sim, stat) >= stat)selon le cas.
whuber
Génial! La situation avec le test unilatéral est parfaitement claire maintenant, mais je ne comprends toujours pas le test bilatéral, en particulier la multiplication par 2. Si 10000 permutations me donnaient des moyens dans la gamme [21, 23], ne le fait pas cela signifie que 12 et 32 ​​sont en dehors de l'intervalle de confiance de 99,99%, ce qui correspond à p <0,0001? Ne devrais-je pas simplement compter des distances moyennes qui sont aussi loin que statle milieu de la distribution, dans les deux sens? Quelque chose comme p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim))).
michau