Ranta et al. (1989, Esimerkki 10.1) käyttävät yksinkertaisen regressioanalyysin esimerkkinä aineistoa, jossa tutkitaan ravinnon määrän vaikutusta vesiliskon lisääntymiseen. Kohdemuuttujana on vesiliskon tuottamien munien määrä (muuttuja munat), selittävänä tekijänä vesiliskojen ruokintakerralla saama surviaistoukkien lukumäärä (muuttuja ruoka). Näin pieni aineisto on helppo tallentaa itsekin suoraan:8
Sovitamme regressiomallin ja pyydämme yhteenvedon tuloksista (olen poistanut osan summaryn riveistä kaikissa esimerkeissä):
Regressioanalyysin tulos lisko.reg on luokan lm olio. Komento summary tuntee luokan, ja osaa esittää tärkeimmät tiedot. Komento print (jota kutsuu epäsuorasti nimen lisko.reg kirjoittaminen) antaisi niukemmat tiedot. Komennolla attributes(lisko.reg) saamme luettelon olion attribuuteista. On myös joitain erityismenetelmiä eristää joitain tiettyjä luokan attribuutteja. Esim. coef(lisko.reg) antaa pelkät regressiokertoimet. Ainoan selittävän tekijän ruoka regressiokerroin on 1.22: näin paljon munamäärä kasvaa kun ruokintaa lisätään yhdellä surviaisella. R tulostaa myös kertoimien keskivirheen (Std. Error) ja t-arvon, joka on estimaatti jaettuna keskivirheellään. Kertoimen merkitsevyyden arviointi perustuu t-testiin (§6.1). Ruokinta lisää merkitsevästi jälkeläistuotantoa ( p = 0.0025), mikä ei ole järisyttävä tieto. R saattaa tulostaa myös tähdet (*) ``merkitsevien'' kertoimien jälkeen, mutta olen tarkoituksella poistanut tämän toiminnon (katso options), koska tiukat tähtirajat ovat arveluttavia -- onko p = 0.049 todellakin yhden tähden arvoinen, mutta p = 0.051 arvoton?
Vakiotermin (Intercept) merkitys ja merkitsevyys on usein epäselvä ja niin myös tässä tapauksessa. Vakiotermi ilmoittaa suoran arvon pisteessä x = 0 ja niinpä vakio b0 on mielekäs vain jos piste x = 0 on jotenkin erikoinen ja mielekäs. Origon siirto muuttaa sekä vakiotermiä että sen merkitsevyyttä. Tällä kertaa vakiotermi on ekstrapoloitu sillä yksi toukka oli pienin ruokintamäärä. Vakiotermi ei ole erityisen kiinnostava, sillä se ilmoittaisi jälkeläistuoton silloin kun eläimet eivät saisi lainkaan ruokaa, mikä ei varmaankaan ole kestävä tilanne. Toisaalta on mahdollista, että alimmat ruokintamäärät eivät olleet riittäviä vaan eläimet näkivät jo nyt nälkää ja lisääntyivät vain varantojensa kustannuksella. Mikäli tietäisimme riittävän ravintomäärän kriittisen rajan, voisimme siirtää x-muuttujan nollapisteen tuohon rajaan ja kenties pakottaa vakiotermin nollaksi tuossa pisteessä, mutta meillä ei ole mitään perusteltua syytä pakottaa regressiota nykyisen origon kautta.
Tulostuksen viimeinen rivi kertoo koko mallin merkitsevyyden F-tunnusluvulla eli varianssianalyysillä arvioituna. Koska meillä on vain yhden selittäjän regressio, koko mallin merkitsevyys F-tunnusluvun perusteella on sama kuin ainokaisen selittäjän regressiokertoimen merkitsevyys t-tunnusluvulla arvioituna.
Varianssianalyysi on vielä edessä päin, mutta tässä oppaassa oletetaan, että tilastotieteen perusteet ovat takana päin. Niinpä ei pitäisi olla uutinen, että mallin sopivuutta aineistoon kuvaa jäännösneliösumma (``Residual Sum of Squares'') ja mallin vapausasteiden määrä on havaintojen määrä miinus estimoitujen parametrien määrä. Estimoitujen parametrien lisääntyessä vapausasteet kuluvat ja jäännösneliösummat (todennäköisesti) pienenevät. Jos testattavan ja nollamallin jäännösneliösummat ovat SS1 ja SS0 ja vapausasteet df1 ja df0, niin F-tunnusluku vapausasteilla df0 - df1, df1 on:
R-funktio anova tekee automaattisesti nämä laskut ja arvioi F-tunnusluvun merkitsevyyden kun sille annetaan kaksi luokan lm oliota. Sovitamme ensin mallin, jossa on vain vakiotermi ja sitten vertaamme tätä malliimme lisko.reg, jossa on myös kulmakerroin tekijälle ruoka:
Mallien jäännösneliösummat olivat SS0 = 174.9 ja SS1 = 52.5. Sijoitettuna yhtälöön 5 saamme:
joka on sama tulos kuin suoraan regressionalyysin summaryssa.
Ylläolevan komennon anova tulostuksesta saamme myös muut
summaryn alarivien tulokset. Jäännöskeskihajonta, jota R kutsuu nimellä ``Residual standard
error'', vastaa muuten tavallista keskihajontaa, mutta se on laskettu
regressiosuoran eikä y-muuttujan koko aineiston keskiarvon suhteen.
Jäännöskeskihajonta on oletetun mallin teoreettisen virhekeskihajonnan
estimaattori. Se saadaan
anova-taulukosta laskuilla
Näistä alarivien tuloksista suosituin ja yliarvostetuin on determinaatiokerroin eli R2. ``Selitysaste'' ei esimerkissämme ole erityisen mielekäs, sillä jälkeläistuotannon varianssi on syntynyt keinotekoisessa kokeessa jossa on systemaattisesti varioitu ruoan määrää. Mikäli ruokintamäärän varianssi olisi ollut vähäisempi (vähemmän ruokintatasoja tai enemmän toistoja keskimmäisillä tasoilla), myös munatuotannon varianssi olisi alentunut ja yhtä hyvällä regressiolla ``selitysaste'' olisi alentunut. Myös havaintoaineistoissa tutkittavan muuttujan vaihtelun kasvattaminen on usein helpoin tapa saada hyviä ``selitysasteita''. Regressiomallin antaman ennusteen hyvyyttä kuvaa paremmin absoluuttinen vaihtelu regressiosuoran ympärillä eli residuaalivaihtelu sresid: jos vaihtelu on vähäistä, regressio on ennustusvoimainen riippumatta ``selitysasteesta''. Esimerkissämme R2 = 0.7, mikä vaikuttaa korkealta, mutta sresid = 2.56, mikä ei minusta vaikuta kovinkaan tyydyttävältä.
Kenties vielä paremman kuvan mallimme toimivuudesta saamme tarkastelemalla regressiosuoran ja ennusteiden luottamusrajoja: rajoja, joiden sisällä oikea regressiosuora tai ennustettu yksittäinen arvo on esim. 95 % todennäköisyydellä. Ne voidaan laskea komennolla predict.lm, kuten alla tehdään kuva piirrettäessä.
Luokan lm olioille on oma plot-komento, joka tuottaa lähinnä diagnostiikkaan tarkoitettuja kuvia. Koska meillä on vain yksi selittävä tekijä, tarkastelemme ennemmin perinteisiä regressiokuvia; monimutkaisemmissa malleissa tutkimme oletuskuvia. Peruskuva syntyy komennoilla:
Viivoja kuvaan lisäävä abline osaa eristää tuloksen regressiokertoimet ja piirtää regressiosuoran. Kaksi viimeistä abline-komentoa lisää viivat muuttujien keskiarvon kohdalle muistuttamaan, että regressiosuora kulkee kummankin muuttujan keskiarvon kautta.
Tarvitsemme vielä luottamusrajat. Ne on laskettava erikseen komennolla predict.lm:
> lisko.ci <- predict(lisko.reg, interval="confidence")
Tuloksena on matriisi, jossa on kolme saraketta: ennustettu arvo (fit), alempi luottamusraja (lwr) ja ylempi raja (upr). Oletuksena on käyttää 95 % rajoja. Selittävät muuttujat ovat valmiiksi oikeassa järjestyksessä, joten voimme lisätä kuvaan rajat komennoilla:
Mikäli ``[,"lwr"]'' näyttää merkilliseltä, parasta kerrata matriisit (§3.6).
![]()
|
Nämä ovat regressiosuoran luottamusrajat: 95 % todennäköisyydellä regressiosuora on rajojen sisällä. Kuten näkyy, luottamusrajat ovat kapeimmillaan selittävän tekijän keskiarvon kohdalla (kuva 5). Mikäli haluamme käyttää regressiosuoraa ennustamaan yksittäisen vesiliskon munatuottoa, on käytettävä vielä laajempia rajoja, eli ennusteen luottamusväliä. Tähän saakka käyttämämme rajat esittävät vain suoran epävarmuutta, mutteivät yksittäisten arvojen poikkeamista regressiosuorasta. Laskemme vielä ennusteen luottamusrajat ja lisäämme ne kuvaan, jolloin saamme lopulliseksi tulokseksi kuvan 5. Paitsi komentoa lines, voimme käyttää myös komentoa matlines, joka lisää molemmat rajat yhtaikaa.
Komento matlines vaihtaa väriä ja viivatyyppiä matriisin jokaiselle sarakkeelle, joten jouduimme estämään tämän määritteillä lty ja col. Ennusteen luottamusrajat ovat todella väljät eikä mallimme näytä olevan kovinkaan käyttökelpoinen mikäli tarkoitus on ennustaa yksittäisen vesiliskon tuottama munamäärä. Esim. viidellä toukalla per ruokintakerta, 95 % vesiliskoista tuottaa 0.3...12.7 munaa:
Ranta et al. (1989) esittelevät vain regressiosuoran luottamusrajat, joita he harhaanjohtavasti nimittävät ``ennusteen luottamusrajoiksi''.