ฉันควรเลือกรูปแบบการถดถอยแบบ Bootstrapped


10

ฉันมีรูปแบบการถดถอยโลจิสติกแบบไบนารีที่มี DV (โรค: ใช่ / ไม่ใช่) และ 5 ตัวทำนาย (ประชากร [อายุ, เพศ, การสูบบุหรี่ (ใช่ / ไม่ใช่)], ดัชนีทางการแพทย์ (ลำดับ) และหนึ่งการรักษาแบบสุ่ม [ใช่ / ไม่ใช่ ]) ฉันได้ทำแบบจำลองเงื่อนไขการโต้ตอบสองด้านทั้งหมดเช่นกัน ตัวแปรหลักอยู่กึ่งกลางและไม่มีสัญลักษณ์ของความสัมพันธ์หลายระดับ (VIF ทั้งหมด <2.5)

ฉันมีคำถาม:

  1. การบูตสแตรปมีประโยชน์เหนือรุ่นเดียวของฉันหรือไม่ ถ้าเป็นเช่นนั้น

  2. ฉันควรเลือกรุ่น bootstrapped ใด ฉันแค่อยากจะดูว่าอัลกอริทึมการบูตสแตรปทำตามวิธีการสุ่มสำหรับการสร้างตัวอย่างใหม่หรือไม่หรือว่าพวกมันมีอัลกอริธึมที่เข้มงวด ดังนั้นฉันจึงลองใหม่อีกครั้ง 1,000 ครั้งในแต่ละครั้ง (ดังนั้นฉันจึงมีโมเดล bootstrapped หลายแบบแต่ละอันมีการทดลอง 1,000 ครั้ง) อย่างไรก็ตามแต่ละครั้งที่ค่าสัมประสิทธิ์ของรุ่น bootstrapped แตกต่างกัน (แม้ว่าจำนวนการทดลองจะ 1,000 ครั้งอย่างต่อเนื่อง) ดังนั้นฉันสงสัยว่าฉันควรเลือกอันไหนสำหรับรายงานของฉัน การเปลี่ยนแปลงบางอย่างมีขนาดเล็กและไม่มีผลต่อความสำคัญของสัมประสิทธิ์ของฉัน แต่บางอย่างทำให้สัมประสิทธิ์ของฉันไม่สำคัญ (เฉพาะค่า P ที่มีค่าใกล้เคียงกับ 0.05 ในโมเดลดั้งเดิมที่เปลี่ยนเป็น 0.06 เช่น)

  3. ฉันควรเลือกตัวเลขที่สูงกว่าเช่น 10,000 หรือไม่ ฉันจะกำหนดขีด จำกัด นี้ได้อย่างไร

  4. ฉันควรบูตอีกครั้งตั้งแต่แรกไหม หากผลลัพธ์แตกต่างกันในแต่ละครั้งฉันสามารถพึ่งพาผลลัพธ์ได้หรือไม่

  5. คุณมีความคิดเห็นอื่น ๆ ในใจที่สามารถช่วยฉันในกรณีของฉันได้หรือไม่?

ขอบคุณมาก ๆ

คำตอบ:


21

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

  1. bootstrap nonparametric resamples ซ้ำ ๆ และสุ่มดึงการสังเกตของคุณด้วยการแทนที่ (เช่นการสังเกตบางอย่างจะถูกดึงเพียงครั้งเดียวที่คนอื่นหลายครั้งและบางคนไม่เคยเลย) แล้วคำนวณการถดถอยโลจิสติกและเก็บค่าสัมประสิทธิ์ ซ้ำแล้วซ้ำอีกnครั้ง ดังนั้นคุณจะได้ค่าสัมประสิทธิ์การถดถอยต่างกัน 10,000 ค่า ค่าสัมประสิทธิ์ 10'000 เหล่านี้สามารถใช้ในการคำนวณความมั่นใจของพวกเขาได้ เนื่องจากมีการใช้ตัวสร้างตัวเลขสุ่มหลอกคุณสามารถตั้งค่าเมล็ดเป็นหมายเลขที่กำหนดเองเพื่อให้แน่ใจว่าคุณมีผลลัพธ์ที่เหมือนกันทุกครั้ง (ดูตัวอย่างด้านล่าง) เพื่อให้การประมาณการมีความเสถียรจริง ๆ ฉันขอแนะนำให้ทำซ้ำมากกว่า 1,000 ครั้งอาจเป็น 10,000 คุณสามารถเรียกใช้ bootstrap ได้หลายครั้งและดูว่าค่าประมาณเปลี่ยนไปมากแค่ไหนถ้าคุณทำซ้ำ 1,000 หรือ 10'000 ในภาษาอังกฤษธรรมดา: คุณควรทำซ้ำจนกว่าจะถึงจุดบรรจบ หากการประมาณการ bootstrap ของคุณแตกต่างกันไประหว่างการประมาณของคุณกับแบบจำลองเดี่ยวที่สังเกตได้นี่อาจบ่งบอกว่าแบบจำลองที่สังเกตได้นั้นไม่สะท้อนโครงสร้างตัวอย่างของคุณอย่างเหมาะสมbootRตัวอย่างเช่นวาง "อคติ" ซึ่งเป็นความแตกต่างระหว่างสัมประสิทธิ์การถดถอยของแบบจำลองเดี่ยวของคุณและค่าเฉลี่ยของตัวอย่างบูตสแตรป
  2. เมื่อดำเนินการ bootstrap คุณไม่ได้สนใจตัวอย่าง bootstrap เพียงอย่างเดียว แต่ในการกระจายสถิติ (เช่นสัมประสิทธิ์การถดถอย) เหนือตัวอย่าง bootstrap 10'000 ตัวอย่าง
  3. ฉันว่า 10'000 ดีกว่า 1,000 ด้วยคอมพิวเตอร์ที่ทันสมัยนี่ไม่น่าจะมีปัญหา ในตัวอย่างด้านล่างใช้เวลา PC ของฉันประมาณ 45 วินาทีเพื่อสุ่มตัวอย่าง 10'000 ตัวอย่าง สิ่งนี้แตกต่างกันไปตามขนาดตัวอย่างของคุณ ยิ่งขนาดตัวอย่างของคุณใหญ่ขึ้นเท่าใดจำนวนการวนซ้ำที่สูงขึ้นควรจะทำให้แน่ใจว่าการสังเกตทุกครั้งจะถูกนำมาพิจารณา
  4. คุณหมายถึง "ผลลัพธ์ที่แตกต่างกันในแต่ละครั้ง"? จำได้ว่าในทุกขั้นตอน bootstrap การสังเกตจะถูกวาดใหม่พร้อมการเปลี่ยน ดังนั้นคุณน่าจะมีสัมประสิทธิ์การถดถอยต่างกันเล็กน้อยเนื่องจากการสังเกตของคุณแตกต่างกัน แต่อย่างที่ฉันได้พูดไป: คุณไม่ได้สนใจผลการบูทสแตรปเดี่ยว เมื่อจำนวนการทำซ้ำของคุณสูงพอ bootstrap ควรให้ช่วงความมั่นใจและจุดประเมินใกล้เคียงกันทุกครั้ง

นี่คือตัวอย่างในR:

library(boot)

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

head(mydata)

mydata$rank <- factor(mydata$rank)

my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")

summary(my.mod)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# Set up the non-parametric bootstrap

logit.bootstrap <- function(data, indices) {

  d <- data[indices, ]
  fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")

  return(coef(fit))
}

set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here

logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples

logit.boot

Bootstrap Statistics :
        original        bias    std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2*  0.002264426  4.054579e-05 0.001146039
t3*  0.804037549  1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099

# Calculate confidence intervals (Bias corrected ="bca") for each coefficient

boot.ci(logit.boot, type="bca", index=1) # intercept
95%   (-6.292, -1.738 )  
boot.ci(logit.boot, type="bca", index=2) # gre
95%   ( 0.0000,  0.0045 ) 
boot.ci(logit.boot, type="bca", index=3) # gpa
95%   ( 0.1017,  1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95%   (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95%   (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95%   (-2.425, -0.698 )

bootstrap-ouput แสดงสัมประสิทธิ์การถดถอยดั้งเดิม ("ต้นฉบับ") และอคติของพวกเขาซึ่งเป็นความแตกต่างระหว่างสัมประสิทธิ์ดั้งเดิมกับคนที่ถูกบีบอัด นอกจากนี้ยังให้ข้อผิดพลาดมาตรฐาน โปรดทราบว่ามีขนาดใหญ่กว่าข้อผิดพลาดมาตรฐานดั้งเดิมเล็กน้อย

จากช่วงความเชื่อมั่นมักต้องการอคติที่ถูกต้อง ("bca") มันให้ช่วงความมั่นใจในระดับเดิม สำหรับช่วงความเชื่อมั่นสำหรับอัตราส่วนอัตราต่อรองเพียงแค่ชี้แจงขีด จำกัด ของความเชื่อมั่น


ขอบคุณสำหรับคำตอบที่สมบูรณ์แบบ! :) ให้ฉันตอบด้วยวิธีนี้: 1. ฉันคุ้นเคยกับความคิดเล็กน้อย (พยายามคำนวณค่าเฉลี่ยสำหรับ 1,000 สัมประสิทธิ์ที่แตกต่างกันในแบบจำลอง 1,000 แบบที่แตกต่างกัน ขอขอบคุณที่ให้ความกระจ่างว่าสิ่ง "อคติ" และรูปแบบดังกล่าวเกิดขึ้นและเราควรเพิ่มจำนวนครั้ง :) 2.By โดย "bootstrapped model" ฉันไม่ได้หมายถึงโมเดล resampled หนึ่งอัน อย่างไรก็ตามฉันหมายถึงค่าเฉลี่ยของการวนซ้ำ 1,000 ครั้ง จริง ๆ แล้วฉันได้ bootstrapped แบบจำลองของฉัน 10 ครั้งต่อ 1,000 ครั้ง ดังนั้นฉันจึงมี 10 รูปแบบที่ติดมืออยู่ในมือ
— Vic

แต่ละรายการแสดงผลลัพธ์ที่ "แตกต่าง" แต่ฉันจะลองรุ่น bootstrapped สามหรือสี่รุ่นที่มี 10,000 resamplings เพื่อดูว่าจำนวนของ iterations อยู่ที่ 10,000 หรือไม่รุ่น bootstrapped ที่แตกต่างกัน (แต่ละอันมี 10,000) จะคล้ายกันหรือฉันควรเพิ่ม 100,000 อีกหรือไม่
— Vic

@Vic ขอบคุณสำหรับความคิดเห็นของคุณ ฉันจะไม่ทำ 10 bootstraps แต่ละอันด้วย 1,000 iterations แต่เพียงอันเดียวด้วยบอกว่า 10'000 iterations หรือมากกว่านั้น (50'000?) สิ่งนี้จะทำให้การประมาณการและช่วงความเชื่อมั่นของคุณมั่นคง
— COOLSerdash

3. แน่นอนว่าไม่ใช่ปัญหา ฉันแค่อยากจะรู้ว่าควรเลือกหมายเลขนั้นบนพื้นฐานใด ฉันคิดว่าพื้นฐานอาจเป็นไปได้ว่าหากฉันเรียกใช้ bootstrappings สองครั้งจำนวน 1,000 ครั้งลองดูและเห็นว่าพวกเขาแตกต่างกันนั่นหมายความว่าฉันต้องการทดลองการทดสอบซ้ำอีกครั้ง (ตัวอย่างเช่น 5000 หรือ 10,000)
— Vic

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