Co to jest regresja segmentowa?
Regresja segmentowa (ang. segmented lub piecewise regression) opisuje zależność dwiema lub kilkoma prostymi połączonymi w punkcie załamania (ang. breakpoint). Po jego przekroczeniu zmienia się nachylenie, a linia pozostaje ciągła. Model ma postać y = β0 + β1x + β2(x − c)+, gdzie (x − c)+ to 0 poniżej c i x − c powyżej. Nachylenie przed punktem to β1, po nim β1 + β2. W odróżnieniu od regresji krzywoliniowej każdy odcinek da się opisać jednym zdaniem.
Znany i nieznany punkt załamania
Gdy c wynika z planu badania, np. z daty wprowadzenia interwencji, model to zwykła regresja liniowa z dodatkową zmienną. Tak działa przerwany szereg czasowy; Wagner i in. (2002) opisali regresję segmentową jako metodę szacowania zmian poziomu i nachylenia po interwencji. Gdy c jest nieznany, staje się parametrem. Muggeo (2003) zaproponował jego szacowanie przez linearyzację; prostszą drogą jest siatka kandydatów i wybór c o najmniejszej sumie kwadratów reszt.
Przykład
W symulowanych danych (n = 120) efekt rósł z dawką powoli, a powyżej 60 mg szybciej. Siatka od 10 do 90 mg wskazała c = 63 mg, 95% CI bootstrap [53.0, 73.5]. Nachylenie wyniosło 0.067 przed punktem i 0.358 po nim (zmiana 0.291, SE = 0.030). Model segmentowy miał AIC = 513.2 (z karą za c) wobec 578.2 dla prostej.
Jak opisać w pracy
Na co uważać
- Szukany punkt zawyża pewność. Błędy standardowe z
lmtraktują c jak znany, a p dla zmiany nachylenia po przeszukaniu siatki jest zbyt optymistyczne. Podawaj przedział dla c i porównuj modele kryteriami takimi jak AIC i BIC. - Punkt przy brzegu danych. Ogranicz siatkę tak, by po obu stronach zostało dość obserwacji.
- Dane w czasie. Sprawdź autokorelację reszt.
Zastosowanie w szeregach czasowych pokazuje wpis Regresja segmentowa i przerwany szereg czasowy, a gładkie alternatywy – splajny i modele GAM.
Regresja segmentowa w R
Kod symuluje zależność z punktem załamania, szuka go na siatce kandydatów zwykłą funkcją lm, porównuje model segmentowy z prostą i wyznacza bootstrapowy przedział dla punktu załamania.
Punkt załamania zależności efektu od dawki
R
set.seed(3753)
n <- 120
dawka <- sort(runif(n, 0, 100)) # dawka (mg)
efekt <- 10 + 0.05 * dawka + 0.30 * pmax(dawka - 60, 0) + rnorm(n, sd = 2)
dane <- data.frame(dawka, efekt) # prawdziwy punkt załamania: 60 mg
dopasuj <- function(c, d) lm(efekt ~ dawka + pmax(dawka - c, 0), data = d)
siatka <- seq(10, 90, by = 0.5) # kandydaci na punkt załamania
rss <- sapply(siatka, function(c) deviance(dopasuj(c, dane)))
c_hat <- siatka[which.min(rss)]
m_seg <- dopasuj(c_hat, dane)
m_lin <- lm(efekt ~ dawka, data = dane)
c(punkt_zalamania = c_hat)
round(coef(summary(m_seg)), 3)
round(c(nachylenie_przed = unname(coef(m_seg)[2]),
nachylenie_po = unname(coef(m_seg)[2] + coef(m_seg)[3])), 3)
round(c(AIC_liniowy = AIC(m_lin), AIC_segmentowy = AIC(m_seg) + 2), 1) # +2: punkt załamania to też parametr
boot_c <- replicate(500, { # bootstrap przypadków dla punktu załamania
d <- dane[sample(n, replace = TRUE), ]
siatka[which.min(sapply(siatka, function(c) deviance(dopasuj(c, d))))]
})
quantile(boot_c, c(0.025, 0.975))Wynik w R
punkt_zalamania
63
Estimate Std. Error t value Pr(>|t|)
(Intercept) 9.443 0.470 20.071 0
dawka 0.067 0.011 5.905 0
pmax(dawka - c, 0) 0.291 0.030 9.540 0
nachylenie_przed nachylenie_po
0.067 0.358
AIC_liniowy AIC_segmentowy
578.2 513.2
2.5% 97.5%
53.0 73.5Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (bez dodatkowych pakietów). 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
Czym regresja segmentowa różni się od przerwanego szeregu czasowego?
Przerwany szereg czasowy to schemat badania: pomiary przed interwencją i po niej. Regresja segmentowa to model, którym zwykle się go analizuje, z punktem załamania w dacie interwencji i często ze zmianą poziomu. Sam model stosuje się też poza czasem, np. dla dawki czy wieku.
Czy punkt załamania może oznaczać skok, a nie tylko zmianę nachylenia?
Tak. Dodanie zmiennej 0/1 dla obserwacji powyżej c pozwala na nieciągłość, czyli zmianę poziomu. W przerwanym szeregu czasowym to standard (Wagner i in., 2002), ale przy nieznanym c skok trzeba uzasadnić teorią.
Jak policzyć regresję segmentową w R bez pakietu segmented?
Dla znanego punktu: lm(y ~ x + pmax(x - c, 0)). Dla nieznanego dopasuj ten model dla siatki wartości c, wybierz najmniejszą sumę kwadratów reszt (deviance()) i oszacuj przedział dla c bootstrapem.
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Regresja segmentowa i przerwany szereg czasowy
Zmiana poziomu i nachylenia, gls z AR(1), sezonowość, szereg kontrolny, nieznany punkt załamania z bootstrapem, przykład w R i wzór opisu.
Czytaj →PoradnikNieliniowe zależności: splajny i GAM
Podział na grupy, parabola, splajn i GAM na jednym zbiorze: edf, REML, wybór k, diagnostyka, wykres krzywej i wzór opisu w R.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Muggeo, V. M. R. (2003). Estimating regression models with unknown break-points. Statistics in Medicine, 22(19), 3055–3071. https://doi.org/10.1002/sim.1545
- Wagner, A. K., Soumerai, S. B., Zhang, F., & Ross-Degnan, D. (2002). Segmented regression analysis of interrupted time series studies in medication use research. Journal of Clinical Pharmacy and Therapeutics, 27(4), 299–309. https://doi.org/10.1046/j.1365-2710.2002.00430.x
Cytowania BibTeX
@article{muggeo2003estimating, author={Muggeo, Vito M. R.}, title={{Estimating regression models with unknown break-points}}, journal={Statistics in Medicine}, year={2003}, volume={22}, number={19}, pages={3055--3071}, doi={10.1002/sim.1545}}@article{wagner2002segmented, author={Wagner, A. K. and Soumerai, S. B. and Zhang, F. and Ross-Degnan, D.}, title={{Segmented regression analysis of interrupted time series studies in medication use research}}, journal={Journal of Clinical Pharmacy and Therapeutics}, year={2002}, volume={27}, number={4}, pages={299--309}, doi={10.1046/j.1365-2710.2002.00430.x}}