Kolmogorovin-Smirnovin testi

Kolmogorovin-Smirnovin testisuure on odotetun ja havaitun kumulatiivisen frekvenssin erotus D. Kolmogorovin-Smirnovin testillä voi verrata kahden jatkuvan muuttujan jakaumaa keskenään (``Smirnovin testi'') tai yhtä jatkuvaa muuttujaa teoreettiseen jakaumaan (``Kolmogorovin testi''). Molemmat testit voi suorittaa paketin ctest ohjelmalla ks.test. Kutsujen periaate on:

> ks.test(havaittu, pjakauma)
> ks.test(havaittu1, havaittu2)
R:ssä on suuri joukko jakaumafunktiota tyyppiä pjakauma, esim. punif (tasainen jakauma) ja pnorm (normaalijakauma), joita voi käyttää Biometrian kirjan esimerkkien ratkaisussa.

Ranta et al. (1989, Esimerkki 6.5) esittelevät tutkimusta, jossa selvitettiin, kuuleeko Ornitologi pajulinnun yhtä hyvin läheltä ja kaukaa. Talletamme etäisyydet, jolta pajulinnut on kuultu muuttujaan tirppa.

> tirppa <- c(2,4,4,8,9,16,18,19,24,25,26,32,36,41,54,55,56,66,72,77,90,96)
Ranta et al. (1989) käyttivät muuttujan tirppa jakajana arveltua kuuluvuuden maksimietäisyyttä 100 m, jolloin muuttujan maksimifrekvenssiksi tulee 0.96. Vertaamme havaittuja jakaumaa teoreettiseen jakaumaan, eli teemme yhden otoksen testin. Nollahypoteesin mukainen jakauma on tasajakauma, jonka R:ssä saamme funktiolla punif.
> ks.test(tirppa/100, punif)

         One-sample Kolmogorov-Smirnov test

data:  tirppa/100
D = 0.24, p-value = 0.1585
alternative hypothesis: two.sided
Testisuure D = 0.24 ei ole ``tilastollisesti merkitsevä'', joten aineisto ei tarjoa riittävästi näyttöä tasajakaumahypoteesia vastaan (eli tavanomaisten tilastotieteen alkeisesitysten mukaan ``nollahypoteesi jää voimaan''). Testisuure poikkeaa Biometrian esimerkistä (Ranta et al., 1989, Esimerkki 6.5). Tämä johtuu siitä, että Ranta et al. (1989) määrittelevät tasavälisen vertailumuuttujan S vaihteluväliksi 1/n...1, kun taas R käyttää väliä 0...(1 - 1/n) -- minulla ei ole aavistustakaan, kumpi on oikea tapa.

Valitettavasti testasimme virheellistä nollahypoteesia: Ranta et al. (1989) kirjoittavat: ``Tutkija tiesi, että pajulinnun populaatiotiheys on sama tutkimusalueen eri osissa ... Nollahypoteesin mukaan kuulohavainnot jakautuvat tasaisesti.'' Jos tiheys on tasainen, kuulojakauman ei pidä olla tasainen, vaan kaukaa pitäisi kuulua useampi lintu, sillä kaukana on suurempi pinta-ala kuin lähellä. Kuulohavaintojen pitäisi siis jakautua kuten pinta-alan eli suhteessa etäisyyden neliöön. Tällöin saamme:

> ks.test((tirppa/100)^2, punif)

         One-sample Kolmogorov-Smirnov test

data:  (tirppa/100)^2
D = 0.4683, p-value = 0.0001291
alternative hypothesis: two.sided
Päätelmämme on siis erilainen: lähellä olevat linnut kuullaan todennäköisemmin kuin kaukana olevat, mikä yhtenee arkikokemukseemme äänisignaalin vaimenemisesta.

Kuva 3: Kolmogorin-Smirnovin testi: pajulinnun äänen havaitseminen eri etäisyyksiltä oikeaa ja väärää nollahypoteesia vasten.

\includegraphics[width=0.6\textwidth]{ks.eps}

Lopuksi piirrämme kuvan 3. Kuvassa käytetään askelfunktiota havaitulle jakaumalle: arvo muuttuu askeleittain juuri havainnon kohdalla. Komentojen lyhentämiseksi tällä kertaa lasketaan myös apumuuttujat F (havaittu jakauma)6 ja S (odotettu jakauma):
> F <- tirppa/100
> S <- 0:(n-1)/n    ## Kirja käyttää S <- 1/n:n
> plot(F,S,type="s")
> lines(S,S,lty=3); lines(sqrt(S),S,lty=2)
> legend(0,0.99,legend=c("Havaittu","Tasatiheys","Tasaetäisyys"),lty=(1:3))
> arrows(0.26,0.26, 0.26,0.4545, code=3,length=0.1)
> arrows(0.41,0.1681, 0.41,0.5909, code=3,length=0.1)
> mp <- locator()   ## Osoitetetaan hiirellä tekstin paikat
> text(mp,c("D=0.24","D=0.47"), adj=c(0,1))
Nuolten koordinaatit jouduimme laskemaan erikseen seuraamalla kirjan esimerkkiä (Ranta et al., 1989). Nuolten koordinaatit löytyivät tutkimalla tuloksia komennoista:
> cbind(F,S,F-S,F-S-1/length(F))
> cbind(F^2,S,F^2-S,F^2-S-1/length(F))

Toisena esimerkkinä Ranta et al. (1989, Esimerkki 6.6) käsittelevät aineistoa, jossa oli punnittu koko joukko männyn siemeniä ja haluttiin tietää ``noudattivatko ne normaalijakaumaa''. Kolmogorovin-Smirnovin testissä käyttämämme jakaumafunktio pnorm on jakautunut $ \sim$ N(0, 1), joten meidän on tehtävä z-muunnos, mikä tapahtuu helpoimmin funktiolla scale (sivu [*]):

> siemen <- c(4.1, 4.13,4.14,4.15,4.18,4.19,4.2,4.21,4.22,4.24,
+             4.27,4.28,4.4,4.47,4.54)
> ks.test(scale(siemen), "pnorm")

         One-sample Kolmogorov-Smirnov test

data:  scale(siemen)
D = 0.2012, p-value = 0.5784
alternative hypothesis: two.sided
Saamamme testisuure D = 0.201 ei ole ``merkitsevä'' eli meillä ei tämän testin mukaan ole riittävästi näyttöä ``hylätä'' normaalijakaumaa. Sekä testisuure että johtopäätös poikkeavat Biometrian kirjasta, mutta tämä johtuu kirjassa olevassa laskuvirheestä.7 Graafisesti tarkasteltuna empiirinen jakauma vaikuttaa ei-normaaliselta (kuva 4).
Kuva 4: Siemenpainojen jakauma komennolla qqnorm(siemen); qqline(siemen)

\includegraphics[width=0.6\textwidth]{qqsiemen.eps}

Ilmeisesti Kolmogorovin-Smirnovin testi ei ole kovin voimakas tässä tapauksessa. Sen sijaan normaalijakautuvuuden testaamiseen kehitetty Shapiron-Wilkin testi pitää jakaumaa melko varmasti epänormaalina:

> shapiro.test(siemen)

         Shapiro-Wilk normality test

data:  siemen
W = 0.8682, p-value = 0.03171
Shapiron-Wilkin testi onkin tehokkaampi kuin Khi-neliön tai Kolmogorovin-Smirnovin testit, jos meillä todella on tarve testata jakauman normaalisuutta.

Kaikkia jakaumatestejä käytettäessä on syytä muistaa, että ne ovat ``asymptoottisesti merkitseviä'' eli aineiston koon kasvaessa ne pystyvat havaitsemaan vähäisetkin poikkeamat jakaumaoletuksesta. Useimmiten meillä ei ole erityistä syytä olettaa, että jakauma olisi normaalinen, joten testaamme lähinnä otoskoon riittävyyttä havaitsemaan poikkeavuudet. Jos saamme tuloksen, että havaittu jakauma ei poikkea ``merkitsevästi'' normaalisesta, se ei suinkaan osoita että jakauma ``noudattaa normaalijakaumaa'', ainoastaan että se voisi olla normaalinen. Mitä ilmeisimmin on olemassa suuri joukko muitakin jakaumia, joista havaittu jakaumamme ei poikkea ``merkitsevästi'' ja riittävän suurella aineistolla se poikkeaisi niistä kaikista.


Jari Oksanen 2003-01-21