Пакеты программ для обнаружения сетевых мотивов могут возвращать чрезвычайно высокие Z-оценки (самый высокий показатель, который я видел, составляет 600 000+, но Z-оценки более 100 встречаются довольно часто). Я планирую показать, что эти Z-оценки являются поддельными.
Огромные Z-оценки соответствуют чрезвычайно низким вероятностям. Значения связанных вероятностей приведены, например, на странице википедии нормального распределения (и, вероятно, в каждом учебнике статистики) для Z-показателей до 6. Итак ...
Вопрос : Как вычислить функцию ошибки для n до 1000000, говорите?
Я особенно после уже реализованного пакета для этого (если это возможно). Лучшее, что я нашел до сих пор, это WolframAlpha, которому удается вычислить его для n = 150 ( здесь ).
источник
Ответы:
Вопрос касается дополнительной функции ошибок
для «больших» значений ( = n / √Икс в исходном вопросе) - то есть между 100 и 700 000 или около того. (На практике любое значение, большее, чем примерно 6, следует рассматривать как «большое», как мы увидим.) Обратите внимание, что поскольку оно будет использоваться для вычисления p-значений, при получении более трех значащих (десятичных) цифр мало значения. ,= н / 2-√
Для начала рассмотрим приближение, предложенное @Iterator,
где
Хотя это отличное приближение к самой функции ошибки, это ужасное приближение к . Однако есть способ систематически исправить это.erfc
Для значений p, связанных с такими большими значениями , нас интересует относительная ошибка f ( x ) / erfc ( x ) - 1 : мы надеемся, что ее абсолютное значение будет менее 0,001 для трех значащих цифр точности. К сожалению, это выражение трудно изучить для больших x из-за недостаточного вычисления при двойной точности. Вот одна попытка, которая показывает относительную ошибку по сравнению с x для 0 ≤ x ≤ 5,8 :x f(x)/erfc(x)−1 x x 0≤x≤5.8
Расчет становится нестабильным, когда превышает 5,3 или около того и не может поставить одну значащую цифру после 5,8. Это неудивительно: exp ( - 5.8 2 ) ≈ 10 - 14.6 расширяет границы арифметики двойной точности. Поскольку нет никаких доказательств того, что относительная погрешность будет приемлемо мала для больших x , мы должны сделать лучше.x exp(−5.82)≈10−14.6 x
Выполнение вычислений в расширенной арифметике (с Mathematica ) улучшает нашу картину происходящего:
Ошибка быстро увеличивается с и не показывает никаких признаков выравнивания. В прошлом х = 10 или около того, это приближение даже не доставляет одну достоверную цифру информации!x x=10
Тем не менее, сюжет начинает выглядеть линейно. Можно предположить, что относительная ошибка прямо пропорциональна . (Это имеет смысл с теоретической точки зрения : erfc является явно нечетной функцией, а f явно четной, поэтому их отношение должно быть нечетной функцией. Таким образом, можно ожидать, что относительная ошибка, если она возрастет, будет вести себя как нечетная степень x .) Это приводит нас к изучению относительной ошибки, деленной на х . Эквивалентно, я выбираю изучить x ⋅ erfc ( x ) / f ( x )x erfc f x x x⋅erfc(x)/f(x) Потому что надежда на это должна иметь постоянное предельное значение. Вот его график:
Наше предположение, похоже, подтверждается: это соотношение, похоже, приближается к пределу около 8 или около того. Когда спрошено, Mathematica предоставит это:
Значение 1 = 2. Это позволяет нам улучшить оценку:мы беремa1=2π√e3(−4+π)28(−3+π)≈7.94325
в качестве первого уточнения приближения. Когда действительно велико - больше нескольких тысяч - это приближение просто отлично. Поскольку он все еще не будет достаточно хорош для интересного диапазона аргументов между 5.3 и 2000 или около того, давайте повторим процедуру. На этот раз обратная относительная ошибка - в частности, выражение 1 - erfc ( x ) / f 1 ( x ) - должна вести себя как 1 / x 2 для больших x (в силу предыдущих соображений четности). Соответственно умножаем на х 2x 5.3 2000 1−erfc(x)/f1(x) 1/x2 x x2 и найдите следующий предел:
Значение
Этот процесс может продолжаться сколько угодно. Я сделал еще один шаг, найдя
со значением приблизительно 1623,67. (Полное выражение включает рациональную функцию степени восьмого и слишком длинное, чтобы быть здесь полезным.)π
Разматывание этих операций дает наше окончательное приближение
The error is proportional toИкс- 6 . Of import is the constant of proportionality, so we plot Икс6( 1 - erfc ( x ) / f3( х ) ) :
It rapidly approaches a limiting value around 2660.59. Using the approximationе3 , we obtain estimates of эрфк (х) whose relative accuracy is better than 2661 / х6 for all х > 0 . Once Икс exceeds 20 or so, we have our three significant digits (or far more, as Икс gets larger). As a check, here is a table comparing the correct values to the approximation for Икс between 10 and 20 :
NormSDist
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.)
источник
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.
источник
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−−−−−−−−−−−−−−−−√)
Статья содержит неправильную ссылку на этот раздел. Ссылочный PDF-файл можно найти в файлах Сергея Виницкого или по этой ссылке .
источник