Come calcolare la probabilità associata a punteggi Z assurdamente grandi?


14

I pacchetti software per il rilevamento di motivi di rete possono restituire punteggi Z estremamente alti (il più alto che ho visto è 600.000+, ma punteggi Z più di 100 sono abbastanza comuni). Ho intenzione di dimostrare che questi punteggi Z sono falsi.

Enormi punteggi Z corrispondono a probabilità associate estremamente basse. I valori delle probabilità associate sono indicati, ad esempio, nella normale pagina di Wikipedia di distribuzione (e probabilmente in ogni manuale di statistiche) per punteggi Z fino a 6. Quindi ...

Domanda : Come si calcola la funzione di errore 1erf(n/2)per n fino a 1.000.000, diciamo?

Sto particolarmente dopo un pacchetto già implementato per questo (se possibile). Il migliore che ho trovato finora è WolframAlpha, che riesce a calcolarlo per n = 150 ( qui ).


6
Forse questa non è la domanda giusta da porre. Questi punteggi z sono falsi perché presumono che la distribuzione normale sia un'approssimazione o modello molto migliore di quanto non sia in realtà. È un po 'come supporre che la meccanica newtoniana sia buona con 600.000 decimali. Se sei davvero interessato solo a calcolare ERF per valori estremi di n , allora questa domanda appartiene a math.SE, non qui.
whuber

6
Per valori "assurdamente" grandi, non farai meglio dell'uso del limite superiore Pr(Z>z)(z2π)1ez2/2 per virgola mobile a doppia precisione. Quell'approssimazione e altri sono discussi altrove su stats.SE.
cardinale

Grazie cardinale, quel limite sembra essere abbastanza preciso. Perché non fai di questo una risposta?
Douglas S. Stones,

@Douglas: se sei ancora interessato, posso mettere insieme qualcosa nel giorno successivo e pubblicarlo come una risposta più completa.
cardinale

1
Beh ... penso che varrebbe la pena aggiungerlo come risposta. Forse il limite è una conoscenza comune in prob + stats, ma non lo sapevo. Inoltre, Q e A qui non sono esclusivamente per l'OP.
Douglas S. Stones,

Risposte:


19

La domanda riguarda la funzione di errore complementare

erfc(x)=2πxexp(t2)dt

per valori "grandi" di (x=n/2 nella domanda originale), ovvero tra 100 e 700.000 circa. (In pratica, qualsiasi valore maggiore di circa 6 dovrebbe essere considerato "grande", come vedremo.) Si noti che poiché questo verrà utilizzato per calcolare i valori p, c'è poco valore nell'ottenere più di tre cifre (decimali) significative .

Per iniziare, considera l'approssimazione suggerita da @Iterator,

f(x)=11exp(x2(4+ax2π+ax2)),

dove

a=8(π3)3(4π)0.439862.

Anche se questa è un'approssimazione eccellente per la stessa funzione di errore, è un'approssimazione terribile di . Tuttavia, c'è un modo per sistemarlo sistematicamente.erfc

Per i valori p associati a valori così grandi di , siamo interessati all'errore relativo : speriamo che il suo valore assoluto sia inferiore a 0,001 per tre significativi cifre di precisione. Sfortunatamente questa espressione è difficile da studiare per grandi a causa di underflow nel calcolo a doppia precisione. Ecco un tentativo, che traccia l'errore relativo rispetto a per :f ( x ) / erfc ( x ) - 1 x x 0 x 5.8x f(x)/erfc(x)1xx0x5.8

Trama 1

Il calcolo diventa instabile quando supera 5,3 o giù di lì e non può fornire una cifra significativa oltre 5,8. Non è una sorpresa: sta spingendo i limiti dell'aritmetica a doppia precisione. Perché non ci sono prove che l'errore relativo sarà accettabilmente piccolo per più grandeexp ( - 5,8 2 ) 10 - 14,6 xxexp(5.82)1014.6x , dobbiamo fare di meglio.

L'esecuzione del calcolo in aritmetica estesa (con Mathematica ) migliora la nostra immagine di ciò che sta succedendo:

Trama 2

L'errore aumenta rapidamente con e non mostra segni di livellamento. Passatox = 10xx=10 o giù di lì, questa approssimazione non fornisce nemmeno una cifra affidabile di informazioni!

Tuttavia, la trama inizia a sembrare lineare. Potremmo supporre che l'errore relativo sia direttamente proporzionale a . (Ciò ha senso su basi teoriche: è manifestamente una funzione dispari e è manifestamente pari, quindi il loro rapporto dovrebbe essere una funzione dispari. Quindi ci aspetteremmo che l'errore relativo, se aumenta, si comporti come un potere dispari di .) Questo ci porta a studiare l'errore relativo diviso per . Allo stesso modo, scelgo di esaminare , perché la speranza è che questo abbia un valore limite costante. Ecco il suo grafico:erfc f x x x erfc ( x ) / f ( x )xerfcfx xxerfc(x)/f(x)

Trama 3

La nostra ipotesi sembra confermata: questo rapporto sembra avvicinarsi a un limite di circa 8 circa. Alla domanda, Mathematica lo fornirà:

a1 = Limit[x (Erfc[x]/f[x]), x -> \[Infinity]]

Il valore è . Questo ci consente di migliorare il preventivo:a1=2πe3(4+π)28(3+π)7.94325 prendiamo

f1(x)=f(x)a1x

come primo raffinamento dell'approssimazione. Quando è veramente grande - maggiore di qualche migliaio - questa approssimazione va bene. Poiché non sarà ancora abbastanza buono per una serie interessante di argomenti tra e o giù di lì, ripetiamo la procedura. Questa volta, l'errore relativo inverso, in particolare l'espressione dovrebbe comportarsi come per grande (in virtù delle precedenti considerazioni sulla parità) . Di conseguenza, moltiplichiamo per e troviamo il prossimo limite:5.3 2000 1 - erfc ( x ) / f 1 ( x ) 1 / x 2 x x 2x5.320001erfc(x)/f1(x)1/x2xx2

a2 = Limit[x^2 (a1 - x (Erfc[x]/f[x])), x -> \[Infinity]] 

Il valore è

a2=132πe3(4+π)28(3+π)(329(4+π)3π(3+π)2)114.687.

Questo processo può procedere finché lo desideriamo. L'ho fatto un altro passo, trovando

a3 = Limit[x^2 (a2 - x^2 (a1 - x (Erfc[x]/f[x]))), x -> \[Infinity]] 

con un valore di circa 1623,67. (L'espressione completa implica una funzione razionale di grado otto di ed è troppo lunga per essere utile qui.)π

Svolgere queste operazioni produce la nostra approssimazione finale

f3(x)=f(x)(a1a2/x2+a3/x4)/x.

L'errore è proporzionale a . Di importazione è la costante di proporzionalità, quindi tracciamo : x 6 ( 1 - erfc ( x ) / f 3 ( x ) )x6x6(1erfc(x)/f3(x))

Trama 4

Si avvicina rapidamente a un valore limite intorno a 2660,59. Usando l'approssimazione , otteniamo stime di cui accuratezza relativa è migliore di per tutti . Una volta che supera 20 o giù di lì, abbiamo le nostre tre cifre significative (o molto di più, poiché diventa più grande). Come controllo, ecco una tabella che confronta i valori corretti con l'approssimazione per tra e :erfc ( x ) 2661 / x 6 x > 0 x x x 10 20f3erfc(x)2661/x6x>0xxx1020

 x  Erfc    Approximation      
10  2.088*10^-45    2.094*10^-45
11  1.441*10^-54    1.443*10^-54
12  1.356*10^-64    1.357*10^-64
13  1.740*10^-75    1.741*10^-75
14  3.037*10^-87    3.038*10^-87
15  7.213*10^-100   7.215*10^-100
16  2.328*10^-113   2.329*10^-113
17  1.021*10^-127   1.021*10^-127
18  6.082*10^-143   6.083*10^-143
19  4.918*10^-159   4.918*10^-159
20  5.396*10^-176   5.396*10^-176

In effetti, questa approssimazione fornisce almeno due cifre significative di precisione per in poi, che è quasi dove i calcoli pedonali (come la funzione di Excel ) si esauriscono.x=8NormSDist

Infine, ci si potrebbe preoccupare della nostra capacità di calcolare l'approssimazione iniziale . Tuttavia, non è difficile: quandoxfx è abbastanza grande da causare underflow nell'esponenziale, la radice quadrata è ben approssimata della metà dell'esponenziale,

f(x)12exp(x2(4+ax2π+ax2)).

Il calcolo del logaritmo di questo (nella base 10) è semplice e fornisce facilmente il risultato desiderato. Ad esempio, lasciax=1000 . Il logaritmo comune di questa approssimazione è

log10(f(x))(10002(4+a10002π+a10002)log(2))/log(10)434295.63047.

Rendimenti esponenziali

f(1000)2.3416910434296.

Applicazione della correzione (inf3 ) produce

erfc(1000)1.86003 70486 3232810434298.

Si noti che la correzione riduce l'approssimazione originale di oltre il 99% (e in effetti .) (Questa approssimazione differisce dal valore corretto solo nell'ultima cifra. Un'altra approssimazione ben nota, , uguale a , nella sesta cifra significativa. Sono sicuro che potremmo migliorare anche quella, se voluto, usando le stesse tecniche.)a1/x1%exp(x2)/(xπ)1.86003810434298


1
+1 Questa è un'ottima risposta, in qualche modo non ho mai incontrato questo thread prima.
ameba dice di reintegrare Monica

15

Un semplice limite superiore

Per valori molto grandi dell'argomento nel calcolo della probabilità di coda superiore di un normale, esistono limiti eccellenti che sono probabilmente buoni come uno otterrà usando qualsiasi altro metodo con virgola mobile a precisione doppia. Per , supponiamo dove è il pdf normale standard. Ho usato la notazione in riferimento alla notazione standard nell'analisi di sopravvivenza. In contesti ingegneristici, chiamano questa funzione la funzione e la indicano con .z>0

S(z):=P(Z>z)=zφ(z)dz,
φ(z)=(2π)1/2ez2/2S(z)QQ(z)

Quindi, un limite superiore elementare molto semplice è dove la notazione sul lato destro indica che si tratta di una stima con limite superiore. Questa risposta fornisce una prova del limite.

S(z)φ(z)z=:S^u(z),

Ci sono anche molti bei limiti inferiori complementari. Uno dei più utili e facili da derivare è il limite Esistono almeno tre metodi separati per derivare questo limite. Un abbozzo di uno di questi metodi può essere trovato in questa risposta a una domanda correlata.

S(z)zz2+1φ(z)=:S^(z).

Una foto

Di seguito è riportato un grafico dei due limiti (in grigio) insieme alla funzione effettiva .S(z)

Coda superiore del normale e dei limiti

Quanto è buono?

Dalla trama, sembra che i limiti diventino abbastanza stretti anche per moderatamente grande . Potremmo chiederci quanto siano stretti e che tipo di affermazione quantitativa al riguardo possa essere fatta.z

Una utile misura di tenuta è l'errore relativo assoluto Questo ti dà l'errore proporzionale del preventivo.

E(z)=|S^u(z)S(z)S(z)|.

Ora, nota che, poiché tutte le funzioni coinvolte sono non negative, usando le proprietà di delimitazione di e , otteniamo e quindi questo fornisce una prova che per il limite superiore è corretto entro l'1%, per è corretto entro lo 0,1% e per è corretto entro lo 0,01%.S^u(z)S^(z)

E(z)=S^u(z)S(z)S(z)S^u(z)S^(z)S^(z)=z2,
z10z28z100

In effetti, la forma semplice dei limiti fornisce un buon controllo su altre "approssimazioni". Se, nel calcolo numerico di approssimazioni più complicate, otteniamo un valore al di fuori di questi limiti, possiamo semplicemente "correggerlo" per prendere il valore, ad esempio, del limite superiore fornito qui.

Ci sono molti perfezionamenti di questi limiti. I limiti di Laplace menzionati qui forniscono una bella sequenza di limiti superiore e inferiore su della forma doveS(z)R(z)φ(z)R(z) è una funzione razionale.

Infine, ecco un'altra domanda e risposta in qualche modo correlata.


1
Ci scusiamo per tutte le "auto-citazioni". Una volta, diversi anni fa, ho avuto un intenso interesse di due settimane per le domande correlate e ho cercato di imparare il più possibile su questo argomento.
cardinale

+1 Accetto con whuber. Molto bello e apprezzo i collegamenti ad altre risposte.
Iteratore

5

Puoi approssimarlo con funzioni molto più semplici - vedi questa sezione di Wikipedia per maggiori informazioni. L'approssimazione di base è cheerf(x)sgn(x)1exp(x24/π+ax21+ax2)

L'articolo ha un link errato per quella sezione. Il PDF a cui si fa riferimento è disponibile nei file di Sergei Winitzki - o a questo link .


1
Qualche amplificazione di questo sarebbe benvenuta, per due motivi. Innanzitutto, è meglio quando le risposte possono essere isolate. In secondo luogo, quell'articolo scrive ambiguamente sulla qualità dell'approssimazione "in un quartiere di infinito": quanto è preciso "molto preciso"? (Hai implicitamente un buon senso, ma è molto da aspettarsi da tutti i lettori interessati.) Il valore dichiarato di ".00035" è inutile qui.
whuber

Grazie. Non ho notato che c'era il supporto basato su Javascript per l'utilizzo di TeX, il che ha fatto la differenza nel scriverlo.
Iteratore

1
2exp(x2+3(π4)2/(8(π3)))

@whuber, puoi pubblicare il codice Mathematica per quello? :) Non vedo Mathematica da oltre 15 anni e mai per questo tipo di scopo.
Iteratore

L'ho pubblicato in una risposta separata.
whuber
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.