การถดถอยโลจิสติกแบบถ่วงน้ำหนัก


9

ฉันกำลังดูปัญหาการถดถอยโลจิสติกน้อย ("ปกติ" และ "เงื่อนไข")

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

แน่นอนว่าสิ่งนี้เคยทำมาก่อน ใครช่วยชี้ให้ฉันดูวรรณกรรมที่เกี่ยวข้อง (หรืออาจแนะนำให้ฟังก์ชั่นความน่าจะเป็นที่แก้ไขแล้ว)

ขอบคุณ!


1
คุณกำลังสมมติว่าการจำแนกประเภทเป็นเป้าหมายเมื่อเทียบกับการทำนาย สำหรับการประมาณความน่าจะเป็นที่เหมาะสมคุณไม่จำเป็นต้องชั่งน้ำหนักอะไรอีก "False negatives" และ "false positive" เกิดขึ้นกับตัวเลือกที่ถูกบังคับเท่านั้นและโดยปกติแล้วจะไม่มีใครบังคับให้เลือกไบนารีที่บริสุทธิ์
Frank Harrell

@ Frank คุณทำให้เป็นจุดที่ดี ท้ายที่สุดเป้าหมายสำหรับโครงการนี้คือการทำนายผลลัพธ์ของเหตุการณ์เพิ่มเติม (ดังนั้นฉันคิดว่ามันอาจจะคิดได้ว่าเป็นกลไกการเรียนรู้ที่มีข้อมูลการฝึกอบรม) ผลลัพธ์บางอย่างมีความสำคัญมากกว่าสิ่งอื่นดังนั้นฉันจึงมองหาวิธีลดน้ำหนักให้เหมาะสม คำแนะนำของ Nick สำหรับฟังก์ชั่นความเป็นไปได้นั้นสมเหตุสมผลและควรนำมาใช้ในโค้ด
โนอาห์

1
ดูเหมือนว่าคุณต้องการโมเดลความน่าจะเป็นที่แน่นอนโดยไม่จำเป็นต้องมีน้ำหนัก
Frank Harrell

1
ขวา; เสียบฟังก์ชันต้นทุนและใช้ความน่าจะเป็นที่คาดการณ์ไว้และคุณมีการตัดสินใจที่ดีที่สุด
Frank Harrell

1
ด้วยโมเดลความน่าจะเป็นที่ได้รับการสอบเทียบอย่างดีไม่มี "ข้อผิดพลาด" มีเพียงการสุ่มที่ไม่สามารถคาดเดาได้ การตัดสินใจที่เหมาะสมที่สุดคือฟังก์ชั่นของความน่าจะเป็นที่คาดการณ์และฟังก์ชันต้นทุนสำหรับการตัดสินใจที่หลากหลายเพื่อดำเนินการ
Frank Harrell

คำตอบ:


3

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

Rฉันเพียงตอนนี้รู้ว่าคุณอาจไม่ได้รับการพูดคุย ถ้าไม่คุณอาจต้องการ


ฉันคุ้นเคยกับ R มาก แต่ฉันต้องการที่จะเข้าใจคณิตศาสตร์ที่อยู่เบื้องหลังฟังก์ชันความน่าจะเป็น ฉันอาจรหัสนี้ใน C ++ หรือภาษาอื่น ๆ (เพียงแค่เชื่อว่า "กล่องดำ" ของฟังก์ชั่น glm ไม่ใช่ทางออกที่ดีที่สุดเสมอไป)
โนอาห์

อา. ดีสำหรับคุณ. เท่าที่ฉันรู้น้ำหนักถูกนำมาใช้เพื่อคูณ loglikelihood ต่อการสังเกตด้วย ดังนั้นหากคุณเขียนเวอร์ชันที่ไม่ถ่วงน้ำหนักการเพิ่มน้ำหนักควรเป็น doddle โปรดทราบว่าคุณสามารถดูซอร์สโค้ดสำหรับglm(อาจ) หาการใช้ C ได้เสมอ
นิค Sabbe

2
@ นิคฉันก็อยู่ภายใต้ความเข้าใจผิดว่านี่เป็นฟังก์ชั่นของอาร์กิวเมนต์น้ำหนักใน glm - ไม่ใช่ มันถูกใช้จริงเมื่อผลลัพธ์ทวินามนั้นไม่เหมือนกันในแง่ที่ว่าพวกมันขึ้นอยู่กับจำนวนการทดลองที่แตกต่างกัน ตัวอย่างเช่นถ้าสังเกตเป็นครั้งแรกที่ทวินาม ( ) และสองคือทวินาม ( ), น้ำหนักของพวกเขาจะ3,7อีกครั้งอาร์กิวเมนต์น้ำหนักใน glm () ไม่ใช่น้ำหนักตัวอย่าง ในการทำเช่นนี้ใน R คุณจะต้องขยายชุดข้อมูลตามน้ำหนักและปรับโมเดลให้พอดีกับชุดข้อมูลที่ขยาย (SEs อาจผิดในกรณีนี้) 3,.57,.53,7
มาโคร

3
นี่คือการอภิปรายของอาร์กิวเมนต์ 'น้ำหนัก' บนกระดานข้อความ: r.789695.n4.nabble.com/Weights-in-binomial-glm-td1991249.html r.789695.n
Macro

@Macro: ขอบคุณ! เรียบร้อยมาก หนึ่งในสิ่งที่จะได้ตีฉันในฟันถ้าฉันใช้มันก่อนที่ความคิดเห็นของคุณ :-)
นิค Sabbe

1

หากคุณมีสิทธิ์เข้าถึง SAS สิ่งนี้สามารถทำได้อย่างง่ายดายโดยใช้ PROC GENMOD ตราบใดที่การสังเกตแต่ละครั้งมีตัวแปรน้ำหนักการใช้คำสั่งน้ำหนักจะช่วยให้คุณทำการวิเคราะห์ที่คุณกำลังมองหา ฉันใช้มันเป็นส่วนใหญ่โดยใช้ตุ้มน้ำหนัก Inverse-Probability-of-Treatment แต่ฉันไม่เห็นเหตุผลที่คุณไม่สามารถกำหนดตุ้มน้ำหนักให้กับข้อมูลของคุณเพื่อเน้นกรณีบางประเภทตราบใดที่คุณยังมั่นใจว่า N ของคุณคงที่ นอกจากนี้คุณจะต้องแน่ใจว่าได้รวมตัวแปร ID บางประเภทเนื่องจากในทางเทคนิคกรณีที่มีน้ำหนักเกินนั้นเป็นข้อสังเกตซ้ำ ๆ โค้ดตัวอย่างที่มี ID การสังเกตของ 'id' และตัวแปรน้ำหนักเป็น 'wt':

proc genmod data=work.dataset descending;
    class id;
    model exposure = outcome covariate / dist=bin link=logit;
    weight wt;
    repeated subject=id/type=ind;
run;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.