9 Tilastollinen testaaminen

9.1 Testaamisen periaatteita

Tilastollisilla testeillä pyritään arvioimaan perusjoukkoa koskevien väiteiden paikkansapitävyyttä todennäköisyyslaskennan keinoin. Lähtökohtana on niin sanottu nollahypoteesi (\(H_0\)), joka yleensä vastaa tilannetta, jossa mahdolliset väitettä tukevat haivainnot ovat vain sattuman seurausta. Esimerkiksi jos tutkitaan onko jokin lääkeaine tehokas hoitokeino, voisi nollahypoteesi olla muotoa “ei vaikutusta”. Nollahypoteesiin liittyy aina vastahypoteesi (\(H_1\)), joka yleensä nollahypoteesin vastakohta, ja vastaa mielenkiinnon kohteena olevaa väitettä (esim. “on vaikutusta”).

Tilastolliset testit olettava nollahypoteesin olevan totta, jolloin epäuskottavat tulokset antavat aihetta epäillä nollahypoteesin mielekkyyttä. Testiin liittyy yleensä testisuure, joka on jokin aineistosta laskettu tunnusluku. Testisuureen jakauman perusteella voidaan arvioida todennäköisyyttä, että havaittu tulos olisi vain sattuman seurausta. Tätä todennäköisyyttä kutsutaan p-arvoksi. Perinteisesti tilastotieteessä asetetaan etukäteen jokin riskitaso (\(\alpha\)), ja jos saatu p-arvo on riskitasoa pienempi niin nollahypoteesi hylätään (yleensä \(\alpha = 0.05\)). Jos p-arvo on riskitasoa pienempi, niin havaintoa kutsutaan tilastollisesti merkitseväksi.

9.2 t-testi

Studentin t-testi on yksi tunnetuimmista tilastollisista testeistä. Se testaa muuttujien odotusarvoja.

Tarkastellaan R:n sisäistä dataa sleep, joka sisältää muutoksia oppilaiden unen määrässä (muuttuja extra, muutos unen määrässä tunneissa) kahdella eri lääkkeellä (muuttuja group). Jokainen oppilas kokeili kumpaakin lääkettä, muuttuja ID yksilöi oppilaat.

9.2.1 Yhden otoksen t-testi

Testaamme aluksi hypoteesia, että muutos unen määrässä lääkkeen käytön jälkeen on 0 (\(H_0 : \mu = 0\)). Funktiota t.test voi käyttää monella tapaa. Tässä esimerkissä annamme funktiolle kaavan extra ~ 1, eli ns. formula-objektin ensimmäisenä argumenttina, joka on osa R:n syntaksia tilastollisten mallien ja riippuvuusrakenteiden määrittellyyn. Kaava määrittelee, että ~-merkin vasen puoli on vastemuuttuja, ja oikea puoli sisältää selittävät muuttujat. Koska emme tee testiä minkään toisen muuttujan suhteen, niin kaavan oikean puoli on vain luku 1, joka R:n syntaksissa tarkoittaa, että se on vakio. Tämä ei siis tarkoita esimerkiksi sitä, että nollahypoteesimme olisi, että muutos unen määrässä olisi 1 tunti. Nollahypoteesin mukainen odotusarvo määritellään argumentilla mu, joka yhden otoksen testissä saa oletusarvon 0.

# One sample test
tt1 <- t.test(extra ~ 1, data = sleep)
tt1
## 
##  One Sample t-test
## 
## data:  extra
## t = 3.413, df = 19, p-value = 0.002918
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.5955845 2.4844155
## sample estimates:
## mean of x 
##      1.54

Tuloksena saamme t-testisuureen arvon, vapausasteet sekä testin p-arvon. Koska p-arvo on pieni (perinteisesti rajana käytetään lukua 0.05, mutta tämä vaihtelee tieteenalasta riippuen) niin nollahypoteesi hylätään, eli testin mukaan muutos unen määrässä poikkeaa tilastollisesti merkitsevästi nollasta kumpaa tahansa lääkettä käytettäessä. Tuloste kertoo myös testin vastahypoteesin \(H_1\) kohdassa “alternative hypothesis”.

Testiin liittyvät tunnusluvut saamme eriteltyä tulosobjektista tt1 seuraavasti:

# Test statistic
tt1$statistic
##        t 
## 3.412965
# Degrees of freedom
tt1$parameter
## df 
## 19
# p-value
tt1$p.value
## [1] 0.00291762

9.2.2 Kahden otoksen t-testi

Entäpä jos haluammekin testata hypoteesia, että kumpikin lääke vaikuttaa samalla tavalla unen määrään (\(H_0 : \mu_1 = \mu_2\))? Voimme tässäkin tapauksessa käyttää formula-syntaksia hyödyksi. Vakion 1 sijaan sijoitamme nyt lääkettä vastaavan muuttujan group kaavassa ~-merkin oikealle puolelle.

tt2 <- t.test(extra ~ group, data = sleep)
tt2
## 
##  Welch Two Sample t-test
## 
## data:  extra by group
## t = -1.8608, df = 17.776, p-value = 0.07939
## alternative hypothesis: true difference in means between group 1 and group 2 is not equal to 0
## 95 percent confidence interval:
##  -3.3654832  0.2054832
## sample estimates:
## mean in group 1 mean in group 2 
##            0.75            2.33

Testiobjektin sisältö vastaa yhden otoksen testiä suurimmilta osin. Näämme, että testin tulos ei tällä kertaa ollut tilastollisesti merkitsevä (merkitsevyystasolla 0.05) eli testin mukaan ei ole näyttöä siitä, että lääkkeet vaikuttaisivat eri tavalla unen määrään, jolloin nollahypoteesia ei hylätä.

Tarkkasilmäinen lukija saattoi kuitenkin huomata, että tämä testi ei aivan vastaa tarkoitusta, sillä sleep-aineistossa jokainen koehenkilö kokeili kumpaakin lääkettä, jolloin oikea tapa olisi testata lääkkeiden vaikutuksen erotusta, mikä tehdäänkin seuraavaksi.

9.2.3 Parittaisten otosten t-testi

Jotta mittausparit tulevat otettua huomioon testissä, on t.test-funktiolle annettava argumentti paired = TRUE. Tässä testissä nollahypoteesi on, että lääkkeiden vaikutuksen erotuksen odotusarvo on 0 (\(H_0 : \mu_d = 0\)).

tt3 <- t.test(extra ~ group, data = sleep, paired = TRUE)
tt3
## 
##  Paired t-test
## 
## data:  extra by group
## t = -4.0621, df = 9, p-value = 0.002833
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  -2.4598858 -0.7001142
## sample estimates:
## mean difference 
##           -1.58

Tällä kertaa tulos on taas tilastollisesti merkitsevä, eli lääkkeiden vaikutuksessa unen määrään on tilastollisesti merkitsevä ero, jolloin nollahypoteesi hylätään.

9.3 Khiin neliö -testi

Kahden kategorisen muuttujan riippuvuuden tutkimiseen voidaan käyttää khiin neliö -testiä. Tyypillisesti halutaan verrata jotain ryhmien välisiä eroja, kuten puoluekannatusta alueittain tai sukupuolten suhteen. Testin ideana on verrata havaittua ristiintaulukkoa nollahypoteesin mukaiseen ristiintaulukkoon, jossa muuttujien välillä ei ole lainkaan riippuvuutta. Khiin neliö -testin testisuure perustuu näiden kahden taulukon eroihin.

Tarkastellaan Yhdysvaltalaista kyselytutkimusaineistoa, joka sisältää tiedon henkilön puoluekannatuksesta ja sukupuolesta. Tutkitaan khiin neliö -testin avulla, riippuuko puoluekannatus sukupuolesta. R:ssä tämä voidaan tehdä funktiolla chisq.test.

## From Agresti(2007) p.39
M <- as.table(rbind(c(762L, 327L, 468L), c(484L, 239L, 477L)))
dimnames(M) <- list(gender = c("F", "M"),
                    party = c("Democrat", "Independent", "Republican"))
(Xsq <- chisq.test(M))  # Prints test summary
## 
##  Pearson's Chi-squared test
## 
## data:  M
## X-squared = 30.07, df = 2, p-value = 2.954e-07
Xsq$observed   # observed counts (same as M)
##       party
## gender Democrat Independent Republican
##      F      762         327        468
##      M      484         239        477
Xsq$expected   # expected counts under the null
##       party
## gender Democrat Independent Republican
##      F 703.6714    319.6453   533.6834
##      M 542.3286    246.3547   411.3166
Xsq$residuals  # Pearson residuals
##       party
## gender   Democrat Independent Republican
##      F  2.1988558   0.4113702 -2.8432397
##      M -2.5046695  -0.4685829  3.2386734
Xsq$stdres     # standardized residuals
##       party
## gender   Democrat Independent Republican
##      F  4.5020535   0.6994517 -5.3159455
##      M -4.5020535  -0.6994517  5.3159455

Koska testin p-arvo on pieni, niin nollahypoteesi hylätään ja todetaan, että puoluekannatus riippuu tilastollisesti merkitsevästi sukupuolesta. Testin luotettavuuden kannalta on kuitenkin hyvä huomioida, että testiin liittyy oletuksia, jotka koskevat odotettuja frekvenssejä (eli nollahypoteesin mukaisen ristiintaulukon frekvenssejä). Tyypillisesti vaaditaan, että odotetun frekvenssin on oltava vähintään 5 vähintään 80%:ssa taulukon soluista, eikä yhdenkään solun odotettu frekvenssi ole alle 1. Tarkistetaan oletukset edellisen esimerkin tapauksessa:

all(Xsq$expected >= 1)
## [1] TRUE
mean(Xsq$expected >= 5) >= 0.80
## [1] TRUE

Oletukset ovat tältä osin kunnossa. Edellä funktio all ottaa syötteenään loogisen vektorin ja palauttaa TRUE jos syötteen kaikki alkiot ovat TRUE. Muutoin funktio palauttaa FALSE.

Edellisessä esimerkissä ristiintaulukko oli valmiiksi rakennettu annetuista frekvensseistä. Ristiintaulukko voitaisiin myös rakentaa yksilötason aineistosta, esimerkiksi datakehikosta, joka sisältää rivin jokaista kyselyyn vastannutta henkilöä kohden ja tiedon vastaajan ilmoittamasta puolueesta ja sukupuolesta. Seuraavassa esimerkissä kyselytutkimusaineisto on muuttujassa poll_data, joka voidaan muuntaa ristiintauloksi funktiolla table. Huomataan, että tällä tavalla muodostettu ristiintaulukko on sama kuin suoraan frekvensseistä koottu taulukko.

head(poll_data)
##   gender    party
## 1      F Democrat
## 2      F Democrat
## 3      F Democrat
## 4      F Democrat
## 5      F Democrat
## 6      F Democrat
nrow(poll_data)
## [1] 2757
# The cross tabulations are the same
identical(M, table(poll_data))
## [1] TRUE

9.4 Varianssianalyysi

Varianssianalyysin voidaan ajatella olevan t-testin yleistys, jossa yhden tai kahden odotusarvon sijaan verrataankin kerralla useamman ryhmän odotusarvoja keskenään. Menetelmä saa nimensä siitä, että sen testisuure perustuu kiinnostuksen kohteena olevan muuttujan kokonaisvaihtelun (varianssin) jakamiseen verratavien ryhmien sisäiseen vaihteluun ja niiden väliseen vaihteluun. Koska harjoitusaineistossa study_data ei vielä ole kategorista muuttujaa, jossa on vähintään kolme kategoriaa, niin luodaan sellainen.

# create a new categorical variable called age_group
# 3,5,6 => ryhmä 1
# 2,4,8 => ryhmä 2
# 1,7   => ryhmä 3
# vaste: weight
study_data$age_group <- c("3", "2", "1", "2", "1", "1", "3", "2")
study_data$fage_group <- factor(study_data$age_group)

Hypoteesit ovat:

  • \(H_0\): Ryhmien odotusarvot ovat samat tarkasteltavan muuttujan suhteen (\(\mu_1 = \mu_2 = \dots = \mu_n\)),
  • \(H_1\): Ryhmien odotusarvoissa on eroa tarkasteltavan muuttujan suhteen (\(\mu_i \ne \mu_j\) ainakin joillekin \(i \ne j\)).
# conduct Analysis of Variance (ANOVA) for study_data
# we test if averages of height differ between age groups
summary(aov(height ~ fage_group, data = study_data))
##             Df Sum Sq Mean Sq F value Pr(>F)
## fage_group   2  198.7   99.34   1.097  0.417
## Residuals    4  362.4   90.60               
## 1 observation deleted due to missingness

Varianssianalyysin summary sisältää seuraavat sarakkeet: Df kertoo testiin liittyvän \(F\)-jakauman vapausasteet, Sum Sq kertoo ryhmiin liittyvän neliösumman ja jäännösneliösumman, Mean Sq kertoo vastaavan keskineliösumman, F value kertoo testisuureen arvon ja Pr(>F) kertoo testin P-arvon. Tässä tapauksessa testin p-arvo on \(0.417\), joten nollahypoteesia ei hylätä.

9.5 Levenen testi

Levenen testillä tutkitaan ovatko jonkin muuttujan varianssit samat kahdessa tai useammassa ryhmässä. Testiä ei ole toteutettu valmiiksi R:ssä, mutta se on saatavilla Rcourse-paketin kautta funktiossa leveneTest. Testin nollahypoteesi on, että muuttujan varianssit ovat samat joka ryhmässä.

Selvitetään onko harjoitusaineiston study_data muuttujan height varianssissa eroa eri ikäryhmien välillä (fage_group) Levenen testillä.

leveneTest(height ~ fage_group, data = study_data)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  0.5597 0.6105
##        4

Testin p-arvo löytyy sarakkeesta Pr(>F), ja se on \(0.6105\). Testin mukaan muuttujan varianssit ovat siis samat joka ryhmässä, ja nollahypoteesi jää voimaan.

9.6 Shapiro-Wilk -testi

Shapiro-Wilk -testillä tutkitaan onko jokin muuttuja normaalijakautunut. Testi löytyy funktiosta shapiro.test, ja se ottaa argumenttinaan yhden muuttujan havainnot vektorina. Funktiolla ei voi siis suoraan testata esimerkiksi sitä, onko muuttuja normaalijakautunut joissakin osaryhmissä, vaan aineisto on ensin jaettava sopiviin osiin. Testin nollahypoteesi on, että muuttuja on normaalijakautunut.

Tarkastellaan jälleen harjoitusaineistoa study_data ja testataan muuttujan height normaalisuutta.

shapiro.test(study_data$height)
## 
##  Shapiro-Wilk normality test
## 
## data:  study_data$height
## W = 0.96985, p-value = 0.8973

Testin p-arvon voi lukea kohdasta p-value ja se on aineistolle \(0.8973\), eli height-muuttuja on testin mukaan normaalijakautunut, ja nollahypoteesi jää voimaan.