Test non parametrico se due campioni vengono estratti dalla stessa distribuzione


19

Vorrei testare l'ipotesi che due campioni siano prelevati dalla stessa popolazione, senza fare ipotesi sulla distribuzione dei campioni o della popolazione. Come dovrei farlo?

Da Wikipedia la mia impressione è che il test di Mann Whitney U dovrebbe essere adatto, ma in pratica non sembra funzionare per me.

Per concretezza ho creato un set di dati con due campioni (a, b) che sono grandi (n = 10000) e disegnati da due popolazioni non normali (bimodali), simili (stessa media), ma diversi (deviazione standard intorno alle "gobbe".) Sto cercando un test che riconoscerà che questi campioni non appartengono alla stessa popolazione.

Vista istogramma:

campioni bimodali

Codice R:

a <- tibble(group = "a",
            n = c(rnorm(1e4, mean=50, sd=10),
                  rnorm(1e4, mean=100, sd=10)))
b <- tibble(group = "b",
            n = c(rnorm(1e4, mean=50, sd=3),
                  rnorm(1e4, mean=100, sd=3)))
ggplot(rbind(a,b), aes(x=n, fill=group)) +
  geom_histogram(position='dodge', bins=100)

Qui il test di Mann Whitney sorprendentemente (?) Non riesce a respingere l'ipotesi nulla che i campioni provengano dalla stessa popolazione:

> wilcox.test(n ~ group, rbind(a,b))

        Wilcoxon rank sum test with continuity correction

data:  n by group
W = 199990000, p-value = 0.9932
alternative hypothesis: true location shift is not equal to 0

Aiuto! Come devo aggiornare il codice per rilevare le diverse distribuzioni? (Vorrei in particolare un metodo basato sulla randomizzazione / ricampionamento generico se disponibile.)

MODIFICARE:

Grazie a tutti per le risposte! Sto eccitando di saperne di più sul Kolmogorov – Smirnov che sembra molto adatto ai miei scopi.

Comprendo che il test KS sta confrontando questi ECDF dei due campioni:

ECDFs

Qui posso vedere visivamente tre caratteristiche interessanti. (1) I campioni provengono da diverse distribuzioni. (2) A è chiaramente sopra B in determinati punti. (3) A è chiaramente inferiore a B in alcuni altri punti.

Il test KS sembra essere in grado di verificare l'ipotesi di ciascuna di queste caratteristiche:

> ks.test(a$n, b$n)

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D = 0.1364, p-value < 2.2e-16
alternative hypothesis: two-sided

> ks.test(a$n, b$n, alternative="greater")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^+ = 0.1364, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies above that of y

> ks.test(a$n, b$n, alternative="less")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^- = 0.1322, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies below that of y

È davvero pulito! Ho un interesse pratico per ognuna di queste funzionalità ed è quindi grandioso che il test KS sia in grado di controllarle.


Non sorprende che MW non respinga. Per un test unilaterale verifica se Pr (a> b) <0,05, dove aeb sono membri scelti casualmente delle popolazioni.
mdewey,

1
A volte si dice che l'ipotesi di Mann-Whitney riguardi la "posizione" dei due gruppi, o qualcosa lungo le linee della sistematica differenza stocastica. Nel caso dei tuoi dati, entrambi i gruppi sono distribuiti simmetricamente attorno a 75, quindi MW non dovrebbe assolutamente trovare alcuna differenza.
Sal Mangiafico,

4
Questo è un buon esempio della confusione che seminiamo quando non siamo chiari sull'ipotesi di un test. Sfortunatamente, alle persone viene insegnato a usare un test t per confrontare due gruppi, senza pensare davvero che questo test confronta due mezzi , mentre c'è un test mediano per confrontare due mediane , Mann-Whitney che confronta qualcos'altro, regressione quantile per confrontare altri percentili , test per confrontare le varianze, Kolmogorov-Smirnov per confrontare le distribuzioni e così via ... A volte diciamo solo che vogliamo confrontare due "popolazioni" senza essere chiari su quale ipotesi vogliamo veramente testare.
Sal Mangiafico,

Riflettendoci sembra che la pagina di Wikipedia per il test di MW affermi chiaramente l'ipotesi ed è stato un malinteso (salto infondato) da parte mia pensare che questa ipotesi implichi anche che i campioni provengono dalla stessa distribuzione. In effetti, il problema diventa evidente quando si confrontano due diverse distribuzioni simmetriche attorno allo stesso punto centrale.
Luke Gorrie,

Risposte:


17

Il test di Kolmogorov-Smirnov è il modo più comune per farlo, ma ci sono anche alcune altre opzioni.

I test si basano sulle funzioni di distribuzione cumulativa empirica. La procedura di base è:

  • Scegli un modo per misurare la distanza tra gli ECDF. Poiché gli ECDF sono funzioni, i candidati ovvi sono le norme , che misurano la distanza negli spazi delle funzioni. Questa distanza è la nostra statistica di prova .Lp
  • Capire la distribuzione della statistica test sotto l'ipotesi nulla che i campioni provengano dalla stessa distribuzione (per fortuna le persone lo hanno già fatto per le distanze più comuni!)
  • Scegli una soglia, , per la tua ipotesi e rifiuta il valore nullo se la statistica test calcolata si trova nelle code della distribuzione dal punto 2.α %αα%

Per il test di Kolmogorov-Smirnov, la statistica del test è la distanza massima tra i due CDF empirici (o se si desidera essere più tecnici la norma ). Questo è super facile da implementare in R:L

ks.test(a,b)

Se il valore è inferiore alla soglia scelta, rifiutiamo l'ipotesi nulla che i campioni siano estratti dalla stessa distribuzione.p

Un'altra opzione è il test Cramer-von Mises, che utilizza la norma quadrata come statistica del test ed è implementato nel pacchetto come . Il test CVM è "migliore", nel senso che la metrica della distanza tiene conto di tutti e due i ECDF, piuttosto che individuare solo la distanza maggiore.L2dgofcvm.test()

MODIFICARE:

Supponiamo di avere campioni delle dimensioni e , a cui vogliamo applicare il nostro test di ipotesi.mnm

Per trasformarlo in una procedura di tipo campionamento, possiamo fare quanto segue:

  1. Genera campioni di dimensioni e da distribuzioni identiche. Per il test KS (notevolmente, IMO) non importa nemmeno se la distribuzione cambia ad ogni iterazione fintanto che e rimangono invariati.m n mnmnm
  2. Calcola la metrica della distanza per i campioni. Per il test KS, questo è solo il massimo. differenza tra i CDF empirici.
  3. Archivia il risultato e torna al passaggio 1.

Alla fine costruirai molti campioni dalla distribuzione della statistica del test sotto l'ipotesi nulla, di cui puoi usare i quantili per condurre il tuo test di ipotesi a qualunque livello di significatività desideri. Per la statistica del test KS, questa distribuzione è chiamata distribuzione di Kolmogorov.

Si noti che per il test KS, questo è solo uno spreco di sforzo computazionale perché i quantili sono caratterizzati in modo molto semplice teoricamente, ma la procedura è generalmente applicabile a qualsiasi test di ipotesi.


Grazie! Il test di Kolmogorov-Smirnov respinge effettivamente l'ipotesi nulla che questi campioni provengano dalla stessa popolazione. E intuitivamente ha senso confrontare gli ECDF perché è più o meno quello che sto facendo visivamente con l'istogramma. Domanda: supponiamo che dovessi implementare questo test da zero senza strumenti come R. Esiste un metodo semplice che sarebbe sufficiente? (Forse basato sul bootstrap?) Chiedo perché il mio background è la programmazione del computer e trovo i metodi basati sulla simulazione molto più facili da capire davvero.
Luke Gorrie,

Dovresti esaminare la randomizzazione o le permutazioni. Preferisco questi per test non normali. Soddisfano anche i tuoi criteri di simulazione piuttosto che di statistica
RTbecard

2
@JamesAdamCampbell potresti approfondirlo un po 'con una risposta diversa?
Sarà il

1
@LukeGorrie, come implementare il test Kolmogorov-Smirnov è una domanda separata, che potrebbe essere meglio pubblicata altrove (ad es. Su Stack Overflow). La ricetta di base è: (a) capire come funziona il test, (b) implementarlo. In questo caso sembra particolarmente semplice: 1. calcolare gli ECDF (facile, semplicemente prendendo somme di prefisso), 2. calcolare la norma (facile, semplicemente prendendo la differenza massima). Sembra piuttosto semplice. L
DW,

1
Non vedo alcun problema con quello. Sarei interessato a vedere i risultati se provi alcune di queste cose! Sarebbe bello vedere se l'approccio CI e il test KS diretto ti danno sempre la stessa risposta. Sospetto che lo facciano :)
Will
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.