จะเลือกชุดย่อยการถดถอยโลจิสติกได้อย่างไร?


47

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

ความช่วยเหลือหรือข้อเสนอแนะใด ๆ ที่จะได้รับการชื่นชมอย่างมาก


มีฟังก์ชันที่ทำการค้นหาอัตโนมัติ คุณควรดูที่ฟังก์ชั่นขั้นตอน มาตรา 5.4 แสดงให้เห็นว่าจุด: data.princeton.edu/R/glms.html
ocram

ฉันขอโทษ แต่โพสต์ของฉันถูกแก้ไขเพื่อที่จะไม่ถามคำถามของฉันอีกต่อไป ฉันมีตัวแปรอธิบาย 35 (26 สำคัญ) ในแบบจำลองการถดถอยโลจิสติกของฉัน ฉันต้องการชุดค่าผสมที่ดีที่สุดเท่าที่จะเป็นไปได้ 8 ไม่ใช่ชุดย่อยที่ดีที่สุดและฉันไม่สนใจวิธีการสไตล์ย่อยแบบขั้นตอนหรือชุดย่อยทั้งหมด ไม่มีห้องเลื้อยใน 8 นี้ฉันแค่คิดว่าบางคนอาจรู้ว่าฉันสามารถผสมตัวแปร explantory ทั้งหมด 8 ตัวได้อย่างไรและมันสามารถบอกฉันได้ว่าสิ่งใดที่เพิ่มโอกาสสูงสุด (ขออภัยเกี่ยวกับผายลมสมอง R-squared แต่ AIC ไม่เกี่ยวข้องด้วยเช่นกัน ฉันมีพารามิเตอร์จำนวนคงที่ 8)
Leendert

คุณสามารถเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้าของโพสต์ของคุณหรือรวมทั้งการแก้ไข ฉันแน่ใจว่า @mpiktas เป็นความตั้งใจที่ดีเมื่อพยายามปรับปรุงรูปลักษณ์และไม่ได้สังเกตพารามิเตอร์ No.
chl

@ ทุกคน: ขอบคุณมาก ในท้ายที่สุดฉันใช้สิ่งต่าง ๆ มากมายโดยหวังว่าพวกเขาจะให้คำตอบที่คล้ายกัน และพวกเขาก็ทำ ฉันใช้ BMA แพ็คเกจ bestglm และ glmnet รวมถึงฟังก์ชั่นขั้นตอน โมเดลที่ติดตั้งพร้อมกับพวกเขาทั้งหมดและไม่มีความคลาดเคลื่อนในสิ่งที่กรุงเทพมหานครกับ maxcol = 9 และขั้นตอนถือว่าเป็นรุ่นที่ดีที่สุด ผู้เชี่ยวชาญทุกคนที่อยู่รอบตัวฉันดูเหมือนพอใจกับตัวแปรมากและรู้สึกว่ามันก้าวหน้ามาก ขอบคุณมากสำหรับอินพุตทั้งหมด ฉันใช้ทุกอย่างจริงๆ
Leendert

glmulti ยังเป็นแพ็คเกจที่ดีสำหรับการเลือกชุดย่อยที่ดีที่สุดและหนึ่งช่วยให้คุณระบุตัวแปรสูงสุด nr ในรูปแบบของคุณและยังช่วยให้หนึ่งในการพิจารณาผลกระทบปฏิสัมพันธ์การสั่งซื้อครั้งแรกทั้งหมดที่เป็นไปได้
Tom Wenseleers

คำตอบ:


28

วิธีการแบบตามขั้นตอนและ "ชุดย่อยทั้งหมด" โดยทั่วไปจะไม่ดี ดูการหยุดแบบขั้นตอน: ทำไมวิธีแบบขั้นตอนไม่ดีและสิ่งที่คุณควรใช้โดย David Cassell และตัวฉันเอง (เราใช้ SAS แต่ใช้บทเรียน) หรือกลยุทธ์การสร้างแบบจำลองการถดถอยแฟรงก์ฮาร์เรลล์ หากคุณต้องการวิธีการอัตโนมัติฉันแนะนำ LASSO หรือ LAR มีแพ็คเกจ LASSO สำหรับการถดถอยโลจิสติกอยู่ที่นี่อีกบทความที่น่าสนใจอยู่ในLASSO ซ้ำสำหรับโลจิสติก


6
(+1) เกี่ยวกับแพ็กเกจ R นอกจากนี้ยังมีglmnet (การใช้งานร่วมกับ algo., Friedman และ coll.) และถูกลงโทษ (อนุญาตให้รักษาบางส่วนได้ จากบันทึกย่อ, F. Harrell ให้การประเมิน ML ที่ถูกลงโทษสำหรับ GLMs (ดูlrm, หรือตำราเรียน RMS ของเขาสำหรับข้อมูลเพิ่มเติม)
chl

(+1) บทความที่ดีดูเหมือนว่าฉันจะต้องเริ่มไปไกลกว่ารัฐผู้เขียนในคำถาม (ไม่ใช่ครั้งแรกที่ฉันไม่ได้) @chl (+1) คำแนะนำทางเลือกที่สมบูรณ์แบบเช่นกัน
Dmitrij Celov

@chl: +1 สำหรับ glmnet นั่นเป็นแพ็คเกจที่ยอดเยี่ยม
Zach

1
@chl ขอบคุณ! หนึ่งในปัญหาของ R คือการติดตามแพ็กเกจ (มีจำนวนมาก!) และสิ่งที่ดีที่สุด มุมมองภารกิจช่วยได้
Peter Flom - Reinstate Monica

2
หากตัวแปรของคุณเป็นแบบโคลลิแนร์ควรใช้ net elastic โดยใช้ glmnet พูดด้วย alpha = 0.5 เนื่องจาก LASSO มีแนวโน้มที่จะสุ่มเลือกตัวแปร collinear สูงออกมาจากแบบจำลอง
Tom Wenseleers

15

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

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

คุณอาจสนใจบทความนี้โดย David W. Hosmer, Borko Jovanovic และ Stanley Lemeshow การถดถอยโลจิสติกของกลุ่มย่อยที่ดีที่สุด // Biometrics Vol. 45, No. 4 (Dec. , 1989), pp. 1265-1270 (โดยปกติสามารถเข้าถึงได้ผ่านเครือข่ายของมหาวิทยาลัย)


2
ในขณะที่ความคิดเห็นของคุณเกี่ยวกับนั้นแย่กว่านั้นมีประโยชน์โดยทั่วไป แต่จริงๆแล้วมันก็ไม่ได้สร้างความแตกต่างเลยเว้นแต่ว่าคุณกำลังเปรียบเทียบรุ่นที่มีขนาดแตกต่างกัน OP ชัดเจนระบุว่าพวกเขาสนใจเฉพาะรุ่นตัวแปรตัวดังนั้นและจะกลับไปเลือกรูปแบบที่มีโอกาสสูงที่สุด นี่เทียบเท่ากับ fitting R2BIC,AIC8BICAICR2
ความน่าจะเป็นทางการ

ขอบคุณสำหรับคำพูด แต่ความคิดเห็นโดย chl ​​ด้านล่างอธิบายว่าทำไมตัวแปรอธิบายจำนวนคงที่จึงเป็นอันตราย โดยวิธีการที่คำตอบที่ปรากฏก่อนหน้านี้กว่าความคิดเห็นเกี่ยวกับตัวแปร rstriction (ถึง?);)8
Dmitrij Celov

ข้อมูลอ้างอิงเชิงวิชาการใด ๆ สำหรับR2R2 is not an appropriate goodness-of-fit measure for logistic regression take an information criterion AICAIC or BICBIC
SIslam

หมายเหตุในbestglmมันใช้leapsที่แบ็กเอนด์สำหรับการคำนวณ! ดังนั้นมันจะล้มเหลวถ้ามี NA ในชุดข้อมูลและจะมีข้อความเช่นError in leaps.setup(x, y, wt = weights, nbest = nbest, nvmax = nvmax, : NA/NaN/Inf in foreign function call (arg 3) แต่สิ่งที่น่าสนใจชุดข้อมูลของฉันไม่มี NA ค่อนข้างเป็นศูนย์ แต่ฟังก์ชันบางอย่างจะบ่นและให้ข้อความข้างต้นแน่นอน !!
SIslam

glmnet ก็เป็นรุ่นที่ดีเช่นกันและยังสามารถทำแบบจำลองที่พิจารณาถึงเอฟเฟกต์การโต้ตอบลำดับที่ 1 ที่เป็นไปได้ทั้งหมด
Tom Wenseleers

6

แนวคิดหนึ่งคือการใช้ฟอเรสต์แบบสุ่มจากนั้นใช้การวัดความสำคัญของตัวแปรที่เอาท์พุตเพื่อเลือก 8 ตัวแปรที่ดีที่สุดของคุณ อีกแนวคิดหนึ่งคือใช้แพ็คเกจ "boruta" เพื่อทำซ้ำขั้นตอนนี้สองสามร้อยครั้งเพื่อค้นหาตัวแปร 8 ตัวที่สำคัญที่สุดสำหรับตัวแบบจำลอง


@Zach คุณแนะนำให้ใช้ RFs เพื่อทำการเลือกคุณสมบัติแล้วใช้ GLM - ในกรณีนี้มีความเสี่ยงที่จะเกิด overfitting หรือ over-optimism - หรือใช้ RFs (ด้วยการวัดความสำคัญมาตรฐานของ var หรือ การเลือกที่เกี่ยวข้องทั้งหมด) เป็นเครื่องมือแบบสแตนด์อโลน
chl

@chl: ฉันแนะนำให้ใช้ RFs เพื่อทำการเลือกคุณสมบัติแล้วใช้ GLM ฉันยอมรับว่ามีความเสี่ยงของการปรับตัวเกิน แต่ OP กล่าวว่าเขาต้องการตัวแปร 8 ตัว
Zach

1
@Zach "8 ตัวแปรอย่างแน่ชัด" ... จากนั้นคุณค่อนข้างนุ่มนวลในการวัดค่าตัวแปรที่น่าสนใจตามการวัดความสำคัญของตัวแปร จากนั้นนำกลับมาใช้ใหม่ใน GLM IMHO คุณแยกการควบคุมการออกแรงมากเกินไปผ่านการบรรจุถุง นี่ยังอธิบายไว้ในESLIIจาก Hastie et al .: การเลือกคุณสมบัติ (ถ้ามี) จะต้องรวมอยู่ในขั้นตอนการตรวจสอบข้าม (ในกรณีที่การตรวจสอบข้ามรวมถึงการประเมินประสิทธิภาพของแบบจำลอง)
chl

@chl: การแพคเกจ r "boruta" cross ไม่ผ่านการตรวจสอบโดยใช้ฟอเรสต์สุ่มหลายครั้งหรือไม่ คุณบอกว่าเราจำเป็นต้องมี "การตรวจสอบเมตาข้าม" ซึ่งคุณทำการเลือกตัวแปรและและเหมาะสมกับโมเดลของคุณกับชุดย่อยของข้อมูลแบบสุ่มหรือไม่?
Zach

3
@ Zach ประเด็นของฉันคือการบรรจุถุงหรือโดยเฉพาะอย่างยิ่ง RF ป้องกันไม่ให้มากเกินไป (ในระดับหนึ่ง) หากคุณยังคงอยู่ใน toolchain เดียวกัน หากคุณใช้ผลลัพธ์จาก RFs แล้วไปดูว่ารูปแบบอื่นจะทำงานกับข้อมูลเดียวกันได้อย่างไรจากนั้นให้คุณแบ่งลูป CV แต่ทำไมไม่ใช้ RFs โดยตรงสำหรับการจำแนก? อีกวิธีคือการใช้ RFs ในตัวอย่างการฝึกอบรมจากนั้นใช้ GLM กับตัวอย่างที่ถูกระงับ (ซึ่งอาจมีการตรวจสอบความถูกต้องข้าม)
chl

0

stats::stepฟังก์ชั่นหรือทั่วไปมากขึ้นMASS::stepAICสนับสนุนฟังก์ชั่นlm, glm(เช่นโลจิสติกการถดถอย) และaovรูปแบบครอบครัว

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