การใช้ข้อผิดพลาดมาตรฐานของการกระจาย bootstrap


19

(เพิกเฉยต่อรหัส R หากจำเป็นเนื่องจากคำถามหลักของฉันคือภาษาที่ไม่ขึ้นต่อกัน)

หากฉันต้องการดูความแปรปรวนของสถิติอย่างง่าย (เช่นค่าเฉลี่ย) ฉันรู้ว่าฉันสามารถทำได้ผ่านทางทฤษฎีเช่น:

x = rnorm(50)

# Estimate standard error from theory
summary(lm(x~1))
# same as...
sd(x) / sqrt(length(x))

หรือด้วย bootstrap เช่น:

library(boot)

# Estimate standard error from bootstrap
(x.bs = boot(x, function(x, inds) mean(x[inds]), 1000))
# which is simply the standard *deviation* of the bootstrap distribution...
sd(x.bs$t)

อย่างไรก็ตามสิ่งที่ฉันสงสัยคือมันจะมีประโยชน์ / ถูกต้อง (?) เพื่อดูข้อผิดพลาดมาตรฐานของการกระจาย bootstrap ในบางสถานการณ์? สถานการณ์ที่ฉันกำลังเผชิญกับเป็นฟังก์ชั่นไม่เชิงเส้นที่ค่อนข้างมีเสียงดังเช่น:

# Simulate dataset
set.seed(12345)
n   = 100
x   = runif(n, 0, 20)
y   = SSasymp(x, 5, 1, -1) + rnorm(n, sd=2)
dat = data.frame(x, y)

ที่นี่แบบจำลองไม่ได้รวมกันโดยใช้ชุดข้อมูลดั้งเดิม

> (fit = nls(y ~ SSasymp(x, Asym, R0, lrc), dat))
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

ดังนั้นสถิติที่ฉันสนใจแทนที่จะเป็นค่าประมาณที่เสถียรยิ่งขึ้นของพารามิเตอร์ nls เหล่านี้ - บางทีค่าเฉลี่ยของพวกเขาในการทำซ้ำ bootstrap

# Obtain mean bootstrap nls parameter estimates
fit.bs = boot(dat, function(dat, inds)
              tryCatch(coef(nls(y ~ SSasymp(x, Asym, R0, lrc), dat[inds, ])),
                       error=function(e) c(NA, NA, NA)), 100)
pars = colMeans(fit.bs$t, na.rm=T)

ที่นี่มีอยู่ในสวนบอลของสิ่งที่ฉันใช้ในการจำลองข้อมูลเดิม:

> pars
[1]  5.606190  1.859591 -1.390816

เวอร์ชันที่ลงจุดดูเหมือนว่า:

# Plot
with(dat, plot(x, y))

newx = seq(min(x), max(x), len=100)
lines(newx, SSasymp(newx, pars[1], pars[2], pars[3]))

lines(newx, SSasymp(newx, 5, 1, -1), col='red')
legend('bottomright', c('Actual', 'Predicted'), bty='n', lty=1, col=2:1)

ป้อนคำอธิบายรูปภาพที่นี่

ทีนี้ถ้าฉันต้องการความแปรปรวนของการประมาณค่าพารามิเตอร์ที่มีความเสถียรเหล่านี้ฉันคิดว่าฉันสามารถทำได้สมมติว่าปกติของการกระจาย bootstrap นี้เพียงแค่คำนวณข้อผิดพลาดมาตรฐานของพวกเขา:

> apply(fit.bs$t, 2, function(x) sd(x, na.rm=T) / sqrt(length(na.omit(x))))
[1] 0.08369921 0.17230957 0.08386824

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

ขอบคุณมากและโดยวิธีฉันเป็นวิศวกรดังนั้นโปรดยกโทษให้ฉันเป็นสามเณรญาติรอบที่นี่

คำตอบ:


13

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

--

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

  • การประมาณค่า bootstrapped โดยเฉลี่ยในขณะที่ทิ้งตัวอย่าง bootstrapped ซึ่งสุ่มไม่ได้คำนวณโดยทั่วไปจะให้ผลลัพธ์แบบเอนเอียง

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

Xθ^θ^(X)Y

θ~(X)=E(θ^(Y)|X,A(X))
A(X)Xθ^(Y)NA-XA(X)θ~(X)

θ^(Y)XA(X)θ~(X)

A(X)θ~(X)

แก้ไข :

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


ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม ประเด็นเรื่องอคตินั้นได้รับความสนใจเป็นพิเศษ คุณสามารถจินตนาการกรณีที่รุนแรงที่จุดเมฆมีความเหมือนกันโดยสิ้นเชิงประหยัดสำหรับจุดที่ห่างไกลชุดเดียวที่พอดีกับแบบจำลองอย่างมาก ความnlsพอดีส่วนใหญ่อาจล้มเหลว แต่ในสิ่งที่มาบรรจบกันความเอนเอียงจะมีขนาดใหญ่มาก nlsBootใช้ข้อกำหนดเฉพาะของ 50% พอดี แต่ฉันเห็นด้วยกับคุณว่า (dis) ความคล้ายคลึงกันของการแจกแจงแบบมีเงื่อนไขนั้นเป็นเรื่องที่น่ากังวล
John Colby

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