ชาปิโร่ - วิลค์เป็นแบบทดสอบปกติที่ดีที่สุดหรือไม่? ทำไมมันจะดีกว่าการทดสอบอื่น ๆ เช่น Anderson-Darling


24

ฉันได้อ่านบางแห่งในวรรณคดีว่าการทดสอบ Shapiro – Wilk นั้นถือว่าเป็นการทดสอบเชิงบรรทัดฐานที่ดีที่สุดเพราะสำหรับระดับนัยสำคัญที่กำหนดความน่าจะเป็นที่จะปฏิเสธสมมติฐานว่างถ้ามันเป็นเท็จมากกว่าในกรณีอื่น ๆ การทดสอบปกติα

คุณช่วยอธิบายให้ฉันหน่อยได้มั้ยถ้าใช้วิธีการทางคณิตศาสตร์เทียบกับการทดสอบปกติอื่น ๆ (พูดแบบทดสอบ Anderson – Darling)


4
โปรดทราบว่าพลังนั้นขึ้นอยู่กับวิธีที่สมมติฐานว่างเป็นเท็จซึ่งสำหรับการทดสอบความดีตามความมุ่งหมายทั่วไปนั้นอาจเป็นวิธีที่นับไม่ถ้วน โดยไม่ต้องตรวจสอบฉันยังคงเดิมพันว่าการทดสอบปกติของแต่ละคนมีประสิทธิภาพมากที่สุดกับทางเลือกบางอย่าง
Scortchi - Reinstate Monica

5
อาจไม่ใช่คำตอบที่คุณต้องการ แต่ฉันขอบอกว่าการทดสอบความเป็นไปได้ที่ดีที่สุดคือพล็อตความน่าจะเป็นแบบปกตินั่นคือพล็อตเชิงควอนตัมของค่าที่สังเกตได้เทียบกับควอไทล์ปกติ การทดสอบ Shapiro-Wilk นั้นได้รับการยกย่องบ่อยครั้ง แต่ไม่สามารถบอกได้ว่าข้อมูลของคุณแตกต่างจากปกติ บ่อยครั้งที่ความแตกต่างที่ไม่สำคัญถูกตั้งค่าสถานะโดยการทดสอบเนื่องจากคุณสมบัติเหล่านี้มีความสำคัญสำหรับขนาดตัวอย่างที่มีขนาดใหญ่และปัญหาตรงข้ามก็สามารถกัดคุณได้เช่นกัน
Nick Cox

คำตอบ:


17

ความเห็นทั่วไปเป็นครั้งแรก: โปรดทราบว่าการทดสอบ Anderson-Darling นั้นมีไว้สำหรับการแจกแจงที่ระบุอย่างสมบูรณ์ในขณะที่ Shapiro-Wilk นั้นสำหรับบรรทัดฐานที่มีค่าเฉลี่ยและความแปรปรวนใด ๆ อย่างไรก็ตามตามที่ระบุไว้ใน D'Agostino & Stephensแอนเดอร์สัน - ดาร์ลิ่งปรับใช้วิธีที่สะดวกมากในการประมาณค่าคดีซึ่งคล้ายกับ (แต่มาบรรจบกันได้เร็วกว่า การทดสอบ Lilliefors สำหรับเคส Kolmogorov-Smirnov) ที่ปกติโดยตารางค่าซีมโทติคของอาจใช้ (อย่าทดสอบความเหมาะสมสำหรับ n <5) n=5 A = A 2 ( 1 + 4[1]n=5A* * * *=A2(1+4n-25n2)

ฉันได้อ่านที่ไหนสักแห่งในวรรณกรรมว่าการทดสอบ Shapiro – Wilk นั้นถือว่าเป็นการทดสอบภาวะปกติที่ดีที่สุดเพราะในระดับนัยสำคัญที่กำหนดαความน่าจะเป็นที่จะปฏิเสธสมมติฐานว่างถ้ามันเป็นเท็จมากกว่าในกรณีอื่น ๆ การทดสอบ

ในฐานะที่เป็นคำสั่งทั่วไปนี้เป็นเท็จ

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

มันค่อนข้างง่ายในการค้นหาทางเลือกภายใต้ซึ่งมีประสิทธิภาพน้อยกว่า

ยกตัวอย่างเช่นแสงทางเลือกเทลด์มักจะมีพลังงานน้อยกว่าระยะที่เปลี่ยนเป็น (เปรียบเทียบกับการทดสอบปกติของข้อมูลแบบสม่ำเสมอ ตัวอย่างเช่น - ที่การทดสอบตามมีอำนาจประมาณ 63% เมื่อเทียบกับบิตมากกว่า 38% สำหรับ Shapiro Wilk) n=30uยู=สูงสุด(x)-นาที(x)sd(x)n=30ยู

Anderson-Darling (ปรับสำหรับการประมาณค่าพารามิเตอร์) ทำได้ดีกว่าในเลขชี้กำลังสองเท่า ช่วงเวลาความเบ้จะดีขึ้นเมื่อเทียบกับทางเลือกที่เอียงบาง

คุณช่วยอธิบายให้ฉันหน่อยได้มั้ยถ้าใช้วิธีการทางคณิตศาสตร์เทียบกับการทดสอบปกติอื่น ๆ (พูดแบบทดสอบ Anderson – Darling)

ฉันจะอธิบายในแง่ทั่วไป (หากคุณต้องการรายละเอียดเพิ่มเติมเกี่ยวกับเอกสารต้นฉบับและเอกสารในภายหลังที่กล่าวถึงพวกเขาจะเป็นทางออกที่ดีที่สุดของคุณ):

พิจารณาการทดสอบที่ง่ายกว่า แต่มีความสัมพันธ์กัน มันเป็นฟังก์ชันที่มีความสัมพันธ์กันอย่างมีประสิทธิภาพระหว่างสถิติการสั่งซื้อและสถิติการสั่งซื้อที่คาดหวังภายใต้ภาวะปกติ (และเช่นนี้เป็นการวัดโดยตรงโดยตรงของ "ความยาวของเส้นตรง" ในพล็อต QQ ปกติ) ขณะที่ผมจำ Shapiro-Wilk มีประสิทธิภาพมากขึ้นเพราะมันยังคำนึง covariances ระหว่างสถิติการสั่งซื้อการผลิตประมาณการเชิงเส้นที่ดีที่สุดของจากพล็อต QQ, ซึ่งมีการปรับสัดส่วนแล้วโดยsเมื่อการแจกแจงอยู่ไกลจากปกติอัตราส่วนจะไม่ใกล้ 1sσs

โดยการเปรียบเทียบ Anderson-Darling เช่น Kolmogorov-Smirnov และCramér-von Mises นั้นมีพื้นฐานมาจาก CDF เชิงประจักษ์ โดยเฉพาะมันขึ้นอยู่กับการเบี่ยงเบนน้ำหนักระหว่าง ECDF และ ECDF เชิงทฤษฎี (การถ่วงน้ำหนักสำหรับความแปรปรวนทำให้มีความไวต่อการเบี่ยงเบนในหางมากขึ้น)

การทดสอบโดย Shapiro และ Chen (1995) (ขึ้นอยู่กับระยะห่างระหว่างสถิติการสั่งซื้อ) มักจะแสดงพลังมากกว่าเล็กน้อย Shapiro-Wilk (แต่ไม่เสมอไป); พวกเขามักจะแสดงในทำนองเดียวกัน[2]

-

ใช้ Shapiro Wilk เพราะมันมักจะมีประสิทธิภาพใช้ได้อย่างกว้างขวางและหลาย ๆ คนคุ้นเคยกับมัน (ไม่จำเป็นต้องอธิบายรายละเอียดว่ามันคืออะไรถ้าคุณใช้มันในกระดาษ) - อย่าใช้มันภายใต้ภาพลวงตาที่มันใช้ "การทดสอบปกติที่ดีที่สุด" ไม่มีการทดสอบภาวะปกติที่ดีที่สุด

[1]: D 'Agostino, RB และสตีเฟนส์, MA (1986)
ความดีของเทคนิคพอดี ,
Marcel Dekker, New York

[2]: เฉิน, แอลและชาปิโรส์, เอส. (2538)
"การทดสอบทางเลือกสำหรับความเป็นไปตามมาตรฐานของการเว้นระยะปกติ"
วารสารการคำนวณและการจำลองทางสถิติ 53 , 269-287


เพื่อนร่วมชั้นของฉันบอกฉันว่า: "ถ้าขนาดตัวอย่าง> 50 คุณควรใช้ Kolmogorov-Smirnov" ถูกต้องไหม
kittygirl

ไม่ถึงความทรงจำของฉันในปี 1965 กระดาษต้นฉบับโดย Shapiro และ Wilk เพียง แต่ให้ค่าคงที่ที่จำเป็น ( ) ที่ใช้ในการประมาณเชิงเส้นของสำหรับสูงสุดแต่นั่นก็มากกว่าครึ่งศตวรรษที่ผ่านมา สิ่งต่าง ๆ ขยับไปมาเล็กน้อยตั้งแต่นั้นมา แม้จะไม่มีสิ่งนั้นชาปิโรฟรานเซียหรือแอนเดอร์สัน - ดาร์ลิ่ง (ปรับการประมาณค่าพารามิเตอร์) ก็เป็นทางเลือกที่ดีกว่า สิ่งเหล่านี้มักจะมีพลังงานต่ำกว่าทางเลือกที่น่าสนใจโดยทั่วไป (และถ้าคุณประเมินค่าเฉลี่ยและค่า sd จากตัวอย่างคุณไม่ได้ทำการทดสอบ Kolmogorov-Smirnov แต่เป็นการทดสอบ Lilliefors) σ n 50aผมσn50
Glen_b

ในระยะสั้นมีช่วงเวลาสั้น ๆ ของการโพสต์ไม่กี่ปี 1967 (สิ่งพิมพ์เริ่มต้นของการทำงานของ Lilliefors) ซึ่งมันอาจจะเป็นชิ้นส่วนของคำแนะนำที่สมเหตุสมผล แต่ไม่นานเป็นเวลา
Glen_b

เมื่อขนาดตัวอย่าง> 5,000, การรันshapiro.testใน R จะได้รับข้อผิดพลาดจากsample size must be between 3 and 5000นั้นควรทำการทดสอบอะไรอีก
kittygirl

1. ที่ขนาดใหญ่ n คุณจะปฏิเสธแบบจำลองการกระจายแบบง่าย ๆ เสมอ (แม้ว่ามันจะเป็นการประมาณที่เหมาะสม) อาจจะเป็นการดีกว่าที่จะทำอย่างอื่น (ทำไมคุณต้องทดสอบความเป็นปกติ?) 2. ไม่ใช่เรื่องของ "ควร" เกี่ยวกับเรื่องนี้ ไม่มีการทดสอบที่ดีเพียงอย่างเดียวที่ดีกว่าการทดสอบอื่น ๆ เสมอ มันเพิ่งเกิดขึ้นว่าชาปิโร่วิลค์นั้นดีพอสมควร อย่างไรก็ตามทางเลือกที่เหมาะสมสำหรับ n ขนาดใหญ่คือการทดสอบชาปิโร - ฟรานเซีย หากคุณสามารถทดสอบการใช้งานแบบทดสอบ Chen-Shapiro ได้ที่ n ขนาดใหญ่ (สมมติว่ามีเหตุผลที่ดีในการทดสอบเลย) ลองพิจารณาดูแทน
Glen_b -Reinstate Monica

12

เห็นได้ชัดว่าการเปรียบเทียบที่คุณอ่านไม่ได้รวมอยู่SnowsPenultimateNormalityTest ( http://cran.r-project.org/web/packages/TeachingDemos/TeachingDemos.pdf ) เนื่องจากมีพลังงานสูงสุดที่เป็นไปได้ในทุกทางเลือก ดังนั้นควรได้รับการพิจารณาว่า "ดีที่สุด" ถ้าอำนาจเป็นเพียงการพิจารณาเท่านั้น (โปรดสังเกตว่าความคิดเห็นของฉันมีอคติอย่างชัดเจน แต่มีการบันทึกไว้ในลิงก์ / เอกสารประกอบ)

อย่างไรก็ตามฉันเห็นด้วยกับความคิดเห็นของ Nick Cox ว่าการทดสอบที่ดีที่สุดคือพล็อตมากกว่าการทดสอบอย่างเป็นทางการเนื่องจากคำถามของ "Normal พอ" มีความสำคัญมากกว่า "Exactly ปกติ" หากคุณต้องการทดสอบที่มีความหมายฉันขอแนะนำให้รวมพล็อต qq กับวิธีการในบทความนี้:

Buja, A. , Cook, D. Hofmann, H. , Lawrence, M. Lee, E.-K. , Swayne, DF และ Wickham, H. (2009) การอนุมานทางสถิติสำหรับการวิเคราะห์ข้อมูลเชิงสำรวจและการวินิจฉัยแบบจำลอง Phil. ทรานส์ ร. A 2009 367, 4361-4383 ดอย: 10.1098 / rsta.2009.0120

การใช้งานอย่างหนึ่งของนั่นคือvis.testฟังก์ชั่นในแพคเกจ TeachingDemos สำหรับ R (แพคเกจเดียวกันSnowsPenultimateNormalityTest)


1
ฉันเห็นด้วยกับความเชื่อมั่น แต่การมองที่แผนการ QQ นั้นไม่ได้เป็นทางออกหากใครต้องการทำอะไรมาก ๆ ด้วยตัวแปรมากกว่า 10-20 ตัว
Andrew M

เราพิมพ์พล็อต QQ นอกเหนือจากการทดสอบตามปกติ พวกเขาไม่ได้เป็นเอกสิทธิ์ แต่เป็นเครื่องมือเสริม
Aksakal

2
@Andrew M ดังนั้นจะมองผ่านผลลัพธ์ของ 100 หรือ 1,000 หรือดังนั้น Shapiro-Wilk หรือการทดสอบอื่น ๆ สิ่งที่คุณต้องการ? ไม่ใช่เรื่องยากที่จะตรวจสอบแปลง QQ โดยอัตโนมัติพูดครั้งละ 25 บ่อยครั้งที่การมองเห็นนั้นเพียงพอที่จะมองเห็นปัญหาที่แท้จริง
Nick Cox

10

ฉันไปงานปาร์ตี้สาย แต่จะตอบด้วยการอ้างอิงถึงงานวิจัยที่ได้รับการตรวจสอบโดยเพื่อน เหตุผลที่ฉันไม่ตอบใช่ / ไม่ใช่สำหรับคำถามของ OP คือมันซับซ้อนกว่าที่คิด ไม่มีการทดสอบใดที่จะมีประสิทธิภาพมากที่สุดสำหรับตัวอย่างที่มาจากการกระจายใด ๆ ที่มีหรือไม่มีค่าผิดปกติ Outliers อาจลดกำลังงานของการทดสอบหนึ่งอย่างและเพิ่มอีกอย่างหนึ่ง การทดสอบบางอย่างทำงานได้ดีขึ้นเมื่อตัวอย่างมาจากการกระจายแบบสมมาตรเป็นต้น

  • Henry C. Thode, Test for Normality , 2002 - นี่คือหนังสือที่ครอบคลุมที่สุดในเรื่อง ถ้าฉันต้องทำให้มันเป็นคำตอบง่ายๆ SW จะไม่ทรงพลังกว่า AD ในทุกกรณี นี่คือสองตอนที่ตัดตอนมาเพื่อความสุขในการอ่านของคุณ

จากส่วนที่ 7.1.5: บนพื้นฐานของอำนาจการเลือกการทดสอบจะเกี่ยวข้องโดยตรงกับข้อมูลที่มีอยู่หรือสมมติฐานที่เกี่ยวข้องกับทางเลือก ทางเลือกที่เฉพาะเจาะจงมากขึ้นการทดสอบที่เฉพาะเจาะจงมากขึ้นและมีประสิทธิภาพมากขึ้นจะเป็น; สิ่งนี้จะส่งผลให้คำแนะนำที่น่าเชื่อถือที่สุด

และ

ร่วมทดสอบเบ้และความโด่งเช่นให้พลังงานสูงเมื่อเทียบกับช่วงกว้างของทางเลือกเช่นเดียวกับแอนเดอ-ดาร์ลิ่ง 2 Wilk-Shapiro W แสดงให้เห็นถึงพลังงานที่ค่อนข้างสูงในทางเลือกที่สมมาตรแบบเบ้และแบบหางสั้นเมื่อเปรียบเทียบกับการทดสอบอื่น ๆ และพลังที่น่าเชื่อถือสำหรับทางเลือกแบบสมมาตรแบบหางยาว A 2Ks2A2

  • Romao, Xavier, Raimundo Delgado และ Anibal Costa "การเปรียบเทียบพลังเชิงประจักษ์ของการทดสอบความดีที่ไม่เหมาะสำหรับความเป็นไปได้แบบปกติ" วารสารการคำนวณและการจำลองทางสถิติ 80.5 (2010): 545-591 นี่คืองานวิจัยที่ตีพิมพ์ล่าสุดในเรื่องที่ฉันรู้

การศึกษากล่าวถึงประสิทธิภาพของการทดสอบตามปกติ 33 แบบสำหรับขนาดตัวอย่างที่หลากหลายโดยพิจารณาจากระดับนัยสำคัญหลายระดับและสำหรับการแจกแจงปกติแบบสมมาตร คำแนะนำทั่วไปสำหรับการทดสอบภาวะปกติซึ่งเป็นผลมาจากการศึกษาถูกกำหนดตามลักษณะของความไม่ปกติ

ถ้าคุณต้องการที่จะต้มการวิจัยของพวกเขาเป็นใช่ / ไม่ใช่คำตอบคือใช่ การทดสอบของ Shapiro-Wilks ดูจะมีประสิทธิภาพมากกว่าในกรณีส่วนใหญ่มากกว่า Anderson-Darling พวกเขาแนะนำการทดสอบ Shapiro Wilk เมื่อคุณไม่มีการกระจายทางเลือกโดยเฉพาะอย่างยิ่งในใจ อย่างไรก็ตามหากคุณสนใจในหัวข้อนี้กระดาษมีมูลค่าการอ่าน อย่างน้อยดูที่ตาราง

  • Edith Seier, การทดสอบตามปกติ: การเปรียบเทียบกำลังไฟ , สารานุกรมวิทยาศาสตร์ระหว่างประเทศทางสถิติ, 2014 - การสำรวจงานวิจัยที่ตีพิมพ์ในหัวข้อ อีกครั้งคำตอบนั้นขึ้นอยู่กับตัวอย่างและความรู้ของคุณเกี่ยวกับการกระจายทางเลือก แต่คำตอบที่ไม่สำคัญคือ YES โดยปกติแล้ว Shapiro-Wilk จะมีประสิทธิภาพมากกว่า แต่ไม่เสมอไป

  • Henry C. Thode, การทดสอบตามปกติในสารานุกรมวิทยาศาสตร์ทางสถิติระหว่างประเทศ, ปี 2014 - คำอธิบายของการทดสอบภาวะปกติที่เป็นที่นิยม คำแนะนำของเขา:

ตามที่ระบุไว้ก่อนหน้านี้จำนวนของการทดสอบภาวะปกติมีขนาดใหญ่เกินไปใหญ่เกินกว่าที่จะกล่าวถึงได้ที่นี่ โดยรวมแล้วการทดสอบที่ดีที่สุดดูเหมือนจะเป็นการทดสอบช่วงเวลา, Shapiro – Wilk W, แอนเดอร์สันดาร์ลิ่ง (ดูการทดสอบแอนเดอร์สัน - ดาร์ลิ่งแห่งความดี - พอดี) และการทดสอบ Jarque – Bera ข้อมูลจำเพาะเกี่ยวกับการทดสอบภาวะปกติเหล่านี้และอื่น ๆ อีกมากมายและคุณลักษณะของพวกเขาสามารถพบได้ใน Thode (2002) และโดยทั่วไปเกี่ยวกับความดีของปัญหารวมถึงการทดสอบภาวะปกติใน D'Agostino และ Stephens (1986)A2

ตอนนี้นี่คือทั้งหมดที่เกี่ยวกับการทดสอบ univariate The Thode (2002) ยังมีการทดสอบหลายตัวแปร, ข้อมูลที่ถูกเซ็นเซอร์, สารผสมปกติ, การทดสอบเมื่อมีค่าผิดปกติและอื่น ๆ อีกมากมาย


9

คำตอบที่จริงจังมากขึ้นสำหรับการตั้งคำถามนี้โดยเฉพาะอย่างยิ่ง @ silverfish วิธีหนึ่งในการตอบคำถามเช่นนี้คือการจำลองสถานการณ์เพื่อเปรียบเทียบ ด้านล่างนี้คือรหัส R ที่จำลองข้อมูลภายใต้ทางเลือกต่าง ๆ และทำการทดสอบแบบปกติหลายแบบและเปรียบเทียบกำลังไฟ (และช่วงความเชื่อมั่นของกำลังงานเนื่องจากกำลังประมาณผ่านการจำลอง) ฉันปรับแต่งขนาดตัวอย่างบ้างเนื่องจากไม่ค่อยน่าสนใจเมื่อพลังจำนวนมากใกล้เคียงกับ 100% หรือ 5% ฉันพบตัวเลขกลมที่ให้พลังเกือบ 80% ใครก็ตามที่สนใจสามารถนำรหัสนี้มาใช้อย่างง่ายดายและปรับเปลี่ยนเพื่อสมมุติฐานที่แตกต่างกันทางเลือกอื่น ๆ

คุณสามารถเห็นได้ว่ามีทางเลือกซึ่งการทดสอบบางอย่างทำได้ดีกว่าและอื่น ๆ ที่พวกเขาทำได้แย่กว่านั้น คำถามสำคัญคือคำถามใดที่เป็นทางเลือกที่สมจริงที่สุดสำหรับคำถาม / ประเด็นทางวิทยาศาสตร์ของคุณ สิ่งนี้ควรติดตามด้วยการจำลองผลกระทบของประเภทของความสนใจในการทดสอบอื่น ๆ บางประเภทที่ไม่เป็นไปตามปกติเหล่านี้ส่งผลกระทบอย่างมากต่อการทดสอบตามปกติอื่น ๆ ส่วนมากไม่ส่งผลกระทบต่อพวกเขามากนัก

> library(nortest)
> 
> simfun1 <- function(fun=function(n) rnorm(n), n=250) {
+   x <- fun(n)
+   c(sw=shapiro.test(x)$p.value, sf=sf.test(x)$p.value, ad=ad.test(x)$p.value,
+     cvm=cvm.test(x)$p.value, lillie=lillie.test(x)$p.value, 
+     pearson=pearson.test(x)$p.value, snow=0)
+ }
> 
> ### Test size using null hypothesis near true
> 
> out1 <- replicate(10000, simfun1())
> apply(out1, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0490  0.0520  0.0521  0.0509  0.0531  0.0538  1.0000 
> apply(out1, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04489158 0.04776981 0.04786582 0.04671398 0.04882619 0.04949870 0.9995213
[2,] 0.05345887 0.05657820 0.05668211 0.05543493 0.05772093 0.05844785 1.0000000
> 
> ### Test again with mean and sd different
> 
> out2 <- replicate(10000, simfun1(fun=function(n) rnorm(n,100,5)))
> apply(out2, 1, function(x) mean(x<=0.05))
     sw      sf      ad     cvm  lillie pearson    snow 
 0.0482  0.0513  0.0461  0.0477  0.0515  0.0506  1.0000 
> apply(out2, 1, function(x) prop.test(sum(x<=0.05),length(x))$conf.int)  #$
             sw         sf         ad        cvm     lillie    pearson      snow
[1,] 0.04412478 0.04709785 0.04211345 0.04364569 0.04728982 0.04642612 0.9995213
[2,] 0.05262633 0.05585073 0.05043938 0.05210583 0.05605860 0.05512303 1.0000000
> 
> #### now for the power under different forms of non-normality
> 
> ## heavy tails, t(3)
> rt3 <- function(n) rt(n, df=3)
> 
> out3 <- replicate(10000, simfun1(fun=rt3, n=75))
There were 50 or more warnings (use warnings() to see the first 50)
> round(apply(out3, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.788   0.831   0.756   0.726   0.624   0.440   1.000 
> round(apply(out3, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.780 0.824 0.748 0.717  0.614   0.431    1
[2,] 0.796 0.838 0.765 0.734  0.633   0.450    1
> 
> 
> ## light tails, uniform
> u <- function(n) runif(n)
> 
> out4 <- replicate(10000, simfun1(fun=u, n=65))
> round(apply(out4, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.906   0.712   0.745   0.591   0.362   0.270   1.000 
> round(apply(out4, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.900 0.703 0.737 0.581  0.353   0.261    1
[2,] 0.911 0.720 0.754 0.600  0.372   0.279    1
> 
> ## double exponential, Laplace
> de <- function(n) sample(c(-1,1), n, replace=TRUE) * rexp(n)
> 
> out5 <- replicate(10000, simfun1(fun=de, n=100))
> round(apply(out5, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.796   0.844   0.824   0.820   0.706   0.477   1.000 
> round(apply(out5, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.788 0.837 0.817 0.813  0.697   0.467    1
[2,] 0.804 0.851 0.832 0.828  0.715   0.486    1
> 
> ## skewed, gamma(2,2)
> g22 <- function(n) rgamma(n,2,2)
> 
> out6 <- replicate(10000, simfun1(fun=g22, n=50))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out6, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.954   0.930   0.893   0.835   0.695   0.656   1.000 
> round(apply(out6, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.950 0.925 0.886 0.827  0.686   0.646    1
[2,] 0.958 0.935 0.899 0.842  0.704   0.665    1
> 
> ## skewed, gamma(2,2)
> g99 <- function(n) rgamma(n,9,9)
> 
> out7 <- replicate(10000, simfun1(fun=g99, n=150))
> round(apply(out7, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.844   0.818   0.724   0.651   0.526   0.286   1.000 
> round(apply(out7, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.836 0.810 0.715 0.642  0.516   0.277    1
[2,] 0.851 0.826 0.732 0.660  0.536   0.294    1
> 
> ## tails normal, middle not
> mid <- function(n) {
+   x <- rnorm(n)
+   x[ x > -0.5 & x < 0.5 ] <- 0
+   x
+ }
> 
> out9 <- replicate(10000, simfun1(fun=mid, n=30))
Warning messages:
1: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
2: In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out9, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.374   0.371   0.624   0.739   0.884   0.948   1.000 
> round(apply(out9, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.365 0.362 0.614 0.730  0.878   0.943    1
[2,] 0.384 0.381 0.633 0.747  0.890   0.952    1
> 
> ## mixture on variance
> mv <- function(n, p=0.1, sd=3) {
+   rnorm(n,0, ifelse(runif(n)<p, sd, 1))
+ }
> 
> out10 <- replicate(10000, simfun1(fun=mv, n=100))
Warning message:
In cvm.test(x) :
  p-value is smaller than 7.37e-10, cannot be computed more accurately
> round(apply(out10, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.800   0.844   0.682   0.609   0.487   0.287   1.000 
> round(apply(out10, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.792 0.837 0.673 0.599  0.477   0.278    1
[2,] 0.808 0.851 0.691 0.619  0.497   0.296    1
> 
> ## mixture on mean
> mm <- function(n, p=0.3, mu=2) {
+   rnorm(n, ifelse(runif(n)<p, mu, 0), 1)
+ }
> 
> out11 <- replicate(10000, simfun1(fun=mm, n=400))
> round(apply(out11, 1, function(x) mean(x<=0.05, na.rm=TRUE)),3)
     sw      sf      ad     cvm  lillie pearson    snow 
  0.776   0.710   0.808   0.788   0.669   0.354   1.000 
> round(apply(out11, 1, function(x){ 
+ prop.test(sum(x<=0.05,na.rm=TRUE),sum(!is.na(x)))$conf.int),3) }  #$
        sw    sf    ad   cvm lillie pearson snow
[1,] 0.768 0.701 0.801 0.780  0.659   0.344    1
[2,] 0.784 0.719 0.816 0.796  0.678   0.363    1

ขอขอบคุณที่เพิ่มคำตอบซึ่งเป็นส่วนเสริมที่ดีสำหรับคำตอบก่อนหน้า ไม่มีการดูหมิ่นสำหรับคำตอบอื่นของคุณซึ่งเป็นหนึ่งในรายการโปรดของฉันใน SE!
Silverfish

1
ฉันใช้เสรีภาพในการแก้ไขโค้ดของคุณเพื่อเพิ่มการจัดรูปแบบโค้ด & พอดีทุกอย่างภายในหน้าต่างเกร็ก ฉันคิดว่ามันจะง่ายต่อการอ่านด้วยวิธีนี้ แต่ถ้าคุณไม่ชอบให้ย้อนกลับด้วยคำขอโทษของฉัน
gung - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.