Kontrastit ja estimaatit

Käytettäessä menetelmää lm, komennon summary antamat kertoimet tekijöille olivat ehkä hieman hämmentäviä (sivu [*]): Itse asiassa R pystyy esittämään aivan samat tulokset hyvinkin eri tavoin sen mukaan kuinka olemme määritelleet kontrastit.

Tarkastelemme tällä kertaa vain yksinkertaista mallia

> lm(pituus ~ istutus, data=taimet)

eli käytämme vain selittäjää istutus. Tekijän istutus vaikutus arvioidaan vertaamalla tätä mallia nolla-malliin

> lm(pituus ~ 1, data=taimet)

Nollamallin pitäisi tuottaa estimaatiksi yleiskeskiarvo (52 cm), ja vaihtoehtoisen mallin estimaattien pitäisi jotenkin kuvata istutustyyppien luokkakeskiarvoja:

> mean(pituus)
[1] 52
> tapply(pituus, istutus, mean)
 kenno ruukku  rulla
    49     56     51

Jos sovitamme mallin ilman vakiotermiä, saamme todellakin luokkakeskiarvot (kaikkia summary-listauksia on reippaasti lyhennetty):

Call:
lm(formula = pituus ~ istutus - 1, data = taimet)

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
istutuskenno    49.000      1.252   39.15 4.97e-14
istutusruukku   56.000      1.252   44.74 1.02e-14
istutusrulla    51.000      1.252   40.75 3.09e-14

Verratkaamme tätä vakiotermin kanssa sovitettuun malliin:

Call:
lm(formula = pituus ~ istutus, data = taimet)

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)     49.000      1.252  39.148 4.97e-14
istutusruukku    7.000      1.770   3.955  0.00191
istutusrulla     2.000      1.770   1.130  0.28061

Voimme helposti arvioida luokkakeskiarvot myös tästä tuloksesta (kenno = 49, ruukku = 49 + 7, rulla = 49 + 2 cm).10 Jälkimmäisestä tuloksesta näemme kuitenkin myös käsittelyjen erot verrattuna ensimmäiseen käsittelyyn ja saamme niille myös t-tunnusluvut. Mikäli ensimmäinen käsittelymme on jollain tapaa mielekäs ``kontrolli'', voimme suoraan arvioida ``käsittelyjen'' vaikutusta. Esimerkkiaineistomme peitetarinan mukaan näin todellakin on eli istutus kenno on perusmenetelmä, jota vastaan muita menetelmiä verrataan. Merkitsevyystestien mukaan, istutus ruukku todellakin tuottaisi pitempiä taimia, mutta rulla ei poikkea merkitsevästi ``kontrollista''.

R:ssä voi valita kontrastien tyypin options komennolla. Yllä oleva R:n oletuskontrasti on:

> options("contrasts")
$contrasts
        unordered           ordered
"contr.treatment"      "contr.poly"

Kontrastit määritellään erikseen järjestämättömille (unordered) ja järjestetyille faktoreille (ordered). Järjestetyistä faktoreista puhumme myöhemmin (§7.9), joten nyt vain järjestämättömistä faktoreista. Oletusasetus on contr.treatment. Muita R:n tuntemia vaihtoehtoja ovat contr.sum ja contr.helmert:

> options(contrasts=c("contr.sum","contr.poly"))
> summary(lm(pituus ~ istutus, data=taimet))

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  52.0000     0.7226  71.957  < 2e-16
istutus1     -3.0000     1.0220  -2.935  0.01248
istutus2      4.0000     1.0220   3.914  0.00206

contr.sum käyttää vakiona (Intercept) yleiskeskiarvoa 52 cm ja kertoo kahden ensimmäisen luokan (kenno, ruukku) poikkeamat tästä. Jälleen saamme helposti laskettua näiden kahden käsittelyn luokkakeskiarvot. Miksei R sitten tulostanut kolmannen luokan kerrointa? Tämä johtuu siitä, että meillä on vain kolme istutusluokkaa, joten voimme arvioida vain kolme kerrointa. Viimeinen kerroin ei ole vapaasti estimoitava, sillä sen on oltava sellainen, että yleiskeskiarvoksi tulee 52 cm. Esimerkissämme luokkien poikkeamien keskiarvosta on kumottava toisensa eli niiden summan on oltava 0. Viimeinen kerroin olisi siis -3 + 4 = 1.

Viimeinen valmis kontrasti (käyttäjä näet voi määritellä omia kontrastejaan) on Helmert:

> options(contrasts=c("contr.helmert","contr.poly"))
> summary(lm(pituus ~ istutus, data=taimet))

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  52.0000     0.7226  71.957  < 2e-16
istutus1      3.5000     0.8851   3.955  0.00191
istutus2     -0.5000     0.5110  -0.978  0.34715

Vakiotermi on yleiskeskiarvo, mutta kertoimet näyttävät käsittämättömiltä. Jostain salaperäisestä syystä S. käyttää Helmertin kontrasteja oletusasetuksenaan, joten S.-käyttäjän on syytä oppia muuttamaan kontrastit jommaksi kummaksi järkeväksi tyypiksi.

Kontrastit ovat vaihtoehtoisia tapoja esittää samat tulokset. Kukin niistä painottaa erilaisia aspekteja. Kaikki tuottavat samat sovitetut arvot (esim. funktiossa predict.lm). R käyttää oletuksenaan käsittelykontrasteja, ilmeisestikin siksi, että näin vakion ja kertoimen merkitys on sama kuin regressioanalyysissä joten on helppo käsitellä malleja, joissa on sekä jatkuvia muuttujia että luokkamuuttujia selittäjinä. Varsinkin suunnitelluissa kokeissa on usein jokin ``nolla-taso'' tai ``kontrolli'', joka on luontevaa valita ``vakiotermiksi'' -- faktorin luokathan pystyi järjestämään komennon factor määritteellä levels (sivu [*]). Summakontrasteja taas käytetään silloin kun yleiskeskiarvo ja poikkeamat siitä ovat kiinnostavia, kuten havaintoaineistojen analyysissä. Suunnitelluissa kokeissa käsittelyjen keskiarvo sen sijaan on harvoin mielekäs tai kiinnostava.


Jari Oksanen 2003-01-21