Test dei dati generati casualmente rispetto alla sua distribuzione prevista


17

Ho scritto un programma che genera dati casuali. Se il programma funziona correttamente, tali dati dovrebbero seguire una distribuzione di probabilità specifica e nota. Vorrei eseguire il programma, fare alcuni calcoli sul risultato e trovare un valore p.

Prima di chiunque altro lo dica: capisco che il test di ipotesi non può rilevare quando il programma funziona correttamente. Può rilevare solo quando funziona in modo errato in un modo specifico. (E anche allora, il test "dovrebbe" fallire l'X% delle volte, a seconda del livello di significatività scelto ...)

Quindi, sto cercando di capire quali strumenti potrebbero essere appropriati. In particolare:

  • Posso generare tutti i dati casuali che voglio. Tutto quello che devo fare è lasciare il programma in esecuzione abbastanza a lungo. Quindi non sono limitato a nessuna dimensione specifica del campione.

  • Sono interessato a tecniche che producono un valore p. Quindi fissare un grafico e dire "sì, sembra un po 'lineare" non è un'opzione interessante. A meno che non ci sia un modo per mettere un numero duro sulla "traballanza" di un grafico. ;-)

Quello che so finora:

  • Ho visto tre tipi principali di test menzionati che sembrano applicabili: test chi-quadrato [Pearson], test di Kolmogorov-Smirnov e test di Anderson-Darling.

  • Sembra che un test chi-quadrato sia appropriato per distribuzioni discrete , mentre gli altri due sono più appropriati per distribuzioni continue . (?)

  • Varie fonti suggeriscono che il test AD è "migliore" del test KS, ma non riescono a entrare in ulteriori dettagli.

Alla fine, tutti questi test presumibilmente rilevano "modi diversi" di deviare dalla distribuzione nulla specificata. Ma non so ancora quali siano le differenze ... In sintesi, sto cercando una sorta di descrizione generale di dove ogni tipo di test è più applicabile e quali tipi di problemi rileva meglio.


Se hai scritto il suo, è quasi destinato a "fallire" una volta superati i limiti delle tue conoscenze (che hai incorporato nel progetto). Dai un'occhiata a random.org/analysis che elenca alcuni dei metodi di controllo e ovviamente stackoverflow.com/q/2130621/717355 . Filosoficamente, se il programma è deterministico non può essere casuale in ogni caso ;-) È sicuramente un argomento utile da studiare (e non dimenticare le discussioni sulla crittografia delle password).
Philip Oakley,

Risposte:


21

Ecco una descrizione generale di come funzionano i 3 metodi citati.

Il metodo Chi-Squared funziona confrontando il numero di osservazioni in un bin con il numero che ci si aspetta si trovi nel bin in base alla distribuzione. Per le distribuzioni discrete i bin sono di solito le possibilità o le combinazioni discrete di queste. Per le distribuzioni continue è possibile scegliere i punti di taglio per creare i contenitori. Molte funzioni che implementano questo creeranno automaticamente i bin, ma dovresti essere in grado di creare i tuoi bin se vuoi confrontare in aree specifiche. Lo svantaggio di questo metodo è che le differenze tra la distribuzione teorica e i dati empirici che mettono ancora i valori nello stesso cestino non verranno rilevate, un esempio sarebbe arrotondato, se teoricamente i numeri tra 2 e 3 dovrebbero essere sparsi in tutto l'intervallo (prevediamo di vedere valori come 2.34296),

La statistica del test KS è la distanza massima tra le 2 funzioni di distribuzione cumulativa confrontate (spesso una teoria e una empirica). Se le 2 distribuzioni di probabilità hanno solo 1 punto di intersezione, 1 meno la distanza massima è l'area di sovrapposizione tra le 2 distribuzioni di probabilità (questo aiuta alcune persone a visualizzare ciò che viene misurato). Pensa di tracciare sulla stessa trama la funzione di distribuzione teorica e l'EDF, quindi misura la distanza tra le 2 "curve", la differenza più grande è la statistica del test e viene confrontata con la distribuzione dei valori per questo quando il valore nullo è vero. Questo cattura le differenze è la forma della distribuzione o 1 distribuzione spostata o allungata rispetto all'altra.1n

Il test Anderson-Darling usa anche la differenza tra le curve CDF come il test KS, ma invece di usare la differenza massima usa una funzione dell'area totale tra le 2 curve (in realtà piazza le differenze, le pesa in modo che le code abbiano più influenza, quindi si integra nel dominio delle distribuzioni). Questo dà più peso agli outlier rispetto a KS e dà anche più peso se ci sono diverse piccole differenze (rispetto a 1 grande differenza che KS enfatizzerebbe). Questo potrebbe finire per sopraffare il test per trovare differenze che considereresti irrilevanti (arrotondamento lieve, ecc.). Come per il test KS, questo presuppone che non si siano stimati i parametri dai dati.

Ecco un grafico per mostrare le idee generali degli ultimi 2:

inserisci qui la descrizione dell'immagine

basato su questo codice R:

set.seed(1)
tmp <- rnorm(25)
edf <- approxfun( sort(tmp), (0:24)/25, method='constant', 
    yleft=0, yright=1, f=1 )

par(mfrow=c(3,1), mar=c(4,4,0,0)+.1)
curve( edf, from=-3, to=3, n=1000, col='green' )
curve( pnorm, from=-3, to=3, col='blue', add=TRUE)

tmp.x <- seq(-3, 3, length=1000)
ediff <- function(x) pnorm(x) - edf(x)
m.x <- tmp.x[ which.max( abs( ediff(tmp.x) ) ) ]
ediff( m.x )  # KS stat
segments( m.x, edf(m.x), m.x, pnorm(m.x), col='red' )  # KS stat

curve( ediff, from=-3, to=3, n=1000 )
abline(h=0, col='lightgrey')    

ediff2 <- function(x) (pnorm(x) - edf(x))^2/( pnorm(x)*(1-pnorm(x)) )*dnorm(x)
curve( ediff2, from=-3, to=3, n=1000 )
abline(h=0)

Il grafico in alto mostra un EDF di un campione da una normale standard rispetto al CDF della normale standard con una linea che mostra la stat KS. Il grafico centrale mostra quindi la differenza tra le 2 curve (puoi vedere dove si trova la stat KS). Il fondo è quindi la differenza quadrata, ponderata, il test AD si basa sull'area sotto questa curva (supponendo che abbia ottenuto tutto corretto).

Altri test osservano la correlazione in un qqplot, osservano la pendenza nel qqplot, confrontano la media, la var e altre statistiche in base ai momenti.


+1, questa è una buona risposta alla domanda reale (a differenza della mia ...). La descrizione che attraversa la metà del paragrafo 3 richiede solo una figura illustrativa, se ti senti incline a crearne una.
gung - Ripristina Monica

Questa è davvero una bella risposta. Giusto per essere sicuro di capire completamente: il test KS restituisce la deviazione più grande tra il CDF e l'EDF, mentre AD restituisce l'area totale [ponderata] tra le due curve?
MathematicalOrchid

@MathematicalOrchid, per lo più corretto, l'AD quadra la distanza, quindi pesa, quindi si integra, quindi è un po 'diverso dall'area (anche se per capire, pensarlo come un'area è probabilmente ok e molto più semplice).
Greg Snow,

1
Mi aspetto che se la tua distribuzione teorica avesse una massa in punti (salto verticale nel CDF in un dato punto) e la distribuzione effettiva dei tuoi dati avesse una massa in quasi, ma non del tutto, nello stesso posto, allora il test KS potrebbe essere superiore al test AD. Ma quel caso è probabilmente un po 'inventato. Il test KS consente di eseguire test a 1 facciata in cui l'AD è sempre a 2 facciate, quindi sarebbe un'altra differenza (semplicemente non comune).
Greg Snow,

2
Non mi piace la caratterizzazione di @MathematicalOrchid secondo cui la statistica KS dipende solo da "un punto estremo". La posizione di quel "punto" (spesso nel mezzo della distribuzione) in un CDF dipende dai valori degli altri punti nell'insieme e quindi non è così isolato o solitario come quel linguaggio suggerirebbe all'ascoltatore ingenuo.
DWin

12

+1 per scrivere una domanda chiara e dettagliata. Spero che la mia risposta non sia troppo frustrante. Credo che il test delle ipotesi non sia un approccio appropriato nel tuo caso. Il test di significatività dell'ipotesi nulla è una cosa ragionevole da fare quando la risposta potrebbe essere sì o no, ma non sai quale . (Sfortunatamente, in realtà non ti dice quale, ma questo è un problema diverso.) Nel tuo caso, ho capito, vuoi sapere se il tuo algoritmo è buono. Tuttavia, è noto (con certezza) che nessun programma per computer può generare dati realmente casuali da qualsiasi distribuzione di probabilità. Questo è vero in primo luogo, perché tutti i computer sono macchine a stati finiti e quindi possono solo produrre numeri pseudocasuali. Inoltre (mettendo da parte la mancanza di vera casualità), non è possibile che i valori generati seguano perfettamente qualsiasi distribuzione continua. Esistono diversi modi per capirlo, ma forse il più semplice è che ci saranno "spazi vuoti" nella linea numerica, il che non è vero per nessuna variabile casuale continua. Inoltre, questi spazi non sono tutti perfettamente ugualmente ampi o perfettamente equidistanti. Tra gli informatici che lavorano sulla generazione di numeri pseudocasuali, il nome del gioco è quello di migliorare gli algoritmi in modo tale che gli spazi siano più piccoli, più uniformi, con periodi più lunghi (e anche che possano generare più valori più velocemente). Ad ogni modo, questi fatti dimostrano che il test delle ipotesi è l'approccio sbagliato per determinare se il tuo algoritmo sta seguendo correttamente "una specifica distribuzione di probabilità nota", perché non lo è. (Scusa.)

Invece, un framework più appropriato è determinare quanto i tuoi dati siano vicini alla distribuzione teorica. Per questo, consiglierei di riconsiderare i grafici, in particolare i grafici qq e pp-trame1-β precisione nella stima dei parametrir=1

In un'altra nota, per quanto riguarda la valutazione della qualità del tuo algoritmo, potresti voler cronometrarlo rispetto ad altri pRNG standard.

Spero che sia di aiuto.


Non proprio quello che ho chiesto, ma comunque perspicace. Presumo che "non continui" ti riferisca sostanzialmente al fatto che i computer non implementano l'aritmetica a precisione infinita?
MathematicalOrchid

Questa è una grande parte di esso, ma non l'intero problema. Questo è un argomento immensamente complesso.
gung - Ripristina Monica

1
Alcune delle idee del primo paragrafo di @ gung sono implementate nella funzione SnowsPenultimateNormalityTestdel TeachingDemospacchetto per R. Sono d'accordo con l'idea di @ gung di guardare una misura di vicinanza piuttosto che concentrarsi su un valore p. Un problema con l'utilizzo della correlazione nel diagramma qq per questo è che se i tuoi dati hanno la forma corretta, ma diversa media, varianza, ecc. Puoi comunque ottenere una correlazione davvero alta. Un'alternativa consiste nell'utilizzare la statistica KS o la statistica AD come misure di differenza dal teorico.
Greg Snow,

@gung, grazie per la risposta. Potresti per favore approfondire un po 'di più su "aver convertito i tuoi dati in modo appropriato per la stampa e aver calcolato i valori corrispondenti dalla distribuzione teorica in questione, puoi correlarli"? Dopo aver calcolato i dati per la stampa in pp o qq, quale sarebbe il prossimo passo per ottenere il punteggio r che hai citato? È un test ben noto? Potresti per favore fornire un riferimento? Grazie!
Ivan,

1

Non ho letto completamente tutte le risposte ma vedo che sono abbastanza accurate e accurate. Correndo il rischio che sto ripetendo qualcosa di sepolto nelle lunghe risposte, voglio solo dire che v = il test chi quadrato può essere usato per dati continui. Potrebbe non essere il test migliore e come molti test si basa sulla teoria asintotica e quindi potrebbe non essere accurato in piccoli campioni con cellule sparse (questo dipende anche da come si esegue il binning). Anderson-Darling è più potente per testare la normalità rispetto al test KS ma KS può essere migliore per altre distribuzioni continue. Lillefors ha un test progettato per distribuzioni esponenziali.

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.