Làm thế nào để tính xác suất liên quan đến điểm Z lớn vô lý?


14

Các gói phần mềm để phát hiện mô-đun mạng có thể trả về điểm Z rất cao (mức cao nhất tôi từng thấy là hơn 600.000+, nhưng điểm Z của hơn 100 là khá phổ biến). Tôi dự định chỉ ra rằng những điểm Z này là không có thật.

Điểm Z rất lớn tương ứng với xác suất liên quan cực kỳ thấp. Các giá trị của xác suất liên quan được đưa ra trên ví dụ trang wikipedia phân phối bình thường (và có thể là mọi sách giáo khoa thống kê) cho điểm Z lên đến 6. Vì vậy ...

Câu hỏi : Làm sao người ta tính toán hàm sai số 1erf(n/2)cho n lên tới 1.000.000, nói gì?

Tôi đặc biệt sau một gói đã được triển khai cho việc này (nếu có thể). Cái tốt nhất tôi tìm thấy cho đến nay là WolframAlpha, người quản lý để tính toán nó với n = 150 ( ở đây ).


6
Có lẽ đây không phải là câu hỏi đúng. Các điểm số z này là không có thật vì họ cho rằng phân phối bình thường là một mô hình gần đúng hoặc mô hình tốt hơn nhiều so với thực tế. Nó giống như giả sử cơ học Newton là tốt đến 600.000 chữ số thập phân. Nếu bạn thực sự chỉ quan tâm đến việc tính toán erf cho các giá trị cực trị của n , thì câu hỏi này thuộc về math.SE, không phải ở đây.
whuber

6
Đối với "ngớ ngẩn" giá trị lớn, bạn sẽ không làm tốt hơn so với sử dụng trên ràng buộc Pr(Z>z)(z2π)1ez2/2 cho đôi chính xác dấu chấm động. Sự gần đúng đó và những thứ khác được thảo luận ở nơi khác về thống kê.SE.
Đức hồng y

Cảm ơn hồng y, ràng buộc đó dường như khá chính xác. Tại sao bạn không làm cho câu trả lời này?
Douglas S. Stones

@Doumund: Nếu bạn vẫn quan tâm, tôi có thể đặt một cái gì đó vào ngày hôm sau hoặc lâu hơn và đăng nó như một câu trả lời đầy đủ hơn.
Đức hồng y

1
Chà ... tôi nghĩ rằng nó đáng để thêm nó như một câu trả lời. Có thể giới hạn là kiến ​​thức phổ biến trong số liệu thống kê của prob +, nhưng tôi không biết điều đó. Ngoài ra, Q và A ở đây không chỉ dành riêng cho OP.
Douglas S. Stones

Câu trả lời:


19

Câu hỏi liên quan đến chức năng lỗi bổ sung

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

cho các giá trị "lớn" của x ( =n/2 trong câu hỏi ban đầu) - nghĩa là, từ 100 đến 700.000 hoặc hơn. (Trong thực tế, bất kỳ giá trị nào lớn hơn khoảng 6 nên được coi là "lớn" như chúng ta sẽ thấy.) Lưu ý rằng vì điều này sẽ được sử dụng để tính giá trị p, nên có rất ít giá trị trong việc thu được nhiều hơn ba chữ số có nghĩa (thập phân) .

Để bắt đầu, hãy xem xét xấp xỉ được đề xuất bởi @Iterator,

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

Ở đâu

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

Mặc dù đây là một xấp xỉ tuyệt vời cho chính hàm lỗi, nhưng đó là một xấp xỉ khủng khiếp đối với erfc . Tuy nhiên, có một cách để khắc phục một cách có hệ thống.

Đối với các giá trị p được liên kết với các giá trị lớn như vậy của , chúng tôi quan tâm đến lỗi tương đối f ( x ) / erfc ( x ) - 1 : chúng tôi hy vọng giá trị tuyệt đối của nó sẽ nhỏ hơn 0,001 cho ba chữ số chính xác. Thật không may, biểu thức này rất khó nghiên cứu cho x lớn do dòng chảy trong tính toán chính xác kép. Đây là một lần thử, tính toán lỗi tương đối so với x với 0 x 5,8 :x f(x)/erfc(x)1xx0x5.8

Lô 1

Tính toán trở nên không ổn định một lần vượt quá 5,3 hoặc hơn và không thể cung cấp một chữ số có nghĩa vượt quá 5,8. Đây không phải là ngạc nhiên: exp ( - 5,8 2 ) 10 - 14,6 đang đẩy các giới hạn của số học đúp chính xác. Bởi vì không có bằng chứng nào cho thấy lỗi tương đối sẽ nhỏ đến mức chấp nhận được đối với x lớn hơnxexp(5.82)1014.6x , chúng ta cần phải làm tốt hơn.

Việc thực hiện tính toán trong số học mở rộng (với Mathicala ) sẽ cải thiện bức tranh của chúng ta về những gì đang diễn ra:

Lô 2

Lỗi tăng nhanh với và không có dấu hiệu chững lại. Quá x = 10 hoặc hơn, phép tính gần đúng này thậm chí không cung cấp một chữ số thông tin đáng tin cậy!xx=10

Tuy nhiên, cốt truyện đang bắt đầu nhìn tuyến tính. Chúng tôi có thể đoán rằng lỗi tương đối tỷ lệ thuận với . (Điều này có ý nghĩa trên cơ sở lý thuyết: erfc rõ ràng là một hàm lẻ và f rõ ràng là chẵn, vì vậy tỷ lệ của chúng phải là một hàm lẻ. Vì vậy, chúng ta sẽ mong đợi lỗi tương đối, nếu tăng, sẽ hoạt động như một công suất lẻ của xxerfcfx .) Điều này dẫn chúng ta nghiên cứu lỗi tương đối chia cho . Tương đương, tôi chọn kiểm tra x erfc ( x ) / f ( x )xxerfc(x)/f(x), bởi vì hy vọng là điều này sẽ có một giá trị giới hạn không đổi. Đây là biểu đồ của nó:

Lô 3

Dự đoán của chúng tôi dường như được đưa ra: tỷ lệ này dường như đang tiến đến giới hạn khoảng 8 hoặc hơn. Khi được hỏi, Mathematica sẽ cung cấp cho nó:

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

Giá trị là . Điều này cho phép chúng tôi cải thiện ước tính:chúng tôi thực hiệna1=2πe3(4+π)28(3+π)7.94325

f1(x)=f(x)a1x

như sự sàng lọc đầu tiên của xấp xỉ. Khi thực sự lớn - lớn hơn vài nghìn - xấp xỉ này là tốt. Bởi vì nó vẫn sẽ không đủ tốt cho một loạt các đối số thú vị trong khoảng từ 5,3 đến 2000 hoặc lâu hơn, hãy lặp lại quy trình. Lần này, lỗi tương đối nghịch - cụ thể là biểu thức 1 - erfc ( x ) / f 1 ( x ) - nên hoạt động như 1 / x 2 cho x lớn (theo các cân nhắc tương đương trước đó). Theo đó, chúng tôi nhân với x 2x5.320001erfc(x)/f1(x)1/x2xx2 và tìm giới hạn tiếp theo:

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

Giá trị là

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

Quá trình này có thể tiến hành miễn là chúng ta muốn. Tôi lấy nó ra thêm một bước nữa, tìm

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

với giá trị xấp xỉ 1623,67. (Biểu thức đầy đủ liên quan đến hàm hợp lý bậc tám của π và quá dài để có ích ở đây.)

Unwinding các hoạt động này mang lại xấp xỉ cuối cùng của chúng tôi

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

Sai số tỷ lệ với . Nhập khẩu là hằng số tỷ lệ, vì vậy chúng tôi vẽ x 6 ( 1 - erfc ( x ) / fx6 :x6(1erfc(x)/f3(x))

Lô 4

Nó nhanh chóng đạt đến giá trị giới hạn vào khoảng 2660,59. Sử dụng xấp xỉ , chúng tôi thu được ước tính erfc ( x ) có độ chính xác tương đối tốt hơn 2661 / x 6 cho tất cả x > 0 . Khi x vượt quá 20 hoặc hơn, chúng ta có ba chữ số có nghĩa (hoặc nhiều hơn nữa, vì x trở nên lớn hơn). Để kiểm tra, đây là bảng so sánh các giá trị chính xác với xấp xỉ cho x trong khoảng từ 10 đến 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

Trên thực tế, phép tính gần đúng này cung cấp ít nhất hai số liệu chính xác có ý nghĩa cho đi, đó chỉ là về cách tính toán của người đi bộ (chẳng hạn như chức năng của Excel ).x=8NormSDist

Cuối cùng, người ta có thể lo lắng về khả năng tính toán xấp xỉ ban đầu của chúng tôi . Tuy nhiên, điều đó không khó: khi x đủ lớn để gây ra dòng chảy theo cấp số nhân, căn bậc hai cũng xấp xỉ bằng một nửa số mũ,fx

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

Việc tính toán logarit của điều này (trong cơ sở 10) là đơn giản và sẵn sàng cho kết quả mong muốn. Ví dụ: đặt . Logarit phổ biến của phép tính gần đúng này làx=1000

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

Sản lượng lũy ​​thừa

f(1000)2.3416910434296.

Áp dụng hiệu chỉnh (trong ) tạo raf3

erfc(1000)1.86003 70486 3232810434298.

(Và trên thực tế, lưu ý rằng việc sửa chữa làm giảm xấp xỉ ban đầu hơn 99% .). (Xấp xỉ này khác với giá trị chính xác chỉ trong chữ số cuối cùng Một xấp xỉ nổi tiếng, exp ( - x 2 ) / ( x a1/x1%exp(x2)/(xπ)1.86003810434298


1
+1 Đây là một câu trả lời tuyệt vời, bằng cách nào đó tôi chưa bao giờ gặp chủ đề này trước đây.
amip nói phục hồi Monica

15

Một giới hạn trên đơn giản

z>0

S(z):=P(Z>z)=zφ(z)dz,
where φ(z)=(2π)1/2ez2/2 is the standard normal pdf. I've used the notation S(z) in deference to the standard notation in survival analysis. In engineering contexts, they call this function the Q-function and denote it by Q(z).

Then, a very simple, elementary upper bound is

S(z)φ(z)z=:S^u(z),
where the notation on the right-hand side indicates this is an upper-bound estimate. This answer gives a proof of the bound.

There are several nice complementary lower bounds as well. One of the handiest and easiest to derive is the bound

S(z)zz2+1φ(z)=:S^(z).
There are at least three separate methods for deriving this bound. A rough sketch of one such method can be found in this answer to a related question.

A picture

Below is a plot of the two bounds (in grey) along with the actual function S(z).

Upper-tail of normal and bounds

How good is it?

From the plot, it seems that the bounds become quite tight even for moderately large z. 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

E(z)=|S^u(z)S(z)S(z)|.
This gives you the proportional error of the estimate.

Now, note that, since all of the involved functions are nonnegative, by using the bounding properties of S^u(z) and S^(z), we get

E(z)=S^u(z)S(z)S(z)S^u(z)S^(z)S^(z)=z2,
and so this provides a proof that for z10 the upper-bound is correct to within 1%, for z28 it is correct to within 0.1% and for z100 it is correct to within 0.01%.

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 on S(z) of the form R(z)φ(z) where R(z) is a rational function.

Finally, here is another somewhat-related question and answer.


1
Apologies for all the "self-citations". Once, several years ago, I took an intense, two-week-long interest in related questions and tried to learn as much as I could about this topic.
cardinal

+1 Agree with whuber. Very nice, and I appreciate the links to other answers.
Iterator

5

You can approximate it with much simpler functions - see this Wikipedia section for more information. The basic approximation is that erf(x)sgn(x)1exp(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.


1
Some amplification of this would be welcome, for two reasons. First, it's best when answers can stand alone. Second, that article writes ambiguously about the quality of the approximation "in a neighborhood of infinity": just how accurate is "very accurate"? (You implicitly have a good sense of this, but it's a lot to expect of all interested readers.) The stated value of ".00035" is useless here.
whuber

Thanks. I didn't notice that there was Javascript-based support for using TeX, which made the difference in writing that out.
Iterator

1
Incidentally, the Wikipedia reference to that approximation is broken. Mathematica finds, though, that the relative error (1 - approx(x)/erf(x)) behaves like the reciprocal of 2exp(x2+3(π4)2/(8(π3))).
whuber

@whuber, can you post the Mathematica code for that? :) I haven't seen Mathematica in 15+ years, and never for this kind of purpose.
Iterator

I posted it in a separate reply.
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.