x <- 2*rnorm(30) z <- x^2 + rnorm(30) reg1 <- lm(z ~ x) plot(x,z) abline(reg1$coef) plot(x,reg1$resid) plot(reg1$fitted,reg1$resid) # nem rendszertelen a pontfelhő, # mintha parabola lenne # gyanús, hogy négyzetes függvénnyel kéne # közelíteni lináris helyett reg2 <- lm(z ~ x + I(x^2)) # z = a + bx + c x^2 + hiba # I(): identitás, azért kell, mert ^ művelet # mást csinál lm() hasában reg2 reg2$coef plot(x,reg2$fitted) plot(x,reg2$fitted,type="l") order(x) # index vektor, ami növekvő # rendbe teszi x-et x[order(x)] sort(x) plot(x,z) points(x[order(x)],z[order(x)],pch=2,col=2) # átrendeztük x,z-t egyszerre/együtt, de úgy, # hogy x most már növekvő rendben van plot(x,z) # regressziós függvény: y = a + bx + c^2 lines(x[order(x)],reg2$fitted[order(x)]) # grafikusan jónak tűnik az illeszkedés plot(x,reg2$resid) # ezen úgy tűnik, minden oké: hibák # rendszertelen felhő, független plot(reg2$fitted,reg2$resid) summary(reg2) # coefficients táblázatban: # minden egyes együtthatóra egy t-teszt: # lényegesen különbözik-e 0-tól? # Pr(...) - ha nagy, akkor az együttható # 0-nak tekinthető, ha Pr(..) kicsi, az # együttható "statisztikailag bizonyítottan" # nem 0 # ami 0, azt kidobjuk -- építünk másik modellt, # amiből kivesszük, és megnézzük., az is # ugyanolyan jó-e # miért: nem akarunk "overfitting"-et: ha # túl jól megtnauljuk az adathalmaz véletlen # sajátosságait, akkor új adtokra az előrejelzés # nem lesz olyan jó! # ezért: minél egyszerűbb modellt szeretnénk, # felesleges változók nélkül. # végén: R^2 stat: kb. egy korrelációs ehó. # F-test: F-stat, p-value: statisztikai teszt, # a modell jobb közelítés-e, mintha # y = y_átlag + hiba közelítést vennénk # jelen példánkban: z = x^2 + hiba # summary t-test-jei szerint is: konstans, # és x ehó-ja jó eséllyel 0 # próblájunk egy olyan modellt, ahol csak x^2 # tag van! reg3 <- lm(z ~ I(x^2)) reg3 # z = a + c x^2 + hiba # automatiksan hozzáveszi a konstansot! # explicit konstans: lm(z ~ 1 + I(x^2)) # explicit kizárjuk: reg4 <- lm(z ~ 0 + I(x^2)) reg4 # z = c x^2 + hiba plot(x,z) lines(x[order(x)],fitted(reg4)[order(x)]) # jónak néz ki plot(x,reg4$resid) # hibák is rendszertelen felhő summary(reg4) # különböző regressziós modellek # összehasonlítása: # akokr van értelme, ha az egyik részmodellje # a másiknak: reg1 # z ~ 1 + x reg2 # z ~ 1 + x + I(x^2) reg4 # z ~ 0 + I(x^2) # reg1 részmodellje reg2-nek # reg4 is részmodellje reg2-nek # reg1, reg4-nek nincs köze egymáshoz: # mindkettőnek vna olyan tagja, ami # a másikban nem szerepel # reg1, reg2 összehasonlítás értelmes # reg2, reg4 összehasonlítás értelmes # reg1, reg4 összehasonlítás nem értelmes! anova(reg1,reg2) # anova: analysis of variance # RSS: rsidual sum of squares: sum(hiba^2) # F-test: H0: kb. ekvivalens a két modell # H1: lényeges különbség -- ilyenkor megéri # a komplexebb modellt használni anova(reg2,reg4) # elvileg: reg1, reg esetén kis p-value: # reg2 jobb # reg2, reg4 esetén: nagy p-value, kb ekvivalens # ilyenkor az egyszerűbb modellt választjuk # független változók esetén: v <- rnorm(30) reg5 <- lm(v ~ x) reg5 plot(x,v) abline(reg5$coef) summary(reg5) # t-test és F-test is (jó eséllyel) megmutatja, # hogy semmi értelme v = f(x) + hiba formájában # becsülni, amikor x és v függetlenek. # lineáris regresszió általánosan: # y = a + b x + c 1/x + d exp(x), stb. # x-függvények lináris kombinácójaként keressük y-t # ln(y) = f(x) átalakítások, stb. # másik általánosítás: több változó függvényeként keresünk # 1-et: pl. kocsi fogyasztása = f(súly, hengertérfogat,...) x <- rnorm(30) y <- rnorm(30) z <- 2*x - y + rnorm(30) reg6 <- lm(z ~ x + y) reg6 summary(reg6) reg$fitted