bootstrap ถูกมองว่าเป็น“ การรักษา” สำหรับตัวอย่างขนาดเล็กหรือไม่?


71

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

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

ในความคิดของฉันนั่นไม่ใช่สิ่งที่ bootstrap มีไว้สำหรับ นี่คือวิธีที่ฉันเห็น: bootstrap สามารถให้ขอบเมื่อเห็นได้ชัดว่ามีข้อมูลเพียงพอหรือไม่ แต่ไม่มีวิธีแก้ปัญหาแบบปิดเพื่อรับข้อผิดพลาดมาตรฐานค่า p และสถิติที่คล้ายกัน ตัวอย่างคลาสสิกคือการได้รับ CI สำหรับค่าสัมประสิทธิ์สหสัมพันธ์ที่ได้รับตัวอย่างจากการแจกแจงปกติแบบ bivariate: การแก้ปัญหาแบบปิดมีอยู่ แต่มันซับซ้อนมากที่ bootstrapping ง่าย อย่างไรก็ตามไม่มีสิ่งใดที่บ่งบอกว่า bootstrap สามารถช่วยได้ด้วยขนาดตัวอย่างที่เล็ก

การรับรู้ของฉันถูกต้องหรือไม่

หากคุณพบว่าคำถามนี้น่าสนใจมีคำถาม bootstrap ที่เฉพาะเจาะจงมากขึ้นจากฉัน:

Bootstrap: ปัญหาการ overfitting

ป.ล. ฉันไม่สามารถช่วยแบ่งปันหนึ่งตัวอย่างที่น่าเกรงขามของ "วิธีบูตสแตรป" ฉันไม่ได้เปิดเผยชื่อผู้แต่ง แต่เขาเป็นหนึ่งใน "คนรุ่นเก่า" ที่เขียนหนังสือเกี่ยวกับการเงินเชิงปริมาณในปี 2547 ตัวอย่างนี้นำมาจากที่นั่น

ลองพิจารณาปัญหาต่อไปนี้: สมมติว่าคุณมีสินทรัพย์ 4 รายการและการสังเกตผลตอบแทน 120 เดือนต่อครั้ง เป้าหมายคือการสร้าง cdf 4 มิติร่วมของผลตอบแทนรายปี แม้จะเป็นทรัพย์สินชิ้นเดียวงานก็ดูเหมือนจะบรรลุได้ยากด้วยการสังเกตเพียง 10 ปีเท่านั้นนับประสาประมาณ 4 มิติ cdf แต่ไม่ต้องกังวล“ bootstrap” จะช่วยคุณออก: นำการสังเกตแบบ 4 มิติทั้งหมดที่มีอยู่มาทำการสุ่มตัวอย่างที่ 12 ด้วยการแทนที่ ทำซ้ำ 1,000 ครั้งและแท้จริงแล้วดูเถิดคุณมี“ ตัวอย่างบูตสแตรป” ของผลตอบแทน 1,000 ครั้งต่อปี ใช้สิ่งนี้เป็นตัวอย่าง iid ขนาด 1,000 เพื่อจุดประสงค์ในการประมาณค่า cdf หรือการอนุมานอื่น ๆ ที่สามารถดึงมาจากประวัติพันปี


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

ในหนังสือของ Simon Sheather (รูปที่ 3.40) มีแผนภูมิการไหลสำหรับการถดถอยที่แนะนำ bootstrap สำหรับการอนุมานเมื่อขนาดของกลุ่มตัวอย่างมีขนาดไม่ใหญ่และข้อผิดพลาดจะไม่กระจายตามปกติ
Tony Ladson

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

bootstrap ไม่เพียงให้คุณคำพิเศษในการขยาย edgeworth - เช่นประมาณปกติกับคำแก้ไข?
ความน่าจะเป็นทาง

คำตอบ:


34

ฉันจำได้ว่าการอ่านว่าการใช้ช่วงความเชื่อมั่นแบบเปอร์เซนต์สำหรับการบูตสเต็ปนั้นเทียบเท่ากับการใช้ช่วงเวลา Z แทนช่วงเวลา T และใช้แทนn - 1สำหรับตัวส่วน น่าเสียดายที่ฉันจำไม่ได้ว่าอ่านตรงไหนและไม่พบข้อมูลอ้างอิงในการค้นหาด่วน ความแตกต่างเหล่านี้ไม่สำคัญมากเมื่อ n มีขนาดใหญ่ (และข้อดีของ bootstrap มีมากกว่าปัญหาเล็กน้อยเหล่านี้เมื่อnมีขนาดใหญ่) แต่ด้วยnขนาดเล็กอาจทำให้เกิดปัญหาได้ นี่คือรหัส R เพื่อจำลองและเปรียบเทียบ:nn1nn

simfun <- function(n=5) {
    x <- rnorm(n)
    m.x <- mean(x)
    s.x <- sd(x)
    z <- m.x/(1/sqrt(n))
    t <- m.x/(s.x/sqrt(n))
    b <- replicate(10000, mean(sample(x, replace=TRUE)))
    c( t=abs(t) > qt(0.975,n-1), z=abs(z) > qnorm(0.975),
        z2 = abs(t) > qnorm(0.975), 
        b= (0 < quantile(b, 0.025)) | (0 > quantile(b, 0.975))
     )
}

out <- replicate(10000, simfun())
rowMeans(out)

ผลลัพธ์ของฉันสำหรับการวิ่งครั้งเดียวคือ:

     t      z     z2 b.2.5% 
0.0486 0.0493 0.1199 0.1631 

α


6
ประโยคสุดท้ายของคุณทำให้ฉันอยากรู้อยากเห็นดังนั้นฉันจึงลองกับตัวอย่างของคุณ ฉันใช้bootแพคเกจและให้ช่วงเวลาที่เป็นไปได้ทั้งหมด: ช่วงแรกการประมาณปกติช่วง bootstrap พื้นฐานช่วง bootstrap studentizedized ช่วง bootstrap เปอร์เซ็นไทล์ช่วงเวลา (ซึ่งรหัสของคุณให้แล้ว) และปรับ bootstrap เปอร์เซ็นไทล์ (BCa) ระยะห่าง ผลลัพธ์เป็นเหมือนกันทั้งหมด (อัตราการปฏิเสธรอบ. 16-.17) ยกเว้นช่วงเวลาที่ทำให้เป็นนักเรียนซึ่งมีอัตราการปฏิเสธเล็กน้อย (.05) อัตราการปฏิเสธ (ซึ่งทำให้เข้าใจได้
Wolfgang

2
@ Wolfgang ขอบคุณสำหรับการทำแบบจำลองเพิ่มเติม ฉันรู้สึกประหลาดใจเล็กน้อยที่ช่วงเวลาอื่น ๆ ไม่ได้ดีขึ้นเล็กน้อย แต่ไม่แปลกใจที่พวกเขาไม่ได้พบกับระดับ 0.05
Greg Snow

1
ใช่ฉันรู้สึกประหลาดใจเช่นกัน! บางครั้งสัญชาตญาณของเราก็ล้มเหลว นั่นเป็นเหตุผลที่ยอดเยี่ยมมากที่สามารถเขียนสคริปต์เล็ก ๆ น้อย ๆ ใน R ภายในไม่กี่นาทีเรียกใช้10,000 \times 10,000การวนซ้ำ (ใช้เวลาอีกสองสามนาทีจึงจะเสร็จสมบูรณ์) และสามารถตรวจสอบสิ่งต่าง ๆ ได้ และตัวอย่างของคุณแสดงให้เห็นอย่างชัดเจนว่า bootstrap สามารถทำงานได้ไม่ดีกับกลุ่มตัวอย่างขนาดเล็กแม้ว่าสิ่งต่าง ๆ จะ "ดี" (เช่นข้อมูลเป็นปกติ)
Wolfgang

อันที่จริงปัญหาที่เห็นในการจำลองนี้เป็นสิ่งหนึ่งที่ผมถามเกี่ยวกับที่นี่และได้รับคำตอบในการแสดงความคิดเห็นโดย @whuber: stats.stackexchange.com/questions/323455/... ดังนั้นฉันไม่คิดว่าปัญหาคือขนาดตัวอย่าง แต่เป็นการละเมิดความเป็นอิสระสำหรับการอนุมานพารามิเตอร์ภายในแต่ละตัวอย่าง
ครึ่ง

2
zt

14

หากคุณได้รับตัวอย่างขนาดเล็ก (เป็นไซด์ไลท์สิ่งที่ "เล็ก" ดูเหมือนจะขึ้นอยู่กับกฎจารีตประเพณีพื้นฐานบางอย่างในแต่ละสาขาการวิจัย) ไม่มี bootstrap จะทำเวทย์มนตร์ สมมติว่าฐานข้อมูลมีข้อสังเกตสามประการสำหรับแต่ละตัวแปรสองตัวที่อยู่ภายใต้การสอบสวนไม่มีข้อสรุปที่สมเหตุสมผล จากประสบการณ์ของฉัน bootstrap ที่ไม่ใช่พารามิเตอร์ (1,000 หรือ 10,000 ซ้ำ) ทำงานได้ดีในการแทนที่การทดสอบ t เมื่อการแจกแจงตัวอย่าง (อย่างน้อย 10-15 การสังเกตแต่ละครั้ง) จะเบ้และสิ่งที่จำเป็นสำหรับการทดสอบตามปกติไม่พอใจ นอกจากนี้ไม่ว่าจะมีการสังเกตจำนวนมาก bootstrap ที่ไม่ใช่พารามิเตอร์อาจเป็นตัวเลือกที่จำเป็นเมื่อข้อมูลมีการเปลี่ยนแปลงในทางบวกเนื่องจากมักจะเกิดขึ้นสำหรับค่าใช้จ่ายด้านการดูแลสุขภาพ


1
bootstrap อาจเป็นตัวเลือกที่จำเป็นเมื่อมีการบิดเบือนข้อมูลในเชิงบวก - ทำไมไม่ใช้ lognormal หรือการแจกแจงแบบเบ้แทนที่คล้ายกันแทน SAS และ R มีตัวเลือกมากมาย
James

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

Carlo เนื่องจากคุณมีประสบการณ์เกี่ยวกับการเปลี่ยนแปลงบันทึกคุณอาจต้องการตอบคำถามอีกเรื่องหนึ่งของฉัน (มีค่าหัว 50 คะแนน): stats.stackexchange.com/a/111932/54099
James

เจมส์ฉันได้ให้คำตอบสำหรับคำถามของคุณเมื่อหลายนาทีก่อน
Carlo Lazzaro

tχ12

13

คำตอบอื่น ๆ วิพากษ์วิจารณ์ประสิทธิภาพการทำงานของช่วงความเชื่อมั่น bootstrap ไม่ใช่ bootstrap ตัวเอง นี่เป็นปัญหาที่แตกต่าง

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

ในกรณีที่คุณจริงๆต้องการที่จะพบปัญหาของการใช้บูตไม่อิงพารามิเตอร์ที่นี่มีสองปัญหา:

(1) ปัญหาเกี่ยวกับการปรับตัวอย่างซ้ำ

ปัญหาอย่างหนึ่งของ bootstrap สำหรับตัวอย่างขนาดเล็กหรือใหญ่คือขั้นตอนการสุ่มตัวอย่างใหม่ มันเป็นไปไม่ได้ที่จะสุ่มตัวอย่างอีกครั้งในขณะที่รักษาโครงสร้าง (การพึ่งพาอาศัยชั่วคราว ... ) ของตัวอย่าง ตัวอย่างนี้เป็นกระบวนการ superposed

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

คุณจะลองอีกครั้งในขณะที่รักษาโครงสร้างที่ไม่รู้จักพึ่งพาได้อย่างไร

(2) ตัวอย่างบูตแคบและช่วงความเชื่อมั่นบูตสำหรับตัวอย่างขนาดเล็ก

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

x1,x2Exp(λ)λ>0

set.seed(1)
x <- rexp(2,1)
# Maximum likelihood estimator
1/mean(x)

# Profile likelihood: provides a confidence interval with right-end point beyond the maximum inverse of the mean
Rp <- Vectorize(function(l) exp(sum(dexp(x,rate=l,log=T))-sum(dexp(x,rate=1/mean(x),log=T))))

curve(Rp,0,5)
lines(c(0,5),c(0.147,0.147),col="red")

λλ^=2/(x1+x2)

library(boot)
set.seed(1)
x <- rexp(2,1)
1/mean(x)
# Bootstrap interval: limited to the maximum inverse of the mean
f.boot <- function(data,ind) 1/mean(data[ind])
b.b <- boot(data=x, statistic=f.boot, R=100000)
boot.ci(b.b, conf = 0.95, type = "all")
hist(b.b$t)

x1x2


6

Bootstrap ทำงานได้ดีในขนาดตัวอย่างขนาดเล็กโดยตรวจสอบความถูกต้องของการทดสอบ (เช่นระดับนัยสำคัญ 0.05 อยู่ใกล้กับขนาดที่แท้จริงของการทดสอบ) อย่างไรก็ตาม bootstrap ไม่ได้ให้อำนาจพิเศษอย่างน่าอัศจรรย์ หากคุณมีตัวอย่างเล็ก ๆ น้อย ๆ แสดงว่าคุณมีพลังน้อยจบเรื่อง

Parametric (โมเดลเชิงเส้น) และ semiparametric (GEE) การถดถอยมีแนวโน้มที่จะมีคุณสมบัติตัวอย่างขนาดเล็กที่ไม่ดี ... ในอดีตเป็นผลมาจากการพึ่งพาขนาดใหญ่บนสมมติฐานของพารามิเตอร์เนื่องจากการขยายตัวของการประมาณค่าความผิดพลาดมาตรฐานที่แข็งแกร่งในกลุ่มตัวอย่างขนาดเล็ก Bootstrapping (และการทดสอบที่ใช้การ resampling อื่น ๆ ) ทำงานได้ดีในสถานการณ์เหล่านั้น

สำหรับการคาดการณ์การบูตสแตรปจะช่วยให้คุณประเมินความถูกต้องภายในได้ดียิ่งขึ้น

n


2
(เช่นว่าระดับนัยสำคัญ 0.05 มีขนาดใกล้เคียงกับขนาดจริงของการทดสอบ) - แต่ในรหัส R ด้านบนเราเพิ่งเห็นว่า bootstrap ไม่รักษาขนาดการทดสอบใช่ไหม
James

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