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).
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 intervalsmake_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 vectorround_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 knotmake_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)# --- summaryfit1 |>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}).
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.
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() formulagam::gam(wage ~s(year, df =4) +s(age, df =5) + education, data = ISLR2::Wage) |>anova() # summary()
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)