터무니없이 큰 Z 점수와 관련된 확률을 계산하는 방법은 무엇입니까?


14

네트워크 모티프 감지를위한 소프트웨어 패키지는 엄청나게 높은 Z- 점수를 반환 할 수 있습니다. 이 Z- 점수가 가짜임을 보여줄 계획입니다.

거대한 Z- 점수는 매우 낮은 관련 확률에 해당합니다. 관련 확률의 값은 예를 들어 최대 6의 Z- 점수에 대한 정규 분포 위키 백과 페이지 (및 아마도 모든 통계 교과서)에 제공됩니다.

질문 : 최대 1,000,000까지 n에 대해 오류 함수 을 어떻게 계산합니까?1−erf(n/2)

특히 이미 구현 된 패키지를 사용하고 있습니다 (가능한 경우). 지금까지 내가 찾은 최고는 WolframAlpha이며 n = 150 ( here ) 동안 계산합니다 .


6
아마도 이것이 올바른 질문이 아닐 수도 있습니다. 이 z- 점수는 정규 분포가 실제보다 훨씬 더 나은 근사 또는 모형이라고 가정하기 때문에 가짜입니다. 그것은 뉴턴 역학이 소수점 이하 60 만 자리에 있다고 가정하는 것과 조금 비슷합니다. 극단적 인 값에 대한 erf 계산에만 관심 이 있다면이 질문은 math.SE에 속합니다. n
— whuber

6
"확실히"큰 값의 경우 상한 배정 밀도 부동 소수점의 경우 . 그 근사치 및 기타 사항은 stats.SE의 다른 곳에서 논의됩니다. Pr(Z>z)≤(z2π)−1e−z2/2
— 추기경

감사의 추기경, 그 한계는 꽤 정확 해 보입니다. 왜 대답하지 않습니까?
— Douglas S. Stones

@Douglas : 여전히 관심이 있다면, 다음 날에 무언가를 모아서 더 완전한 답으로 게시 할 수 있습니다.
— 추기경

1
글쎄 ... 나는 그것을 대답으로 추가하는 것이 가치가 있다고 생각합니다. 어쩌면 경계는 통계 + 통계에 대한 일반적인 지식이지만 몰랐습니다. 또한 Q와 A는 OP만을위한 것이 아닙니다.
— Douglas S. Stones

답변:


19

문제는 상보 오차 함수에 관한 것입니다

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

"대형"값 ( 원래 질문의 경우 ), 즉 100에서 700,000 사이입니다. (실제로, 약 6보다 큰 값은 "큰"으로 간주해야합니다.) 이것은 p- 값을 계산하는 데 사용되므로 3 자리 이상의 유효 (10 진) 숫자를 얻는 데는 가치가 거의 없습니다. .x=n/2

시작하려면 @Iterator가 제안한 근사를 고려하십시오.

f(x)=1−1−exp⁡(−x2(4+ax2π+ax2)),

어디

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

이것은 오류 함수 자체에 대한 근사치 대한 끔찍한 근사치 입니다. 그러나 체계적으로 수정하는 방법이 있습니다.erfc

큰 값과 관련된 p- 값의 경우 상대 오차 이 있습니다. 세 개의 유효 값에 대해 절대 값이 0.001보다 작기를 바랍니다. 정밀도 불행하게도이 식은 배정 밀도 계산의 언더 플로로 인해 큰 대해 연구하기가 어렵습니다 . 다음은 한 번의 시도로, 대한 상대 오류 대 를 표시합니다 .x f(x)/erfc(x)−1xx0≤x≤5.8

줄거리 1

가 5.3을 초과하면 계산이 불안정 해지고 5.8을 초과하는 유효 숫자 하나를 전달할 수 없습니다. 이것은 놀라운 일이 아닙니다. 이 배정 밀도 산술의 한계를 밀고 있습니다. 가 클수록 상대 오차가 상당히 작다는 증거는 없기 때문에 더 잘해야합니다 .xexp⁡(−5.82)≈10−14.6x

확장 된 산술 계산 ( Mathematica 사용 )을 수행하면 현재 상황에 대한 그림이 향상됩니다.

줄거리 2

따라 오류가 급격히 증가 하며 수평이 해제되지 않습니다. 과거 정도 인이 근사값은 신뢰할 수있는 한 자리수의 정보조차 제공하지 않습니다!xx=10

그러나 줄거리는 선형으로 보이기 시작합니다. 상대 오차가 직접 비례한다고 추측 할 수 있습니다 . (이것은 이론적 근거에서 의미가있다 : 는 명백하게 홀수 함수이고 는 명백하게 짝수이므로 비율은 홀수 함수 여야한다. 따라서 상대 오차가 증가하면 의 입니다.) 이로 인해 상대 오차를 로 나눈 값 을 연구하게 됩니다 . 마찬가지로, 나는 를 검사하기로 선택합니다. 희망적인 값은 일정한 제한 값을 가져야하기 때문입니다. 그래프는 다음과 같습니다.xerfcfx xx⋅erfc(x)/f(x)

줄거리 3

우리의 추측은 널리 퍼져있는 것으로 보입니다 :이 비율은 약 8 정도의 한계에 근접한 것으로 보입니다. 요청하면 Mathematica 는 다음을 제공합니다.

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

값은 입니다. 이를 통해 견적을 개선 할 수 있습니다.a1=2πe3(−4+π)28(−3+π)≈7.94325

f1(x)=f(x)a1x

근사치의 첫 세분화로 때 정말 큰 -보다 몇 천 -이 근사는 괜찮습니다. 에서 사이의 흥미로운 논쟁 범위에 대해서는 여전히 충분하지 않기 때문에 절차를 반복합시다. 이번에는 역 상대 오류 (특히, 표현 는 큰 처럼 동작해야합니다 (이전 패리티 고려 사항으로 인해). . 따라서 곱하고 다음 한계를 찾습니다.x5.320001−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(x)=f(x)(a1−a2/x2+a3/x4)/x.

오류는 비례합니다 . 수입은 비례 상수이므로 .x−6x6(1−erfc(x)/f3(x))

줄거리 4

약 2660.59의 한계 값에 빠르게 접근합니다. 근사값 사용하여 모든 대해 상대 정확도가 보다 나은 추정값을 얻습니다 . 일단 20 정도 초과 (로, 또는 훨씬 더, 우리는 우리의 세 개의 유효 숫자가 커진다). 점검으로, 올바른 값을 과 사이의 에 대한 근사치와 비교 한 표가 있습니다 .f3erfc(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

실제로이 근사값은 에 대해 적어도 두 개의 유효 정밀도를 제공 하는데, 이는 보행자 계산 (예 : Excel의 함수)이 거의 끝나가는 부분입니다.x=8NormSDist

마지막으로 초기 근사값 를 계산하는 능력에 대해 걱정할 수 있습니다 . 그러나, 어렵지는 않습니다. 가 지수에서 언더 플로를 유발할만큼 충분히 크면 제곱근은 지수의 절반만큼 근사합니다.fx

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

이것의 대수를 계산하는 것은 간단하며, 원하는 결과를 쉽게 얻을 수 있습니다. 예를 들어, 이라고하자 . 이 근사의 일반적인 로그는x=1000

log10⁡(f(x))≈(−10002(4+a⋅10002π+a⋅10002)−log⁡(2))/log⁡(10)∼−434295.63047.

지수 산출

f(1000)≈2.34169⋅10−434296.

수정을 적용하면 ( )f3

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

보정이 99 % 이상 일본어 근사 감소 (실제로, 참고 .) (마지막 자리에서 정확한 값에서이 근사 다르다. 다른 공지의 근사 , 와 6 자리 숫자가 잘못되었습니다. 동일한 기술을 사용하여 원했습니다.)a1/x≈1%exp⁡(−x2)/(xπ)1.860038⋅10−434298


1
+1 이것은 훌륭한 답변입니다. 어떻게 든 전에이 스레드를 본 적이 없습니다.
— amoeba는 Reinstate Monica가

15

간단한 상한

정규의 상단 꼬리 확률 계산에서 인수의 매우 큰 값의 경우 배정 밀도 부동 소수점이있는 다른 방법을 사용하는 것만 큼 좋은 우수한 범위가 존재합니다. 들면 ,하자 여기서 는 표준 일반 pdf입니다. 생존 분석의 표준 표기법에 따라 표기법 를 사용했습니다. 엔지니어링 컨텍스트에서는이 함수를 함수라고하며 합니다.z>0

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

그런 다음 매우 간단한 기본 상한은 여기서 오른쪽의 표기법은이 값이 상한 추정치를 나타냅니다. 이 답변 은 한계에 대한 증거를 제공합니다.

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

상보적인 하한도 있습니다. 가장 손쉽고 가장 쉬운 방법 중 하나는 이 경계를 도출하기위한 세 가지 별도의 방법이 있습니다. 이러한 방법 중 하나의 대략적인 스케치 는 관련 질문에 대한 이 답변 에서 찾을 수 있습니다 .

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

사진

아래는 실제 함수 와 함께 두 경계 (회색)의 도표입니다 .S(z)

정상 및 경계의 상단

얼마나 좋은가요?

플롯으로부터, 중간 정도의 대해서도 경계가 상당히 좁아지는 것 같습니다 . 우리는 그들이 얼마나 타이트하고 그 점에서 어떤 종류의 양적 진술을 할 수 있는지 스스로에게 물어볼 수 있습니다.z

하나의 유용한 기밀 측정은 절대 상대 오차 이것은 추정치의 비례 오차를 제공합니다.

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

침범 된 모든 기능은의 경계 특성을 이용하여, 음이 있기 때문에 지금, 참고, 것을 와 , 우리가 얻을 이므로 증거가됩니다. 동안 그 위 결합 된 1 % 이내로 정확한 대해 는 0.1 % 이내와 대 정확함 은 0.01 % 이내까지 정확하다.S^u(z)S^ℓ(z)

E(z)=S^u(z)−S(z)S(z)≤S^u(z)−S^ℓ(z)S^ℓ(z)=z−2,
z≥10z≥28z≥100

사실, 간단한 범위의 경계는 다른 "근사치"를 잘 점검합니다. 더 복잡한 근사치의 수치 계산에서 이러한 경계 밖의 값을 얻는 경우 여기에 제공된 상한값을 취하기 위해 간단히 "수정"할 수 있습니다.

이 범위에는 많은 수정이 있습니다. 여기에 언급 된 Laplace 경계 는 형식의 에서 멋진 상한 및 하한을 제공합니다. 여기서 는 합리적인 함수입니다.S(z)R(z)φ(z)R(z)

마지막으로, 여기 에는 다소 관련된 질문과 답변이 있습니다.


1
모든 "자기 인용"에 대한 사과. 몇 년 전, 나는 2 주 동안 관련된 질문에 관심을 가지고이 주제에 대해 최대한 많이 배우려고 노력했습니다.
— 추기경

+1 whuber에 동의하십시오. 매우 좋으며 다른 답변에 대한 링크에 감사드립니다.
— 반복자

5

훨씬 간단한 기능으로 대략적으로 계산할 수 있습니다 . 자세한 내용 은 이 Wikipedia 섹션 을 참조하십시오. 기본 근사치는erf(x)≈sgn(x)1−exp⁡(−x24/π+ax21+ax2)

기사에 해당 섹션에 대한 링크가 잘못되었습니다. 참조 된 PDF는 Sergei Winitzki의 파일 또는 이 링크 에서 찾을 수 있습니다 .


1
두 가지 이유로 이것에 대한 일부 증폭은 환영받을 것입니다. 첫째, 답변이 독립적 일 수있는 것이 가장 좋습니다. 둘째로,이 기사는 "무한대 부근에서"근사치의 품질에 대해 모호하게 기록합니다. "정확한"정도는 얼마나 정확합니까? (내재적으로 이것에 대해 잘 이해하고 있지만 모든 관심있는 독자에게 기대할 것이 많습니다.) 여기에 ".00035"라는 값은 쓸모가 없습니다.
— whuber

감사. TeX 사용에 대한 Javascript 기반 지원이 있음을 알지 못했지만 작성에 차이가있었습니다.
— Iterator 2018 년

1
또한, 그 근사치에 대한 Wikipedia 참조가 손상되었습니다. 그러나 Mathematica는 상대 오차 (1-approx (x) / erf (x))가 . 2exp⁡(x2+3(π−4)2/(8(π−3)))
— whuber

@ whuber, 당신은 그것에 대한 Mathematica 코드를 게시 할 수 있습니까? :) 나는 15 년 이상 Mathematica를 보지 못했고 이런 종류의 목적을 위해 결코 보지 못했습니다.
— 반복자

별도의 회신으로 게시했습니다.
— whuber
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.