Bootstrap, Monte Carlo


12

ฉันถูกตั้งคำถามต่อไปนี้เป็นส่วนหนึ่งของการบ้าน:

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

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

ไม่มีใครรู้วิธีที่จะไปเกี่ยวกับแง่มุมการเปลี่ยนแปลงของ Monte Carlo นี้? ฉันไม่สามารถแม้แต่จะหาอัลกอริทึมหรืออะไรก็ได้ มันจะทำอย่างไรกับการรวม Monte Carlo? ขอบคุณ!

คำตอบ:


18

ความสับสนระหว่างโพรซีเดอร์บู๊ตสแตรปกับโพรซีเดอร์มอนติคาร์โลนั้นเกิดขึ้นซ้ำ ๆ ดังนั้นนี่อาจเป็นสถานที่ที่ดีพอที่จะกล่าวถึง (ตัวอย่างของRรหัสอาจช่วยทำการบ้านด้วย)

พิจารณาการติดตั้ง bootstrap ในR:

boot <- function(x, t) { # Exact bootstrap of procedure t on data x
    n <- length(x)       # Must lie between 2 and 7 inclusive.
    if (n > 7) {
        stop("Sample size exceeds 7; use an approximate method instead.")
    }
    p <- c(n, 1:(n-1))
    a <- rep(x, n^(n-1))
    dim(a) <- rep(n, n)
    y <- as.vector(a)
    while (n > 1) {
        n <- n-1
        a <- aperm(a, p)
        y <- cbind(as.vector(a), y)
    }
    apply(y, 1, t)
}

การดูอย่างรวดเร็วจะยืนยันว่านี่เป็นการคำนวณที่กำหนดขึ้นมา : ไม่มีการสร้างหรือใช้ค่าสุ่ม (ฉันจะปล่อยให้รายละเอียดของการทำงานภายในของมันสำหรับผู้อ่านที่สนใจจะคิดออกเอง)

อาร์กิวเมนต์ที่bootใช้เป็นชุดของข้อมูลตัวเลขในอาเรย์xและการอ้างอิงtไปยังฟังก์ชัน (ซึ่งสามารถนำไปใช้กับอาร์เรย์ที่เหมือนกันx) เพื่อส่งคืนค่าตัวเลขเดียว ในคำอื่น ๆ ที่tเป็นสถิติ มันสร้างตัวอย่างที่เป็นไปได้ทั้งหมดด้วยการแทนที่จากxและนำtไปใช้กับแต่ละรายการดังนั้นจึงสร้างหมายเลขหนึ่งสำหรับตัวอย่างแต่ละตัวอย่าง: นั่นคือ bootstrap โดยย่อ ค่าตอบแทนเป็นอาร์เรย์ที่เป็นตัวแทนของการกระจายบูตที่แน่นอนของสำหรับตัวอย่างtx

เป็นตัวอย่างเล็ก ๆลอง bootstrap ค่าเฉลี่ยสำหรับตัวอย่างx= c(1,3):

> boot(c(1,3), mean)
> [1] 1 2 2 3

มีตัวอย่างที่เป็นไปได้ของขนาดมีอยู่สี่ตัวที่สามารถแทนที่ได้จาก ; คือ , ,และ(3,3) สร้างพวกเขาทั้งหมด (ตามลำดับที่แสดงรายการไว้) และนำไปใช้กับแต่ละรายการ ในกรณีนี้คำนวณค่าเฉลี่ยและค่าที่ได้คือ , ,และตามลำดับดังแสดงในเอาต์พุต( 1 , 3 ) ( 1 , 1 ) ( 1 , 3 ) ( 3 , 1 ) ( 3 , 3 ) 1 2 2 32(1,3)(1,1)(1,3)(3,1)(3,3)boottt1223

ที่ที่คุณไปจากที่นี่ขึ้นอยู่กับวิธีที่คุณต้องการใช้ bootstrap เต็มข้อมูลเกี่ยวกับการบูตที่มีอยู่ในอาร์เรย์การส่งออกนี้จึงมักจะเป็นความคิดที่ดีที่จะแสดง นี่คือตัวอย่างที่ค่าเบี่ยงเบนมาตรฐานถูก bootstrapped จากตัวอย่าง :(1,3,3,4,7)

hist(boot(c(1,3,3,4,7), sd))

ฮิสโตแกรมของ SD

ตอนนี้เราพร้อมที่จะพูดคุยเกี่ยวกับการจำลอง Monte Carlo สมมติว่าเราจะเริ่มต้นขีด จำกัด ความเชื่อมั่นสูงสุด 95% ใน SD จากตัวอย่างโดยใช้เปอร์เซ็นต์ไทล์ 95 บนของการกระจายบูทสแตรปของมัน ขั้นตอนนี้จะมีคุณสมบัติใด วิธีหนึ่งในการค้นหาคือสมมติว่ากลุ่มตัวอย่างได้มาจากการสุ่มการกระจายตัวแบบสม่ำเสมอ (แอปพลิเคชันมักจะระบุว่าสมมติฐานการกระจายสินค้าที่สมเหตุสมผลอาจเป็นอย่างไรที่นี่ฉันเลือกโดยพลการที่ง่ายสำหรับการคำนวณ แต่ไม่ใช่เรื่องง่ายที่จะจัดการกับการวิเคราะห์) เราสามารถจำลองสิ่งที่เกิดขึ้นโดยการใช้ตัวอย่างและคำนวณ UCL:5

> set.seed(17)
> quantile(boot(runif(5, min=0, max=10), sd), .95)[1]
     95% 
3.835870 

ผลสำหรับ The นี้ตัวอย่างโดยเฉพาะอย่างยิ่งสุ่ม 3.83587 นี้เป็นที่ชัดเจน: คุณกำลังจะเรียกbootอีกครั้งกับเดียวกันชุดของข้อมูล, คำตอบจะตรงเดียวกัน แต่คำตอบอาจเปลี่ยนไปอย่างไรกับกลุ่มตัวอย่างที่แตกต่างกัน? ค้นหาโดยทำซ้ำกระบวนการนี้สองสามครั้งแล้ววาดฮิสโตแกรมของผลลัพธ์:

> boot.sd <- replicate(100, quantile(boot(runif(5, min=0, max=10), sd), .95)[1])
> hist(boot.sd)

ฮิสโตแกรมของการจำลอง

ถ้าเราทำแบบจำลองอีกชุดการสุ่มจับจะออกมาแตกต่างกันสร้างฮิสโตแกรมต่าง ๆ (เล็กน้อย) - แต่ไม่แตกต่างจากอันนี้มาก เราสามารถใช้ด้วยความมั่นใจเพื่อทำความเข้าใจว่า bootstrap UCL ของ SD ทำงานอย่างไร สำหรับการอ้างอิงแจ้งให้ทราบว่าเบี่ยงเบนมาตรฐานของเครื่องแบบกระจาย (ทอดช่วงตั้งแต่ที่จะตามที่ระบุไว้ที่นี่) เท่ากับ2.887 ในฐานะที่เป็นหนึ่งหวังว่า UCL ใด ๆ ที่มีมูลค่าเกลือส่วนใหญ่ (สามในสี่หรือ 0.75) ของค่าในฮิสโตแกรมเกินค่านี้:10 10 / 01010/122.887

> length(boot.sd[boot.sd >= 10/sqrt(12)]) / length(boot.sd)
[1] 0.75

แต่ไม่มีที่ไหนใกล้ 95% ที่เราระบุ (และหวังว่าจะได้)! นี่คือค่าหนึ่งของการจำลอง: เปรียบเทียบความหวังของเรากับสิ่งที่เกิดขึ้นจริง (ทำไมความแตกต่างฉันเชื่อว่ามันเป็นเพราะ bootstrapping SD ไม่ทำงานได้ดีกับตัวอย่างขนาดเล็กจริงๆ)

ทบทวน

  • สถิติ Bootstrap นั้นมีแนวคิดเหมือนกับสถิติอื่น ๆ เช่นค่าเฉลี่ยหรือส่วนเบี่ยงเบนมาตรฐาน พวกเขามักจะใช้เวลานานในการคำนวณ (ดูข้อความเตือนในbootรหัส!)

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

  • (ไม่ได้แสดงไว้ที่นี่) เนื่องจากสถิติ bootstrap สามารถใช้การคำนวณจำนวนมาก (เห็นได้ชัดว่ามีการคำนวณสูงสุดสำหรับตัวอย่างขนาด ) จึงสะดวกในการประมาณการกระจาย bootstrap สิ่งนี้มักจะทำโดยการสร้างโปรแกรม "กล่องดำ" เพื่อรับค่าหนึ่งค่าโดยการสุ่มจากการกระจาย bootstrap ที่แท้จริงและเรียกโปรแกรมนั้นซ้ำ ๆ เอาต์พุตแบบรวมประมาณการกระจายที่แน่นอน การประมาณสามารถเปลี่ยนแปลงได้เนื่องจากการสุ่มในกล่องดำ - แต่การเปลี่ยนแปลงนั้นเป็นสิ่งประดิษฐ์ของขั้นตอนการประมาณ มันไม่ได้ (โดยทางความคิด) โดยธรรมชาติในขั้นตอนการบูตตัวเอง nnnn


+1 นี่เป็นสิ่งที่ดีมาก ฉันไม่คิดว่าฉันจะทำได้ดีกว่านี้! ฉันจะเพิ่มว่าฉันมีเอกสารบางอย่างเกี่ยวกับประสิทธิภาพของ bootstrap ในการประมาณอัตราข้อผิดพลาดและสำหรับช่วงความมั่นใจเมื่อประเมินความแปรปรวน ผลลัพธ์เหล่านี้สามารถพบได้ในวิธีการ bootstrap รุ่นที่สองของฉันและหนังสือของฉันเกี่ยวกับการบูตสแตรปกับแอปพลิเคชั่นของ R.
Michael R. Chernick

การเชื่อมโยง Amazon เพื่อหนังสืออยู่ที่นี่: amazon.com/... amazon.com/Introduction-Bootstrap-Methods-Applications/dp/...
ไมเคิลอา Chernick

ฉันแค่จะบอกว่าความคิดคือการจำลองข้อมูลจากการแจกแจงที่รู้จักใช้ขั้นตอนการบูตที่น่าสนใจ (เช่นช่วงความเชื่อมั่นสำหรับพารามิเตอร์หรือการประมาณอัตราความผิดพลาดของลักษณนาม) และคุณสามารถประเมินว่ามันทำได้ดีแค่ไหนเพราะคุณรู้ความจริง
Michael R. Chernick

5

bootstrap เป็นเทคนิค Monte Carlo ซึ่งเกี่ยวข้องกับการสุ่มตัวอย่างบางประเภท หากคุณรัน bootstrap สองครั้งในชุดข้อมูลเดียวกันคุณจะได้รับคำตอบที่แตกต่างกัน ยิ่งคุณใช้ตัวอย่างใน bootstrap มากเท่าไหร่คุณก็จะได้รูปแบบที่น้อย

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


ขอบคุณฉันจะสมมติว่ามันหมายถึงการเกิดขึ้นกับรหัสเพื่อดูว่าข้อ จำกัด ความเชื่อมั่นแตกต่างระหว่างการจำลองแล้ว!
ซาร่าห์

7
เพื่อความแม่นยำ (pedantic?) เราควรชี้แจงว่า bootstrap นั้นไม่ได้เป็นเทคนิค Monte Carlo อย่างไรก็ตามมันมักจะประมาณโดยใช้การจำลองแบบมอนติคาร์โลเพราะมันมักจะไม่เวิ้งว้างในการคำนวณปริมาณที่น่าสนใจโดยเฉพาะ ฉันพบว่าข้อความของปัญหามีแนวโน้มที่จะตีความผิดเช่นกัน! เราต้องใช้ความระมัดระวังในการแยกแยะข้อผิดพลาดการสุ่มตัวอย่างจากข้อผิดพลาดในการประมาณ Monte Carlo หลังถูกประเมินอย่างสมเหตุสมผลเท่านั้นโดยทำซ้ำการประมาณการบูต MC ซ้ำหลาย ๆ ครั้งในตัวอย่างเดียวกันตามที่คุณชี้ให้เห็น :)
สำคัญ

1

ฉันไม่แน่ใจว่าสิ่งที่มีความหมายโดย "การเปลี่ยนแปลงMonte Carlo " ต่อ se เช่นกัน แน่นอนว่ามันควรจะเป็นไปได้ที่จะดูว่ามีความผันแปรเท่าไหร่ในการวนซ้ำในสิ่งต่าง ๆ เช่นค่าของขีด จำกัด บน (หรือต่ำกว่า) ตัวอย่างเช่น (คำใบ้) บางทีพวกเขาต้องการให้คุณทำสิ่งนี้กับ Monte Carlo เท่านั้นไม่ใช่เป็น bootstrap? นั่นไม่ใช่ข้อกำหนดที่ฉันต้องการสำหรับการออกกำลังกาย อาจเป็นการดีที่สุดที่จะถามว่าวลีนั้นมีความหมายอย่างไร


ขอบคุณสำหรับความช่วยเหลือของคุณ! บางทีฉันอาจจะดูความแตกต่างระหว่างขีด จำกัด บนและล่างสำหรับตอนนี้และถามเกี่ยวกับ Monte Carlo ในภายหลัง ตอนนี้เพียงแค่คิดออกว่าฉันจะไปอย่างไร ..
ซาราห์

มีความเป็นไปได้หลายอย่างที่นี่ หนึ่งคือบนล่าง (เช่นความแตกต่าง) การตีความของฉันเกี่ยวกับการใช้ถ้อยคำในคำถามคือการเปลี่ยนแปลงในส่วนบนและการเปลี่ยนแปลงในระดับต่ำ (เช่น 2 รูปแบบที่แตกต่างกัน) แต่ฉันคิดว่าฉันไม่แน่ใจ ในหมายเหตุอื่นเป็นส่วนหนึ่งของคำถามของคุณวิธีดำเนินการจำลอง MC ใน R หรือไม่
gung - Reinstate Monica

ฉันมาถึงข้อสรุปว่ามันกำลังมองหารูปแบบที่แตกต่างกัน 2 เช่นกันดังนั้นคิดว่าฉันจะลอง!
ซาร่าห์

1
ยุติธรรมเพียงพอสิ่งที่ฉันสงสัยในตอนนี้คือคุณดีที่จะไปที่จุดนี้หรือคุณต้องการคำแนะนำเพิ่มเติมเกี่ยวกับวิธีการเข้าใกล้สิ่งที่เราคาดเดาคำถามที่ถาม?
gung - Reinstate Monica

1
ดังนั้นในการวนซ้ำแต่ละครั้งคุณจัดเก็บขีด จำกัด บนและล่าง (คำใบ้) หรือไม่
gung - Reinstate Monica

1

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

ตอนนี้เทคนิคที่เป็นปัญหาคือ bootstrap ซึ่งเกี่ยวข้องกับการจำลอง Monte Carlo ภายในมัน (เว้นแต่จะแสดงให้เห็นอย่างชัดเจนว่าคุณได้รับการขอให้ปฏิบัติ bootstrap ที่แน่นอนซึ่งไม่น่าเป็นไปได้มาก) ดังนั้นในผลลัพธ์ของแบบจำลองของคุณคุณอาจเก็บค่าเฉลี่ยตัวอย่างส่วนเบี่ยงเบนมาตรฐานตัวอย่างและขีด จำกัด ของช่วงความมั่นใจสำหรับค่าเฉลี่ยที่ได้รับจาก bootstrap

ฉันคิดว่าการทำให้การศึกษานี้น่าสนใจมันควรค่าแก่การเลือกตัวอย่างขนาดเล็ก ( ) จากการแจกแจงแบบเบ้ (exponential) ด้วยวิธีนี้ช่วงความเชื่อมั่นที่อิงกับ CLT มาตรฐานจะมีประสิทธิภาพไม่เพียงพอ: พูดสำหรับช่วงความเชื่อมั่น 90% ที่ต้องพลาด 5% ที่ปลายทั้งสองข้างคุณจะเห็นอะไรประมาณ 10% และ 2% bootstrap CI อาจแสดงประสิทธิภาพที่ดีขึ้น (เช่น 6% และ 4%)n=10


3
สิ่งหนึ่งที่ฉันได้เรียนรู้จากการทำงานกับ bootstrap ที่แน่นอนก็คือ CI ตามทฤษฎีมาตรฐานมักจะทำงานได้ดีขึ้นมากกับตัวอย่างเล็ก ๆ แม้ว่ามันจะเบ้ bootstrap นั้นเข้ามาในตัวมันเองพร้อมกับตัวอย่างขนาดใหญ่: ทฤษฎีนั้นเป็น asymptotic อันหนึ่งไม่ใช่อันที่แน่นอน
whuber

2
@whuber นั่นเป็นข้อสังเกตที่น่าสนใจ ฉันมักจะเน้นถึงลักษณะเชิง asymptotic ของ bootstrap (ดูหนังสือ The Bootstrap และ Edgeworth Expansions ของ Peter Hall เพื่อทำความเข้าใจว่าทำไม) แต่ไม่สำเร็จในครั้งนี้
StasK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.