Significato statistico della differenza tra le distanze


12

Ho oltre 3000 vettori su una griglia bidimensionale, con una distribuzione discreta approssimativamente uniforme. Alcune coppie di vettori soddisfano una certa condizione. Nota: la condizione è applicabile solo alle coppie di vettori, non ai singoli vettori. Ho un elenco di circa 1500 coppie del genere, chiamiamolo gruppo 1. Il gruppo 2 contiene tutte le altre coppie vettoriali. Voglio scoprire se la distanza tra i vettori in una coppia nel gruppo 1 è significativamente più piccola della distanza media tra due vettori. Come posso fare ciò?

Test statistico : il teorema del limite centrale è applicabile al mio caso? Cioè, posso prendere mezzi di campioni di distanze e usare il test t di Student per confrontare mezzi di campioni che soddisfano la condizione con mezzi di campioni che non soddisfano la condizione? Altrimenti, quale test statistico sarebbe appropriato qui?

Dimensione del campione e numero di campioni : Capisco che ci sono due variabili qui, per ciascuno dei due gruppi ho bisogno di prendere n campioni della dimensione m e prendere la media di ciascuno dei campioni. Esiste un modo di principio per scegliere n e m ? Dovrebbero essere il più grandi possibile? O dovrebbero essere il meno possibile, purché mostrino il significato statistico? Dovrebbero essere uguali per ciascuno dei due gruppi? O dovrebbero essere più grandi per il gruppo 2, che contiene molte più coppie vettoriali?


1
Normalmente le persone non sono così fortunate da avere confini definiti per i loro punti dati, altrimenti i confini sono complicati. Questo, insieme alle correlazioni tra le distanze (create dalla disuguaglianza del triangolo), preclude lo sviluppo di una piacevole espressione analitica per la distribuzione campionaria delle distanze medie. Pertanto, in genere stimano le distribuzioni campionarie delle distanze medie ricampionando i dati.
whuber

@whuber Non sono sicuro di averti capito correttamente, mi stai suggerendo di prendere n campioni da ciascuno dei due gruppi e usare il test t per confrontare le medie di quei campioni? Ho modificato la mia domanda, spero sia più chiara ora.
Michau,

Risposte:


14

La domanda di "significativamente" sempre diversa, presuppone sempre un modello statistico per i dati. Questa risposta propone uno dei modelli più generali che è coerente con le informazioni minime fornite nella domanda. In breve, funzionerà in una vasta gamma di casi, ma potrebbe non essere sempre il modo più potente per rilevare una differenza.

Tre aspetti dei dati contano davvero: la forma dello spazio occupato dai punti; la distribuzione dei punti all'interno di quello spazio; e il grafico formato dalle coppie di punti aventi la "condizione" - che chiamerò il gruppo "trattamento". Per "grafico" intendo il modello di punti e interconnessioni implicite dalle coppie di punti nel gruppo di trattamento. Ad esempio, dieci coppie di punti ("spigoli") del grafico potrebbero coinvolgere fino a 20 punti distinti o fino a cinque punti. Nel primo caso, due bordi non condividono un punto comune, mentre nel secondo caso i bordi sono costituiti da tutte le possibili coppie tra cinque punti.

Per determinare se la distanza media tra i bordi nel gruppo di trattamento è "significativa", possiamo considerare un processo casuale in cui tutti i punti sono casualmente permutati da una permutazione . Ciò consente anche i bordi: il bordo è sostituito da . L'ipotesi nulla è che il gruppo di trattamento dei bordi si presenti come una di queste permutazioni. In tal caso, la sua distanza media dovrebbe essere paragonabile alle distanze medie che compaiono in quelle permutazioni. Possiamo facilmente stimare la distribuzione di tali distanze medie casuali campionando alcune migliaia di tutte quelle permutazioni.σ ( v i , v j ) ( v σ ( i ) , v σ ( j ) ) 3000 ! 10 21024n=3000σ(vi,vj)(vσ(i),vσ(j))3000!1021024

(È interessante notare che questo approccio funzionerà, con solo lievi modifiche, con qualsiasi distanza o effettivamente qualsiasi quantità associata a ogni possibile coppia di punti. Funzionerà anche per qualsiasi sommario delle distanze, non solo la media.)


Per illustrare, qui ci sono due situazioni che coinvolgono punti e spigoli in un gruppo di trattamento. Nella riga superiore i primi punti in ciascun bordo sono stati scelti casualmente tra i punti e quindi i secondi punti di ciascun bordo sono stati scelti in modo indipendente e casuale tra i punti diversi dal loro primo punto. Tutti insieme punti sono coinvolti in questi bordi.28 100 100 - 1 39 28n=1002810010013928

Nella riga inferiore, otto dei punti sono stati scelti in modo casuale. I bordi sono costituiti da tutte le possibili coppie di essi.2810028

Figura 1

Gli istogrammi a destra mostrano le distribuzioni di campionamento per permutazioni casuali delle configurazioni. Le distanze medie effettive per i dati sono contrassegnate da linee rosse tratteggiate verticali. Entrambi i mezzi sono coerenti con le distribuzioni di campionamento: nessuno dei due si trova a destra o a sinistra.10000

Le distribuzioni di campionamento differiscono: sebbene in media le distanze medie siano le stesse, la variazione della distanza media è maggiore nel secondo caso a causa delle interdipendenze grafiche tra i bordi. Questo è uno dei motivi per cui non è possibile utilizzare una versione semplice del Teorema del limite centrale: è difficile calcolare la deviazione standard di questa distribuzione.

Ecco risultati paragonabili ai dati descritti nella domanda: punti sono distribuiti approssimativamente in modo uniforme all'interno di un quadrato e delle loro coppie fanno parte del gruppo di trattamento. I calcoli sono durati solo pochi secondi, a dimostrazione della loro fattibilità.1500n=30001500

figura 2

Le coppie nella riga superiore sono state scelte di nuovo a caso. Nella riga inferiore, tutti i bordi del gruppo di trattamento utilizzano solo i punti più vicini all'angolo in basso a sinistra. La loro distanza media è molto più piccola della distribuzione di campionamento che può essere considerata statisticamente significativa.56

In generale, la proporzione di distanze medie sia dalla simulazione che dal gruppo di trattamento che è uguale o maggiore della distanza media nel gruppo di trattamento può essere presa come il valore p di questo test di permutazione non parametrico.


Questo è il Rcodice utilizzato per creare le illustrazioni.

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")
}

Molte grazie! Questo è quello che stavo cercando. Ma ti dispiacerebbe chiarire come calcolare il valore p? Non capisco la formulazione "la proporzione di distanze medie sia dalla simulazione che dal gruppo di trattamento che sono uguali o maggiori della distanza media nel gruppo di trattamento". Stai parlando della proporzione di due distanze medie e una di queste è "distanze medie [...] dal gruppo di trattamento che sono uguali o maggiori della distanza media nel gruppo di trattamento". Sono confuso, sembra una tautologia. Potresti scrivere una formula o un codice R per renderlo più chiaro?
Michau,

In ogni caso, risulta che il mio caso è simile al tuo secondo esempio, le distanze medie di permutazioni sono circa 22 con la deviazione standard intorno a 0,3 e la media del gruppo di trattamento è 12. Quindi sembra una chiara indicazione che il la differenza è statisticamente significativa. L'unica cosa con cui sto lottando ora è la stima del valore p. In effetti, anche con un campione abbastanza ampio di permutazioni (10000), tutti i mezzi senza eccezione sono in un intervallo abbastanza stretto, diciamo [21, 23]. È qualcosa che posso usare per stimare il valore p?
Michau,

1
OK, ho letto un po 'dei test di permutazione di Monte Carlo ora. Secondo la mia comprensione: se le medie di tutte le 10000 permutazioni che ho provato sono superiori alla media del gruppo di trattamento, posso concludere che p <0,0001. È così semplice?
Michau,

1
Si, è semplice! Ho aggiunto il codice alla fine per calcolare e visualizzare un valore p a due code (che, probabilmente, è quello appropriato per la tua situazione). Per un valore p a una coda, utilizzare uno mean(c(sim, stat) <= stat)o mean(c(sim, stat) >= stat)come appropriato.
whuber

Grande! La situazione con il test a una coda è perfettamente chiara ora, ma ancora non capisco il test a due code, in particolare la moltiplicazione per 2. Se 10000 permutazioni mi hanno dato mezzi nell'intervallo [21, 23], no significa che sia 12 che 32 sono al di fuori dell'intervallo di confidenza del 99,99%, che corrisponde a p <0,0001? Non dovrei semplicemente contare le distanze medie che sono lontane statdal centro della distribuzione, in entrambe le direzioni? Qualcosa del genere p.value <- mean(abs(c(sim, stat)-mean(sim)) >= abs(stat-mean(sim))).
Michau,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.