library(ISLR2) attach(Wage) ?Wage agelims <- range(age) age.grid <- seq(from = agelims[1], to = agelims[2]) plot(age, wage, xlim = agelims, cex = .5, col = "darkgrey") ## -> nelinearna veza ### Aditivni modeli ## model je ## E[wage | year, age, education]=a + f1(year) + f2(age) + f3(education), ## pri cemu su f1 i f2 proizvoljne (potencijalno nelinearne) ## funkcije koje cemo procijeniti iz podataka ## (ovo je jedna od glavnih prednosti GAMova), a ## f3(education)=beta_i ako je education=i, za i=1,..,5 ## ako cemo za procjenu funkcija f1 i f2 ## koristiti npr. prirodne splajnove, ## to je zapravo standardan linearan ## model sa tranformiranim kovarijatama ## (onda je automatski dostupna i cijela teorija): library(splines) gam1 <- lm(wage ~ ns(year, 4) + ns(age, 5) + factor(education), data = Wage) par(mfrow = c(1, 3)) library(gam) plot.Gam(gam1, se = TRUE, col = "blue") ## crta fk(t) za k=1,2,3 (funkcije se centriraju ## tako da je prosjecna vrijednost na podacima=0) ## Intepretacija? ---> slicno kao kod lin. modela ## ako ne mozemo koristiti linearan model ## (npr. smoothing splajnovi ili lokalna regresija): ?gam ?gam.s ?gam.lo ## nije moguc automatski odabir stupnjeva slobode, ## koristeci npr. GCV ## za takav pristup, vidi paket "mgcv" gam.m3 <- gam(wage ~ s(year, 4) + s(age, 5) + factor(education), data = Wage) ## s = smoothing splajn, 4 i 5 su stupnjevi slobode par(mfrow = c(1, 3)) plot(gam.m3, se = TRUE, col = "blue") ## f1 ne izleda daleko od linearne -> to mozemo testirati ## (necemo ulaziti u detalje) gam.m1 <- gam(wage ~ s(age, 5) + factor(education), data = Wage) gam.m2 <- gam(wage ~ year + s(age, 5) + factor(education), data = Wage) anova(gam.m1, gam.m2, gam.m3, test = "F") ## H0 je uvijek da je manji model dovoljan: ## dodavanje linearne funkcije od year izgleda znacajno ## (tj. statisticki znacajno smanjuje RSS). ## s druge strane, cini se da nije potrebna ## nelinearna funkcija za year summary(gam.m3) ## radi slicne testove ## predict radi kao i ranije ##umjesto smoothing splajnova, mozemo koristiti i lokalnu regresiju gam.lo <- gam(wage ~ s(year, df = 4) + lo(age, span = 0.7, degree = 1) + factor(education), data = Wage) ## lo je kratica za loess plot.Gam(gam.lo, se = TRUE, col = "darkblue") ## mozemo dodati i interakcije: gam.lo.i <- gam(wage ~ lo(year, age, span = 0.5) + factor(education), data = Wage) library(akima) par(mfrow=c(1,1)) plot(gam.lo.i) #### prednosti aditivnih modela ## nije potrebno isprobavati razne transformacije # svake kovarijate, vec se njen utjecaj modelira # neparametarski ## bolja prediktivna moc u odnosu na linearni model, a # opet dopusta intepretaciju #### mane ## moguce je neparametarski modelirati interakcije nizeg reda # npr. 2 ili 3 ## ukoliko postoji puno kovarijata te kompleksne interakcije # medu njima, aditivan model to nece prepoznati ## u tom slucaju trebaju nam fleksibilnije metode poput # slucajnih suma i boosting-a