ฉันควรเลือกรูปแบบการถดถอยแบบ 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.