Softwarepakete zur Erkennung von Netzwerkmotiven können enorm hohe Z-Scores liefern (der höchste Wert, den ich gesehen habe, ist 600.000+, aber Z-Scores von mehr als 100 sind durchaus üblich). Ich habe vor zu zeigen, dass diese Z-Scores falsch sind.
Riesige Z-Scores entsprechen extrem niedrigen zugehörigen Wahrscheinlichkeiten. Die Werte der zugehörigen Wahrscheinlichkeiten sind zB auf der Normalverteilungs-Wikipedia-Seite (und wahrscheinlich in jedem Statistik-Lehrbuch) für Z-Scores von bis zu 6 angegeben. Also ...
Frage : Wie berechnet man die Fehlerfunktion Sagen wir für n bis zu 1.000.000?
Ich bin besonders nach einem bereits implementierten Paket dafür (wenn möglich). Das beste, das ich bisher gefunden habe, ist WolframAlpha, das es schafft, es für n = 150 ( hier ) zu berechnen .
quelle
Antworten:
Die Frage betrifft die komplementäre Fehlerfunktion
für "große" Werte vonx ( =n/2–√ in der ursprünglichen Frage) - dh zwischen 100 und 700.000 oder so. (In der Praxis sollte jeder Wert größer als ungefähr 6 als "groß" betrachtet werden, wie wir sehen werden.) Da dies zur Berechnung von p-Werten verwendet wird, ist es wenig sinnvoll, mehr als drei signifikante (Dezimal-) Stellen zu erhalten .
Betrachten Sie zunächst die von @Iterator vorgeschlagene Annäherung.
wo
Obwohl dies eine ausgezeichnete Annäherung an die Fehlerfunktion selbst ist, ist es eine schreckliche Annäherung an . Es gibt jedoch eine Möglichkeit, dies systematisch zu beheben.erfc
Für die p-Werte, die mit so großen Werten von assoziiert sind, interessieren wir uns für den relativen Fehler f ( x ) / erfc ( x ) - 1 : Wir hoffen, dass sein absoluter Wert für drei signifikante Stellen der Genauigkeit kleiner als 0,001 ist. Leider ist dieser Ausdruck aufgrund von Unterläufen bei der Berechnung mit doppelter Genauigkeit für große x schwer zu untersuchen . Hier ist ein Versuch, der den relativen Fehler gegen x für 0 ≤ x ≤ 5,8 darstellt :x f(x)/erfc(x)−1 x x 0≤x≤5.8
Die Berechnung wird instabil, sobald 5,3 oder mehr überschreitet, und kann keine signifikante Ziffer mehr nach 5,8 liefern. Dies ist keine Überraschung: exp ( - 5.8 2 ) ≈ 10 - 14.6 stößt an die Grenzen der Arithmetik mit doppelter Genauigkeit. Da es keinen Beweis dafür gibt, dass der relative Fehler für ein größeres x akzeptabel klein sein wird , müssen wir es besser machen.x exp(−5.82)≈10−14.6 x
Das Durchführen der Berechnung in erweiterter Arithmetik (mit Mathematica ) verbessert unser Bild von dem, was vor sich geht:
Der Fehler steigt mit rapide an und zeigt keine Anzeichen einer Nivellierung. Nach x = 10 liefert diese Näherung nicht einmal eine zuverlässige Ziffer an Informationen!x x=10
Die Darstellung beginnt jedoch linear zu wirken. Wir könnten vermuten, dass der relative Fehler direkt proportional zu . (Dies ist aus theoretischen Gründen sinnvoll: erfc ist offensichtlich eine ungerade Funktion und f ist offensichtlich gerade, daher sollte ihr Verhältnis eine ungerade Funktion sein. Daher würden wir erwarten, dass sich der relative Fehler, wenn er zunimmt, wie eine ungerade Potenz von x verhält .) Dies führt uns dazu, den relativen Fehler geteilt durch x zu untersuchen . Gleichermaßen entscheide ich mich, x ⋅ erfc ( x ) / f ( x ) zu untersuchen.x erfc f x x x⋅erfc(x)/f(x) , denn die Hoffnung ist, dass dies einen konstanten Grenzwert haben sollte. Hier ist seine Grafik:
Unsere Vermutung scheint sich zu bestätigen: Dieses Verhältnis scheint sich einer Grenze von ungefähr 8 zu nähern. Auf Anfrage liefert Mathematica Folgendes:
Der Wert ist . Dies ermöglicht es uns, die Schätzung zu verbessern:Wir nehmena1=2π√e3(−4+π)28(−3+π)≈7.94325
als erste Verfeinerung der Annäherung. Wenn wirklich groß ist - größer als ein paar Tausend - ist diese Annäherung in Ordnung. Da es für eine Reihe interessanter Argumente zwischen 5.3 und 2000 immer noch nicht gut genug ist , lassen Sie uns die Prozedur wiederholen. Diesmal sollte sich der inverse relative Fehler - insbesondere der Ausdruck 1 - erfc ( x ) / f 1 ( x ) - wie 1 / x 2 für großes x verhalten (aufgrund der vorherigen Paritätsüberlegungen). Dementsprechend multiplizieren wir mit x 2x 5.3 2000 1−erfc(x)/f1(x) 1/x2 x x2 und finde das nächste Limit:
The value is
This process can proceed as long as we like. I took it out one more step, finding
with value approximately 1623.67. (The full expression involves a degree-eight rational function ofπ and is too long to be useful here.)
Unwinding these operations yields our final approximation
In fact, this approximation delivers at least two significant figures of precision forx=8 on, which is just about where pedestrian calculations (such as Excel's
NormSDist
function) peter out.Finally, one might worry about our ability to compute the initial approximationf . However, that's not hard: when x is large enough to cause underflows in the exponential, the square root is well approximated by half the exponential,
Computing the logarithm of this (in base 10) is simple, and readily gives the desired result. For example, letx=1000 . The common logarithm of this approximation is
Exponentiating yields
Applying the correction (inf3 ) produces
Note that the correction reduces the original approximation by over 99% (and indeed,a1/x≈1% .) (This approximation differs from the correct value only in the last digit. Another well-known approximation, exp(−x2)/(xπ−−√) , equals 1.860038⋅10−434298 , erring in the sixth significant digit. I'm sure we could improve that one, too, if we wanted, using the same techniques.)
quelle
A simple upper bound
For very large values of the argument in the calculation of upper tail probability of a normal, excellent bounds exist that are probably as good as one will get using any other methods with double-precision floating point. Forz>0 , let
Then, a very simple, elementary upper bound is
There are several nice complementary lower bounds as well. One of the handiest and easiest to derive is the bound
A picture
Below is a plot of the two bounds (in grey) along with the actual functionS(z) .
How good is it?
From the plot, it seems that the bounds become quite tight even for moderately largez . We might ask ourselves how tight they are and
what sort of quantitative statement in that regard can be made.
One useful measure of tightness is the absolute relative error
Now, note that, since all of the involved functions are nonnegative, by using the bounding properties ofS^u(z) and S^ℓ(z) , we get
In fact, the simple form of the bounds provides a good check on other "approximations". If, in the numerical calculation of more complicated approximations, we get a value outside these bounds, we can simply "correct" it to take the value of, e.g., the upper bound provided here.
There are many refinements of these bounds. The Laplace bounds mentioned here provide a nice sequence of upper and lower bounds onS(z) of the form R(z)φ(z) where R(z) is a rational function.
Finally, here is another somewhat-related question and answer.
quelle
You can approximate it with much simpler functions - see this Wikipedia section for more information. The basic approximation is thaterf(x)≈sgn(x)1−exp(−x24/π+ax21+ax2−−−−−−−−−−−−−−−−√)
The article has an incorrect link for that section. The PDF referenced can be found in Sergei Winitzki's files - or at this link.
quelle