Regresja logistyczna służy do modelowania prawdopodobieństwa zdarzenia binarnego, na przykład wystąpienia choroby, rezygnacji klienta lub pozytywnej odpowiedzi na ofertę. Zamiast przewidywać wynik bezpośrednio, model opisuje logarytm ilorazu szans: logit(p) = ln[p/(1−p)] = β0 + β1X1 + … + βkXk.
Jak interpretować współczynniki?
Po podniesieniu współczynnika β do potęgi e otrzymujemy iloraz szans (OR). OR = 1,50 oznacza, że wzrost predyktora o jedną jednostkę wiąże się z 50% większymi szansami zdarzenia, przy stałych wartościach pozostałych zmiennych. Szanse nie są tym samym co prawdopodobieństwo, dlatego przy komunikacji biznesowej lub klinicznej warto pokazać także przewidywane prawdopodobieństwa.
Najważniejsze założenia i decyzje
- obserwacje powinny być niezależne albo zależność musi zostać ujęta w modelu, np. wielopoziomowym;
- dla predyktorów ciągłych zależność z logitem powinna mieć odpowiednią postać; w razie nieliniowości można użyć splajnów lub transformacji;
- silna współliniowość utrudnia stabilną interpretację współczynników;
- liczba zdarzeń i zakres danych muszą wystarczać do oszacowania złożoności modelu;
- separacja i bardzo rzadkie zdarzenia mogą powodować niestabilność estymacji.
Ocena modelu: nie tylko AUC
Dyskryminacja określa, czy model prawidłowo porządkuje osoby z wyższym i niższym ryzykiem; często opisuje ją pole pod krzywą ROC. Kalibracja mówi natomiast, czy przewidywane prawdopodobieństwa odpowiadają obserwowanym częstościom. Model może dobrze rozróżniać przypadki, a jednocześnie systematycznie przeszacowywać ryzyko. Test Hosmera–Lemeshowa nie powinien być jedynym kryterium dopasowania — jego wynik zależy od liczebności i sposobu grupowania. Warto pokazać wykres kalibracji, nachylenie i punkt przecięcia oraz przeprowadzić walidację wewnętrzną, np. bootstrap.
Co raportować?
- sposób zdefiniowania wyniku i predyktorów;
- liczebność próby, liczbę zdarzeń i postępowanie z brakami danych;
- pełne współczynniki lub OR z 95% przedziałami ufności;
- metody doboru postaci zmiennych i ewentualnej regularyzacji;
- miary dyskryminacji, kalibracji i procedurę walidacji;
- próg klasyfikacji tylko wtedy, gdy ma uzasadnienie decyzyjne.
Budujesz model ryzyka, klasyfikacji lub predykcji? Dobieramy specyfikację, sprawdzamy diagnostykę, walidujemy model i przygotowujemy czytelny raport w R lub Pythonie.
Przelicz współczynnik na iloraz szans
Kalkulator OR = eβ
Wzór raportowania modelu
Trzy pytania przed użyciem modelu
- Czy masz dość zdarzeń, a nie tylko dużą liczbę wszystkich rekordów?
- Czy pokazujesz prawdopodobieństwa, a nie mylisz szans z ryzykiem?
- Czy model został zwalidowany na danych niewykorzystanych do dopasowania?
Pojęcia potrzebne do tego zagadnienia
Definicje poniżej rozwijają najważniejsze terminy, pokazują wzory, przykłady i gotowe raportowanie w APA 7.
Definicje, zalecenia interpretacyjne i sposób raportowania oparto na literaturze metodologicznej wskazanej w bibliografii (Collins et al., 2024).
Kod w R, Pythonie i IBM SPSS Statistics
Kod przyjmuje, że zdarzenie ma wartość 1, a predyktory są poprawnie zakodowane. Sprawdź separację, liniowość logitu dla zmiennych ciągłych, obserwacje wpływowe i kalibrację, zanim zinterpretujesz ilorazy szans.
Regresja logistyczna, ilorazy szans i prawdopodobieństwa
R
dane <- read.csv("dane.csv")
m <- glm(zdarzenie ~ x1 + x2, data = dane, family = binomial())
summary(m)
OR <- exp(coef(m))
CI <- exp(confint.default(m))
cbind(OR = OR, CI_dol = CI[, 1], CI_gora = CI[, 2])
dane$p_hat <- predict(m, type = "response")
head(dane[c("zdarzenie", "p_hat")])Python
import pandas as pd
import numpy as np
import statsmodels.api as sm
df = pd.read_csv("dane.csv")[["zdarzenie", "x1", "x2"]].dropna()
X = sm.add_constant(df[["x1", "x2"]])
m = sm.Logit(df["zdarzenie"], X).fit()
print(m.summary())
wyniki = pd.DataFrame({
"OR": np.exp(m.params),
"CI_dol": np.exp(m.conf_int()[0]),
"CI_gora": np.exp(m.conf_int()[1]),
"p": m.pvalues
})
print(wyniki)
df["p_hat"] = m.predict(X)IBM SPSS Statistics — Syntax
LOGISTIC REGRESSION VARIABLES zdarzenie
/METHOD=ENTER x1 x2
/CONTRAST (x2)=INDICATOR
/PRINT=CI(95) GOODFIT
/SAVE=PRED COOK LEVER
/CLASSPLOT.Krzywa ROC i AUC
R
dane <- read.csv("dane.csv")
# Pakiet pROC.
library(pROC)
roc_obj <- roc(response = dane$stan, predictor = dane$marker,
levels = c(0, 1), direction = "<", ci = TRUE)
roc_obj
ci.auc(roc_obj)
coords(roc_obj, "best", best.method = "youden",
ret = c("threshold", "sensitivity", "specificity"))
plot(roc_obj, print.auc = TRUE)Python
import pandas as pd
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
df = pd.read_csv("dane.csv")[["stan", "marker"]].dropna()
auc = roc_auc_score(df["stan"], df["marker"])
fpr, tpr, progi = roc_curve(df["stan"], df["marker"])
youden = tpr - fpr
i = youden.argmax()
print({"AUC": auc, "prog_Youdena": progi[i],
"czulosc": tpr[i], "swoistosc": 1-fpr[i]})
plt.plot(fpr, tpr); plt.plot([0, 1], [0, 1], "--")
plt.xlabel("1 - swoistość"); plt.ylabel("Czułość"); plt.show()IBM SPSS Statistics — Syntax
ROC marker BY stan (1)
/PLOT=CURVE(REFERENCE)
/PRINT=SE COORDINATES
/CRITERIA=CUTOFF(INCLUDE) TESTPOS(LARGE) DISTRIBUTION(FREE) CI(95).Bibliografia oprogramowania i wykorzystanych pakietów
W przykładach użyto: R, Python, IBM SPSS Statistics, pandas, NumPy, statsmodels, pROC, Matplotlib, scikit-learn. W pracy badawczej podaj również faktycznie użyte wersje, które można odczytać poleceniami sessionInfo() w R oraz pip freeze lub importlib.metadata.version() w Pythonie. Cytuj wyłącznie narzędzia rzeczywiście użyte w końcowej analizie.
- R: R Core Team. (2026). R: A language and environment for statistical computing [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
- Python: Van Rossum, G., & Drake, F. L., Jr. (2009). Python 3 reference manual. CreateSpace.
- IBM SPSS Statistics: IBM Corp. (2025). IBM SPSS Statistics for Macintosh (Version 31.0) [Computer software]. IBM Corp.
- pandas: McKinney, W. (2010). Data structures for statistical computing in Python. In S. van der Walt & J. Millman (Eds.), Proceedings of the 9th Python in Science Conference (pp. 56–61). https://doi.org/10.25080/Majora-92bf1922-00a
- NumPy: Harris, C. R., Millman, K. J., van der Walt, S. J., Gommers, R., Virtanen, P., Cournapeau, D., Wieser, E., Taylor, J., Berg, S., Smith, N. J., Kern, R., Picus, M., Hoyer, S., van Kerkwijk, M. H., Brett, M., Haldane, A., del Río, J. F., Wiebe, M., Peterson, P., … Oliphant, T. E. (2020). Array programming with NumPy. Nature, 585, 357–362. https://doi.org/10.1038/s41586-020-2649-2
- statsmodels: Seabold, S., & Perktold, J. (2010). Statsmodels: Econometric and statistical modeling with Python. In S. van der Walt & J. Millman (Eds.), Proceedings of the 9th Python in Science Conference (pp. 92–96). https://doi.org/10.25080/Majora-92bf1922-011
- pROC: Robin, X., Turck, N., Hainard, A., Tiberti, N., Lisacek, F., Sanchez, J.-C., & Müller, M. (2011). pROC: An open-source package for R and S+ to analyze and compare ROC curves. BMC Bioinformatics, 12, 77. https://doi.org/10.1186/1471-2105-12-77
- Matplotlib: Hunter, J. D. (2007). Matplotlib: A 2D graphics environment. Computing in Science & Engineering, 9(3), 90–95. https://doi.org/10.1109/MCSE.2007.55
- scikit-learn: Pedregosa, F., Varoquaux, G., Gramfort, A., Michel, V., Thirion, B., Grisel, O., Blondel, M., Prettenhofer, P., Weiss, R., Dubourg, V., VanderPlas, J., Passos, A., Cournapeau, D., Brucher, M., Perrot, M., & Duchesnay, É. (2011). Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12, 2825–2830.
BibTeX dla oprogramowania i pakietów
@manual{r-core-2026,
author = {{R Core Team}},
title = {R: A Language and Environment for Statistical Computing},
organization = {R Foundation for Statistical Computing},
address = {Vienna, Austria},
year = {2026},
url = {https://www.R-project.org/}
}@book{vanrossum2009python,
author = {Van Rossum, Guido and Drake, Fred L., Jr.},
title = {Python 3 Reference Manual},
publisher = {CreateSpace},
year = {2009},
isbn = {978-1-4414-1269-0}
}@software{ibm2025spss,
author = {{IBM Corp.}},
title = {IBM SPSS Statistics for Macintosh},
year = {2025},
version = {31.0},
publisher = {IBM Corp.}
}@inproceedings{mckinney2010pandas,
author = {McKinney, Wes},
title = {Data Structures for Statistical Computing in Python},
booktitle = {Proceedings of the 9th Python in Science Conference},
editor = {van der Walt, Stéfan and Millman, Jarrod},
year = {2010},
pages = {56--61},
doi = {10.25080/Majora-92bf1922-00a}
}@article{harris2020numpy,
author = {Harris, Charles R. and Millman, K. Jarrod and van der Walt, Stéfan J. and Gommers, Ralf and Virtanen, Pauli and others},
title = {Array Programming with NumPy},
journal = {Nature},
year = {2020},
volume = {585},
pages = {357--362},
doi = {10.1038/s41586-020-2649-2}
}@inproceedings{seabold2010statsmodels,
author = {Seabold, Skipper and Perktold, Josef},
title = {Statsmodels: Econometric and Statistical Modeling with Python},
booktitle = {Proceedings of the 9th Python in Science Conference},
year = {2010},
pages = {92--96},
doi = {10.25080/Majora-92bf1922-011}
}@article{robin2011proc,
author = {Robin, Xavier and Turck, Natacha and Hainard, Alexandre and Tiberti, Natalia and Lisacek, Frédérique and Sanchez, Jean-Charles and Müller, Markus},
title = {pROC: An Open-Source Package for R and S+ to Analyze and Compare ROC Curves},
journal = {BMC Bioinformatics},
year = {2011},
volume = {12},
pages = {77},
doi = {10.1186/1471-2105-12-77}
}@article{hunter2007matplotlib,
author = {Hunter, John D.},
title = {Matplotlib: A 2D Graphics Environment},
journal = {Computing in Science and Engineering},
year = {2007},
volume = {9},
number = {3},
pages = {90--95},
doi = {10.1109/MCSE.2007.55}
}@article{pedregosa2011scikitlearn,
author = {Pedregosa, Fabian and Varoquaux, Gaël and Gramfort, Alexandre and Michel, Vincent and Thirion, Bertrand and Grisel, Olivier and others},
title = {Scikit-learn: Machine Learning in Python},
journal = {Journal of Machine Learning Research},
year = {2011},
volume = {12},
pages = {2825--2830}
}Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Oferta dla badaczyOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Collins, G. S., Moons, K. G. M., Dhiman, P., Riley, R. D., Beam, A. L., Van Calster, B., Ghassemi, M., Liu, X., Reitsma, J. B., van Smeden, M., Boulesteix, A.-L., Camaradou, J. C., Celi, L. A., Denaxas, S., Denniston, A. K., Glocker, B., Golub, R. M., Harvey, H., Heinze, G., … Logullo, P. (2024). TRIPOD+AI statement: Updated guidance for reporting clinical prediction models. BMJ, 385, e078378. https://doi.org/10.1136/bmj-2023-078378
- Peduzzi, P., Concato, J., Kemper, E., Holford, T. R., & Feinstein, A. R. (1996). A simulation study of the number of events per variable in logistic regression analysis. Journal of Clinical Epidemiology, 49(12), 1373–1379. https://doi.org/10.1016/S0895-4356(96)00236-3
- Lang, T. A., & Altman, D. G. (2015). Basic statistical reporting for articles published in biomedical journals: The SAMPL guidelines. International Journal of Nursing Studies, 52(1), 5–9. https://doi.org/10.1016/j.ijnurstu.2014.09.006
- Lakens, D. (2022). Sample size justification. Collabra: Psychology, 8(1), 33267. https://doi.org/10.1525/collabra.33267
- Appelbaum, M., Cooper, H., Kline, R. B., Mayo-Wilson, E., Nezu, A. M., & Rao, S. M. (2018). Journal article reporting standards for quantitative research in psychology: The APA Publications and Communications Board task force report. American Psychologist, 73(1), 3–25. https://doi.org/10.1037/amp0000191
- Wilkinson, L., & Task Force on Statistical Inference. (1999). Statistical methods in psychology journals: Guidelines and explanations. American Psychologist, 54(8), 594–604. https://doi.org/10.1037/0003-066X.54.8.594
Cytowania BibTeX
@article{collins2024tripod, author={Collins, Gary S. and Moons, Karel G. M. and Dhiman, Paula and Riley, Richard D. and Beam, Andrew L. and Van Calster, Ben and Ghassemi, Marzyeh and Liu, Xiaoxuan and Reitsma, Johannes B. and van Smeden, Maarten and Boulesteix, Anne-Laure and Camaradou, Jennifer Catherine and Celi, Leo Anthony and Denaxas, Spiros and Denniston, Alastair K. and Glocker, Ben and Golub, Robert M. and Harvey, Hugh and Heinze, Georg and Hoffman, Michael M. and Kengne, André Pascal and Lam, Emily and Lee, Naomi and Loder, Elizabeth W. and Maier-Hein, Lena and Mateen, Bilal A. and McCradden, Melissa D. and Oakden-Rayner, Lauren and Ordish, Johan and Parnell, Richard and Rose, Sherri and Singh, Karandeep and Wynants, Laure and Logullo, Patricia}, title={TRIPOD+AI statement: updated guidance for reporting clinical prediction models}, journal={BMJ}, year={2024}, volume={385}, pages={e078378}, doi={10.1136/bmj-2023-078378}}@article{peduzzi1996epv, author={Peduzzi, Peter and Concato, John and Kemper, Elizabeth and Holford, Theodore R. and Feinstein, Alvan R.}, title={A simulation study of the number of events per variable in logistic regression analysis}, journal={Journal of Clinical Epidemiology}, year={1996}, volume={49}, number={12}, pages={1373--1379}, doi={10.1016/S0895-4356(96)00236-3}}@article{lang2015sampl, author={Lang, Thomas A. and Altman, Douglas G.}, title={Basic statistical reporting for articles published in biomedical journals: the SAMPL guidelines}, journal={International Journal of Nursing Studies}, year={2015}, volume={52}, number={1}, pages={5--9}, doi={10.1016/j.ijnurstu.2014.09.006}}@article{lakens2022sample, author={Lakens, Daniël}, title={Sample size justification}, journal={Collabra: Psychology}, year={2022}, volume={8}, number={1}, pages={33267}, doi={10.1525/collabra.33267}}@article{appelbaum2018jars, author={Appelbaum, Mark and Cooper, Harris and Kline, Rex B. and Mayo-Wilson, Evan and Nezu, Arthur M. and Rao, Stephen M.}, title={Journal article reporting standards for quantitative research in psychology}, journal={American Psychologist}, year={2018}, volume={73}, number={1}, pages={3--25}, doi={10.1037/amp0000191}}@article{wilkinson1999statistical, author={Wilkinson, Leland and {Task Force on Statistical Inference}}, title={Statistical methods in psychology journals: Guidelines and explanations}, journal={American Psychologist}, year={1999}, volume={54}, number={8}, pages={594--604}, doi={10.1037/0003-066X.54.8.594}}