5  Za hranicami linearity

5.1 Úvod

  • Lineárny regresný model, na ktorý sme sa dosiaľ zameriavali, má výhodu v jednoduchej interpretácii. Ale ak modelovaný vzťah nie je ani približne lineárny, jeho predpovedná schopnosť je slabá.
  • V predošlej kapitole sme videli, ako sa dá presnosť lineárneho modelu zlepšiť redukciou komplexnosti (zásadne znížiť varianciu na úkor malého zvýšenia výchylky) a tým zlepšiť aj jeho interpretovateľnosť.
  • V druhej kapitole sme zas predstavili elegantný spôsob ako model pomocou bázových funkcií rozšíriť o nelinearitu v premenných pri zachovaní linearity v parametroch. Tým sa jednak zvýšila presnosť aproximácie nelineárnych vzťahov, jednak interpretovateľnosť ako-tak udržala.
  • V nasledujúcej časti si ukážeme jednu užitočnú triedu bázových funkcií, ktorá vedie ku tzv. regresným splajnom.
  • Potom sa na splajny pozrieme z opačného pohľadu ako na neparametrickú triedu vyhladzovacích metód.
  • Nakoniec oba prístupy využijeme v jednoduchom rozšírení do priestoru viacerých prediktorov pri zachovaní aditivity.

5.2 Regresné splajny

  • Najpopulárnejšími bázovými funkciami v regresii sú mocninové funkcie, ktoré vedú k polynomickej regresii Y = \beta_0 + \beta_1X + \beta_2X^2 + \ldots + \beta_qX^q + \varepsilon. Hoci model umožňuje vystihnúť až extrémne nelineárny priebeh funkcie, v praxi sa nepoužíva stupeň q väčší ako 3 alebo 4, pretože pri väčšom vznikajú čudesné tvary – obzvlášť na hraniciach hodnôt X, kde je variancia predikcií najväčšia.
  • Týmto spôsobom však model nelineárnej funkcii vnucuje globálnu štruktúru.
  • Namiesto toho môžeme rozsah prediktoru X rozbiť na intervaly (bins) ohraničené K uzlami (knots) a na každom zvlášť odhadnúť nejaký polynóm.
  • Taká trieda lineárnych modelov sa nazýva regresné splajny a v nasledujúcich častiach sú popísané najčastejšie voľby bázových funkcií.

5.2.1 Konštantné

  • Najjednoduchším regresným splajnom je po častiach konštantná funkcia (step function) Y = \beta_0 + \beta_1\mathbf{1}_{[\xi_1,\xi_2)}(X) + \beta_2\mathbf{1}_{[\xi_2,\xi_3)}(X) + \ldots + \beta_K\mathbf{1}_{[\xi_K,\infty)}(X) + \varepsilon kde ako bázová funkcia pre jednotlivé intervaly je použitá indikačná funkcia \mathbf{1}_{[a,b)}(X) = \begin{cases} 1 & \text{ak } a \leq X < b \\ 0 & \text{inak} \end{cases}
  • Prvý parameter je interpretovaný ako stredná hodnota pre prvý (referenčný) interval, \beta_0=E(Y|X<\xi_1), a ďalšie parametre ako priemerný prírastok odozvy ku \beta_0 pre zodpovedajúci interval.
  • Samozrejme, ako referenčný interval môže byť zvolený ktorýkoľvek iný než prvý. No takisto nemusí byť žiaden, ak prvú bázovú funkciu zmeníme z b_0(X)=1 na b_0(X)=\mathbf{1}_{(-\infty,\xi_1)}(X).
  • Takýmto konštantným splajnom bol spojitý prediktor X prakticky nahradený ordinálnou kategorickou premennou.
  • Voľba uzlov musí byť urobená vopred. Najčastejšie
    • rovnomerným rozmiestnením v rozsahu premennej X alebo
    • prirodzeným umiestnením do bodov, kde dochádza ku zmene priebehu skutočnej regresnej funkcie.
Príklad (mzda)
  • Súbor údajov ISLR::Wage obsahuje príjem (v tisícoch USD) a demografické údaje mužov stredovýchodu USA.
  • Modelujme príjem pomocou veku pomocou globálneho polynómu 4. stupňa (obrázok vľavo) a konštantným regresným splajnom s rovnomerným rozmiestnením uzlov (obr. vpravo).

  • Hoci stupňovitá funkcia nemá v tomto prípade takú dobrú aproximačnú schopnosť ako polynomická vyššieho stupňa, interpretácia parametrov je oveľa ľahšia: priemerný ročný plat mužov do 34 rokov je 94,000 dolárov (\pm1,500), pričom napr. muži v seniorskom veku majú iba o 7,600 USD vyšší (s pomerne vysokým rozptylom).
Kód
lm(wage ~ cut(age, 4), ISLR2::Wage) |> 
  summary() |> 
  coef() |> 
  signif(2)
                       Estimate Std. Error t value Pr(>|t|)
(Intercept)                94.0        1.5    64.0  0.0e+00
cut(age, 4)(33.5,49]       24.0        1.8    13.0  2.0e-38
cut(age, 4)(49,64.5]       24.0        2.1    11.0  1.0e-29
cut(age, 4)(64.5,80.1]      7.6        5.0     1.5  1.3e-01

5.2.2 Lineárne

  • Ak konštantný priebeh v jednotlivých intervaloch na popis vzťahu nestačí, polynóm nultého stupňa môžme nahradiť lineárnym, \begin{split} Y &= \boldsymbol{\beta} \cdot \left\{(1, X)\otimes\Big(1,\mathbf{1}_{[\xi_1,\xi_2)}(X), \mathbf{1}_{[\xi_2,\xi_3)}(X), \ldots, \mathbf{1}_{[\xi_K,\infty)}(X)\Big)\right\} + \varepsilon \\ &= \beta_0 + \beta_1\mathbf{1}_{[\xi_1,\xi_2)}(X) + \ldots + \beta_K\mathbf{1}_{[\xi_K,\infty)}(X) + \phantom{}\\ &\phantom{=.} \beta_{K+1}X + \beta_{K+2}X\mathbf{1}_{[\xi_1,\xi_2)}(X) + \ldots + \beta_{2K+1}X\mathbf{1}_{[\xi_K,\infty)}(X) + \varepsilon \end{split} (kde \otimes je vonkajší súčin vektorov, krútené zátvorky značia rozloženie matice do vektora po riadkoch) a výsledná funkcia bude po častiach lineárna, no vo všeobecnosti stále nespojitá.
  • Spojitosť sa dá zaviesť K podmienkami (constraints) na uzloch splajnu, napr. v regresnej rovnici \begin{split} Y &= \beta_0 + \beta_1X + \beta_2(X-\xi_1)_+ + \ldots + \beta_{K+1}(X-\xi_K)_+ + \varepsilon \\ &= \begin{cases} \beta_0 + \beta_1X \phantom{ (\beta_0 - \sum_{j=1}^K\beta_{j+1}\xi_j) } \text{ak} & \phantom{\xi_0\leq.}X < \xi_1 \\ (\beta_0 - \beta_2\xi_1) + (\beta_1+\beta_2)X & \xi_1 \leq X < \xi_2 \\ \vdots & \\ \left(\beta_0 - \sum_{j=1}^K\beta_{j+1}\xi_j\right) + \left(\sum_{j=1}^{K+1}\beta_{j}\right)X & \xi_K \leq X \quad \end{cases} \quad + \varepsilon \end{split} pomocou bázovej funkcie (X-\xi_j)_+ = \max(0, X-\xi_j), ktorá centruje okolo uzlu a zdola orezáva nulou.
  • Zavedením K podmienok v lineárnom splajne klesol počet parametrov o K.
  • Interpretácia parametrov je stále pomerne jednoduchá, sklon lineárneho segmentu v j-tom intervale sa rovná \beta_j a (pomyselný) priesečník s vertikálnou osou je daný všetkými predošlými parametrami až po \beta_j.
Príklad (mzda)
Kód
dat <- ISLR2::Wage  # |> dplyr::slice_sample(n = 100) 
grid <- modelr::seq_range(dat$age, 100) |> 
  data.frame(age = _)

# --- discontinuous ---

# function to discretize continuous variable by breaking into bins
# in: x - numeric vector to be discretized
#     knots - numeric vector of breaks (without extremes)
#           - single integer, number of breaks
# out: character vector indicating intervals
make_ind <- function(x, knots) {
  min <- floor(min(x)); max <- ceiling(max(x))
  if(length(knots) == 1 & is.integer(knots)) {
    cut(x, knots + 1, right = FALSE, include.lowest = TRUE) 
  } else {
    cut(x, c(min, knots, max), right = FALSE, include.lowest = TRUE) 
  }
}  
# example use: 
# make_ind(1:10, 3)
# make_ind(1:10, 3L)

fit1 <- dat |> 
  dplyr::mutate(ind = make_ind(age, 3L) |> as.factor()) |> 
  lm(wage ~ ind*age, data = _) 

grid |> 
  transform(ind = make_ind(age, 3L)) |> 
  modelr::add_predictions(fit1, var = "wage") |> 
  ggplot() + aes(x = age, y = wage) + 
  geom_point(data = dat, size = 0.2) +
  geom_line(aes(group = ind), linewidth = 1, color = 4)
# --- continuous ---

# function to round a vector as much as possible while keeping elements distinguishable
# in: x - numeric vector
#     add - integer, number of digits by which to increase precision (or decrease if negative)
# out: numeric vector
round_but_keep_different <- function(x, add = 0) {
  x |> diff() |> abs() |> min() |> log10() |> (`-`)() |> ceiling() |> (`+`)(add) |> 
    round(x, digits = _)
}
# example use: 
# c(1.2345, 1.2456, 1.2356) |> round_but_keep_different(add=0)   # (1.23 1.25 1.24)
# c(1.2345, 1.2456, 1.2356) |> round_but_keep_different(add=1)   # (1.234 1.246 1.236)

# function to apply truncated linear basis function to predictor
# in: x - numeric vector, values of predictor
#     knots - numeric vector of breaks (without extremes)
#           - single integer, number of interior breaks
# out: data frame, one column for each knot
make_max <- function(x, knots) {
  if(length(knots) == 1 & is.integer(knots)) {
    knots <- seq(min(x), max(x), length.out = knots + 2) |> head(-1) |> tail(-1)
  }
  out <- sapply(knots, function(k) pmax(0, x - k)) |> data.frame()
  setNames(out, paste0("max(",round_but_keep_different(knots, add=1),")"))
}
# example use:
# make_max(1:10, 3L)

fit2 <- cbind(dat[c("wage","age")], make_max(dat$age, 3L)) |> 
  lm(wage ~ ., data = _)

grid |> 
  (\(df) cbind(df, make_max(df$age, 3L)))() |> 
  modelr::add_predictions(fit2, var = "wage") |> 
  ggplot() + aes(x = age, y = wage) + 
  geom_point(data = dat, size = 0.2) +
  geom_line(linewidth = 1, color = 4)
# --- summary

fit1 |> 
  summary() |> 
  coef() |> 
  signif(2) |> 
  pander::pander()
fit2 |> 
  summary() |> 
  coef() |> 
  signif(2) |> 
  pander::pander()

  Estimate Std. Error t value Pr(>|t|)
(Intercept) 8 10 0.79 0.43
ind[33.5,49) 94 15 6.3 2.7e-10
ind[49,64.5) 92 20 4.5 7e-06
ind[64.5,80.1] 200 81 2.4 0.015
age 3.1 0.36 8.6 9.3e-18
ind[33.5,49):age -2.7 0.45 -6.1 1.1e-09
ind[49,64.5):age -2.8 0.49 -5.7 1e-08
ind[64.5,80.1]:age -4.6 1.2 -3.8 0.00014
  Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.4 8.3 0.17 0.86
age 3.4 0.28 12 7.9e-33
max(34) -3.1 0.4 -7.7 1.8e-14
max(49) -0.43 0.36 -1.2 0.24
max(64) -2.3 0.91 -2.5 0.012

5.2.3 Kubické

  • Lineárna lomená funkcia je výhodná najmä vtedy, keď v jednotlivých intervaloch potrebujeme nadväzujúce a ľahko interpretovateľné modely.
  • Hladký, po častiach definovaný polynóm dosiahneme zvýšením jeho stupňa. Kvadratický síce zabezpečuje spojitosť aj v prvej derivácii, ale až kubický spojitý splajn so spojitými druhými deriváciami v uzloch je vizuálne dokonale hladký. (Spojitosť vyššieho stupňa už ľudský zrak nepostrehne.)
  • Spojitosť do m-tej derivácie v uzle X=\xi_j sa dá dosiahnuť pridaním bázovej funkcie (X-\xi_j)_+^m = \max(0, X-\xi_j)^m, tzv. truncated-power basis do polynomickej regresnej rovnice m-tého stupňa.
  • Spojitý kubický splajn s K uzlami má teda tvar Y = \beta_0 + \beta_1X + \beta_2X^2 + \beta_3X^3 + \beta_4(X-\xi_1)_+^3 + \ldots + \beta_{K+3}(X-\xi_K)_+^3 + \varepsilon
  • Kubický splajn má však rovnakú nevýhodu ako globálny polynóm vyššieho stupňa: nepríjemné krútenie (t.j. väčší rozptyl) na oboch koncoch.
  • Riešením je tzv. prirodzený splajn, ktorý vznikne zavedením ďalších hraničných podmienok, a síce linearity na hraničných intervaloch (čiže pred prvým a za posledným uzlom).
  • Definícia prirodzeného kubického splajnu je už komplikovanejšia, \begin{split} Y &= \beta_0 + \beta_1X + \sum_{j=1}^K\beta_{j+1} \Big(d_{j-1}(X) - d_{K}(X)\Big) + \varepsilon, \\ & \text{kde}\quad d_j(X) = \frac{(X-\xi_j)_+^3 - (X-\xi_{K+1})_+^3}{\xi_{K+1}-\xi_j}\quad\text{pre}\quad j=0,\ldots,K \end{split} a \xi_0,\xi_{K+1} sú extrémy pozorovaných hodnôt X.
Príklad (mzda)

Aby bol rozdiel v šírke pásu spoľahlivosti medzi kubickým a prirodzeným kubickým splajnom zjavnejší, súbor údajov o mzdách bol náhodne zredukovaný.

  • Funkcie truncated-power bázy nemajú nosič (support, nenulovú časť) definovaný lokálne, čo môže viesť ku korelácii medzi bázovými funkciami a tak aj ku numerickej nestabilite pri odhade. Preto sa v softvéroch používajú radšej iné – stabilnejšie bázové funkcie, napr. B-spline.

5.2.4 Voľba počtu uzlov

  • Regresný splajn je najohybnejší okolo uzlov, preto prirodzenou voľbou je umiestniť viac uzlov tam, kde je vzťah odozvy a prediktoru dynamickejší.
  • V praxi sa však často uzly umiestňujú rovnomerne – do kvantilov rovnomerného rozdelenia – a to buď zadaním ich počtu alebo stupňami voľnosti.
  • Kubický splajn má K+3+1 stupňov voľnosti, zatiaľčo prirodzený kubický o 4 menej.
  • V softvéroch zvyčajne počet stupňov voľnosti nezahŕňa absolútny člen.
  • Samotná voľba počtu (uzlov alebo stupňov) je buď vizuálna alebo pomocou krížovej validácie.

5.3 Vyhladzovanie

5.3.1 Vyhladzovacie splajny

  • Videli sme, že regresný splajn sa vytvorí voľbou množiny uzlov, následne vytvorením sekvencie bázových funkcií a nakoniec odhadom parametrov lineárneho modelu.
  • Iný prístup vedie k tzv. vyhladzovaciemu splajnu (smoothing spline): hľadáme funkciu g, ktorá vystihuje pozorované dáta v zmysle nízkeho RSS a zároveň je hladká. (Ak by sme g nijak neobmedzili, minimalizácia RSS dôjde až ku nule a povedie ku interpolačnej funkcii.)
  • Formálne teda hľadáme také g, ktoré minimalizuje výraz \sum_{i=1}^n(y_i - g(x_i))^2 + \lambda\int g''(t)^2dt pozostávajúci zo stratovej funkcie (loss function) RSS a členu penalizujúceho krivosť funkcie. Parameter \lambda reguluje kompromis výchylky a rozptylu (bias-variance).
  • Dá sa dokázať, že riešením tejto optimalizačnej úlohy je prirodzený kubický splajn s uzlami vo všetkých bodoch súboru pozorovaní, x_1,\ldots,x_n.
  • Treba však poznamenať, že nejde presne o regresný splajn, ale o jeho zrazenú verziu, pričom \lambda určuje úroveň zrazenia (shrinkage).
  • S toľkými uzlami by mal prirodzený regresný splajn príliš veľa stupňov voľnosti, no parameter \lambda\in[0,\infty) reguluje drsnosť funkcie a tým aj tzv. efektívne stupne voľnosti, \mathit{df}_{\lambda}\in[n,2).

5.3.2 Lokálna (vážená) regresia

  • Iným prístupom k vystihnutiu nelineárneho vzťahu odozvy a prediktoru je obmedziť trénovaciu vzorku pre zvolený model na pozorovania z blízkeho okolia bodu x_0 (bodu predpovede). Presnejšie povedané, upraviť veľkosť vplyvu pozorovaní na odhad g(x) podľa blízkosti ku x_0.

  • Preto sa definuje váhová funkcia K(x_i,x), nazývaná tiež jadrová (kernel) funkcia, ktorá najvzdialenejším pozorovaniam x_i priradí nízku hodnotu (až nulu), a naopak blízkym pozorovaniam vysokú váhu.

  • Formálne, lokálne vážená regresná funkcia je definovaná ako odhad \hat g(x) = \mathbf{b}(x)\cdot\hat{\boldsymbol\beta}(x_0), kde \mathbf{b}(x) je vektor bázových funkcií a parametre \boldsymbol\beta viazané na x_0 sú odhadnuté váženou metódou najmenších štvorcov, \hat{\boldsymbol\beta}(x_0) = \underset{\boldsymbol\beta(x_0)}{\operatorname{argmin}} \sum_{i=1}^n\underbrace{\frac{K(x_i,x_0)}{\sum_{j=1}^nK(x_j,x_0)}}_{\text{normovaná váha}}\ \Big(y_i-g(x_i)\Big)^2.

  • To znamená, že pre výpočet každej jednej predikcie je nutné odhadnúť model nanovo. Preto lokálna regresia patrí medzi metódy založené na pamäti (memory-based).

  • Pri lokálnej regresii je potrebné zvoliť:

    • bázové funkcie (zvyčajne mocninové po stupeň 2),
    • typ váhovej funkcie K,
    • mieru dosahu váhovej funkcie (šírka pásma, bandwidth) h.
  • Jadrová funkcia funkcia sa najčastejšie volí ako

    • hustota rovnomerného rozdelenia U(-h/2,h/2),
    • hustota normálneho rozdelenia N(0,h),
    • indikačná (napr. pre množinu určitého počtu najbližších susedov),
    • trikubická, alebo tzv. Epanechnikova.
  • Ak je napr. jadrová funkcia definovaná tak, že priradí nenulovú a rovnakú váhu iba k najbližším pozorovaniam, a g je konštantná funkcia, potom dostávame tzv. regresnú metódu k-najbližších susedov.

Ilustrácia (lokálna regresia)
  • Prvá dvojica obrázkov ilustruje voľbu konštantnej funkcie g, vľavo s indikačnou jadrovou funkciou (regresná metóda k-najbližších susedov), vpravo s jadrovou funkciou, ktorá zvýhodňuje bližšie pozorovania. Zelenou farbou je odhad \hat g, modrou funkcia, z ktorej boli generované dáta.

  • Na ďalších dvoch obrázkoch je znázornená predikcia v dvoch bodoch pomocou lineárnej funkcie g a jadrovej funkcie gaussovského typu. Modrou farbou je skutočná regresná funkcia, z ktorej boli generované pozorovania, oranžovou je zobrazený odhad \hat g(x).

5.3.3 Trieda lineárnych vyhladzovacích modelov

  • Všetky spomenuté metódy (od globálnych regresných funkcií, cez splajny po lokálnu regresiu) patria do triedy lineárnych vyhladzovacích modelov (linear smoothers), kde deterministická časť je daná funkciou \begin{split} f(x) &= \sum_{i=1}^n w(x_i,x)y_i \\ & = \mathbf{w}(x)\cdot\mathbf{y} \end{split} a váhy sú funkciou prediktoru. (Či už ako skalárna funkcia w alebo vektorová \mathbf{w}.)
Ilustrácia (lineárna regresia)
  • Lineárny regresný model (s odhadom parametrov metódou najmenších štvorcov) má podmienenú strednú hodnotu v tvare \begin{split} \hat f(x) & = \hat\beta_1 + \hat\beta_2x \\ & = \bar y+\hat\beta_2(x-\bar x) \\ & = \frac1n\sum_{1=n}y_i + \left( \frac{\frac1n\sum_i(y_i-\bar y)(x_i-\bar x)}{\frac1n\sum_i(x_i-\bar x)^2}(x-\bar x) \right) \\ & = \frac1n\sum_{1=n}y_i + \frac{(x-\bar x)}{n\hat\sigma_X^2} \sum_{i=1}^n(x_i-\bar x)(y_i-\bar y) \\ & = \sum_{i=1}^n \underbrace{\frac1n \left( 1 + \frac{(x-\bar x)(x_i-\bar x)}{\sigma_X^2} \right)}_{w(x_i,x)}\ y_i \\ &=\underbrace{\mathbf{b}(x)\left(\mathbf{X}'\mathbf{X} \right)^{-1}\mathbf{X}'}_{\mathbf{w}(x)}\cdot \mathbf{y} \end{split} kde \mathbf{b}(x)=(1,x) je vektorová bázová funkcia, ktorá bola samozrejme použitá aj na zostavenie regresnej matice, čiže pre jej i-ty riadok platí vzťah \{\mathbf{X}\}_{i\cdot}=\mathbf{b}(x_i).
  • Ak z vektorovej váhovej funkcie po riadkoch (pre každé pozorovanie) poskladáme váhovú maticu \mathbf{W}, čiže \{\mathbf{W}\}_{i\cdot}=\mathbf{w}(x_i) – v kontexte lineárnej regresie sme ju nazývali “hat matrix” – potom môžme odhadnuté (alebo vyhladené) hodnoty odozvy v bodoch pozorovaní zapísať vzťahom \hat{\mathbf{y}} = \mathbf{W}\mathbf{y} a pomocou nej vyjadriť efektívne stupne voľnosti \mathit{df} = \operatorname{tr}(\mathbf{W}) = \sum_{i=1}^n\{\mathbf{W}\}_{ii} alebo výpočtovo rýchly odhad testovacej chyby metódou krížovej validácie s jednoprvkovými validačnými sadami (LOOCV) MSE = \frac1n\sum_{i=1}^n \left(\frac{y_i-\hat f(x_i)}{1-\{\mathbf{W}\}_{ii}}\right)^2.

5.4 Aditívny model

  • Videli sme, že lineárne vyhladzovacie modely zovšeobecňujú jednoduchú lineárnu regresiu.
  • Rozšírenie o ďalšie prediktory je možné, ale vo všeobecnosti (najmä pri neparametrických metódach) naráža na známy problém nedostatku dát so zväčšujúcim sa počtom premenných (curse of dimensionality).
  • Kompromisným riešením je skombinovať aditivitu lineárnych regresných modelov s prispôsobivosťou lineárnych vyhladzovacích modelov, a to v rámci triedy aditívnych modelov. Najjednoduchší p-rozmerný aditívny model má tvar Y = \beta_0 + \sum_{j=1}^p f_j(X_j) + \varepsilon a umožňuje vybudovať celkový model z príspevkov jednotlivých prediktorov osobitne pomocou nelineárnych funkcií f_j, ktoré dostali názov parciálna odozva/reakcia (partial response).
  • Nejednoznačnosť viacerých konštantných členov v jednom vzťahu rieši konvencia E[f_j(X_j)]=0 pre všetky j.
  • Ak sú všetky funkcie lineárne v parametroch, potom sa dá aj celkový aditívny model odhadnúť pomocou jednoduchej MNŠ (pretože je tiež lineárny v parametroch). Napr. vtedy, ak by boli f_j zvolené z triedy globálnych polynómov alebo regresných splajnov.
  • Vo všeobecnosti sa však obyčajná MNŠ nedá použiť.
  • Aditívny model sa odhaduje pomocou jednoduchej iteračnej metódy s názvom backfitting. Ňou sa v každom kroku cyklu pomocou vyhladzovacej metódy (\mathcal{S}_j) aktualizuje funkcia (f_j) vždy iba pre jeden prediktor (X_j, ostatné sú fixované), pričom odozvou sú tzv. parciálne rezíduá (y_i-\sum_{\ell\neq j}f_\ell(x_{i\ell}), \forall i).
Algoritmus (backfitting)
  • Nech \mathbf{y} a \mathbf{x}_j je vektor pozorovaní odozvy Y resp. prediktoru X_j.
  • Nech \mathbf{f}_j\colon\mathbb{D}_{f_j}^n\to\mathbb{H}^n označuje vektorovú funkciu, ktorá aplikuje f_j na každý prvok svojho argumentu, takže \{\mathbf{f}_j(\mathbf{x}_j)\}_i = f_j(x_{ij}).
  • Potom

\beta_0 = \frac1n\sum_{i=1}^ny_i \qquad [absolute term]
f_j^{(0)} = 0, \forall j\in\{1,\ldots,p\} \qquad [initialize partial responses]
k = 0 \qquad [initialize counter of outer loop]
do { \qquad [outer loop]
    k = k + 1 \qquad [increase counter]
   for (j=1,\ldots,p) { \qquad [inner loop]
        \mathbf{y}_j^{(k)} = \mathbf{y} - \sum_{\ell<j} \mathbf{f}_\ell^{(k)}(\mathbf{x}_\ell) - \sum_{\ell> j} \mathbf{f}_\ell^{(k-1)}(\mathbf{x}_\ell) \qquad [partial residuals]
        f_j^{(k)} = \mathcal{S}_j\left(\mathbf{y}_j^{(k)} \sim \mathbf{x}_j\right) \qquad [estimate smoother function]
        \mathbf{f}_j^{(k)}(\mathbf{x_j}) = \mathbf{f}_j^{(k)}(\mathbf{x_j}) - \frac1n\sum_{i=1}^n f_j^{(k)}(x_{ij}) \qquad [center partial response]
   }
} while \left(\exists j: \left\|\mathbf{f}_j^{(k)} - \mathbf{f}_j^{(k-1)}\right\|>\delta\right) \qquad [repeat until converged]
return \left(\beta_0,f_1^{(k)},\ldots,f_p^{(k)}\right) \qquad [last results]
  • Pre veľkú triedu lineárnych vyhladzovacích modelov \mathcal{S}_j je backfitting totožný s Gauss-Seidelovým algoritmom riešenia špeciálnej lineárnej sústavy rovníc.
  • Aditívny model má niekoľko výhod:
    • umožňuje automatický odhad nelineárnej funkcie pre každý prediktor zvlášť, bez potreby manuálneho skúšania množstva transformácií (t.j. bázových funkcií) individuálne na každý prediktor,
    • potenciálne presnejšie predpovede oproti lineárnemu modelu (ak je skutočný vzťah nelineárny),
    • vďaka aditivite možnosť skúmať efekt každého prediktoru zvlášť (vrátane vyjadrenia stupňov voľnosti),
  • Aditivita môže byť aj nevýhodou, avšak podobne ako pri lineárnom modeli, aj tu je možné interakčný člen pridať ako nový prediktor X_jX_\ell, prípadne sa dá do rovnice zaradiť interakčná funkcia f_{j\ell}(X_j,X_\ell) ako dvojrozmerný lineárny vyhladzovací model (napr. thin-plate spline, tensor spline, dvojrozmerné jadrové vyhladzovanie a pod.).
  • Aditívny model predstavuje užitočný kompromis medzi lineárnym modelom a plne neparametrickými modelmi (boosting, random forest a pod.).
Príklad (mzda)
  • Opäť modelujme výšku mzdy, no tentokrát nielen pomocou veku zamestnanca, ale aj pomocou roku záznamu a stupňa dosiahnutého vzdelania (ordinálna kvalitatívna premenná s úrovňami od “< HS grad” až po “Advanced Degree”).
  • Jednou možnosťou je odhadnúť aditívny model ako lineárny s použitím bázových funkcií regresných splajnov.
Kód
fit1 <- lm(wage ~ splines::ns(year, df = 4) + splines::ns(age, df = 5) + education, 
           data = ISLR2::Wage)
fit1 |> coef()
                (Intercept)  splines::ns(year, df = 4)1 
                  46.949491                    8.624692 
 splines::ns(year, df = 4)2  splines::ns(year, df = 4)3 
                   3.762266                    8.126549 
 splines::ns(year, df = 4)4   splines::ns(age, df = 5)1 
                   6.806473                   45.170123 
  splines::ns(age, df = 5)2   splines::ns(age, df = 5)3 
                  38.449704                   34.239237 
  splines::ns(age, df = 5)4   splines::ns(age, df = 5)5 
                  48.677634                    6.557265 
        education2. HS Grad    education3. Some College 
                  10.983419                   23.472889 
   education4. College Grad education5. Advanced Degree 
                  38.313667                   62.553971 
  • Metóda zobrazenia plot.Gam zohľadňuje hierarchiu parametrov a zobrazí parciálnu odozvu na jednotlivé premenné.
Kód
gam::plot.Gam(fit1, se = TRUE, col = 4)

  • Podľa grafu by parciálna reakcia na prediktor year mohla byť lineárna funkcia. Overíme to testom.
Kód
lm(wage ~ year + splines::ns(age, 5) + education, data = ISLR2::Wage) |> 
  anova(fit1)
Analysis of Variance Table

Model 1: wage ~ year + splines::ns(age, 5) + education
Model 2: wage ~ splines::ns(year, df = 4) + splines::ns(age, df = 5) + 
    education
  Res.Df     RSS Df Sum of Sq      F Pr(>F)
1   2989 3694885                           
2   2986 3691919  3    2966.4 0.7997 0.4939
  • Okrem regresných splajnov je možné zapojiť aj vyhladzovacie splajny či lokálnu regresiu. To umožňuje až implementácia zovšeobecneného aditívneho modelu (GAM), funkcia gam::gam. Metóda summary.Gam testuje lineárnu (parametrickú) a neparametrickú zložku zvlášť, takže sa dá jednoducho posúdiť, či sú stupne voľnosti zvolenej vyhladzovacej metódy adekvátne (metóda anova.Gam zobrazí iba výsledok testu významnosti neparametrickej zložky).
Kód
library(gam)  # necessary to load due to inaccountable behaviour of "gam::s" in gam() formula
gam::gam(wage ~ s(year, df = 4) + s(age, df = 5) + education, 
                 data = ISLR2::Wage) |>
  anova()   # summary()
Anova for Nonparametric Effects
                Npar Df Npar F  Pr(F)    
(Intercept)                              
s(year, df = 4)       3  1.086 0.3537    
s(age, df = 5)        4 32.380 <2e-16 ***
education                                
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
  • V poslednom GAM modeli je už nastavená lineárna parciálna odozva na prediktor year a pre ilustráciu použitá lokálna regresia na vystihnutie efektu age. Špecifikáciou vyhladzovacieho parametra span (podiel okolia x_0 na celkovom počte pozorovaní) sa interne použije funkcia stats::loess.
Kód
gam::gam(wage ~ year + lo(age, span = 0.3) + education, 
                 data = ISLR2::Wage) |> 
  plot.Gam(se = TRUE, col = 4)