Słownik metodologiczny · Modele regresji

Separacja w regresji logistycznej – skąd ogromne współczynniki?

Separacja występuje, gdy predyktor bezbłędnie oddziela zdarzenia od ich braku, i wtedy oszacowania regresji logistycznej nie istnieją. Pokazujemy, jak ją rozpoznać, przykład w R z detectseparation i co zrobić dalej.

Strona główna / Słownik / Separacja w regresji logistycznej
W skrócie: Separacja to sytuacja, w której predyktor lub ich kombinacja bezbłędnie oddziela zdarzenia od ich braku. Oszacowania największej wiarygodności wtedy nie istnieją, a program zwraca ogromny współczynnik i błąd standardowy. Pomaga zwykle regresja Firtha.

Co to jest separacja?

Separacja (ang. separation, także monotone likelihood) w regresji logistycznej występuje wtedy, gdy predyktor lub ich kombinacja bezbłędnie oddziela zdarzenia od braku zdarzeń. Albert i Anderson (1984) wyróżnili trzy układy danych: separację całkowitą, separację quasi-całkowitą (rozdział jest idealny poza punktami leżącymi na granicy) i nakładanie się (overlap). Skończone oszacowania największej wiarygodności istnieją tylko w ostatnim przypadku. Przy separacji współczynnik dąży do nieskończoności, a program zatrzymuje się na dużej, przypadkowej liczbie.

Jak ją rozpoznać

Separacja zdarza się głównie w małych próbach z niezrównoważonymi i silnie związanymi z wynikiem predyktorami (Heinze i Schemper, 2002), np. gdy w jednej kategorii wszyscy mają zdarzenie. Objawy to ogromny współczynnik, jeszcze większy błąd standardowy i p bliskie 1. Najprostszy test to tabela krzyżowa predyktora kategorialnego z wynikiem: zero w komórce oznacza separację. Pakiet detectseparation w R wskazuje, które oszacowania są nieskończone.

Przykład

W danych symulowanych 60 osób przewidujemy zdanie egzaminu z wyniku testu wstępnego i udziału w kursie. Wszystkie 12 osób po kursie zdało, a bez kursu zdało 17 z 48. Funkcja glm() zwraca dla kursu b = 19.70, SE = 1749.25, p = .991, czyli „iloraz szans” rzędu 3.6 × 10⁸. Model formalnie się zbiegł (17 iteracji) i R nie wyświetlił ostrzeżenia. Dopiero detectseparation pokazał, że oszacowanie dla kursu jest nieskończone.

Jak opisać w pracy

W modelu wystąpiła separacja quasi-całkowita: wszystkie osoby po kursie przygotowawczym zdały egzamin (12 z 12), więc oszacowanie największej wiarygodności dla tego predyktora nie istnieje. Dlatego model oszacowano z karą Firtha.

Na co uważać

  • Nie interpretuj p z testu Walda. Tu p = .991 przy bardzo silnym związku. Test ilorazu wiarygodności dla kursu daje χ²(1) = 24.19, p < .001.
  • Nie usuwaj predyktora tylko dlatego, że „psuje” model. Najczęstszym rozwiązaniem jest regresja Firtha, która daje skończone oszacowania (Heinze i Schemper, 2002).
  • Separacja to problem małej próby. van Smeden i in. (2016) pokazali, że wyniki symulacji dotyczących EPV mogą zdominować nieliczne zbiory z separacją. Liczebność warto zaplanować z wyprzedzeniem, jak opisuje wpis Ile predyktorów może mieć regresja?
Przykład reprodukowalny

Separacja w R

Kod tworzy dane z separacją quasi-całkowitą, dopasowuje zwykły model glm() i sprawdza istnienie oszacowań funkcją glm(..., method = "detect_separation").

Separacja quasi-całkowita: wszyscy po kursie zdali

Dane wejściowe: zdanie egzaminu (0/1), wynik testu wstępnego i udział w kursie (0/1) u 60 osób (dane symulowane, set.seed(2881)).

Co odczytać: tabelę kurs × zdał z zerem w komórce, współczynnik i błąd standardowy dla kursu, liczbę iteracji oraz wiersz Inf w wyniku detectseparation.

R
library(detectseparation)
set.seed(2881)
n <- 60
kurs   <- rep(0:1, c(48, 12))                            # 12 osób po kursie przygotowawczym
punkty <- round(rnorm(n, 25, 6))                         # wynik testu wstępnego
zdal   <- rbinom(n, 1, plogis(-4 + 0.15 * punkty))
zdal[kurs == 1] <- 1                                     # wszyscy po kursie zdali
table(kurs, zdal)
m <- glm(zdal ~ punkty + kurs, family = binomial)       # tu R nie wyświetla żadnego ostrzeżenia
round(summary(m)$coefficients, 3)
format(exp(coef(m)[["kurs"]]), digits = 3)            # "iloraz szans" dla kursu
c(iteracje = m$iter, zbiezny = m$converged)
glm(zdal ~ punkty + kurs, family = binomial, method = "detect_separation")
Wynik w R
    zdal
kurs  0  1
   0 31 17
   1  0 12
            Estimate Std. Error z value Pr(>|z|)
(Intercept)   -4.311      1.658  -2.600    0.009
punkty         0.150      0.064   2.349    0.019
kurs          19.698   1749.249   0.011    0.991
[1] "3.59e+08"
iteracje  zbiezny 
      17        1 
Implementation: ROI | Solver: lpsolve 
Separation: TRUE 
Existence of maximum likelihood estimates
(Intercept)      punkty        kurs 
          0           0         Inf 
0: finite value, Inf: infinity, -Inf: -infinity

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet detectseparation). W pracy podaj wersję R, której faktycznie użyto (sessionInfo()).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
  2. detectseparation (wersja 0.4.0): Kosmidis, I., Schumacher, D., & Schwendinger, F. (2026). detectseparation: Detect and check for separation and infinite maximum likelihood estimates [R package]. https://doi.org/10.32614/CRAN.package.detectseparation

Najczęstsze pytania

Skąd wiadomo, że w regresji logistycznej jest separacja?

Typowe objawy to bardzo duży współczynnik, jeszcze większy błąd standardowy i p bliskie 1. Sprawdź tabele krzyżowe predyktorów z wynikiem i pakiet detectseparation.

Co oznacza ostrzeżenie „fitted probabilities numerically 0 or 1”?

Że część przewidywanych prawdopodobieństw jest praktycznie równa 0 lub 1. Często towarzyszy separacji, ale jej nie dowodzi, a brak ostrzeżenia nie wyklucza separacji.

Czy przy separacji można usunąć problematyczny predyktor?

Lepiej nie, bo zwykle jest silnie związany z wynikiem. Częściej stosuje się regresję Firtha albo łączy rzadkie kategorie, jeśli ma to sens merytoryczny.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Albert, A., & Anderson, J. A. (1984). On the existence of maximum likelihood estimates in logistic regression models. Biometrika, 71(1), 1–10. https://doi.org/10.1093/biomet/71.1.1
  2. Heinze, G., & Schemper, M. (2002). A solution to the problem of separation in logistic regression. Statistics in Medicine, 21(16), 2409–2419. https://doi.org/10.1002/sim.1047
  3. van Smeden, M., de Groot, J. A. H., Moons, K. G. M., Collins, G. S., Altman, D. G., Eijkemans, M. J. C., & Reitsma, J. B. (2016). No rationale for 1 variable per 10 events criterion for binary logistic regression analysis. BMC Medical Research Methodology, 16(1), Article 163. https://doi.org/10.1186/s12874-016-0267-3 ● Otwarty dostęp

Cytowania BibTeX

@article{albert1984existence, author={Albert, A. and Anderson, J. A.}, title={{On the existence of maximum likelihood estimates in logistic regression models}}, journal={Biometrika}, year={1984}, volume={71}, number={1}, pages={1--10}, doi={10.1093/biomet/71.1.1}}
@article{heinze2002solution, author={Heinze, Georg and Schemper, Michael}, title={{A solution to the problem of separation in logistic regression}}, journal={Statistics in Medicine}, year={2002}, volume={21}, number={16}, pages={2409--2419}, doi={10.1002/sim.1047}}
@article{vansmeden2016no, author={van Smeden, Maarten and de Groot, Joris A. H. and Moons, Karel G. M. and Collins, Gary S. and Altman, Douglas G. and Eijkemans, Marinus J. C. and Reitsma, Johannes B.}, title={{No rationale for 1 variable per 10 events criterion for binary logistic regression analysis}}, journal={BMC Medical Research Methodology}, year={2016}, volume={16}, number={1}, eid={163}, doi={10.1186/s12874-016-0267-3}}
R