Khi-neliön testi

$ \chi^{2}_{}$-jakauma on normitettuun normaalijakaumaan pohjautuva jakauma: Jos muuttuja zi jakautuu normaalisesti siten että keskiarvo on 0 ja varianssi on 1 eli zi $ \sim$ N(0, 1), niin n riippumattoman zi-luvun neliöiden summa jakautuu khi-neliöjakauman mukaan vapausasteilla n:

$\displaystyle \sum_{{i=1}}^{{n}}$zi2 $\displaystyle \sim$ $\displaystyle \chi^{2}_{}$(n)

Normaalisesti N($ \mu$,$ \sigma^{2}_{}$) jakautuneen muuttujan pystyy muuntamaan N(0, 1) jakautuneeksi z-muunnoksella (yhtälö 1 sivulla [*]). Jos meillä on Poisson-jakautunut muuttuja y $ \sim$ P($ \mu$) niin sekä sen varianssi että keskiarvo ovat $ \mu$. Mikäli odotusarvo $ \mu$ on kyllin suuri, voimme aproksimoida Poisson-jakaumaa normaalijakaumalla ja silloin normeeraava z-muunnos on:

z = $\displaystyle {\frac{{y-\mu}}{{\sqrt{\mu}}}}$ (3)
Lukumäärien oletetaan yksinkertaisissa malleissa tyypillisesti olevan Poisson-jakautuneita, joten voimme käyttää tämän kaavan lauseketta. Silloin n:n riippumattoman z-muunnoksen neliöiden summa on jakautunut likimain $ \sim$ $ \chi^{2}_{}$(n)-jakauman mukaan. Näin ollen voimme käyttää yhtälöä 3 testaamaan havaittujen (y) ja odotettujen ($ \mu$) lukumäärien eroja. Aproksimaatiota pidetään yleisesti riittävän kun kaikki $ \mu$ > 5. Kaavat ovat aivan samat kuin Biometrian oppikirjassa (Ranta et al., 1989) vaikka ne johdettiin eri tavoin. Valitsin tämän tavan painottaakseni, että

Biologit ovat jo pitkään noudattaneet käytäntöä jättää kreikkalainen merkintä $ \chi^{2}_{}$ teoreettisella jakaumalle ja käyttää latinalaista merkintää X2 sitä likimäärin noudattavasta testisuureesta (Ranta et al., 1989). Ranta et al. (1989) kuvaavat myös G2-testin, joka on Poisson-jakauman uskottavuusosamäärä. Joillain ekologian aloilla sen käyttö on perinne, mutta useimmiten sen hyötyä pidetään marginaalisena enkä minäkään sitä käsittele.

Khi-neliön yhteensopivuustestillä verrataan havaittua jakaumaa odotettuun jakaumaan. Mikäli erityistä syytä ei ole, yksiulotteisessa taulukossa oletetaan odotusjakaumaksi tasajakauma. Oppikirjan pikkuruinen esimerkki (Ranta et al., 1989, Esimerkki 6.1) on mahdollista kirjoittaa suoraan komentoon:

> chisq.test(c(39,53,152))

         Chi-square test for given probabilities

data:  c(39, 53, 152)
X-squared = 93.3033, df = 2, p-value = < 2.2e-16
eli suutari ei tosiaankaan syö yhtä paljon erikokoisia saaliseläimiä vaan suosii suuria vesikirppuja.

Kaksiulotteisissa taulukoissa testataan yleensä heterogeenisuutta: ovatko rivit keskenään samanlaisia ja ovatko sarakkeet keskenään samanlaisia. Ranta et al. (1989, Esimerkki 6.3) käsittelevät tapausta, missä kuudelle eri vesiliskoille tarjotaan ravinnoksi surviaistoukkia tai vesikirppuja ja katsotaan niiden ravinnonvalintaa. Aineisto voidaan kirjoittaa R-istunnossa:

> ruoka <- c(17,5, 14,4, 13,4, 3,11, 5,15, 4,12)
> dim(ruoka) <- c(2,6) ## ruoka-vektori matriisiksi
> ruoka
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   17   14   13    3    5    4
[2,]    5    4    4   11   15   12
Tavanomainen tapa on kontingessitaulukon analyysi (Ranta et al., 1989), jonka chisq.test tekee automaattisesti kun sille annetaan syöttötietona matriisi. Kontingenssitaulukon analyysissä testataan hypoteesia, ovatko kaikkien rivien arvot jakautuneet samoin ja ovatko kaikkien sarakkeiden arvot jakautuneet samoin. Vektoria testattaessa nollahypoteesina (ellei toisin sanottu) oli lukumäärien tasajakauma. Kontingenssitaulukossa sen sijaan jakaumaoletus saadaan reunasummista. Esimerkissämme kunkin vesiliskoyksilön ravintopreferenssien oletettiin olevan:
> apply(ruoka,1,sum)/sum(ruoka)
[1] 0.5233645 0.4766355
Odotusarvot saadaan jakamalla vesiliskon syömä ruoan määrä näillä frekvensseillä. Ensimmäinen vesilisko söi kaikkiaan 22 ravintoeläintä. Jos sen preferenssit olisivat samat kuin kaikkien yksilöiden summattuna, ensimmäinen yksilö söisi 0.523 x 22 = 11.51 surviaista (havaittu 17) ja 0.477 x 22 = 10.49 vesikirppua (havaittu 5). Mikäli havaitut rivi- ja sarakeprofiilit poikkeavat reunasummien perusteella arvioiduista , sanotaan aineiston olevan heterogeeninen:
> chisq.test(ruoka)

         Pearson's Chi-square test

data:  ruoka
X-squared = 30.2696, df = 5, p-value = 1.305e-05
Saatamme hylätä suurella varmuudella nollahypoteesin. Vesiliskoyksilöiden ravintopreferenssit poikkeavat toisistaan suurella varmuudella.

Ranta et al. (1989) esittävät tämän yksinkertaisen analyysin sijaan sangen mutkallisen heterogeenisuustestin. Mielestäni ylläoleva suoraviivainen kontingenssitaulukon analyysi antaa paremman vastauksen selkeämpään kysymykseen kuin kirjan heterogeenisyystesti. Senkin voisi suorittaa R:llä, joskaan ei yhdellä komennolla. Kiinnostuneet voivat yrittää itse.

Mikäli olemme epävarmoja jakaumaoletuksista, tunnusluvun merkitsevyyden pystyy arvioimaan myös simuloidulla otannalla kontingessitaulukosta:

> chisq.test(ruoka, simulate.p.value=T)

         Pearson's Chi-square test with simulated p-value
         (based on 2000 replicates)

data:  ruoka
X-squared = 30.2696, df = NA, p-value = < 2.2e-16

Khi-neliön testiä voi käyttää myös tutkimaan, poikkeaako havaittu jakauma muusta odotetusta jakaumasta kuin tasajakaumasta. Ranta et al. (1989, Esimerkki 2.2) käsittelevät viirupöllöjen munamäärää ``Lahden takamailla''. Aineistossa on munamäärät 0...7 (muuttuja munat) ja niiden pönttöjen lukumäärä, josta kyseinen munamäärä on havaittu (muuttuja viiru):

> viiru <- c(4, 5, 7, 11, 29, 26, 7, 2)
> munat <- 0:7
Usein tällaiset lukumäärämuuttujat noudattavat Poisson-jakaumaa. Testatkaamme, kuinka käy tässä tapauksessa. Poisson-jakauman todennäköisyydet riippuvat vain munamäärän keskiarvosta:
> ka <- weighted.mean(munat,viiru)  ## Painotettu keskiarvo
> odotus <- c(dpois(0:6, ka), 1-ppois(6, ka))
Funktio dpois antaa tietyn munamäärän todennäköisyyden, ja ppois antaa vastaavan summatodennäköisyyden: Poisson-jakauman mukaan meillä voisi olla myös enemmän kuin 7 munaa, joten viimeinen termi on todennäköisyys saada $ \geq$ 7 munaa. Havaittu jakauma ja Poisson-jakauma näyttävät erilaisilta:
> plot(munat,viiru, type="h",lwd=3)
> segments(munat+0.1,0, munat+0.1,sum(viiru)*odotus, lty=2)
Komento tuottaa ``oikeaoppisen'' impulssidiagrammin. ``Vääräoppinen'', mutta tavallisempi pylväsdiagrammin saadaan komennolla
> barplot(rbind(viiru, sum(viiru)*odotus), beside=T)
Teoreettista jakaumaa vasten testataessa, chisq.test tarvitsee nimenomaan havaitut lukumäärät ja odotetut todennäköisyydet (summa = 1), joten testi on:
> chisq.test(viiru, p=odotus)

         Chi-square test for given probabilities

data:  viiru
X-squared = 33.4043, df = 7, p-value = 2.226e-05

Warning message:
Chi-square approximation may be incorrect in: chisq.test(viiru, p = odotus)
Osa odotusfrekvensseistä oli pieniä, joten saimme varoituksen. Ilmeisesti munamäärä ei kuitenkaan jakaudu poissonisesti.


Jari Oksanen 2003-01-21