Słownik metodologiczny · Modele regresji

Regresja gamma – jak modelować czasy, koszty i inne skośne wyniki?

Regresja gamma to uogólniony model liniowy dla dodatnich, prawostronnie skośnych wyników, takich jak czasy czy koszty. Pokazujemy, jak czytać exp(b) jako iloraz średnich, czym różni się od logarytmowania wyniku, przykład w R i opis do pracy.

Strona główna / Słownik / Regresja gamma
W skrócie: Regresja gamma to uogólniony model liniowy dla ciągłego wyniku dodatniego i prawostronnie skośnego (czas, koszty, stężenie), w którym rozrzut rośnie razem ze średnią. Z łączem logarytmicznym exp(b) to iloraz średnich arytmetycznych, a nie geometrycznych jak po logarytmowaniu wyniku.

Co to jest regresja gamma?

Regresja gamma (ang. gamma regression, gamma GLM) to uogólniony model liniowy dla wyniku ciągłego, dodatniego i prawostronnie skośnego: czasu wykonania zadania, długości pobytu w szpitalu, kosztów czy stężeń. Rozkład gamma był jednym z przykładów, na których Nelder i Wedderburn (1972) zilustrowali uogólnione modele liniowe. W modelu gamma odchylenie standardowe rośnie proporcjonalnie do średniej, więc współczynnik zmienności jest stały. Rosnący rozrzut przy wyższych wynikach to dla tego modelu cecha danych, a nie naruszenie homoskedastyczności.

Jak interpretować

Najczęściej stosuje się logarytmiczną funkcję łączącą: ln μ = b0 + b1x. Wtedy exp(b) to iloraz średnich arytmetycznych. Wartość 0.80 oznacza średnią mniejszą o 20%. Alternatywą jest transformacja logarytmiczna wyniku i zwykła regresja, ale exp(b) to wtedy iloraz średnich geometrycznych. Manning i Mullahy (2001) pokazali w symulacjach, że żadne z tych podejść nie wygrywa zawsze. Przy skośności i heteroskedastyczności zły wybór może obciążyć wynik albo obniżyć precyzję, dlatego autorzy podają algorytm wyboru.

Przykład

W symulowanych danych 160 osób rozwiązywało zadanie z podpowiedzią albo bez niej (czas: M = 84.2 s, SD = 59.8, zakres 8.6–353.0). W regresji gamma z łączem logarytmicznym i stażem jako kowariantą podpowiedź skracała średni czas o 23.8%: iloraz średnich = 0.762, 95% CI [0.613, 0.946], t(157) = −2.47, p = .015. Staż nie miał istotnego związku z czasem (0.974, p = .143). Regresja na ln(czas) dała iloraz średnich geometrycznych 0.737.

Jak opisać w pracy

Ze względu na dodatni, prawostronnie skośny rozkład czasu rozwiązania zadania zastosowano uogólniony model liniowy z rozkładem gamma i logarytmiczną funkcją łączącą, ze stażem jako kowariantą. Podpowiedź wiązała się z krótszym średnim czasem, iloraz średnich = 0.762, 95% CI [0.613, 0.946], t(157) = −2.47, p = .015.

Na co uważać

  • Tylko wartości dodatnie. Przy wielu zerach (np. koszty osób, które nie korzystały z usług) potrzebny jest model dwuczęściowy, podobny do modelu hurdle.
  • Ustaw łącze. W R family = Gamma bez argumentu używa funkcji odwrotnej (1/μ), trudnej w interpretacji. Wpisz Gamma(link = "log").
  • Sprawdź reszty modelu, a nie rozkład surowych wyników (zob. Normalność reszt czy zmiennych).
Przykład reprodukowalny

Regresja gamma w R

Kod dopasowuje regresję gamma z logarytmiczną funkcją łączącą (glm(..., family = Gamma(link = "log"))), przelicza współczynniki na ilorazy średnich z 95% CI i porównuje je z regresją na ln(czas).

Czas rozwiązania zadania: regresja gamma i regresja na logarytmie

Dane wejściowe: czas rozwiązania zadania w sekundach, warunek (standard / podpowiedź) i staż w latach u 160 osób (dane symulowane, set.seed(291)).

Co odczytać: statystyki opisowe czasu, tabelę współczynników z t i p, parametr rozproszenia, ilorazy średnich (IR) z CI oraz ilorazy średnich geometrycznych z modelu na ln(czas).

R
set.seed(291)
n <- 160
warunek <- factor(rep(c("standard", "podpowiedz"), each = n / 2), levels = c("standard", "podpowiedz"))
staz <- round(runif(n, 0, 10), 1)                         # lata doświadczenia (dane symulowane)
mu <- exp(log(120) - 0.25 * (warunek == "podpowiedz") - 0.04 * staz)
czas <- round(rgamma(n, shape = 2, rate = 2 / mu), 1)     # czas rozwiązania zadania (s), skośny
round(c(M = mean(czas), SD = sd(czas), min = min(czas), max = max(czas)), 1)
m_g <- glm(czas ~ warunek + staz, family = Gamma(link = "log"))
round(summary(m_g)$coefficients, 3)
df.residual(m_g)                                          # df dla testów t
round(summary(m_g)$dispersion, 3)                         # fi; 1/fi ~ parametr kształtu
round(exp(cbind(IR = coef(m_g), confint.default(m_g))), 3) # ilorazy średnich z 95% CI (Wald)
round(100 * (1 - exp(coef(m_g)["warunekpodpowiedz"])), 1) # o ile % krótszy średni czas
m_log <- lm(log(czas) ~ warunek + staz)                    # dla porównania: MNK na ln(czas)
round(exp(coef(m_log)), 3)                                 # ilorazy średnich geometrycznych
Wynik w R
    M    SD   min   max 
 84.2  59.8   8.6 353.0 
                  Estimate Std. Error t value Pr(>|t|)
(Intercept)          4.705      0.129  36.413    0.000
warunekpodpowiedz   -0.272      0.110  -2.468    0.015
staz                -0.026      0.018  -1.472    0.143
[1] 157
[1] 0.486
                       IR  2.5 %  97.5 %
(Intercept)       110.481 85.764 142.321
warunekpodpowiedz   0.762  0.613   0.946
staz                0.974  0.940   1.009
warunekpodpowiedz 
             23.8 
      (Intercept) warunekpodpowiedz              staz 
           88.088             0.737             0.975 

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i stats). 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/

Najczęstsze pytania

Kiedy wybrać regresję gamma zamiast regresji liniowej?

Gdy wynik jest dodatni, prawostronnie skośny, a jego rozrzut rośnie wraz ze średnią, np. czasy reakcji, długość hospitalizacji albo koszty. Regresja liniowa może wtedy przewidywać wartości ujemne.

Czy regresja gamma działa, gdy w danych są zera?

Nie, rozkład gamma dotyczy tylko wartości dodatnich. Przy wielu zerach użyj modelu dwuczęściowego: osobno szansa wartości dodatniej i osobno jej wielkość.

Jak interpretować exp(b) w regresji gamma z łączem logarytmicznym?

Jako iloraz średnich arytmetycznych: exp(b) = 0.80 oznacza średnią mniejszą o 20% przy wzroście predyktora o jednostkę lub w porównywanej grupie.

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. Manning, W. G., & Mullahy, J. (2001). Estimating log models: To transform or not to transform? Journal of Health Economics, 20(4), 461–494. https://doi.org/10.1016/s0167-6296(01)00086-8 ● Otwarty dostęp: pełny tekst
  2. Nelder, J. A., & Wedderburn, R. W. M. (1972). Generalized linear models. Journal of the Royal Statistical Society: Series A (General), 135(3), 370–384. https://doi.org/10.2307/2344614

Cytowania BibTeX

@article{manning2001estimating, author={Manning, Willard G. and Mullahy, John}, title={{Estimating log models: To transform or not to transform?}}, journal={Journal of Health Economics}, year={2001}, volume={20}, number={4}, pages={461--494}, doi={10.1016/s0167-6296(01)00086-8}}
@article{nelder1972generalized, author={Nelder, J. A. and Wedderburn, R. W. M.}, title={{Generalized linear models}}, journal={Journal of the Royal Statistical Society: Series A (General)}, year={1972}, volume={135}, number={3}, pages={370--384}, doi={10.2307/2344614}}
R