Statistische Signifikanz von Entfernungsunterschieden

12

Ich habe über 3000 Vektoren in einem zweidimensionalen Gitter mit einer ungefähr gleichmäßigen diskreten Verteilung. Einige Vektorpaare erfüllen eine bestimmte Bedingung. Hinweis: die Bedingung nur anwendbar ist Paaren von Vektoren, nicht auf einzelne Vektoren. Ich habe eine Liste von ungefähr 1500 solcher Paare, nennen wir es Gruppe 1. Gruppe 2 enthält alle anderen Vektorpaare. Ich möchte herausfinden, ob der Abstand zwischen Vektoren in einem Paar in Gruppe 1 signifikant kleiner ist als der durchschnittliche Abstand zwischen zwei Vektoren. Wie kann ich das machen?

Statistischer Test : Gilt der zentrale Grenzwertsatz für meinen Fall? Das heißt, kann ich anhand von Stichproben Entfernungen den Student-T-Test verwenden, um Stichproben, die die Bedingung erfüllen, mit Stichproben zu vergleichen, die die Bedingung nicht erfüllen? Ansonsten, welcher statistische Test wäre hier angebracht?

Stichprobengröße und Anzahl der Stichproben : Ich verstehe, dass es hier zwei Variablen gibt, für jede der beiden Gruppen muss ich n Stichproben der Größe m und den Durchschnitt jeder der Stichproben nehmen. Gibt es eine prinzipielle Möglichkeit, n und m zu wählen ? Sollten sie so groß wie möglich sein? Oder sollten sie so klein wie möglich sein, solange sie die statistische Signifikanz zeigen? Sollten sie für jede der beiden Gruppen gleich sein? Oder sollten sie für Gruppe 2, die viel mehr Vektorpaare enthält, größer sein?

michau
quelle
1
Normalerweise haben die Leute nicht das Glück, bestimmte Grenzen für ihre Datenpunkte zu haben - oder die Grenzen sind kompliziert. Dies, zusammen mit den Korrelationen zwischen Entfernungen (die durch die Dreieckungleichheit erzeugt werden), verhindert die Entwicklung eines schönen analytischen Ausdrucks für die Stichprobenverteilung der mittleren Entfernungen. Daher schätzen sie typischerweise die Stichprobenverteilungen der mittleren Entfernungen durch erneutes Abtasten aus den Daten.
whuber
@whuber Ich bin mir nicht sicher, ob ich Sie richtig verstehe. Schlagen Sie vor, dass ich n Proben aus jeder der beiden Gruppen nehme und den T-Test verwende, um die Mittelwerte dieser Proben zu vergleichen? Ich habe meine Frage bearbeitet, ich hoffe es ist jetzt klarer.
Michau

Antworten:

14

Die Frage nach "wesentlich" Unterschieden setzt immer ein statistisches Modell für die Daten voraus. Diese Antwort schlägt eines der allgemeinsten Modelle vor, das mit den in der Frage angegebenen Mindestinformationen übereinstimmt. Kurz gesagt, es funktioniert in einer Vielzahl von Fällen, ist jedoch möglicherweise nicht immer die leistungsfähigste Methode, um einen Unterschied zu erkennen.

Drei Aspekte der Daten sind wirklich wichtig: die Form des von den Punkten eingenommenen Raums; die Verteilung der Punkte innerhalb dieses Raumes; und der Graph, der durch die Punktpaare mit der "Bedingung" gebildet wird - die ich die "Behandlungs" -Gruppe nennen werde. Mit "Graph" meine ich das Muster von Punkten und Verbindungen, die durch die Punktpaare in der Behandlungsgruppe impliziert werden. Beispielsweise können zehn Punktpaare ("Kanten") des Diagramms bis zu 20 verschiedene Punkte oder nur fünf Punkte umfassen. Im ersten Fall haben keine zwei Kanten einen gemeinsamen Punkt, während im zweiten Fall Kanten aus allen möglichen Paaren zwischen fünf Punkten bestehen.

Um festzustellen, ob der mittlere Abstand zwischen den Kanten in der Behandlungsgruppe "signifikant" ist, können wir einen zufälligen Prozess betrachten, bei dem alle Punkte zufällig durch eine Permutation σ permutiert werden . Dies durchläuft auch die Kanten: Die Kante ( v i , v j ) wird durch ( v σ ( in=3000σ(vich,vj)(vσ(ich),vσ(j))3000!1021024Permutationen. In diesem Fall sollte der mittlere Abstand mit den mittleren Abständen in diesen Permutationen vergleichbar sein. Wir können die Verteilung dieser zufälligen mittleren Abstände ziemlich leicht abschätzen, indem wir einige tausend dieser Permutationen abtasten.

(Es ist bemerkenswert, dass dieser Ansatz mit nur geringfügigen Änderungen bei jeder Entfernung oder in der Tat bei jeder Menge, die mit jedem möglichen Punktpaar verbunden ist, funktioniert. Er funktioniert auch für jede Zusammenfassung der Entfernungen, nicht nur für den Mittelwert.)


Zur Veranschaulichung sind hier zwei Situationen mit Punkten und 28n=10028100100-13928

10028

Abbildung 1

10000

Die Stichprobenverteilungen unterscheiden sich: Obwohl die mittleren Abstände im Durchschnitt gleich sind, ist die Variation des mittleren Abstands im zweiten Fall aufgrund der grafischen Interdependenzen zwischen den Kanten größer . Dies ist ein Grund, warum keine einfache Version des zentralen Grenzwertsatzes verwendet werden kann: Die Berechnung der Standardabweichung dieser Verteilung ist schwierig.

n=30001500

Figur 2

56

Im Allgemeinen kann der Anteil der mittleren Abstände sowohl von der Simulation als auch von der Behandlungsgruppe, der gleich oder größer als der mittlere Abstand in der Behandlungsgruppe ist, als p-Wert dieses nichtparametrischen Permutationstests verwendet werden.


Dies ist der RCode, der zum Erstellen der Illustrationen verwendet wird.

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
quelle
Danke vielmals! Das habe ich gesucht. Aber würde es Ihnen etwas ausmachen zu klären, wie der p-Wert berechnet werden soll? Ich verstehe die Formulierung "der Anteil der mittleren Abstände von sowohl der Simulation als auch der Behandlungsgruppe, der gleich oder größer als der mittlere Abstand in der Behandlungsgruppe ist" nicht. Sie sprechen von einem Anteil von zwei mittleren Abständen und einer davon ist "mittlere Abstände von der [...] Behandlungsgruppe, die gleich oder größer als der mittlere Abstand in der Behandlungsgruppe sind". Ich bin verwirrt, es klingt wie eine Tautologie. Könnten Sie eine Formel oder einen R-Code schreiben, um es klarer zu machen?
Michau
In jedem Fall stellt sich heraus, dass mein Fall Ihrem zweiten Beispiel ähnelt, dass die mittleren Permutationsabstände bei etwa 22 liegen, die Standardabweichung bei etwa 0,3, und dass der Mittelwert der Behandlungsgruppe bei 12 liegt Unterschied ist statistisch signifikant. Das einzige, womit ich jetzt zu kämpfen habe, ist die Schätzung des p-Wertes. Selbst bei einer relativ großen Stichprobe von Permutationen (10000) befinden sich alle Mittelwerte ausnahmslos in einem relativ engen Intervall, sagen wir [21, 23]. Kann ich damit den p-Wert abschätzen?
Michau
1
OK, ich habe jetzt etwas über Monte-Carlo-Permutationstests gelesen. Nach meinem Verständnis: Wenn der Mittelwert aller 10000 Permutationen, die ich ausprobiert habe, über dem Mittelwert der Behandlungsgruppe liegt, kann ich den Schluss ziehen, dass p <0,0001 ist. Ist es so einfach?
Michau
1
Ja, so einfach ist das! Ich habe am Ende Code hinzugefügt, um einen zweiseitigen p-Wert zu berechnen und anzuzeigen (der wahrscheinlich für Ihre Situation geeignet ist). Verwenden Sie für einen einseitigen p-Wert entweder mean(c(sim, stat) <= stat)oder mean(c(sim, stat) >= stat)nach Bedarf.
Whuber
Groß! Die Situation mit dem einseitigen Test ist jetzt völlig klar, aber ich verstehe den zweiseitigen Test immer noch nicht, insbesondere die Multiplikation mit 2. Wenn mir 10000 Permutationen Mittel im Bereich [21, 23] gaben, nicht Dies bedeutet, dass sowohl 12 als auch 32 außerhalb des 99,99% -Konfidenzintervalls liegen, was p <0,0001 entspricht. Sollte ich nicht einfach mittlere Entfernungen zählen stat, die in beide Richtungen bis zur Mitte der Verteilung reichen ? So etwas wie p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim))).
Michau