วิธีตัวอย่างจากการแจกแจงแบบปกติที่มีค่าเฉลี่ยและความแปรปรวนที่ทราบโดยใช้ภาษาโปรแกรมทั่วไป


36

ฉันไม่เคยเรียนวิชาสถิติมาก่อนดังนั้นฉันหวังว่าฉันจะถามถูกที่แล้ว

สมมติว่าฉันมีเพียงสองอธิบายข้อมูลการกระจายปกติ: ค่าเฉลี่ยและความแปรปรวน 2 ฉันต้องการใช้คอมพิวเตอร์เพื่อสุ่มตัวอย่างจากการแจกแจงนี้ซึ่งฉันเคารพสถิติทั้งสองนี้σ 2μσ2

เห็นได้ชัดว่าฉันสามารถจัดการค่าเฉลี่ยด้วยการทำ normalizing ประมาณ 0: เพียงเพิ่มให้กับแต่ละตัวอย่างก่อนส่งออกตัวอย่าง แต่ผมไม่เห็นว่าโปรแกรมสร้างตัวอย่างที่จะเคารพ 2σ 2μσ2

โปรแกรมของฉันจะเป็นภาษาโปรแกรมทั่วไป ฉันไม่สามารถเข้าถึงแพ็คเกจสถิติใด ๆ ได้


ภาษาของคุณมีตัวสร้างตัวเลขสุ่มหรือไม่? เครื่องกำเนิดนี้มาจากการกระจายแบบเดียวเท่านั้นหรือสามารถสร้างจากการกระจายแบบปกติด้วยหรือ
ttnphns

@ttnphns: ภาษาคอมพิวเตอร์ทุกเครื่องมาพร้อมกับตัวสร้างตัวเลขแบบสุ่ม พวกเขาเป็นชุดกำเนิดที่นำโด่งในบางขอบเขต
Fixee

คำตอบ:


33

หากคุณสามารถลิ้มลองจากการจัดจำหน่ายให้มีค่าเฉลี่ย 0 และความแปรปรวน 1 แล้วคุณสามารถลิ้มลองจากการเปลี่ยนแปลงขนาดที่ตั้งของการกระจายที่ซึ่งมีค่าเฉลี่ยและความแปรปรวน 2 ถ้าเป็นตัวอย่างจากค่าเฉลี่ย 0 และ 1 แปรปรวนกระจายแล้ว คือตัวอย่างที่มีค่าเฉลี่ยและความแปรปรวน 2 ดังนั้นสิ่งที่คุณต้องทำคือการที่จะไต่ตัวแปรโดยค่าเบี่ยงเบนมาตรฐาน (รากที่สองของความแปรปรวน) ก่อนที่จะเพิ่มค่าเฉลี่ย\σ 2 x σ x + μ μ σ 2 σ μμσ2x

σx+μ
μσ2σμ

วิธีที่คุณได้รับการจำลองจากการแจกแจงแบบปกติที่มีค่าเฉลี่ย 0 และความแปรปรวน 1 เป็นเรื่องที่แตกต่าง มันสนุกและน่าสนใจที่จะรู้ว่าจะใช้สิ่งต่าง ๆ อย่างไร แต่ไม่ว่าคุณจะใช้แพคเกจสถิติหรือภาษาการเขียนโปรแกรมหรือไม่ฉันขอแนะนำให้คุณใช้และฟังก์ชั่นที่เหมาะสมหรือไลบรารีสำหรับการสร้างตัวเลขสุ่ม หากคุณต้องการคำแนะนำเกี่ยวกับห้องสมุดที่จะใช้คุณอาจต้องการเพิ่มข้อมูลเฉพาะเกี่ยวกับภาษาการเขียนโปรแกรมที่คุณใช้

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

  • วิธีหนึ่งที่ถูกกล่าวถึงในข้อคิดเห็นโดยVitalStatistixคือวิธี Box-Muller ที่ใช้ตัวแปรสุ่มแบบอิสระสองชุดและสร้างตัวแปรสุ่มแบบอิสระสองตัว วิธีการที่คล้ายกันที่จะหลีกเลี่ยงการคำนวณของทั้งสองฟังก์ชั่นยอดเยี่ยมบาปและcosที่ค่าใช้จ่ายของการจำลองอื่น ๆ ไม่กี่คนที่ถูกโพสต์เป็นคำตอบโดยfrancogrex
  • วิธีการทั่วไปอย่างสมบูรณ์คือการเปลี่ยนแปลงของตัวแปรสุ่มที่เหมือนกันโดยฟังก์ชั่นการกระจายผกผัน ถ้ากระจายอย่างสม่ำเสมอในดังนั้น มีการแจกแจงแบบปกติมาตรฐาน แม้ว่าจะไม่มีสูตรการวิเคราะห์ที่ชัดเจนสำหรับแต่สามารถคำนวณได้โดยการประมาณเชิงตัวเลขที่แม่นยำ การใช้งานปัจจุบันใน R (ฉันตรวจสอบล่าสุด) ใช้ความคิดนี้ วิธีการคือแนวคิดที่ง่ายมาก แต่ต้องมีการดำเนินการที่ถูกต้องของซึ่งอาจไม่เป็นที่แพร่หลายในขณะที่ฟังก์ชั่น (อื่น ๆ ) อดิศัยเข้าสู่ระบบ , บาปและcos[ 0 , 1 ] Φ - 1 ( U ) Φ - 1 Φ - 1U[0,1]
    Φ1(U)
    Φ1Φ1
  • มีคำตอบหลายข้อที่กล่าวถึงความเป็นไปได้ในการใช้ทฤษฎีขีด จำกัด กลางเพื่อประมาณการแจกแจงแบบปกติเป็นค่าเฉลี่ยของตัวแปรสุ่มแบบสม่ำเสมอ ไม่แนะนำโดยทั่วไป อาร์กิวเมนต์ที่นำเสนอเช่นการจับคู่ค่าเฉลี่ย 0 และความแปรปรวน 1 และการพิจารณาการสนับสนุนการแจกแจงจะไม่น่าเชื่อถือ ในการใช้สิทธิ 2.3 ใน "แนะนำวิธี Monte Carlo กับ R" โดยโรเบิร์ตคริสเตียนพีและจอร์จ Casella กำเนิดนี้เรียกว่าโบราณและการประมาณที่เรียกว่าน่าสงสารมาก
  • มีแนวคิดอื่นที่ทำให้สับสน บทที่ 3 และโดยเฉพาะอย่างยิ่งส่วนที่ 3.4 ใน "ศิลปะแห่งการเขียนโปรแกรมคอมพิวเตอร์" ฉบับที่ 2 โดย Donald E. Knuth เป็นการอ้างอิงแบบดั้งเดิมในการสร้างตัวเลขสุ่ม Brian Ripley เขียนตัวแปรสุ่มของการสร้างคอมพิวเตอร์: บทช่วยสอนซึ่งอาจมีประโยชน์ หนังสือที่กล่าวถึงโดย Robert และ Casella หรือบทที่ 2 ในหนังสืออีกเล่มหนึ่งของพวกเขาคือ

ในตอนท้ายของวันวิธีการดำเนินการอย่างถูกต้องไม่ดีกว่าตัวสร้างตัวเลขสุ่มหลอกใช้ โดยส่วนตัวแล้วฉันชอบที่จะใช้ห้องสมุดจุดประสงค์พิเศษที่ฉันเชื่อว่าเชื่อถือได้ ฉันมักจะพึ่งพาวิธีการที่นำมาใช้ใน R ทั้งโดยตรงใน R หรือผ่าน API ใน C / C ++ เห็นได้ชัดว่านี่ไม่ใช่วิธีแก้ปัญหาสำหรับทุกคน แต่ฉันไม่คุ้นเคยกับห้องสมุดอื่น ๆ เพื่อแนะนำทางเลือกอื่น


(+1) คำตอบที่ดีและคำแนะนำสำหรับ OP
พระคาร์ดินัล

18
2log(U1)cos(2πU2)
2log(U1)sin(2πU2)

2
@ สำคัญ: ไม่ใช่ความคิดเห็นที่ไม่จำเป็น ที่ดีอย่างหนึ่ง การแปลง Box-Muller น่าจะเป็นโปรแกรมที่ง่ายที่สุดโดยมีโอกาสน้อยที่สุดที่จะทำสิ่งที่ไม่ดีโดยไม่ตั้งใจ มันไม่เร็วที่สุดแต่ก็มีการแข่งขันที่เพียงพอ ที่กล่าวว่าการใช้ไลบรารี่ที่สร้างไว้แล้วนั้นอาจปลอดภัยกว่าโดยเฉพาะอย่างยิ่งเนื่องจากสถานที่ที่มีโอกาสผิดพลาดมากที่สุดคือการสร้างอินพุตแปรผันแบบสุ่มที่สม่ำเสมอ !
พระคาร์ดินัล

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

1
@VitalStatistix มันเป็นความคิดเห็นที่ดีและดูเหมือนว่านี่คือสิ่งที่ OP กำลังมองหา ทำไมไม่ลองเปลี่ยนมันให้เป็นคำตอบและอาจอธิบายให้ละเอียดเล็กน้อยเกี่ยวกับแนวคิดทั่วไปของการใช้การแปลงของตัวแปรสุ่มแบบสม่ำเสมอ ฉันลังเลที่จะทำสิ่งนี้ด้วยเหตุผลที่พระคาร์ดินัลกล่าวถึงเป็นส่วนใหญ่เพราะฉันไม่รู้ว่าตัวสร้างชุดเริ่มต้นจากภาษาใด ๆเป็นเครื่องกำเนิดไฟฟ้าที่ดีหรือไม่
NRH

10

นี่คือความคิดเห็นจริงๆเกี่ยวกับคำตอบของ Michael Lew และความคิดเห็นของ Fixee แต่โพสต์เป็นคำตอบเพราะฉันไม่มีชื่อเสียงในเว็บไซต์นี้เพื่อแสดงความคิดเห็น

[0,1]61

E[Σผม=112Xผม]=Σผม=112E[Xผม]=12×12=6
var[Σผม=112Xผม]=Σผม=112var[Xผม]=12×112=1
Σผม=112Xผม-610/12Σผม=112Xผม-6[-6,6]6

5

นอกจากคำตอบของ NRH หากคุณยังไม่มีวิธีสร้างตัวอย่างแบบสุ่มจาก "การแจกแจงแบบปกติมาตรฐาน" N (0,1) ด้านล่างเป็นวิธีที่ดีและง่าย (เนื่องจากคุณไม่ได้มีสถิติ แพคเกจฟังก์ชั่นด้านล่างควรมีในภาษาการเขียนโปรแกรมมาตรฐานส่วนใหญ่)

1. สร้าง u และ v เป็นตัวเลขสุ่มสองตัวที่กระจายกันอย่างสม่ำเสมอในช่วงตั้งแต่ -1 ถึง 1 โดย
u = 2 r1 - 1และv = 2 r2 - 1

2. คำนวณw = u^2 + v^2ถ้า w> 1 ย้อนกลับไปที่ 1

3. ส่งคืน u * z และ y = v * z ด้วยz= sqrt(-2ln(w)/w) โค้ดตัวอย่างจะเป็นดังนี้:

u = 2 * random() - 1;
v = 2 * random() - 1;
w = pow(u, 2) + pow(v, 2);
if (w < 1) {
    z = sqrt((-2 * log(w)) / w);
    x = u * z;
    y = v * z;
    }

แล้วใช้สิ่งที่ MHR N(mu, sigma^2)ได้แนะนำข้างต้นจะได้รับการเบี่ยงเบนจากการสุ่ม


เมื่อฉันโพสต์คำตอบของฉันด้านบนฉันไม่ได้สังเกตเห็นว่า @vitalStatistix ให้อัลกอริทึมการแปลง Box-Muller แก่คุณ คนที่ฉันให้ไว้ข้างต้นก็ถือว่าดีเช่นกัน
francogrex

2
คุณช่วยอธิบายเหตุผลในการสร้างความแปรปรวนแบบปกติจากการแจกแจงแบบเดียวกัน (นอกเหนือจากมุมมองอัลกอริทึม) และไม่เพียงแค่ใช้ไฟล์ PDF ของการแจกแจงแบบเกาส์ / ปกติโดยตรงได้หรือไม่ หรือมันผิดทั้งหมด?
อรุณ

4
@Arun เหตุผลหนึ่ง: วิธีโพลาร์ของ Marsaglia มีประโยชน์เมื่อคุณมี RNG ที่สร้างความเบี่ยงเบนสม่ำเสมอ
chl

1
@ วิ่งมันเป็นวิธีที่ง่ายที่สุด คุณยังสามารถสร้างจาก pdf ได้โดยตรงโดยใช้ตัวอย่างเช่นวิธีการ "การปฏิเสธการยอมรับ" ฉันโพสต์ตัวอย่างง่ายๆให้กับคุณในเว็บไซต์ของฉัน(เพราะมีเนื้อที่ไม่เพียงพอในช่องแสดงความคิดเห็นที่นี่)
francogrex

4

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

สมมติว่าค่าการสุ่มของคุณมีการกระจายอย่างสม่ำเสมอระหว่าง 0 และ 1 จากนั้นผลรวมจะอยู่ระหว่าง 0 และ 10 ลบ 5 จากผลรวมและค่าเฉลี่ยของการแจกแจงผลลัพธ์จะเป็น 0 ตอนนี้คุณหารผลลัพธ์ด้วยค่าเบี่ยงเบนมาตรฐานของ การแจกแจงแบบปกติ (ใกล้) และคูณผลลัพธ์ด้วยค่าเบี่ยงเบนมาตรฐานที่ต้องการ น่าเสียดายที่ฉันไม่แน่ใจว่าค่าเบี่ยงเบนมาตรฐานของผลรวมของการสุ่มสิบชุดเท่ากันคืออะไร แต่ถ้าเราโชคดีมีคนจะบอกเราในความคิดเห็น!

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


คุณกำลังใช้ Thm ขีด จำกัด กลางที่นี่ (นั่นคือตัวแปรสุ่มของ iid รวมกับตัวแปรสุ่มปกติ) ฉันไม่ได้พิจารณาเรื่องนี้เพราะฉันคิดว่ามันช้าเกินไป แต่คุณบอกว่า 10 เพียงพอแล้ว! นี่ดีกว่าการคำนวณล็อกและ sin / cos และ sqrt!
Fixee

นอกจากนี้ค่าเฉลี่ยของ rv สม่ำเสมอใน [0,1] คือ 0.5 ที่มีความแปรปรวน 1/12 หากคุณรวม 10 สิ่งเหล่านี้คุณจะได้ค่าเฉลี่ย 5 และความแปรปรวน 10/12 = 5/6
Fixee

1
จากมุมมองของการสอนวิธีการนี้ให้การอภิปรายที่ดีและมีประโยชน์ อย่างไรก็ตามฉันขอกีดกันไม่ให้ใครใช้วิธีนี้ในทางปฏิบัติ
พระคาร์ดินัล

1
เข้าสู่ระบบบาปcos

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