เหตุใดการถดถอยของโลจิสติกจึงไม่เสถียรเมื่อมีการแยกคลาสอย่างชัดเจน


34

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


4
ฉันอธิบายรายละเอียดพร้อมหลักฐานได้ที่นี่: stats.stackexchange.com/questions/224863/ …
Matthew Drury

2
และฉันยังมีตัวอย่างที่จะอธิบายคำถาม: stats.stackexchange.com/questions/239928/ …
Haitao Du

คำตอบ:


31

ไม่ถูกต้องที่การถดถอยโลจิสติกในตัวเองจะไม่เสถียรเมื่อมีการแยก การแยกหมายความว่ามีตัวแปรบางตัวที่เป็นตัวพยากรณ์ที่ดีมากซึ่งดีหรือการแยกอาจเป็นสิ่งประดิษฐ์ของการสังเกตการณ์น้อยเกินไป / ตัวแปรมากเกินไป หากเป็นกรณีนี้โซลูชันอาจได้รับข้อมูลเพิ่มเติม แต่การแยกตัวเองเป็นเพียงอาการและไม่ใช่ปัญหาในตัวเอง

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

จากนั้นก็มีสาเหตุที่แตกต่างกันสองอย่างที่เป็นไปได้สำหรับการแยก อาจมีการแยกในประชากรทั้งหมดหรือการแยกอาจเกิดจากกรณีที่สังเกตน้อย / ตัวแปรมากเกินไป

สิ่งที่แตกต่างจากการแยกกันคือขั้นตอนการประมาณค่าความน่าจะเป็นสูงสุด การประมาณพารามิเตอร์ mle (หรืออย่างน้อยก็บางส่วน) จะไม่มีที่สิ้นสุด ฉันพูดในรุ่นแรกของคำตอบนี้ว่าสามารถแก้ไขได้อย่างง่ายดายอาจมี bootstrapping แต่ไม่ทำงานเนื่องจากจะมีการแยกในแต่ละ bootstrap resample อย่างน้อยกับกรณีปกติ bootstrapping ขั้นตอน แต่การถดถอยโลจิสติกยังคงเป็นรูปแบบที่ถูกต้อง แต่เราต้องการขั้นตอนการประมาณค่าอื่น ๆ ข้อเสนอบางอย่างได้รับ:

  1. การทำให้เป็นมาตรฐานเช่นสันหรือบ่วงอาจรวมกับ bootstrap
  2. การถดถอยโลจิสติกตามเงื่อนไขที่แน่นอน
  3. การทดสอบการเปลี่ยนรูปดูที่https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. ขั้นตอนการประมาณค่าที่ลดลงของ Firths ดูที่โมเดลการถดถอยโลจิสติกไม่ได้มาบรรจบกัน
  5. แน่นอนคนอื่น ๆ ...

หากคุณใช้ R จะมีแพ็คเกจบน CRAN SafeBinaryRegressionซึ่งช่วยในการวินิจฉัยปัญหาการแยกโดยใช้วิธีการเพิ่มประสิทธิภาพทางคณิตศาสตร์เพื่อตรวจสอบว่ามีการแยกหรือการแยกชิ้นส่วนหรือไม่! ในต่อไปนี้ฉันจะให้ตัวอย่างที่จำลองโดยใช้แพ็คเกจนี้และelrmแพคเกจสำหรับการถดถอยโลจิสติกแบบมีเงื่อนไขโดยประมาณ

ครั้งแรกเป็นตัวอย่างง่ายๆกับsafeBinaryRegressionแพคเกจ แพคเกจนี้เพิ่งกำหนดglmฟังก์ชันใหม่โดยการทดสอบการแยกโดยใช้วิธีการตั้งโปรแกรมเชิงเส้น หากตรวจพบการแยกออกจะมีเงื่อนไขข้อผิดพลาดแจ้งว่าไม่มี mle มิฉะนั้นมันก็วิ่งสามัญฟังก์ชั่นจากglm statsตัวอย่างมาจากหน้าความช่วยเหลือ:

library(safeBinaryRegression)   # Some testing of that package,
                                # based on its examples
# complete separation:
x  <-  c(-2, -1, 1, 2)
y  <-  c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x,  family=binomial,  separation="test")
stats::glm(y~ x, family=binomial)
# Quasicomplete separation:
x  <-  c(-2, 0, 0, 2)
y  <-  c(0, 0, 1, 1)
glm(y ~ x, family=binomial)
glm(y ~ x,  family=binomial,  separation="test")
stats::glm(y~ x, family=binomial)

เอาต์พุตจากการรัน:

> # complete separation:
> x  <-  c(-2, -1, 1, 2)
> y  <-  c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) : 
  The following terms are causing separation among the sample points: (Intercept), x
> glm(y ~ x,  family=binomial,  separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") : 
  Separation exists among the sample points.
    This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)

Call:  stats::glm(formula = y ~ x, family = binomial)

Coefficients:
(Intercept)            x  
 -9.031e-08    2.314e+01  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      5.545 
Residual Deviance: 3.567e-10    AIC: 4
Warning message:
glm.fit: fitted probabilities numerically 0 or 1 occurred 
> # Quasicomplete separation:
> x  <-  c(-2, 0, 0, 2)
> y  <-  c(0, 0, 1, 1)
> glm(y ~ x, family=binomial)
Error in glm(y ~ x, family = binomial) : 
  The following terms are causing separation among the sample points: x
> glm(y ~ x,  family=binomial,  separation="test")
Error in glm(y ~ x, family = binomial, separation = "test") : 
  Separation exists among the sample points.
    This model cannot be fit by maximum likelihood.
> stats::glm(y~ x, family=binomial)

Call:  stats::glm(formula = y ~ x, family = binomial)

Coefficients:
(Intercept)            x  
  5.009e-17    9.783e+00  

Degrees of Freedom: 3 Total (i.e. Null);  2 Residual
Null Deviance:      5.545 
Residual Deviance: 2.773    AIC: 6.773

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

pl  <-  function(a, b, x) 1/(1+exp(-a-b*x))
a  <-  0
b  <-  1.5
x_cutoff  <-  uniroot(function(x) pl(0,1.5,x)-0.98,lower=1,upper=3.5)$root
### circa 2.6
pltrue  <-  function(a, b, x) ifelse(x < x_cutoff, pl(a, b, x), 1.0)

x <- -3:3

### Let us simulate many times from this model,  and try to estimate it
### with safeBinaryRegression::glm  That way we can estimate the probability
### of separation from this model

set.seed(31415926)  ### May I have a large container of coffee 
replications  <-  1000
p  <-  pltrue(a, b, x)
err  <-  0
good  <- 0

for (i in 1:replications) {
    y  <- rbinom(length(x), 1, p)
    res  <-  try(glm(y~x, family=binomial), silent=TRUE)
    if (inherits(res,"try-error")) err <-  err+1 else good <- good+1
}
P_separation  <-  err/replications
P_separation

เมื่อเรียกใช้รหัสนี้เราประเมินความน่าจะเป็นของการแยกเป็น 0.759 เรียกใช้รหัสด้วยตัวคุณเองมันรวดเร็ว!

จากนั้นเราจะขยายรหัสนี้เพื่อลองขั้นตอนการประมาณค่าต่าง ๆ mle และการถดถอยโลจิสติกตามเงื่อนไขโดยประมาณจาก elrm การรันการจำลองนี้ใช้เวลาประมาณ 40 นาทีบนคอมพิวเตอร์ของฉัน

library(elrm)  # from CRAN
set.seed(31415926)  ### May I have a large container of coffee
replications  <-  1000
GOOD  <-  numeric(length=replications) ### will be set to one when MLE exists!
COEFS <- matrix(as.numeric(NA), replications, 2)
COEFS.elrm <- matrix(as.numeric(NA), replications, 2) # But we'll only use second col for x
p  <-  pltrue(a, b, x)
err  <-  0
good  <- 0

for (i in 1:replications) {
    y  <- rbinom(length(x), 1, p)
    res  <-  try(glm(y~x, family=binomial), silent=TRUE)
    if (inherits(res,"try-error")) err <-  err+1 else{ good <- good+1
                                                     GOOD[i] <- 1 }
    # Using stats::glm
    mod  <-  stats::glm(y~x, family=binomial)
    COEFS[i, ]  <-  coef(mod)
    # Using elrm:
    DATASET  <-  data.frame(x=x, y=y, n=1)
    mod.elrm  <-  elrm(y/n ~ x,  interest= ~ x -1, r=4, iter=10000, burnIn=1000,
                       dataset=DATASET)
    COEFS.elrm[i, 2 ]  <-  mod.erlm$coeffs       
}
### Now we can compare coefficient estimates of x,
###  when there are separation,  and when not:

non  <-  which(GOOD==1)
cof.mle.non  <-  COEFS[non, 2, drop=TRUE]
cof.mle.sep  <-  COEFS[-non, 2, drop=TRUE]
cof.elrm.non  <-  COEFS.elrm[non, 2, drop=TRUE]
cof.elrm.sep  <-  COEFS.elrm[-non, 2, drop=TRUE]

ตอนนี้เราต้องการพล็อตผลลัพธ์ แต่ก่อนหน้านี้โปรดทราบว่าการประมาณการตามเงื่อนไขทั้งหมดเท่ากัน! มันแปลกมากและควรต้องการคำอธิบาย ... ค่าทั่วไปคือ 0.9523975 แต่อย่างน้อยเราก็ได้การประมาณแบบ จำกัด ด้วยช่วงความเชื่อมั่นซึ่งมีค่าจริง (ไม่แสดงที่นี่) ดังนั้นฉันจะแสดงฮิสโตแกรมของการประมาณค่า mle ในกรณีที่ไม่มีการแยก:

hist(cof.mle.non, prob=TRUE)

[ฮิสโตแกรมของการประมาณพารามิเตอร์จำลอง [1]

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


การอ้างอิงที่เกี่ยวข้องบางอย่าง: andrewgelman.com/2014/02/06/… jstor.org/stable/20640647?seq=1#page_scan_tab_contents 2011.isiproceedings.org/papers/950654.pdf
kjetil b halvorsen

1
(+1) แต่มันค่อนข้างแข็งแกร่งที่จะบอกว่าเราต้องการขั้นตอนการประมาณค่าอื่น ๆ นอกเหนือจากโอกาสสูงสุด อัตราต่อรองที่ไม่มีที่สิ้นสุดและอัตราต่อรองสามารถประมาณการจุดที่เหมาะสม; บ่อยครั้งที่ปัญหาที่เกิดจากการแยกเป็นเพียงการประมาณช่วงเวลาที่ดี
Scortchi - Reinstate Monica

@kjetilbhalvorsen ขอโทษที่จะฟื้นเธรดเก่า แต่ฉันสงสัยว่าคุณรู้แพ็กเกจที่คล้ายกันในไพ ธ อนไหม?
Meep

ขออภัยฉันไม่ทราบเกี่ยวกับหลาม แต่มันเป็นไปได้ที่จะเรียกใช้ R จากภายในหลาม
kjetil b halvorsen

25

มีคำตอบที่ดีจาก @ sean501 และ @kjetilbhalvorsen คุณขอตัวอย่าง พิจารณารูปด้านล่าง คุณอาจเจอสถานการณ์บางอย่างในกระบวนการผลิตซึ่งข้อมูลเป็นเช่นเดียวกับที่ปรากฎในแผง ถ้าเป็นเช่นนั้นก็ค่อนข้างเป็นไปได้ว่าข้อมูลที่คุณจริงรวบรวมลักษณะเช่นผู้ที่อยู่ในแผงB ตอนนี้เมื่อคุณใช้ข้อมูลเพื่อสร้างแบบจำลองทางสถิติความคิดคือการกู้คืนกระบวนการสร้างข้อมูลจริงหรืออย่างน้อยก็เกิดการประมาณที่ใกล้พอสมควร ดังนั้นคำถามคือจะเหมาะสมกับการถดถอยโลจิสติกกับข้อมูลในBให้แบบจำลองที่ใกล้เคียงกับเส้นสีฟ้าในA ? ถ้าคุณดูที่แผงCคุณสามารถเห็นได้ว่าเส้นสีเทาดีกว่าประมาณข้อมูลมากกว่าฟังก์ชั่นที่แท้จริงดังนั้นในการค้นหาแบบที่ดีที่สุดการถดถอยโลจิสติกจะ 'ชอบ' เพื่อส่งกลับเส้นสีเทาแทนที่จะเป็นสีฟ้า มันไม่ได้หยุดอยู่แค่นั้น มองไปที่แผงDเส้นสีดำใกล้เคียงกับข้อมูลที่ดีกว่าสีเทาซึ่งอันที่จริงแล้วมันเป็นขนาดที่เหมาะสมที่สุดที่อาจเกิดขึ้นได้ นั่นคือบรรทัดที่โมเดลการถดถอยโลจิสติกกำลังดำเนินการ มันสอดคล้องกับการสกัดกั้นของอินฟินิตี้เชิงลบและความลาดชันของอินฟินิตี้ แน่นอนว่าอยู่ไกลจากความจริงที่คุณหวังว่าจะกู้คืน การแยกอย่างสมบูรณ์ยังอาจทำให้เกิดปัญหากับการคำนวณค่า p สำหรับตัวแปรของคุณที่มาพร้อมกับเอาต์พุตการถดถอยโลจิสติก (คำอธิบายมีความแตกต่างเล็กน้อยและซับซ้อนกว่า) ยิ่งไปกว่านั้นการพยายามผสมผสานความพอดีที่นี่เข้ากับความพยายามอื่น ๆ เช่นการวิเคราะห์เมตาจะทำให้การค้นพบอื่น ๆ นั้นแม่นยำน้อย

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


1
(+1) นี่เป็นภาพประกอบที่มีประโยชน์มากสำหรับปัญหา
mkt - Reinstate Monica

สิ่งที่น่าสนใจอย่างหนึ่งที่ไดอะแกรมแสดงให้เห็นคือคุณต้องการให้กลุ่มตัวอย่างมาจาก "ช่องว่าง" ที่นำไปสู่ความน่าจะเป็น 50-50 (เช่นจุดที่อยู่ในช่วง 12 <x <15) อันที่จริงฉันคิดว่าคุณอาจต้องการรวบรวมข้อมูลเพิ่มเติมจากภาคกลางนี้ (10 <x <17) ในสถานการณ์ชีวิตจริงที่ให้ผลลัพธ์นี้
ความน่าจะเป็นทาง

@probabilityislogic นั่นถูกต้อง ข้อมูลส่วนใหญ่เกี่ยวกับความสัมพันธ์นั้นเป็นข้อมูลจากภาคกลาง
gung - Reinstate Monica

10

หมายความว่ามีไฮเปอร์เพลนดังกล่าวที่ด้านหนึ่งมีจุดบวกทั้งหมดและอีกด้านเป็นลบ วิธีแก้ปัญหาความน่าจะเป็นสูงสุดคือแบน 1 ในด้านหนึ่งและแบน 0 ในอีกด้านหนึ่งซึ่งเป็น 'บรรลุ' กับฟังก์ชันลอจิสติกโดยมีสัมประสิทธิ์ที่ไม่มีที่สิ้นสุด


6

สิ่งที่คุณกำลังเรียกว่า "การแยก" (ไม่ใช่ 'การแยก') ครอบคลุมสองสถานการณ์ที่แตกต่างกันซึ่งทำให้เกิดปัญหาเดียวกัน - ซึ่งฉันจะไม่เรียกอย่างไรก็ตามปัญหาของ "ความไม่แน่นอน" ในขณะที่คุณทำ

ภาพประกอบ: การอยู่รอดบนไททานิค

  • DV(0,1)SV

    SVDV01

  • SVDV

    นั่นเป็นกรณีถ้าผู้โดยสารชั้นหนึ่งในTitanicรอดชีวิตจากซากปรักหักพังและไม่มีผู้โดยสารชั้นสองรอดชีวิตมาได้

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

เหตุใดการถดถอยแบบลอจิสติกจึงไม่เสถียรในกรณีเหล่านี้

นี้จะอธิบายได้ดีในเรนนีย์ 2016และZorn 2005

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

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

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


หมายเหตุ:ตัวอย่างของฉันคือตัวละคร การอยู่รอดบนเรือไททานิคไม่ได้ทำให้สมาชิกชั้นโดยสารเดือด ดูฮอลล์ (1986)

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