途方もなく大きなZスコアに関連する確率を計算する方法は?


14

ネットワークモチーフ検出用のソフトウェアパッケージは、非常に高いZスコアを返すことがあります(私が見た最高は600,000+ですが、100を超えるZスコアは非常に一般的です)。これらのZスコアが偽であることを示すつもりです。

巨大なZスコアは、非常に低い関連確率に対応します。関連する確率の値は、最大6のZスコアの正規分布ウィキペディアページ(およびおそらくすべての統計テキスト)に記載されています。

質問:誤差関数1−erf(n/2)nで最大1,000,000の場合、たとえば?

私は特に、このために既に実装されたパッケージを望んでいます(可能な場合)。私がこれまでに見つけた中で最高のものはWolframAlphaで、n = 150で計算できます(こちら)。


6
たぶんこれは正しい質問ではありません。これらのZスコアは、正規分布が実際よりもはるかに優れた近似またはモデルであると想定しているため、偽です。これは、ニュートン力学が小数点以下600,000桁まで適切であると仮定するのに少し似ています。もし極値に対するerfの計算だけに本当に興味があるならn、この質問はここではなくmath.SEに属します。
— whuber

6
Pr(Z>z)≤(z2π)−1e−z2/2

枢機cardのおかげで、その限界は非常に正確なようです。これを答えてみませんか?
— ダグラスS.ストーンズ

@Douglas:まだ興味があるなら、翌日かそこらで何かをまとめて、より完全な回答として投稿することができます。
— 枢機

1
まあ...答えとして追加する価値があると思います。たぶん、限界はprob + statsの一般的な知識ですが、私は知りませんでした。また、ここでのQとAは、OP専用ではありません。
— ダグラスS.ストーンズ

回答:


19

質問は補完的な誤差関数に関する

erfc(バツ)=2π∫バツ∞exp⁡(−t2)dt

「大きい」値の場合バツ(=n/2元の質問の 2)-つまり、100〜700,000程度です。(実際には、約6を超える値は、「大きい」と見なされる必要があります。)これはp値の計算に使用されるため、3桁を超える(10進数)桁を取得することはほとんどありません。 。

まず、@ Iteratorによって提案された近似を検討します。

f(バツ)=1−1−exp⁡(−バツ2(4+aバツ2π+aバツ2))、

どこ

a=8(π−3)3(4−π)≈0.439862。

これはエラー関数自体の優れた近似ですが、恐ろしい近似です。ただし、それを体系的に修正する方法があります。erfc

このような大きな値に関連付けられたp値については、相対誤差f (x )/ erfc(x )− 1に関心があります。3桁の精度で絶対値が0.001未満になることを願っています。残念ながら、この式は、倍精度計算のアンダーフローのため、大きなxを調べるのは困難です。ここでは対相対誤差プロット1つの試みであり、Xのための0 ≤ X ≤ 5.8:バツ f(バツ)/erfc(バツ)−1バツバツ0≤バツ≤5.8

プロット1

が5.3程度を超えると計算が不安定になり、5.8を超える1桁の有効数字を提供できなくなります。これは驚くべきことではない:EXP (- 5.8 2)≈ 10 - 14.6倍精度演算の限界を押しています。xが大きい場合に相対誤差が許容できるほど小さくなるという証拠はないため、もっとうまくやる必要があります。バツexp⁡(−5.82)≈10−14.6バツ

拡張演算(Mathematicaを使用)で計算を実行すると、何が起こっているのかがわかります:

プロット2

エラーはとともに急速に増加し、横ばいの兆候は見られません。過去のx = 10前後では、この近似は1桁の信頼できる情報も提供しません!バツバツ=10

ただし、プロットは線形に見え始めています。相対誤差は正比例すると推測できます。(これは、理論的な根拠に基づいて理にかなって:ERFCは明らか奇関数であり、fはさえ明らかであるので、それらの比は奇関数であるべきで、それは増加した場合にこのように、我々は、相対誤差が予想される、奇数電源のように動作する。X。)これにより、xで割った相対誤差を調べることになります。等価的に、私は検討することを選択したX ⋅ ERFC(X )/ F (X )バツerfcfバツ バツバツ⋅erfc(バツ)/f(バツ)なぜなら、これには一定の制限値が必要だからです。そのグラフは次のとおりです。

プロット3

私たちの推測は裏付けられているように見えます。この比率は、約8程度の限界に近づいているようです。尋ねられたら、Mathematicaはそれを提供します:

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

値は、1 = 2。 これは、推定値を改善することを可能に:私たちは取りますa1=2πe3(−4+π)28(−3+π)≈7.94325

f1(バツ)=f(バツ)a1バツ

近似の最初の改良として。本当に大きいです-数千を上回る-この近似はだけで結構です。5.3から2000程度の興味深い範囲の引数に対してはまだ十分ではないので、手順を繰り返しましょう。今回は、逆相対誤差、具体的には式1 − erfc(x )/ f 1(x ) -は、大きなxに対して1 / x 2のように動作するはずです(以前のパリティの考慮事項により)。したがって、x 2を掛けますバツ5.32000年1−erfc(x)/f1(x)1/x2xx2 次の制限を見つけます。

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

値は

a2=132πe3(−4+π)28(−3+π)(32−9(−4+π)3π(−3+π)2)≈114.687。

このプロセスは、必要な限り続行できます。私はそれをもう一歩踏み出し、見つけました

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

値は約1623.67です。(完全な式は8次の有理関数を含み、長すぎてここでは役に立ちません。)π

これらの操作を解くと、最終的な近似が得られます

f3(バツ)=f(バツ)(a1−a2/バツ2+a3/バツ4)/バツ。

誤差は比例します。インポートは比例定数なので、x 6(1 − erfc(x )/ f 3(x ))をプロットします。バツ−6バツ6(1−erfc(バツ)/f3(バツ))

プロット4

2660.59付近の制限値に急速に近づきます。近似を使用して、すべてのx > 0に対して相対精度が2661 / x 6より優れているerfc(x )の推定値を取得します。一度、xは 20かそこら超える(として、またははるかに、私たちは3つの重要な数字を持って、xが大きくなります)。チェックとして、ここでの近似に正しい値を比較した表であるXとの間の10と20:f3erfc(バツ)2661/バツ6バツ>0バツバツバツ1020

 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

実際、この近似により、に少なくとも2つの有効桁数の精度が得られます。これは、歩行者の計算(Excelの関数など)が変化するところです。バツ=8NormSDist

最後に、初期近似を計算する能力について心配するかもしれません。ただし、それは難しくありません。xが指数関数でアンダーフローを引き起こすのに十分な大きさである場合、平方根は指数関数の半分で近似されます。fバツ

f(x)≈12exp⁡(−x2(4+ax2π+ax2))。

これの対数の計算(10を底とする)は簡単で、望ましい結果がすぐに得られます。たとえば、ます。この近似の常用対数はx=1000

ログ10⁡(f(バツ))≈(−10002(4+a⋅10002π+a⋅10002)−ログ⁡(2))/ログ⁡(10)〜−434295.63047。

累乗利回り

f(1000)≈2.34169⋅10−434296。

()補正を適用すると、f3

erfc(1000)≈1.86003 70486 32328⋅10−434298.

補正は99%以上、元の近似値を減少させることに留意されたい(そして実際、1 / X ≈ 1 %)のみ最後の桁に正しい値から(この近似が異なる別の周知の近似。EXP (- X 2)/(X √a1/x≈1%、等しい1.860038⋅10 - 434298、第六の上位桁に誤ります。同じテクニックを使用して、必要に応じてそれも改善できると確信しています。)exp⁡(−x2)/(xπ)1.860038⋅10−434298


1
+1これはすばらしい答えです。どういうわけか、このスレッドに出会ったことがありません。
— アメーバは、モニカを復活させる

15

単純な上限

法線の上限確率の計算における引数の値が非常に大きい場合、おそらく倍精度浮動小数点を使用する他の方法を使用した場合と同等の優れた境界が存在します。以下のために、聞かせて S (Z ):= P(Z > Z )= ∫ ∞ Z φ (Z )のD Zをz>0 ここで、 φ (Z )= (2 π )- 1 / 2 E - Z 2 / 2は、標準正規PDFです。私は、生存分析で標準表記法を尊重して表記法 S (z )を使用しました。エンジニアリングコンテキストでは、この関数を Q関数と呼び、 Q (z )で示します。

S(z):=P(Z>z)=∫z∞φ(z)dz、
φ(z)=(2π)−1/2e−z2/2S(z)QQ(z)

次に、基本上限非常に簡単であり、

S(z)≤φ(z)z=:S^あなたは(z)、

S(z)≥zz2+1φ(z)=:S^ℓ(z)。

絵

S(z)

法線と境界の上部

どれくらいいいですか?

z

E(z)=|S^あなたは(z)−S(z)S(z)|。

S^あなたは(z)S^ℓ(z)

E(z)=S^あなたは(z)−S(z)S(z)≤S^あなたは(z)−S^ℓ(z)S^ℓ(z)=z−2、
したがって、これは、 z≥10 上限は1%以内で正しい z≥28 それは0.1%以内で正しい z≥100 0.01%以内に正しいです。

実際、境界の単純な形式は、他の「近似」に関する適切なチェックを提供します。より複雑な近似の数値計算で、これらの範囲外の値を取得した場合、ここで指定された上限などの値を取得するように「修正」することができます。

これらの境界には多くの改良点があります。ここで述べたラプラスの境界は、上と下の境界の素晴らしいシーケンスを提供しますS(z) フォームの R(z)φ(z) どこ R(z) 有理関数です。

最後に、ここでは別の、やや関連の質問と答えがあります。


1
すべての「自己引用」に謝罪。数年前に、関連する質問に2週間にわたる強い関心を持ち、このトピックについてできる限り学習しようとしました。
— 枢機

+1 whuberに同意します。とても素敵で、他の回答へのリンクを高く評価しています。
— イテレーター

5

より単純な関数で近似することができます-詳細については、このウィキペディアのセクションを参照してください。基本的な近似はerf(バツ)≈sgn(バツ)1−exp⁡(−バツ24/π+aバツ21+aバツ2)

記事には、そのセクションの誤ったリンクがあります。参照されているPDFは、Sergei Winitzkiのファイルまたはこのリンクにあります。


1
2つの理由から、これをある程度拡大することは歓迎されます。第一に、答えが独立している場合に最適です。第二に、その記事は「無限の近傍で」近似の品質について曖昧に書いています。「非常に正確」とはどれだけ正確なのでしょうか?(あなたは暗黙のうちにこれについて良い意味を持っていますが、関心のあるすべての読者に期待することはたくさんあります。)「.00035」の値はここでは役に立ちません。
— whuber

ありがとう。TeXを使用するためのJavascriptベースのサポートがあることに気づかなかったので、それを書くことに違いが生じました。
— イテレーター

1
ちなみに、その近似へのウィキペディアの参照は壊れています。しかしMathematicaは相対誤差(1-近似(x)/ erf(x))が逆数のように振る舞うことを発見する2exp⁡(バツ2+3(π−4)2/(8(π−3)))。
— whuber

@whuber、そのためのMathematicaコードを投稿できますか?:) 15年以上Mathematicaを見ていないので、このような目的で使用したことはありません。
— イテレーター

別の返信で投稿しました。
— whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.