Järjestetyt faktorit

Esimerkki 8.12 Ranta et al. (1989, aineisto pojoviken paketissa rekola) käsittelevät neljältä eri paikalta (muuttuja paikka) Pohjanpitäjänlahdelta kerättyä aineistoa, jossa on määritetty eläinplanktonin biomassat kuudelta eri syvyydeltä (muuttuja syvyys, arvot 0.2, 0.5, 1, 2, 5 ja 10 m).

Kumpaakin tekijää käsitellään faktoreina ja suoritetaan kaksisuuntainen varianssianalyysi. Koska syvyyksiä ei ole replikoitu paikoittain, emme pysty analysoimaan interaktioita. Meillä ei ole mitään tieteellistä perustetta tähän laiminlyöntiin, sillä emme voi olettaa syvyyden vaikutuksen olevan paikasta riippumaton. Perusteemme on vain aineiston vähäisyys. ANOVA-malli on yksinkertainen:

> pojo.aov <- aov(biomassa ~ syvyys + paikka, data=pojoviken)
> summary(pojo.aov)
            Df Sum Sq Mean Sq F value   Pr(>F)
syvyys       5 31.652   6.330  4.8161 0.007964
paikka       3  3.141   1.047  0.7966 0.514715
Residuals   15 19.716   1.314                 
Paikkojen välillä ei ole merkitsevää eroa, mutta syvyyksien välillä on.

Perinteinen ANOVA-taulukko on tutkijan kannalta hieman ongelmallinen, sillä se ei ota huomioon, että syvyydet ovat järjestettyjä: 0.2 < 0.5 < 1 < 2 < 5 < 10. Merkitsevä testitulos osoittaa vain, että jokin syvyys poikkeaa muista. Tutkijan kannalta kuitenkin on kiinnostavaa tietää, onko mitään järkeä siinä mikä pituus poikkeaa muista. Onko biomassa korkeimmillaan pinnan lähellä ja laskee alaspäin? Vai päin vastoin? Vai onko biomassan maksimi välivedessä? Vai sahaako biomassa tolkuttomasti edestakaisin? Tutkija pitää syvyyttää järjestettynä, mutta perus-ANOVA pitää sitä järjestämättömänä. Ei kuitenkaan R, joka tuntee järjestetyt faktorit:

> summary.lm(pojo.aov)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  5.26667    0.46805  11.252 1.04e-08
syvyys.L    -2.78189    0.57324  -4.853 0.000211
syvyys.Q    -0.05183    0.57324  -0.090 0.929157
syvyys.C     0.40808    0.57324   0.712 0.487460
syvyys^4     0.06142    0.57324   0.107 0.916095
syvyys^5    -0.03307    0.57324  -0.058 0.954755
paikka2     -0.16667    0.66192  -0.252 0.804619
paikka3      0.73333    0.66192   1.108 0.285360
paikka4      0.48333    0.66192   0.730 0.476519

Järjestetyn faktorin voi luoda tai järjestämättömän faktorin muuttaa järjestetyksi komennoilla:

> syvyys <- factor(syvyys, ordered=T)
> syvyys <- ordered(syvyys)  ## Jos syvyys oli jo faktori
Tarpeen vaatiessa voidaan määritteellä levels luetella tasojen järjestys.

Järjestetyille faktoreille käytetään polynomisia kontrasteja (vrt. §7.5). Niissä luokan vaikutus jaetaan lineaariseen komponenttiin (L), kvadraattiseen komponenttiin (Q), kolmannen asteen komponenttiin (C) sekä korkeamman asteisin komponentteihin. Tämän on vain tapa jakaa sama vaikutus eri termeille, kuten muissakin kontrasteissa. Lopulliset ennustetut arvot ovat samat kuin järjestämättömillä faktoreilla, samaten ANOVA-taulukko. Jotta polynomiset kontrastit olisivat kelvollisia, faktorin on oltava jotakuinkin tasavälinen. Näin onkin tällä kertaa, sillä log(syvyys) on liki tasavälinen (kuva 9).

Kuva 9: Eläinplanktonin biomassat eri syvyyksillä. Kukin osakuva esittää yhtä tutkimuspaikkaa

\includegraphics[width=0.8\textwidth]{pojoviken.eps}

Ilmeisesti log-syvyyden vaikutus on liki lineaarinen, sillä ylemmän asteiset termit ovat melko merkityksettömiä. Voimme vielä testatakin tämän:

> m <- as.numeric(syvyys)  ## Tasot numeroiksi 1 ... 6
> pojo.L <- lm(biomassa ~ poly(m,1) + paikka, data=pojoviken)
> anova(pojo.L, pojo.aov)
Analysis of Variance Table

Model 1: biomassa ~ poly(m, 1) + paikka
Model 2: biomassa ~ syvyys + paikka
  Res.Df Res.Sum Sq Df  Sum Sq F value Pr(>F)
1     19    20.4126                          
2     15    19.7162  4  0.6963  0.1324  0.968
Funktio poly(x,n) muodostaa n asteen polynomin vektorista x, ja käytimme mallilausekkeessamme vain ensimmäisen asteen polynomia eli lineaarista termiä. Mallien pojo.L ja pojo.aov ero on, että edellinen sisältää vain lineaarisen vaikutuksen, jälkimmäinen myös ylemmän asteiset vaikutukset aina viidenteen asteeseen. ANOVAmme osoittaa, että ylemmän asteiset polynomitermit eivät paranna oleellisesti malliamme, joten voimme pitää biomassan muutosta likipitäen lineaarisena suhteessa log-syvyyteen.

Nyt pystymme myös korjaamaan laiminlyöntimme interaktion tutkimisessa: Voimme testata, onko syvyyden vaikutus merkitsevästi erilaista eri paikoissa. Alkujaan vapausasteet eivät riittäneet tähän, mutta kun tutkimme vain syvyyden lineaarista komponenttia, voimme analyysin tehdä:

> pojo.Lint <- aov(biomassa ~ poly(m,1)*paikka, data=pojoviken)
> summary(pojo.Lint)
                  Df  Sum Sq Mean Sq F value    Pr(>F)
poly(m, 1)         1 30.9558 30.9558 25.3473 0.0001221
paikka             3  3.1412  1.0471  0.8574 0.4831290
poly(m, 1):paikka  3  0.8724  0.2908  0.2381 0.8684761
Residuals         16 19.5402  1.2213                  
Interaktioita ei tarvita.

Lopuksi katsomme kuvaa. coplot-kuvaan voi kirjoittaa oman paneelifunktion, joka korvaa oletusvaihtoehdon esittää vain havaintopisteet. Paneelifunktion oletustoiminto on:

   panel=function(x, y, ...) {points(x,y)}
Funktiolle välitetään kyseiseen paneeliin tulevien havaintopisteiden arvot ja oletuksena on lisätä ne kuvaan. Me haluamme mukaan myös mallin pojo.L sovitetut arvot, ja sen takia paneelifunktiolle on välitettävä myös tieto paneeliin kuuluvista havainnoista määritteellä subscripts. Kuva 9 syntyy komennoilla (sulkujen kanssa kannattaa olla tarkkana):
> metrit <- as.numeric(levels(syvyys)[syvyys]) # Tasot numeroiksi 0.2 ... 10
> coplot(biomassa ~ log10(metrit) | paikka, show.given=F, subscripts=T,
+    panel=function(x,y,subscripts,...) { points(x,y)
+    lines(x,fitted(pojo.L)[subscripts]) })
Esimerkistä näkyy myös, kuinka faktorin voi muuttaa numeeriseksi muuttujaksi. Sovitetut arvot ovat melkein suorat: lievä aaltoilu johtuu siitä, että järjestetty faktori ei ollut aivan tasavälinen.


Jari Oksanen 2003-01-21