Чому логістична регресія стає нестабільною, коли класи добре розділені?


34

Чому так, що логістична регресія стає нестабільною, коли класи добре розділені? Що означає добре відокремлені класи? Я дуже вдячний, якщо хтось може пояснити на прикладі.


4
Я докладно пояснюю, з доказом, тут: stats.stackexchange.com/questions/224863/…
Метью Друрі

2
І у мене також було кілька демонстрацій, щоб пояснити питання: stats.stackexchange.com/questions/239928/…
Haitao Du

Відповіді:


31

Неправильно, що логістична регресія сама по собі стає нестабільною, коли відбувається розділення. Поділ означає, що є деякі змінні, які є дуже хорошими прогнозами, що добре, або, відокремлення може бути артефактом занадто мало спостережень / занадто багато змінних. Якщо це так, рішенням може бути отримання більше даних. Але сама розлука - це лише симптом, а не проблема сама по собі.

Тож справді мають бути різні випадки лікування. По-перше, яка мета аналізу? Якщо кінцевим результатом аналізу є якась класифікація випадків, розділення взагалі не є проблемою, це дійсно означає, що є дуже хороші змінні, що дають дуже хорошу класифікацію. Але якщо мета - оцінка ризиків, нам потрібні оцінки параметрів, і з відокремленням звичайних оцінок молока (максимальна ймовірність) не існує. Тому, можливо, треба змінити метод оцінки. У літературі є кілька пропозицій, я до цього повернусь.

Тоді є (як сказано вище) дві різні можливі причини розлуки. Можливо, відокремлюється повна сукупність, або поділ може бути спричиненим кількома спостережуваними випадками / занадто великою кількістю змінних.

Що розбивається при розділенні, це максимальна ймовірність процедури оцінки. Оцінка параметрів mle (або принаймні деякі з них) стає нескінченною. У першій версії цієї відповіді я сказав, що це можна вирішити легко, можливо, з завантажувальним завантаженням, але це не працює, оскільки у кожному перезавантаженні завантажувальної програми буде розділення, принаймні, у звичайних випадках завантажувальної процедури. Але логістична регресія все ще є дійсною моделлю, але нам потрібна інша процедура оцінки. Деякі пропозиції були:

  1. регуляризація, як хребет або ласо, може поєднуватися із завантажувальним пристроєм.
  2. точна умовна логістична регресія
  3. пермутаційні тести, див. https://www.ncbi.nlm.nih.gov/pubmed/15515134
  4. Процедура оцінювання, зменшена за допомогою фіртів, див. Модель логістичної регресії не збігається
  5. напевно інші ...

Якщо ви використовуєте R, на CRAN є пакет SafeBinaryRegression, який допомагає діагностувати проблеми з розділенням, використовуючи методи математичної оптимізації, щоб перевірити, чи є розділення чи квазісепарація! Далі я наведу модельований приклад, використовуючи цей пакет, і elrmпакет для приблизної умовної логістичної регресії.

Спочатку простий приклад з safeBinaryRegressionпакетом. Цей пакет просто переосмислює glmфункцію, перевантажуючи її тестом розділення, використовуючи лінійні методи програмування. Якщо він виявить розділення, він закінчується з умовою помилки, заявляючи, що молока не існує. Інакше він просто запускає звичайну 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. Запустіть код самостійно, це швидко!

Потім ми розширюємо цей код, щоб спробувати різні процедури оцінки, млері та приблизну умовну логістичну регресію від 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. Але принаймні ми отримали кінцеві оцінки, з довірчими інтервалами, які містять справжнє значення (тут не показано). Тому я покажу гістограму оцінок молока лише у випадках, коли не відокремлюються:

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

[гістограма модельованих оцінок параметрів [1]

Примітно, що всі оцінки менші за справжнє значення 1,5. Це може бути пов'язане з тим, що ми моделювали модифіковану модель, потребуючи дослідження.



1
(+1) Але досить твердо сказати, що нам потрібна процедура оцінки, крім максимальної ймовірності. Нескінченне співвідношення шансів і шансів може бути розумною точковою оцінкою; Досить часто проблемою, викликаною розділенням, є лише отримання хороших інтервальних оцінок.
Scortchi

@kjetilbhalvorsen Вибачте за відродження старої нитки, але мені було цікаво, чи знаєте ви про подібний пакет у python?
Meep

Вибачте, але я не знаю про python. Але слід мати можливість запускати R зсередини python.
kjetil b halvorsen

25

Тут є хороші відповіді від @ sean501 та @kjetilbhalvorsen. Ви попросили приклад. Розглянемо малюнок нижче. Ви можете зустріти деякі ситуації , в якій процес генерування даних подібний до зображеного на панелі A . Якщо це так, то цілком можливо , що дані , які ви на самому справі збираєтеся виглядати , як на панелі B . Тепер, коли ви використовуєте дані для побудови статистичної моделі, ідея полягає в тому, щоб відновити справжній процес генерації даних або принаймні придумати наближення, яке є досить близьким. Таким чином, питання полягає в тому, чи відповідає логістична регресія даним в B модель, яка наближає синю лінію в A ? Якщо ви подивитеся на панель CВи можете бачити, що сіра лінія краще наближає дані, ніж справжня функція, тому, шукаючи найкращого підходу, логістична регресія буде «віддавати перевагу» поверненню сірої лінії, а не синьої. На цьому це не зупиняється. Дивлячись на панель D, чорна лінія наближає дані краще, ніж сіра - насправді це найкраще прилягання, яке могло статися. Отже, це лінія, якою ведеться модель логістичної регресії. Це відповідає перехопленню негативної нескінченності та нахилу нескінченності. Це, звичайно, дуже далеко від істини, яку ви сподіваєтесь відновити. Повне розділення також може спричинити проблеми з обчисленням p-значень для ваших змінних, які є стандартними з результатами логістичної регресії (пояснення там дещо інше і складніше). Більше того, спроба поєднати придатність тут з іншими спробами, наприклад, з метааналізом, просто зробить інші висновки менш точними.

введіть тут опис зображення


1
(+1) Це дуже корисна ілюстрація проблеми.
mkt - Відновіть Моніку

Один цікавий аспект, який показує ваша діаграма, - це те, що в ідеалі ви хочете, щоб зразок походив із "х простору", що призводить до 50-50 ймовірностей (наприклад, точки в діапазоні 12 <x <15). насправді я думаю, що ви, напевно, хочете зібрати більше даних із цього середнього регіону (10 <x <17) у реальному сценарії життя, який забезпечив цей результат.
ймовірністьлогічний

@probabilityislogic, це правильно. Більшість інформації про взаємозв'язок є в даних із середнього регіону.
gung - Відновіть Моніку

10

Це означає, що є гіперплан такий, що з одного боку є всі позитивні моменти, а з іншого - всі негативні. Тоді рішення максимальної ймовірності - це плоский 1 на одній стороні, а плоский 0 - з іншого, що «досягається» логістичною функцією, маючи коефіцієнти в нескінченності.


6

Те, що ви називаєте "розлукою" (а не "відокремленням"), охоплює дві різні ситуації, які в кінцевому підсумку спричиняють ту саму проблему - яку я б не назвав, однак, проблемою "нестабільності", як ви.

Ілюстрація: Виживання на " Титаніку"

  • DV(0,1)SV

    SVDV01

  • SVDV

    Це було б так, якби всі пасажири першого класу на " Титаніку" пережили уламки, і ніхто з пасажирів другого класу не вижив.

  • SVDV=0DV=1

    SVDV=1DV=0

    SVDV=0DV=1

DVSVSV

Чому логістична регресія в цих випадках "нестабільна"?

Це добре пояснено у Rainey 2016 та Zorn 2005 .

  • DV1SV=1DV0SV=0

    SV=1

    01SVDV

  • 01DVSV=0SV=1

В обох випадках функція вірогідності вашої моделі не зможе знайти максимальну оцінку ймовірності: вона знайде апроксимацію цієї величини лише шляхом наближення до неї асимптотично.

Те, що ви називаєте "нестабільністю", - це той факт, що у випадках повного або квазіповного розмежування немає жодної кінцевої ймовірності досягнення логістичної моделі. Я б не використовував цей термін, однак: функція ймовірності насправді є досить "стабільною" (монотонною) у призначенні значень коефіцієнтів щодо нескінченності.


Примітка: мій приклад - вигаданий. Виживання на " Титаніку" не зводилося лише до членства в класі пасажирів. Див. Холл (1986) .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.