Почему логистическая регрессия становится нестабильной, когда классы хорошо разделены? Что значит хорошо разделенные классы? Я был бы очень признателен, если бы кто-то мог объяснить на примере.
Почему логистическая регрессия становится нестабильной, когда классы хорошо разделены? Что значит хорошо разделенные классы? Я был бы очень признателен, если бы кто-то мог объяснить на примере.
Ответы:
Неправильно, что логистическая регрессия сама по себе становится нестабильной, когда есть разделение. Разделение означает, что есть некоторые переменные, которые являются очень хорошими предикторами, что хорошо, или разделение может быть артефактом слишком малого числа наблюдений / слишком большого количества переменных. Если это так, решение может быть получить больше данных. Но само разделение является лишь симптомом, а не проблемой само по себе.
Так что есть действительно разные случаи, которые нужно лечить. Во-первых, какова цель анализа? Если конечным результатом анализа является некоторая классификация случаев, разделение вообще не является проблемой, это действительно означает, что существуют очень хорошие переменные, дающие очень хорошую классификацию. Но если целью является оценка риска, нам нужны оценки параметров, а с разделением обычных оценок mle (максимального правдоподобия) не существует. Таким образом, мы должны изменить метод оценки, может быть. В литературе есть несколько предложений, я к этому еще вернусь.
Тогда есть (как сказано выше) две разные возможные причины для разделения. В полной совокупности может быть разделение, или разделение может быть вызвано несколькими наблюдаемыми случаями / слишком большим количеством переменных.
Что разделяет с разделением, так это процедура оценки максимального правдоподобия. Оценки параметров mle (или, по крайней мере, некоторые из них) становятся бесконечными. В первой версии этого ответа я сказал, что это можно легко решить, возможно, с помощью начальной загрузки, но это не работает, так как в каждой начальной загрузке будет разделение, по крайней мере с обычной процедурой начальной загрузки. Но логистическая регрессия все еще является действительной моделью, но нам нужна другая процедура оценки. Некоторые предложения были:
Если вы используете 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,5. Это может быть связано с тем, что мы смоделировали из модифицированной модели, нуждается в исследовании.
Здесь есть хорошие ответы от @ sean501 и @kjetilbhalvorsen. Вы просили пример. Посмотрите на рисунок ниже. Вы можете встретить некоторые ситуации , в которой процесс генерирования данных подобен изображенному на панели A . Если это так, то вполне возможно , что данные , которые вы на самом деле собираетесь выглядеть , как на панели B . Теперь, когда вы используете данные для построения статистической модели, идея состоит в том, чтобы восстановить истинный процесс генерирования данных или, по крайней мере, придумать приблизительное приближение. Таким образом, вопрос в том, даст ли логистическая регрессия для данных в B модель, которая приближается к синей линии в A ? Если вы посмотрите на панель CВы можете видеть, что серая линия лучше приближает данные, чем истинная функция, поэтому при поиске наилучшего соответствия логистическая регрессия «предпочтет» вернуть серую линию, а не синюю. Это не останавливается там, как бы то ни было. Глядя на панель Dчерная линия лучше аппроксимирует данные, чем серая - на самом деле это наилучшее совпадение, которое может произойти. Такова линия, которую преследует модель логистической регрессии. Это соответствует пересечению отрицательной бесконечности и наклону бесконечности. Это, конечно, очень далеко от истины, которую вы надеетесь восстановить. Полное разделение может также вызвать проблемы с вычислением p-значений для ваших переменных, которые стандартно поставляются с выводом логистической регрессии (объяснение здесь немного другое и более сложное). Более того, попытка объединить это соответствие с другими попытками, например, с метаанализом, просто сделает другие выводы менее точными.
Это означает, что существует гиперплоскость, в которой с одной стороны находятся все положительные точки, а с другой - все отрицательные. В этом случае решение с максимальным правдоподобием является плоским 1 на одной стороне и плоским 0 на другой стороне, что достигается с помощью логистической функции, когда коэффициенты находятся в бесконечности.
То, что вы называете «разделением» (не «разделением»), охватывает две разные ситуации, которые в конечном итоге вызывают одну и ту же проблему - которую я бы не назвал проблемой «нестабильности», как вы.
Это было бы так, если бы все пассажиры первого класса на « Титанике» пережили крушение, и никто из пассажиров второго класса не выжил.
Это хорошо объясняется в Rainey 2016 и Zorn 2005 .
В обоих случаях функция правдоподобия вашей модели не сможет найти оценку максимального правдоподобия: она только найдет аппроксимацию этого значения, приблизившись к нему асимптотически.
То, что вы называете «нестабильностью», - это тот факт, что в случаях полного или почти полного разделения нет конечной вероятности достижения логистической модели. Однако я бы не стал использовать этот термин: функция правдоподобия, на самом деле, довольно «стабильна» (монотонна) при присвоении значений коэффициентов бесконечности.
Примечание: мой пример вымышленный. Выживание на Титанике не сводилось только к членству в пассажирском классе. См Холл (1986) .