Khiin neliö -testi (Χ2-testi)

Sisällysluettelo

Käyttötarkoitus

Χ2-testillä on kaksi käyttötarkoitusta:

  • Χ2-testillä voi testata, noudattaako muuttuja tiettyä jakaumaa (yhteensopivuus).
  • Χ2-testillä voi testata, ovatko kaksi muuttujaa toisistaan riippumattomia (riippumattomuus).

Χ2-suure

Käytetään seuraavia notaatioita:

  • O (observed frequencies) = muuttujan havaittu frekvenssi
  • E (expected frequencies) = muuttujan frekvenssin odotusarvo

Tämä kaava antaa χ2-arvon:

khiin_nelio_kaava_2.png

Χ2-jakauma

Χ2-jakauma riippuu vapausasteiden (k) lukumäärästä:

khiin_nelio_jakauma.png

Johdanto vapausasteisiin

Yksiulotteinen tapaus

Katsotaan alla olevaa esimerkkiä, jossa heitetään noppaa 1200 kertaa — ks. Esimerkki (yhteensopivuus).

Kun tulos on tiedossa viiden muuttujan osalta, tiedetään viimeisenkin muuttujan tulos. Esimerkiksi jos tiedetään nämä faktat:

(noppa heitetty 1200 kertaa)
silmäluku   tulos (O)
1           181
2           175
3           216
4           184
6           227

niin silloin tiedetään, että vitosia tuli 1200-181-175-216-184-227 = 217 kertaa.

Tässä tapauksessa vapausasteita on 6-1 eli 5.

Kaksiulotteinen tapaus

Oletetaan, että meillä on kontingenssitaulu, jonka rivien ja sarakkeiden summat ovat tiedossa:

-----------------------------------
|          |  c1 |  c2 | yhteensä |
-----------------------------------
| r1       |   a |   b |      480 |
| r2       |   c |   d |      430 |
-----------------------------------
| yhteensä | 625 | 285 |      910 |
-----------------------------------

On toki monia (a,b,c,d)-kombinaatioita, joilla päädytään yllä olevaan tulokseen. Mutta kun yksikin muuttuja on tiedossa, kaikki muut kolme muuttujaa ovat myös tiedossa. Esimerkiksi jos a on 345, niin ei jää muita vaihtoehtoja kuin b = 480 - 345 = 135, c = 625 - 345 = 280 ja d = 285 - 135 = 150.

Tässä tapauksessa on siis vain yksi vapausaste.

Yleisemmin jos kontingenssitaulussa on r riviä ja c saraketta, on todistettavissa, että vapausasteiden lukumäärä on (r-1)(c-1).

Lisää aiheesta: ks. esimerkiksi [7].

Esimerkki (yhteensopivuus)

Heitetään noppaa 1200 kertaa testaamisen mielessä. Haluaisimme tietää, onko noppa neutraali. Jo intuitiivisesti on selvää, että suuret vaihtelut arvojen välillä puhuvat sen puolesta, että noppa ei ehkä olekaan neutraali.

Oletetaan, että saimme seuraavat tulokset:

silmäluku   tulos (O)
1           181
2           175
3           216
4           184
5           217
6           227

Nollahypoteesi: noppa on neutraali.

Jos noppa on neutraali, nopan silmäluvut noudattavat tasajakaumaa eli kaikki silmäluvut ovat yhtä todennäköisiä ja niiden odotusarvot ovat:

silmäluku   odotusarvot (E)
1           200
2           200
3           200
4           200
5           200
6           200

Voimme laskea "käsin" χ2-suureen R:llä:

> o <- c(181, 175, 216, 184, 217, 227)
> e <- rep(sum(o)/6, 6)
> chi_squared <- sum((o - e) * (o - e) / e)
> chi_squared
[1] 12.58

Tässä tapauksessa vapausasteita on 6 - 1 = 5.

Χ2-arvotaulukosta (esim. [1]) näemme, että vapausasteiden ollessa 5 laskemamme arvo (12.58) sijaitsee 2,5% ja 5% luottamustasojen välissä.

Silmäluvut poikkeavat siis melkein merkitsevästi odotetuista luvuista, mutteivät merkitsevästi (terminologiaa: ks. [2]).

Edellinen esimerkki hyödyntäen R-funktiota chisq.test()

R:ssä on funktio chisq.test(), joka laskee suoraan χ2-arvon luottamustasoineen:

> o <- c(181, 175, 216, 184, 217, 227)
> chisq.test(o) ### oletusjakauma = tasajakauma, mikä on tässä tapauksessa oikea ###

        Chi-squared test for given probabilities

data:  o 
X-squared = 12.58, df = 5, p-value = 0.02765

Tulos on sama kuin mitä laskimme jo yllä - bonuksena vielä p-arvo.

Mitä tapahtuu, jos kaikki tulokset kerrotaan vakiolla?

Esimerkissä hetettiin noppaa 1200 kertaa.

Minkä tuloksen χ2-testi antaisi, jos noppaa heitettäessä 12000 kertaa jokaisen silmäluvun tulos olisi kymmenkertainen eli:

silmäluku   tulos (O)
1           1810
2           1750
3           2160
4           1840
5           2170
6           2270

Toisin kuin voisi kenties olettaa, χ2-testin uudet tulokset ovat aivan erilaisia kuin aiemmat:

> chisq.test(10 * o)

        Chi-squared test for given probabilities

data:  10 * o 
X-squared = 125.8, df = 5, p-value < 2.2e-16

Syynä on se, että suurten lukujen lain ([3]) mukaan havaitun frekvenssin pitäisi lähestyä todellista todennäköisyyttä havaintojen lukumäärän kasvaessa. On paljon epätodennäköisempää saada esimerkiksi 1810 ykköstä 12000 heitosta kuin 181 ykköstä 1200 heitosta. Siksi jälkimmäisessä kokeessa silmäluvut poikkeavat erittäin merkitsevästi (ja enemmänkin...) odotetuista luvuista.

Muita yhteensopivuustestejä

Epäformaalina (mutta hyvänä alustavana) menetelmänä voi graafisesti vertailla havaintoja teoreettiseen jakaumaan. qq-diagrammilla voi tarkemmin havaita mahdollisia poikkeamia. (Tarkempia tietoja: [4], osio Onko muuttujan jakautuma normaali?, joka pätee suurilta osin muihinkin kuin normaalijakaumiin.)

χ2-testin lisäksi [5] mainitsee seuraavat menetelmät:

  • Kolmogorov-Smirnov test
  • Cramér-von Mises criterion
  • Anderson-Darling test
  • Shapiro-Wilk test

Esimerkki (riippumattomuus)

Tässä on rokotustuloksia kontingenssitaulun muodossa:

-------------------------------------------------------------
|              | pysyi terveenä | sairastui | ei osaa sanoa |
-------------------------------------------------------------
| rokotettu    |            345 |       135 |            50 |
| ei rokotettu |            280 |       150 |            40 |
-------------------------------------------------------------

Nollahypoteesi: rokotus ja sairastuminen ovat toisistaan riippumattomia.

Odotusarvot lasketaan siten, että muuttujat olisivat toisistaan riippumattomia. Esimerkiksi lasketaan odotusarvo solulle (rivi=1, sarake=2) näin:

  • ensimmäisen rivin arvojen summa: 345 + 135 + 50 = 530
  • toisen sarakkeen arvojen summa: 135 + 150 = 285
  • kaikkien arvojen summa: 345 + 135 + 50 + 280 + 150 + 40 = 1000
  • solun (1, 2) havaittu arvo: 135
  • solun (1, 2) odotusarvo: 530 * 285 / 1000 = 151,05

Voimme laskea "käsin" χ2-suureen R:llä:

> o <- matrix(c(345, 280, 135, 150, 50, 40), nrow=2)
> r_sums <- rowSums(o)
> c_sums <- colSums(o)
> total <- sum(o)
> e <- outer(1:nrow(o), 1:ncol(o), FUN=function(r, c) c_sums[c] * r_sums[r] / total)
> e
       [,1]   [,2] [,3]
[1,] 331.25 151.05 47.7 ### e[1, 2] on sama kuin aikaisemmin käsin laskettu arvo eli 151,05 ###
[2,] 293.75 133.95 42.3
> chi_squared <- sum((o - e) * (o - e) / e)
> chi_squared
[1] 5.078869

Kontingenssitaulun vapausasteiden lukumäärä on (r-1)(c-1) (r = rivien lukumäärä, c = sarakkeiden lukumäärä). Tässä tapauksessa vapausasteita on siis (2-1)(3-1) = 2.

Χ2-arvotaulukosta (esim. [1]) näemme, että vapausasteiden ollessa 2 laskemamme arvo (5.08) sijaitsee 5% ja 10% luottamustasojen välissä.

Emme hylkää nollahypoteesia, sillä χ2-testin tulos ei ole edes melkein merkitsevä.

Edellinen esimerkki hyödyntäen R-funktiota chisq.test()

Funktiota chisq.test() voi myös käyttää matriisiargumentilla (jolloin matriisi on kontingenssitauluna):

> o <- matrix(c(345, 280, 135, 150, 50, 40), nrow=2)
> chisq.test(o)

        Pearson's Chi-squared test

data:  o 
X-squared = 5.0789, df = 2, p-value = 0.07891

Tulos on sama kuin mitä laskimme jo yllä, ja p-arvo on vähän alle 8%.

Miksi oppikirjoissa kontingenssitauluesimerkit ovat harvoin muotoa 2x2?

Oppikirjoissa, netissä jne. kontingenssitauluesimerkit ovat χ2-testin yhteydessä usein muotoa 2x3, mutta harvoin yksinkertaisempaa muotoa 2x2. Myös yllä oleva esimerkki on muotoa 2x3, vaikka muoto 2x2 (ilman keinotekoista saraketta ei osaa sanoa) olisi luontevampi.

Syynä on se, että χ2-testi ei toimi hyvin yhdellä vapausasteella. Siksi 2x2-tapauksissa on tapana käyttää Yatesin korjausta ([6]).

R:n funktio chisq.test() käyttää automaattisesti Yatesin korjausta 2x2-tapauksissa:

> o <- matrix(c(10, 20, 30, 40), nrow=2)
> chisq.test(o)

        Pearson's Chi-squared test with Yates' continuity correction ### Yatesin korjaus käytössä ###

data:  o 
X-squared = 0.4464, df = 1, p-value = 0.504

2x2-tapauksissa voi halutessaan pakottaa funktion chisq.test() jättämään Yatesin korjauksen käyttämättä:

> chisq.test(o, correct=FALSE)

        Pearson's Chi-squared test ### Yatesin korjaus ei käytössä ###

data:  o 
X-squared = 0.7937, df = 1, p-value = 0.373

jolloin χ2-arvo on sama kuin suoraan kaavalla laskettuna:

> r_sums <- rowSums(o)
> c_sums <- colSums(o)
> total <- sum(o)
> e <- outer(1:nrow(o), 1:ncol(o), FUN=function(r, c) c_sums[c] * r_sums[r] / total)
> chi_squared <- sum((o - e) * (o - e) / e)
> chi_squared
[1] 0.7936508

Muita riippumattomuustestejä

  • G-testi — tarkempi kuin χ2-testi
  • Fisherin testi — pyrkii myös tarkempiin tuloksiin kuin χ2-testi
  • Barnardin testi — joissakin tapauksissa parempi kuin Fisherin testi, mutta laskennallisesti raskaampi
  • Hoeffdingin testi — soveltuu myös jatkuviin muuttujiin

Χ2-testi sopii monenlaiseen muuttujaan

Edellisistä esimerkeistä käy ilmi, että χ2-testiä voidaan soveltaa vaikka normaaliasteikossa olevalle muuttujalle.

Nopan heiton esimerkissäkin huomattakoon, että silmäluvut 1..6 ovat vain konventio: silmä"lukuina" voitaisiin yhtä hyvin käyttää vaikka värejä.

Lähteet

[1] Critical values of the chi-squared distributionhttp://courses.nus.edu.sg/course/stacar/internet/st2238/handouts/chisq_table.pdf

[2] CLT255: R:n tekemän tilastollisen testin tulkintahttps://kitwiki.csc.fi/twiki/bin/view/KitWiki/HyClt255s2011TestinTulkinta

[3] Law of large numbershttp://en.wikipedia.org/wiki/Law_of_large_numbers

[4] CLT255: Kuudes materiaalierä, Onko muuttujan jakautuma normaali?https://kitwiki.csc.fi/twiki/bin/view/KitWiki/HyClt255s2011L06

[5] Goodness of fit, Fit of distributionshttp://en.wikipedia.org/wiki/Goodness_of_fit#Fit_of_distributions

[6] Yates's correction for continuityhttp://en.wikipedia.org/wiki/Yates%27_chi-square_test

[7] Degrees of freedom (statistics)http://en.wikipedia.org/wiki/Degrees_of_freedom_(statistics)

Ensimmäinen kommentti

Alustava kommentti Maijalta. Asioista on kerrottu hyvin kattavasti, huomaa että asiaan on perehdytty. Joitakin väliotsikoita on jätetty pois, mutta luultavasti ne eivät ole olleet oleellisia kyseisen testin kannalta. Myös uusia hyödyllisiä otsikoita on lisätty. Tilastotieteitä vähän lukeneena kaipaisin lisää tietoa vapausasteista. Asiat selkenivät kuitenkin sen verran hyvin, että tästä tulee olemaan vielä hyötyä minulle harjoitustyössäni. Kiitos!

Toinen kommentti

Alustava kommentti Juhalta

Teksti on hyvä ja varsin kattava. Se on pääasiassa helppo ymmärtää, mutta olisi hyvä jos vapausasteet selitettäisiin jotenkin. Mitä ne tarkoittavat? Miksi ne saadaan kaavalla (r-1)(c-1) (r = rivien lukumäärä, c = sarakkeiden lukumäärä)?

Vastaus kommentteihin

Kiitos kommenteista. Lisäsin jakson Johdanto vapausasteisiin.

-- AntoineTrux - 2012-10-01

Topic revision: r16 - 2012-10-11 - AntoineTrux
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2018 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback