จะคำนวณความน่าจะเป็นที่เกี่ยวข้องกับคะแนน Z ขนาดใหญ่อย่างไร้เหตุผลได้อย่างไร


14

แพคเกจซอฟต์แวร์สำหรับการตรวจจับแรงจูงใจเครือข่ายสามารถให้คะแนน Z สูงมาก (สูงสุดที่ฉันเคยเห็นคือ 600,000+ แต่คะแนน Z มากกว่า 100 นั้นเป็นเรื่องธรรมดา) ฉันวางแผนที่จะแสดงว่าคะแนน Z เหล่านี้เป็นของปลอม

คะแนน Z ขนาดใหญ่สอดคล้องกับความน่าจะเป็นที่ต่ำมาก ค่าของความน่าจะเป็นที่เกี่ยวข้องจะได้รับเช่นหน้าแจกวิกิพีเดียตามปกติ (และอาจเป็นตำราสถิติทุกเล่ม) สำหรับคะแนน Z ถึง 6 ดังนั้น ...

คำถาม : เราคำนวณฟังก์ชันข้อผิดพลาดได้อย่างไรสำหรับ n มากถึง 1,000,000 พูด?1erf(n/2)

ฉันโดยเฉพาะอย่างยิ่งหลังจากแพคเกจที่ใช้งานแล้วสำหรับนี้ (ถ้าเป็นไปได้) สิ่งที่ดีที่สุดที่ฉันเคยพบคือ WolframAlpha ซึ่งสามารถคำนวณได้สำหรับ n = 150 ( ที่นี่ )


6
บางทีนี่อาจไม่ใช่คำถามที่ถูกถาม คะแนน z เหล่านี้เป็นของปลอมเพราะพวกเขาถือว่าการแจกแจงแบบปกตินั้นเป็นค่าประมาณที่ดีกว่าหรือเป็นแบบจำลองมากกว่าที่เป็นจริง มันเหมือนกับการสมมติว่ากลไกของนิวตันนั้นดีถึงทศนิยม 600,000 ตำแหน่ง หากคุณมีความสนใจในการคำนวณเอลฟ์แต่เพียงผู้เดียวสำหรับค่าnมากดังนั้นคำถามนี้เป็นของ math.SE ไม่ใช่ที่นี่
whuber

6
สำหรับค่าขนาดใหญ่ "ไร้สาระ" คุณจะทำได้ดีกว่าการใช้สำหรับจุดลอยตัวที่มีความแม่นยำสองเท่า การประมาณนั้นและอื่น ๆ จะมีการกล่าวถึงที่อื่นใน stats.SE Pr(Z>z)(z2π)1ez2/2
พระคาร์ดินัล

ขอบคุณพระคาร์ดินัลที่ถูกผูกไว้ดูเหมือนว่าจะค่อนข้างแม่นยำ ทำไมคุณไม่ตอบคำถามนี้?
Douglas S. Stones

@ ดักลาส: หากคุณยังคงสนใจฉันสามารถรวบรวมบางสิ่งบางอย่างในวันถัดไปหรือมากกว่านั้นและโพสต์เป็นคำตอบที่สมบูรณ์มากขึ้น
พระคาร์ดินัล

1
ดี ... ฉันคิดว่ามันคุ้มค่าที่จะเพิ่มเป็นคำตอบ บางทีขอบเขตคือความรู้ทั่วไปใน prob + stats แต่ฉันไม่รู้ นอกจากนี้ Q และ A ของที่นี่ไม่ได้มีไว้สำหรับ OP เท่านั้น
Douglas S. Stones

คำตอบ:


19

คำถามเกี่ยวกับฟังก์ชั่นข้อผิดพลาดเสริม

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

สำหรับค่า "ใหญ่" ของ (ในคำถามเดิม) - นั่นคือระหว่าง 100 ถึง 700,000 หรือมากกว่านั้น (ในทางปฏิบัติค่าใด ๆ ที่มากกว่า 6 ควรได้รับการพิจารณาว่า "ใหญ่" อย่างที่เราเห็น) โปรดทราบว่าเนื่องจากสิ่งนี้จะถูกใช้เพื่อคำนวณค่า p จึงมีค่าน้อยในการได้รับตัวเลขทศนิยม (ทศนิยม) มากกว่าสามหลัก .= n / x=n/2

ในการเริ่มต้นให้พิจารณาการประมาณที่แนะนำโดย @Iterator

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

ที่ไหน

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

แม้ว่านี่จะเป็นประมาณที่ยอดเยี่ยมกับการทำงานผิดพลาดของตัวเองก็เป็นประมาณเลวร้ายไป{} อย่างไรก็ตามมีวิธีแก้ไขอย่างเป็นระบบerfc

สำหรับค่า p ที่เชื่อมโยงกับค่าขนาดใหญ่ของเราสนใจข้อผิดพลาดสัมพัทธ์ : เราหวังว่าค่าสัมบูรณ์ของมันจะน้อยกว่า 0.001 สำหรับสามค่านัยสำคัญ ตัวเลขของความแม่นยำ น่าเสียดายที่นิพจน์นี้ยากที่จะศึกษาสำหรับขนาดใหญ่เนื่องจากอันเดอร์โฟลในการคำนวณความแม่นยำสองเท่า นี่คือความพยายามหนึ่งครั้งที่จะแปลงข้อผิดพลาดสัมพัทธ์กับสำหรับ :x x x 0 x 5.8f(x)/erfc(x)1xx0x5.8

แปลง 1

การคำนวณจะไม่เสถียรเมื่อเกิน 5.3 หรือมากกว่านั้นและไม่สามารถส่งหนึ่งหลักที่สำคัญผ่านมา 5.8 นี่ไม่ใช่เรื่องแปลก:กำลังผลักดันข้อ จำกัด ของเลขคณิตความแม่นยำสองเท่า เนื่องจากไม่มีหลักฐานว่าข้อผิดพลาดสัมพัทธ์จะเป็นที่ยอมรับได้เล็กสำหรับใหญ่กว่าเราต้องทำดีกว่าประสบการณ์( - 5.8 2 ) 10 - 14.6 xxexp(5.82)1014.6x

ทำการคำนวณในแบบเลขคณิตขยาย (ด้วยMathematica ) ปรับปรุงรูปภาพของสิ่งที่เกิดขึ้น:

แปลง 2

ข้อผิดพลาดเพิ่มขึ้นอย่างรวดเร็วด้วยและไม่แสดงอาการของการปรับระดับ ที่ผ่านมาหรือมากกว่านั้นการประมาณนี้ไม่ได้ให้ข้อมูลที่เชื่อถือได้เพียงหลักเดียว!x = 10xx=10

อย่างไรก็ตามพล็อตกำลังเริ่มดูเป็นเส้นตรง เราอาจจะคาดเดาว่าความผิดพลาดเป็นสัดส่วนโดยตรงกับx(สิ่งนี้สมเหตุสมผลในเชิงทฤษฎี:เป็นฟังก์ชันแปลก ๆ และก็ชัดแจ้งดังนั้นอัตราส่วนของพวกเขาควรจะเป็นฟังก์ชันแปลกดังนั้นเราคาดว่าข้อผิดพลาดสัมพัทธ์ถ้ามันเพิ่มขึ้นจะทำตัวเหมือน อำนาจคี่ .) นำไปสู่การนี้เราจะศึกษาข้อผิดพลาดญาติหารด้วย xเท่ากันฉันเลือกที่จะตรวจสอบเพราะความหวังคือสิ่งนี้ควรมีค่า จำกัด คงที่ นี่คือกราฟ:erfcxerfcx x x erfc ( x ) / f ( x )fx xxerfc(x)/f(x)

แปลง 3

การคาดเดาของเราดูเหมือนจะถูกนำออกมา: อัตราส่วนนี้ดูเหมือนจะใกล้ถึงขีด จำกัด ประมาณ 8 หรือมากกว่านั้น เมื่อถูกถามMathematicaจะจัดหา:

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

ค่าเป็น7.94325 สิ่งนี้ช่วยให้เราสามารถปรับปรุงการประมาณการ:เราใช้a1=2πe3(4+π)28(3+π)7.94325

f1(x)=f(x)a1x

เป็นการปรับแต่งครั้งแรกของการประมาณ เมื่อใหญ่จริงๆ - มากกว่าสองสามพัน - การประมาณนี้ค่อนข้างดี เนื่องจากมันยังคงไม่ดีพอสำหรับช่วงของการขัดแย้งที่น่าสนใจระหว่างและหรือมากกว่านั้นลองทำซ้ำขั้นตอน เวลานี้ข้อผิดพลาดที่เกี่ยวข้องแบบผกผัน - โดยเฉพาะนิพจน์ควรทำตัวเหมือนสำหรับขนาดใหญ่ (โดยอาศัยการพิจารณาความเท่าเทียมกันก่อนหน้านี้) . ดังนั้นเราคูณด้วยและหาข้อ จำกัด ต่อไป:5.3 2000 1 - erfc ( x ) / f 1 ( x ) 1 / x 2 x x 2x5.320001erfc(x)/f1(x)1/x2xx2

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

ค่าคือ

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

กระบวนการนี้สามารถดำเนินต่อไปตราบเท่าที่เราต้องการ ฉันเอามันออกไปอีกหนึ่งขั้นตอนเพื่อค้นหา

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

มีค่าประมาณ 1623.67 (นิพจน์แบบเต็มเกี่ยวข้องกับฟังก์ชันเหตุผลแปดองศาของและยาวเกินกว่าจะเป็นประโยชน์ได้ที่นี่)π

การยกเลิกการดำเนินการเหล่านี้ทำให้เราประมาณค่าขั้นสุดท้าย

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

ข้อผิดพลาดเป็นสัดส่วน6} การนำเข้าเป็นค่าคงที่ของสัดส่วนดังนั้นเราจึงวางแผน :x6x6(1erfc(x)/f3(x))

แปลง 4

มันเข้าใกล้ค่า จำกัด อย่างรวดเร็วประมาณ 2,660.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)).

การคำนวณลอการิทึมของเรื่องนี้ (ในฐาน 10) นั้นง่ายและพร้อมให้ผลลัพธ์ที่ต้องการ ตัวอย่างเช่นสมมติxลอการิทึมสามัญของการประมาณนี้คือx=1000

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

อัตราผลตอบแทนทวีคูณ

f(1000)2.3416910434296.

การใช้การแก้ไข (ใน ) สร้างf3

erfc(1000)1.86003 70486 3232810434298.

โปรดทราบว่าการแก้ไขจะลดการประมาณดั้งเดิมลงมากกว่า 99% (และแน่นอน .) (การประมาณนี้แตกต่างจากค่าที่ถูกต้องเฉพาะในหลักสุดท้ายการประมาณที่รู้จักกันดี , เท่ากับ , ทำผิดพลาดในตัวเลขนัยสำคัญที่หกฉันแน่ใจว่าเราสามารถปรับปรุงมันได้เช่นกันถ้าเรา ต้องการโดยใช้เทคนิคเดียวกัน)a1/x1%1.86003810 - 434298exp(x2)/(xπ)1.86003810434298


1
+1 นี่เป็นคำตอบที่ยอดเยี่ยมอย่างใดฉันไม่เคยเจอหัวข้อนี้มาก่อน
อะมีบาพูดว่า Reinstate Monica

15

ขอบบนแบบเรียบง่าย

สำหรับค่าที่สูงมากของการโต้แย้งในการคำนวณความน่าจะเป็นที่ส่วนบนของปกติขอบเขตที่ยอดเยี่ยมมีอยู่ที่อาจจะดีเท่าที่จะใช้วิธีอื่นใดกับจุดลอยตัวที่มีความแม่นยำสองเท่า สำหรับให้ ที่เป็นไฟล์ PDF มาตรฐานทั่วไป ฉันใช้สัญกรณ์ในการเคารพสัญกรณ์มาตรฐานในการวิเคราะห์การอยู่รอด ในบริบทวิศวกรรมที่พวกเขาเรียกฟังก์ชั่นนี้ฟังก์ชั่และแสดงได้โดย(z)z>0φ ( Z ) = ( 2 π ) - 1 / 2

S(z):=P(Z>z)=zφ(z)dz,
φ(z)=(2π)1/2ez2/2S(z)QQ(z)

จากนั้นความเรียบง่ายบนขอบเขตเบื้องต้นคือ ที่สัญกรณ์ทางด้านขวาแสดงว่านี่เป็นค่าประมาณขอบเขตบน คำตอบนี้ ให้ข้อพิสูจน์ถึงขอบเขต

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

มีขอบเขตล่างที่ดีหลายอย่างเช่นกัน หนึ่งในวิธีที่ง่ายที่สุดและง่ายที่สุดในการสืบทอดมาคือขอบเขต มีวิธีการแยกอย่างน้อยสามวิธีในการรับขอบเขตนี้ ภาพร่างคร่าวๆของวิธีการดังกล่าวสามารถพบได้ในคำตอบของคำถามที่เกี่ยวข้อง

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

รูปภาพ

ด้านล่างเป็นพล็อตของทั้งสองขอบเขต (สีเทา) พร้อมด้วยฟังก์ชั่นที่เกิดขึ้นจริง(z)S(z)

หางบนของปกติและขอบเขต

ดีแค่ไหน?

จากพล็อตมันก็ดูเหมือนว่าขอบเขตกลายเป็นที่ค่อนข้างแน่นแม้สำหรับขนาดใหญ่ปานกลางZเราอาจถามตัวเองว่าพวกเขาเข้มงวดแค่ไหนและประโยคเชิงปริมาณในเรื่องนั้นสามารถทำอะไรได้บ้างz

การวัดความหนาแน่นที่เป็นประโยชน์อย่างหนึ่งคือข้อผิดพลาดสัมพัทธ์สัมบูรณ์ สิ่งนี้ทำให้คุณมีข้อผิดพลาดตามสัดส่วนของการประมาณ

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

ตอนนี้โปรดทราบว่าเนื่องจากฟังก์ชั่นที่เกี่ยวข้องทั้งหมดนั้นไม่ใช่ค่าลบโดยใช้คุณสมบัติขอบเขตของและเราได้รับ และนี่คือหลักฐาน สำหรับขอบเขตบนถูกต้องภายใน 1% สำหรับมันถูกต้องภายใน 0.1% และสำหรับนั้นถูกต้องภายใน 0.01% S(Z)E(ZS^u(z)S^(z)z

E(z)=S^u(z)S(z)S(z)S^u(z)S^(z)S^(z)=z2,
z10z28z100

ในความเป็นจริงรูปแบบที่เรียบง่ายของขอบเขตให้ตรวจสอบที่ดีเกี่ยวกับ "การประมาณ" อื่น ๆ หากในการคำนวณเชิงตัวเลขของการประมาณที่ซับซ้อนกว่านั้นเราจะได้ค่านอกขอบเขตเหล่านี้เราสามารถ "แก้ไข" เพื่อรับค่าเช่นขอบเขตบนที่ให้ไว้ที่นี่

มีการปรับแต่งมากมายของขอบเขตเหล่านี้ Laplace ขอบเขตที่กล่าวถึงที่นี่ให้ลำดับที่ดีของขอบเขตบนและล่างบนของรูปแบบโดยที่เป็นฟังก์ชันเหตุผลR ( z ) φ ( z ) R ( z )S(z)R(z)φ(z)R(z)

ท้ายที่สุดนี่คือคำถามและคำตอบที่เกี่ยวข้องกัน


1
ขออภัยสำหรับ "การอ้างอิงตนเอง" ทั้งหมด เมื่อหลายปีที่ผ่านมาฉันสนใจคำถามที่เกี่ยวข้องนานสองสัปดาห์และพยายามเรียนรู้ให้มากที่สุดเท่าที่จะทำได้เกี่ยวกับหัวข้อนี้
พระคาร์ดินัล

+1 เห็นด้วยกับเสียงหวือ ดีมากและฉันซาบซึ้งลิงก์ไปยังคำตอบอื่น ๆ
Iterator

5

คุณสามารถประมาณมันด้วยฟังก์ชั่นที่ง่ายกว่ามาก - ดูที่ส่วน Wikipediaสำหรับข้อมูลเพิ่มเติม การประมาณพื้นฐานคือerf(x)sgn(x)1exp(x24/π+ax21+ax2)

บทความนี้มีลิงค์ที่ไม่ถูกต้องสำหรับส่วนนั้น PDF อ้างอิงสามารถพบได้ในไฟล์ของ Sergei Winitzki - หรือที่ลิงค์นี้


1
การขยายสัญญาณบางอย่างนี้น่ายินดีด้วยเหตุผลสองประการ อย่างแรกมันจะดีที่สุดเมื่อคำตอบสามารถยืนอยู่คนเดียว ประการที่สองบทความนั้นเขียนอย่างคลุมเครือเกี่ยวกับคุณภาพของการประมาณ "ในย่านที่ไม่มีที่สิ้นสุด": ความแม่นยำเพียงใดคือ "แม่นยำมาก" (โดยปริยายคุณมีความรู้สึกที่ดีในเรื่องนี้ แต่มันเป็นเรื่องที่คาดหวังจากผู้อ่านที่สนใจทั้งหมด) ค่าที่ระบุไว้ของ ".00035" นั้นไม่มีประโยชน์ที่นี่
whuber

ขอบคุณ ฉันไม่ได้สังเกตว่ามีการสนับสนุน Javascript ในการใช้ TeX ซึ่งสร้างความแตกต่างในการเขียนออกมา
Iterator

1
อนึ่งการอ้างอิงวิกิพีเดียกับการประมาณนั้นใช้ไม่ได้ Mathematica พบว่าข้อผิดพลาดสัมพัทธ์ (1 - ประมาณ (x) / erf (x)) ทำงานเหมือนส่วนกลับของ-3))) 2exp(x2+3(π4)2/(8(π3)))
whuber

@whuber คุณสามารถโพสต์รหัส Mathematica ได้ไหม? :) ฉันไม่เคยเห็น Mathematica มานานกว่า 15 ปีและไม่เคยมีจุดประสงค์เช่นนี้
Iterator

ฉันโพสต์ไว้ในคำตอบแยกต่างหาก
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.