Najpierw cel analizy
Odpowiedź zależy od tego, po co Ci regresja. Mogą to być dwa różne cele:
- Testujesz hipotezy o z góry wybranych predyktorach, np. „wsparcie społeczne przewiduje dobrostan po kontroli wieku i płci”. Wtedy liczebność wyznacza analiza mocy dla efektu, który Cię interesuje. Liczba zmiennych kontrolnych ma mniejsze znaczenie.
- Budujesz model, który ma przewidywać wynik u nowych osób, i często wybierasz predyktory z dłuższej listy. Wtedy głównym zagrożeniem jest przeuczenie: model dopasowuje się do szumu w Twojej próbie i gorzej działa poza nią. Tu przydają się reguły EPV i kryteria Rileya i in.
W obu przypadkach licz parametry, a nie zmienne. Zmienna kategorialna o czterech poziomach to trzy parametry (kodowanie zero-jedynkowe), a każda interakcja to kolejny. Babyak (2004) przestrzega też, że wstępne testowanie kandydatów na predyktory i automatyczny dobór zmiennych, np. metoda krokowa, sprzyjają wynikom, które nie powtarzają się w nowych próbach. Dlatego w obliczeniach uwzględnij wszystkich kandydatów, których sprawdzasz, a nie tylko tych, którzy zostali w modelu końcowym.
Reguła EPV ≥ 10 i jej ograniczenia
W regresji logistycznej nie liczy się całe N, lecz liczba zdarzeń, czyli osób w rzadszej kategorii wyniku. Reguła EPV (events per variable) mówi: co najmniej 10 zdarzeń na parametr. Pochodzi z symulacji Peduzziego i in. (1996): przy EPV ≥ 10 model nie sprawiał większych problemów, a przy EPV < 10 współczynniki były obciążone, przedziały ufności miały złe pokrycie i częściej pojawiały się związki o odwrotnym kierunku.
Przykład: 150 osób, z których 30% przerwało terapię (dane symulowane). Zdarzeń jest 45, więc reguła EPV ≥ 10 dopuszcza 4 parametry.
Reguła ma jednak trzy słabości:
- Van Smeden i in. (2016) w nowszych symulacjach pokazali, że skutki małej liczby zdarzeń zależą też od innych czynników, m.in. od całkowitej liczebności próby. Dowody za regułą 10 zdarzeń ocenili jako słabe.
- Reguła nie uwzględnia, jak dobrze predyktory przewidują wynik ani jak częste jest zdarzenie.
- Mówi o stabilności współczynników, a nie o tym, czy model będzie trafnie przewidywał u nowych osób.
W regresji liniowej sytuacja jest łagodniejsza. Austin i Steyerberg (2015) wykazali w symulacjach, że do trafnego oszacowania współczynników, ich błędów standardowych i przedziałów ufności wystarczą około dwie obserwacje na zmienną. Zwykłe R² jest jednak zawyżone i wymaga znacznie więcej osób. Skorygowane R² zachowywało się dobrze.
Minimalna liczebność według Rileya i in.
Zamiast reguły kciuka Riley i in. (2019) proponują dla modelu predykcyjnego z wynikiem binarnym trzy kryteria. Minimalne N to największa z trzech liczb:
- współczynnik skurczenia co najmniej 0.9, czyli przeuczenie współczynników najwyżej o 10%;
- różnica między pozornym a skorygowanym R² Nagelkerkego najwyżej .05;
- ogólne ryzyko zdarzenia oszacowane z dokładnością ±0.05.
Kryteria wymagają założenia, jak dobry będzie model. Gdy brak danych z wcześniejszych badań, autorzy sugerują przyjąć R² Nagelkerkego = .15. Riley i in. (2020) opisują całą procedurę krok po kroku. Zwracają też uwagę, że wiele modeli predykcyjnych powstaje na zbyt małych zbiorach, co daje niedokładne przewidywania. Pakiet pmsampsize nie był zainstalowany, więc w kodzie liczymy kryteria ze wzorów. Kryteria 1 i 2 (ze zwykłym R² w miejsce R² Coxa–Snella) liczymy też dla regresji liniowej przy założonym R² = .20.
| Parametry | Logistyczna: EPV ≥ 10 (30% zdarzeń) | Logistyczna: kryteria Rileya (R² Nagelkerkego = .15) | Liniowa: kryterium skurczenia (R² = .20) |
|---|---|---|---|
| 2 | 67 | 323 | 80 |
| 4 | 134 | 323 | 160 |
| 6 | 200 | 480 | 239 |
| 8 | 267 | 640 | 319 |
| 10 | 334 | 800 | 398 |
Przy dwóch i czterech parametrach o wyniku w regresji logistycznej decyduje kryterium 3 (323 osoby niezależnie od liczby predyktorów). Dalej rządzi kryterium skurczenia: około 80 osób, czyli 24 zdarzenia, na parametr. Przy 150 osobach model predykcyjny zmieści według kryterium skurczenia tylko jeden parametr w regresji logistycznej i trzy w liniowej, a kryterium 3 i tak wymaga 323 osób. Reguła EPV dopuszczałaby cztery parametry.
Inaczej wygląda test jednego, z góry wybranego predyktora. Przy 150 osobach i efekcie f² = 0.05 moc wynosi .777 przy dwóch predyktorach i .776 przy dwudziestu. Liczba zmiennych kontrolnych prawie jej nie zmienia, o ile nie są ze sobą silnie skorelowane.
Symulacja przeuczenia
Co się dzieje, gdy kryteria przekroczysz? W R wygenerowaliśmy 500 prób po 150 osób. Wynik zależał od 4 predyktorów (R² w populacji = .20), a do modelu dokładaliśmy predyktory bez żadnego związku z wynikiem. Model oceniono potem na nowej próbie 10 000 osób.
| Predyktory w modelu | R² w próbie | Skorygowane R² | R² w nowych danych |
|---|---|---|---|
| 4 (same prawdziwe) | .220 | .199 | .173 |
| 10 | .254 | .200 | .137 |
| 20 | .305 | .197 | .070 |
| 40 | .420 | .207 | −.108 |
Zwykłe R² rośnie z każdym predyktorem, a trafność przewidywań u nowych osób spada. Przy 40 predyktorach model przewiduje gorzej niż sama średnia. Skorygowane R² zostaje przy około .20, ale nie chroni przed spadkiem trafności, bo nie mierzy, jak model z oszacowanymi współczynnikami zadziała na nowych danych. Do tego służy walidacja krzyżowa albo bootstrap, opisane w poradniku o walidacji modeli predykcyjnych.
Co zrobić, gdy osób jest za mało? Ogranicz listę predyktorów na podstawie teorii i wcześniejszych badań, zanim zobaczysz dane. Połącz pokrewne zmienne w jeden wskaźnik. Zrezygnuj z doboru krokowego. Diagnostykę i interpretację modelu omawiamy w poradnikach regresja logistyczna krok po kroku i regresja wieloraka krok po kroku.
Jak to opisać w pracy
Wzór uzasadnienia liczby predyktorów w rozdziale metod (wersja dla regresji logistycznej z z góry wybranymi predyktorami):
Szerzej o tym, jak zaplanować i uzasadnić liczebność próby w pracy dyplomowej, piszemy w przewodniku statystyka w pracy dyplomowej.
Liczba predyktorów a liczebność próby w R
Kod odtwarza wszystkie liczby z tekstu: regułę EPV, trzy kryteria Rileya i in. (2019) dla wyniku binarnego liczone ze wzorów (pakiet pmsampsize nie był zainstalowany), kryteria skurczenia i skorygowanego R² dla regresji liniowej, moc testu jednego współczynnika i symulację przeuczenia.
EPV, kryteria minimalnej liczebności, moc i symulacja przeuczenia
R
# B163 – ile predyktorów przy danej próbie: EPV, kryteria Rileya i in. (2019) oraz symulacja przeuczenia
# Pakiet pmsampsize nie jest zainstalowany, więc kryteria liczymy ze wzorów (Riley i in., 2019, równania 11, 26 i 27).
# Przykład: 150 osób; wynik binarny o częstości 30% (np. przerwanie terapii) albo wynik ciągły (dobrostan).
# 1. Reguła EPV ≥ 10 w regresji logistycznej
n <- 150; phi <- 0.30
zdarzenia <- n * min(phi, 1 - phi) # liczy się rzadsza kategoria wyniku
c(zdarzenia = zdarzenia, max_parametrow_EPV10 = floor(zdarzenia / 10), EPV_4_parametry = zdarzenia / 4)
# 2. Kryteria Rileya i in. (2019) dla wyniku binarnego
# p – liczba parametrów kandydatów (zmienna kategorialna o k poziomach = k − 1 parametrów)
# R2_nag – przewidywane R² Nagelkerkego (tu .15, gdy brak lepszych danych)
riley_binarny <- function(p, phi, R2_nag = 0.15, S = 0.9, delta = 0.05, margines = 0.05) {
lnL0_n <- phi * log(phi) + (1 - phi) * log(1 - phi) # ln L(null) / n
maxR2 <- 1 - exp(2 * lnL0_n) # maksymalne R² Coxa–Snella
R2cs <- R2_nag * maxR2 # przewidywane R² Coxa–Snella
n_i <- p / ((S - 1) * log(1 - R2cs / S)) # (i) skurczenie ≥ 0.9
S_ii <- R2cs / (R2cs + delta * maxR2) # (ii) różnica R² Nagelkerkego ≤ .05
n_ii <- p / ((S_ii - 1) * log(1 - R2cs / S_ii))
n_iii <- (1.96 / margines)^2 * phi * (1 - phi) # (iii) ryzyko ogólne ± 0.05
n_min <- ceiling(max(n_i, n_ii, n_iii))
c(p = p, n_EPV10 = ceiling(10 * p / min(phi, 1 - phi)), R2cs = round(R2cs, 3), n_i = ceiling(n_i), n_ii = ceiling(n_ii), n_iii = ceiling(n_iii),
n_min = n_min, n_na_parametr = round(n_min / p, 1), zdarzenia = ceiling(n_min * phi), EPP = round(ceiling(n_min * phi) / p, 1))
}
t(sapply(c(2, 4, 6, 8, 10), riley_binarny, phi = phi))
# Ile parametrów zmieści się w 150 osobach według kryterium (i)?
maxR2 <- 1 - exp(2 * (phi * log(phi) + (1 - phi) * log(1 - phi)))
floor(n * (0.9 - 1) * log(1 - 0.15 * maxR2 / 0.9))
# 3. Regresja liniowa: kryterium (i) dla R² = .20 (w modelu liniowym R² Coxa–Snella to zwykłe R²)
# i różnica między R² a skorygowanym R² ≤ .05
R2 <- 0.20
lin <- sapply(c(2, 4, 6, 8, 10), function(p)
c(p = p, n_i = ceiling(p / ((0.9 - 1) * log(1 - R2 / 0.9))),
n_ii = ceiling(1 + p * (1 - R2) / 0.05)))
t(lin)
floor(n * (0.9 - 1) * log(1 - R2 / 0.9)) # maksymalna liczba parametrów przy n = 150
# 4. Pytanie wyjaśniające (test jednego współczynnika): moc dla f² = 0.05 przy n = 150
moc_wsp <- function(n, p, f2 = 0.05, alfa = .05) {
df2 <- n - p - 1
1 - pf(qf(1 - alfa, 1, df2), 1, df2, ncp = f2 * n)
}
round(sapply(c(2, 4, 6, 8, 10, 20), function(p) moc_wsp(150, p)), 3)
# 5. Symulacja przeuczenia: 150 osób, 4 prawdziwe predyktory (R² w populacji ≈ .20)
# i rosnąca liczba predyktorów bez związku z wynikiem; R² w nowej próbie 10 000 osób
set.seed(1631)
beta <- rep(sqrt(0.25 / 4), 4) # 4 × β² = 0.25, σ² = 1 → R² = .20
symuluj <- function(p_dod, R = 500) {
wyn <- replicate(R, {
X <- matrix(rnorm(150 * (4 + p_dod)), 150)
y <- X[, 1:4] %*% beta + rnorm(150)
m <- lm(y ~ X)
Xn <- matrix(rnorm(10000 * (4 + p_dod)), 10000)
yn <- Xn[, 1:4] %*% beta + rnorm(10000)
pred <- cbind(1, Xn) %*% coef(m)
c(R2 = summary(m)$r.squared, R2_skor = summary(m)$adj.r.squared,
R2_nowe = 1 - sum((yn - pred)^2) / sum((yn - mean(yn))^2))
})
round(rowMeans(wyn), 3)
}
t(sapply(c(0, 6, 16, 36), function(k) c(predyktory = 4 + k, symuluj(k))))Wynik w R
zdarzenia max_parametrow_EPV10 EPV_4_parametry
45.00 4.00 11.25
p n_EPV10 R2cs n_i n_ii n_iii n_min n_na_parametr zdarzenia EPP
[1,] 2 67 0.106 160 53 323 323 161.5 97 48.5
[2,] 4 134 0.106 320 106 323 323 80.8 97 24.2
[3,] 6 200 0.106 480 158 323 480 80.0 144 24.0
[4,] 8 267 0.106 640 211 323 640 80.0 192 24.0
[5,] 10 334 0.106 800 264 323 800 80.0 240 24.0
[1] 1
p n_i n_ii
[1,] 2 80 33
[2,] 4 160 65
[3,] 6 239 98
[4,] 8 319 129
[5,] 10 398 161
[1] 3
[1] 0.777 0.777 0.776 0.776 0.776 0.776
predyktory R2 R2_skor R2_nowe
[1,] 4 0.220 0.199 0.173
[2,] 10 0.254 0.200 0.137
[3,] 20 0.305 0.197 0.070
[4,] 40 0.420 0.207 -0.108Bibliografia oprogramowania
Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje lm(), qf() i pf() z pakietu stats). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).
- 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/
Najczęstsze pytania
Czy zmienna kategorialna liczy się jako jeden predyktor w regule EPV?
Nie. Liczy się liczba parametrów, czyli zmienna o k kategoriach zajmuje k − 1 miejsc (tyle ma zmiennych zero-jedynkowych). Tak samo każda interakcja i każdy człon wielomianu to osobny parametr. Wlicz też predyktory, które sprawdzałeś(-aś) i odrzuciłeś(-aś) po drodze.
Jak liczyć zdarzenia w regule 10 na predyktor, gdy wynik ma 70% odpowiedzi „tak”?
Licz rzadszą kategorię wyniku. Przy 150 osobach i 70% odpowiedzi „tak” zdarzeń jest 45 (30% „nie”), więc reguła EPV ≥ 10 dopuszcza najwyżej 4 parametry. Samo N = 150 nic tu nie mówi.
Czy pmsampsize da się zastąpić ręcznym liczeniem w R?
Tak, przy wyniku binarnym trzy kryteria Rileya i in. (2019) to proste wzory: na współczynnik skurczenia, różnicę R² Nagelkerkego i precyzję ogólnego ryzyka. W tym wpisie liczymy je funkcją w kilku linijkach kodu. Pakiet pmsampsize robi to samo i dodatkowo obsługuje wynik ciągły oraz czas do zdarzenia, więc jeśli masz go zainstalowanego, użyj go do sprawdzenia.
Powiązane hasła
Przeczytaj też
Regresja logistyczna krok po kroku
Ilorazy szans i prawdopodobieństwa przewidywane, założenia, separacja, pseudo-R², AUC i kalibracja, tabela APA – na danych do pobrania z kodem R.
Czytaj →PoradnikRegresja wieloraka krok po kroku
Model i hipotezy, przygotowanie danych, założenia i diagnostyka, ΔR², interpretacja b, β i sr², kod R, SPSS i opis APA – na jednym przykładzie.
Czytaj →PoradnikModele predykcyjne: walidacja i kalibracja
Liczebność, przeuczenie, walidacja krzyżowa i bootstrap, LASSO i ridge, kalibracja, wynik Briera i TRIPOD+AI – na danych do pobrania, z kodem R.
Czytaj →Masz za mało osób na tyle predyktorów, ile chcesz?
Pomożemy wybrać predyktory z uzasadnieniem teoretycznym, policzyć potrzebną liczebność i przeprowadzić analizę, którą zrozumiesz i obronisz.
Oferta dla studentówWyceń analizęBibliografia i dalsza literatura naukowa (APA 7)
- Austin, P. C., & Steyerberg, E. W. (2015). The number of subjects per variable required in linear regression analyses. Journal of Clinical Epidemiology, 68(6), 627–636. https://doi.org/10.1016/j.jclinepi.2014.12.014 ● Otwarty dostęp
- Babyak, M. A. (2004). What you see may not be what you get: A brief, nontechnical introduction to overfitting in regression-type models. Psychosomatic Medicine, 66(3), 411–421. https://doi.org/10.1097/01.psy.0000127692.23278.a9 ● Otwarty dostęp
- 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 ● Otwarty dostęp
- Riley, R. D., Ensor, J., Snell, K. I. E., Harrell, F. E., Martin, G. P., Reitsma, J. B., Moons, K. G. M., Collins, G., & van Smeden, M. (2020). Calculating the sample size required for developing a clinical prediction model. BMJ, 368, Article m441. https://doi.org/10.1136/bmj.m441 ● Otwarty dostęp
- Riley, R. D., Snell, K. I. E., Ensor, J., Burke, D. L., Harrell, F. E., Jr., Moons, K. G. M., & Collins, G. S. (2019). Minimum sample size for developing a multivariable prediction model: PART II – Binary and time-to-event outcomes. Statistics in Medicine, 38(7), 1276–1296. https://doi.org/10.1002/sim.7992 ● Otwarty dostęp
- 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{austin2015number, author={Austin, Peter C. and Steyerberg, Ewout W.}, title={{The number of subjects per variable required in linear regression analyses}}, journal={Journal of Clinical Epidemiology}, year={2015}, volume={68}, number={6}, pages={627--636}, doi={10.1016/j.jclinepi.2014.12.014}}@article{babyak2004what, author={Babyak, Michael A.}, title={{What you see may not be what you get: A brief, nontechnical introduction to overfitting in regression-type models}}, journal={Psychosomatic Medicine}, year={2004}, volume={66}, number={3}, pages={411--421}, doi={10.1097/01.psy.0000127692.23278.a9}}@article{peduzzi1996simulation, 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{riley2020calculating, author={Riley, Richard D. and Ensor, Joie and Snell, Kym I. E. and Harrell, Frank E. and Martin, Glen P. and Reitsma, Johannes B. and Moons, Karel G. M. and Collins, Gary and van Smeden, Maarten}, title={{Calculating the sample size required for developing a clinical prediction model}}, journal={BMJ}, year={2020}, volume={368}, eid={m441}, doi={10.1136/bmj.m441}}@article{riley2019minimum, author={Riley, Richard D. and Snell, Kym I. E. and Ensor, Joie and Burke, Danielle L. and Harrell, Frank E., Jr. and Moons, Karel G. M. and Collins, Gary S.}, title={{Minimum sample size for developing a multivariable prediction model: PART II – Binary and time-to-event outcomes}}, journal={Statistics in Medicine}, year={2019}, volume={38}, number={7}, pages={1276--1296}, doi={10.1002/sim.7992}}@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}}