Słownik metodologiczny · Modele regresji

Regresja Firtha – co zrobić, gdy regresja logistyczna się rozjeżdża?

Regresja Firtha to regresja logistyczna z karą, która daje skończone współczynniki przy separacji i mniej obciążone wyniki w małych próbach. Pokazujemy, kiedy jej użyć, przykład w R z brglm2 i gotowy opis do pracy.

Strona główna / Słownik / Regresja Firtha
W skrócie: Regresja Firtha to regresja logistyczna szacowana ukaraną metodą największej wiarygodności (kara Jeffreysa). Zmniejsza obciążenie współczynników w małych próbach i daje skończone oszacowania przy separacji, ale nie dodaje informacji: przy kilku zdarzeniach przedziały ufności pozostają szerokie.

Co to jest regresja Firtha?

Regresja Firtha (ang. Firth's logistic regression, bias-reduced logistic regression) to regresja logistyczna szacowana ukaraną metodą największej wiarygodności. Firth (1993) pokazał, że niewielka modyfikacja funkcji wyniku usuwa główny składnik obciążenia oszacowań metody największej wiarygodności. W regresji logistycznej odpowiada to dodaniu do wiarygodności kary w postaci rozkładu a priori Jeffreysa. Metoda miała zmniejszać obciążenie w małych próbach. Heinze i Schemper (2002) wykazali, że rozwiązuje też problem separacji: daje skończone współczynniki tam, gdzie zwykły model ich nie ma.

Kiedy jej użyć

  • Separacja całkowita lub quasi-całkowita, np. w jednej grupie nie wystąpiło ani jedno zdarzenie.
  • Mała próba i rzadkie zdarzenie, gdy na predyktor przypada mało zdarzeń (zob. EPV i wpis Ile predyktorów może mieć regresja).

Korekta nie dodaje informacji. Przy kilku zdarzeniach przedział ufności zostanie szeroki. W R model dopasujesz funkcją glm() z method = "brglmFit" (pakiet brglm2) albo pakietem logistf.

Przykład

W symulowanych danych 40 pacjentów 7 miało powikłanie, wszyscy w grupie leczenia standardowego. W grupie nowego leku powikłań nie było. Zwykła regresja z wiekiem jako drugim predyktorem dała absurdalny wynik: b = −19.06, SE = 2365.48, p = .99. Model Firtha dał b = −3.03, SE = 1.43, z = −2.11, p = .035, czyli OR = 0.048, 95% CI [0.003, 0.805]. Kierunek efektu jest jasny, ale jego wielkość bardzo niepewna.

Jak opisać w pracy

Ze względu na quasi-całkowitą separację (brak powikłań w grupie nowego leku) zastosowano regresję logistyczną z korektą Firtha, z wiekiem jako zmienną kontrolną. Nowy lek wiązał się z niższymi szansami powikłania, OR = 0.048, 95% CI [0.003, 0.805], z = −2.11, p = .035 (przedział Walda).

Na co uważać

  • Wald czy profil. Heinze i Schemper (2002) zalecają test ilorazu ukaranej wiarygodności i profilowe przedziały ufności zamiast Walda; liczy je logistf. Napisz, którego przedziału użyto. Logikę takiego testu opisuje hasło test ilorazu wiarygodności.
  • Najpierw sprawdź dane. Separacja bywa skutkiem błędu kodowania albo kategorii z kilkoma osobami.
  • Uzasadnij wybór. Podaj, dlaczego zwykły model nie wystarczył: tabelę krzyżową, liczbę zdarzeń i objawy w wydruku.

Diagnostykę całego modelu, z przykładem separacji, pokazuje wpis Regresja logistyczna krok po kroku.

Przykład reprodukowalny

Regresja Firtha w R

Kod tworzy małą próbę z quasi-całkowitą separacją, dopasowuje zwykłą regresję logistyczną i model z korektą Firtha (pakiet brglm2), a potem liczy iloraz szans z 95% przedziałem Walda.

Zwykła regresja logistyczna a korekta Firtha przy separacji

Dane wejściowe: powikłanie (tak / nie), grupa (nowy lek / standard) i wiek u 40 pacjentów (dane symulowane, set.seed(289)).

Co odczytać: tabelę krzyżową z pustą komórką, ogromny błąd standardowy w zwykłym modelu, współczynniki modelu Firtha oraz OR z przedziałem.

R
suppressPackageStartupMessages(library(brglm2))     # method = "brglmFit": korekta Firtha
set.seed(289)
n <- 40
lek <- rep(0:1, each = 20)                           # nowy lek (1) a standard (0), dane symulowane
wiek <- round(rnorm(n, 60, 8))
powiklanie <- c(rbinom(20, 1, 0.35), rep(0, 20))     # w grupie leku brak powikłań: separacja
table(lek, powiklanie)
m_ml <- glm(powiklanie ~ lek + wiek, family = binomial)        # zwykła ML
round(summary(m_ml)$coefficients["lek", ], 2)
m_f <- glm(powiklanie ~ lek + wiek, family = binomial,
           method = "brglmFit", type = "AS_mean")              # Firth (1993)
round(summary(m_f)$coefficients, 3)
b <- coef(m_f)["lek"]; se <- sqrt(vcov(m_f)["lek", "lek"])
round(exp(c(OR = b, lower = b - 1.96 * se, upper = b + 1.96 * se)), 3)
Wynik w R
   powiklanie
lek  0  1
  0 13  7
  1 20  0
  Estimate Std. Error    z value   Pr(>|z|) 
    -19.06    2365.48      -0.01       0.99 
            Estimate Std. Error z value Pr(>|z|)
(Intercept)    2.453      5.287   0.464    0.643
lek           -3.027      1.433  -2.112    0.035
wiek          -0.049      0.086  -0.571    0.568
   OR.lek lower.lek upper.lek 
    0.048     0.003     0.805 

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (pakiet brglm2). 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. brglm2 (wersja 1.1.1): Kosmidis, I. (2026). brglm2: Bias reduction in generalized linear models [R package]. https://CRAN.R-project.org/package=brglm2

Najczęstsze pytania

Czy regresja Firtha nadaje się do każdej małej próby?

Zmniejsza obciążenie współczynników, ale nie zastępuje danych. Przy kilku zdarzeniach przedziały ufności pozostają szerokie, a model z wieloma predyktorami nadal będzie niestabilny.

Jak policzyć regresję Firtha w R?

Użyj glm(y ~ x, family = binomial, method = "brglmFit") z pakietem brglm2 albo funkcji logistf() z pakietu logistf, która podaje też profilowe przedziały ufności.

Jaki przedział ufności podać przy korekcie Firtha?

Heinze i Schemper (2002) zalecają profilowy przedział ukaranej wiarygodności zamiast przedziału Walda. Jeśli podajesz Walda, napisz to wprost w opisie wyniku.

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. Firth, D. (1993). Bias reduction of maximum likelihood estimates. Biometrika, 80(1), 27–38. https://doi.org/10.1093/biomet/80.1.27
  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

Cytowania BibTeX

@article{firth1993bias, author={Firth, David}, title={{Bias reduction of maximum likelihood estimates}}, journal={Biometrika}, year={1993}, volume={80}, number={1}, pages={27--38}, doi={10.1093/biomet/80.1.27}}
@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}}
R