Kordamine

Kasutame andmefaili “fb_friends”. Selles uuringus anti viiele erinevale grupile hinnata samu facebooki profiile. Ainuke erinevus oli profiilidele määratud sõprade arv.
Andmestikus on kolm tunnust:

  • friends - profiili sõprade arv; see oli uuringus sõltumatu muutuja
  • participant - katseisiku kood
  • score - facebooki profiilile antud sotsiaalse atraktiivsuse hinnang (1 = kõige madalam hinnang; 7 = kõige kõrgem hinnang)

Nende andmete põhjal on avaldatud ka artikkel:
Tong, S. T., Van Der Heide, B., Langwell, L., & Walther, J. B. (2008). Too Much of a Good Thing? The Relationship between Number of Friends and Interpersonal Impressions on Facebook. Journal of Computer-Mediated Communication, 13(3), 531–549. https://doi.org/10.1111/j.1083-6101.2008.00409.x

  1. Vaadake sõltuva muutuja jaotust (Score). Tehke histogramm ja arvutage asümmeetriakordaja ning ekstsess.

  2. Kui mitut profiili iga grupp hindas?

  3. Arvutage iga grupi keskmine hinnang.

  4. Tehke histogramm, kus gruppide hinnangud on kuvatud eraldi.

Dispersioonanalüüs (ANOVA)

R-is on ANOVA tegemiseks mitmeid erinevaid funktsioone:

  • aov()
  • anova(lm())
  • Anova(lm())
  • Anova(aov())
  • aov_ez() - paketist “Afex”
  • ezAnova() - paketist “ez”

Üldjoontes peaks saama nende funktsioonidega samad tulemused. Väiksed erinevused võivad tuleneda sellest, et funktsioonid kasutavad erinevaid meetodeid ruutude summa arvutamiseks (rohkem infot selle teema kohta leiate lehelt - https://www.r-bloggers.com/anova-%E2%80%93-type-iiiiii-ss-explained/). Need funktsioonid võivad erineda ka kasutamise poolest. Näiteks osade funktsioonide puhul peab korduvmõõtmistega andmestiku enne analüüsimist agregeerima.

Soovitan kasutada ANOVA arvutamiseks paketi “ez” funktsiooni ezAnova(). Seda funktsiooni on lihtne kasutada ja selle väljund on sarnane SPSS-iga tehtud analüüsile. Selle funktsiooni puhul saab ka kergesti muuta ruutude summa arvutamise meetodit. Lisaks korduvmõõtmiste ANOVA puhul ei pea andmestikku enne analüüsimist agregeerima.

Funktsiooni kasutamiseks installeerige endale pakett “ez”:

install.packages("ez")

Aktiveerige RStudios see pakett, et saaksite kasutada seal olevaid funktsioone.

library(ez)

Ühesuunaline ANOVA

Sageli tahetakse uuringutes võrrelda kahe grupi asemel kolme või enamat gruppi korraga. Sellisel juhul suurendaks mitme t-testi sooritamine I tüüpi vea ehk vale positiivsete tulemuste tõenäosust. Selle probleemi vältimiseks kasutatakse mitme grupi võrdlemisel dispersioonanalüüsi (ANOVA-t), mis võimaldab võrrelda mitme grupi tulemusi ühe statistilise testiga.

(Parameetrilise) ANOVA eeldused:

  1. Vaatlused on teineteisest sõltumatud;
  2. Sõltuv muutuja on GRUPPIDE LÕIKES normaaljaotuslik.
  3. Hajuvused on sarnased (Levene’s Test for Homogeneity of Variances näitab statistiliselt olulise erinevuse puudumist; ezAnova funktsioon annab meile ka selle testi tulemuse).

Vaatame, kuidas teha ühesuunalist ANOVA’t “ez” paketiga.
Tavalise ühesuunalise ANOVA puhul kasutatakse järgmisi argumente:

ezANOVA(
    data = andmestiku nimi,
    dv = sõltuv muutuja,
    wid = veerg, kus on katseisiku tunnus,
    between = sõltumatu muutuja,
    type = 3 # ruutude summa arvutamise meetod
)

Andmestiku “fb_friends” puhul:

iq_anova <- ezANOVA(data = fb_friends,
                    dv  = Score,
                    wid = Participant,
                    between = Friends,
                    type = 3,
                    detailed = TRUE)

print(iq_anova)
## $ANOVA
##        Effect DFn DFd        SSn      SSd           F            p p<.05
## 1 (Intercept)   1 129 2450.06134 154.8668 2040.837309 6.199938e-81     *
## 2     Friends   4 129   19.89023 154.8668    4.142011 3.439561e-03     *
##         ges
## 1 0.9405485
## 2 0.1138165
## 
## $`Levene's Test for Homogeneity of Variance`
##   DFn DFd      SSn      SSd        F          p p<.05
## 1   4 129 4.255477 57.77945 2.375224 0.05542563

ANOVA tulemus on väljundis esimesel kohal. Sealt leiame vastuse küsimusele, kas gruppide vahel on statistiliselt olulised erinevused või mitte. Kui p < .05 on meie mudel statistiliselt oluline ning edasi tasub vaadata post hoc teste, et välja selgitada, kus täpsemalt on erinevus(ed). Veerus nimega “ges” on ära tood ka efekti suurus – generalized eta squared (.02 – väike; .13 – keskmine; .26 – suur).

Post-hoc testid
ANOVA näitab, kas esineb gruppide vahelisi erinevusi, kuid ei näita, milliste gruppide vahel need erinevused on. Nende erinevuste uurimiseks peame tegema veel lisaks post-hoc testid. Selleks saame kasutada funktsiooni pairwise.t.test:
pairwise.t.test(y, x, p.adju = …), kus y on sõltuv muutuja, x on sõltumatu muutuja; argumendiga p.adju saame määrata meetodi p-väärtuse korrektsiooni arvutamiseks (see funktsioon võimaldab kasutada järgmisi meetodeid: “holm”, “hochberg”, “hommel”, “bonferroni”, “BH”, “BY”, “fdr”, “none”).

pairwise.t.test(fb_friends$Score, fb_friends$Friends, p.adj = "holm")
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  fb_friends$Score and fb_friends$Friends 
## 
##     102    302    502    702   
## 302 0.0043 -      -      -     
## 502 0.1420 0.8147 -      -     
## 702 0.3599 0.4681 1.0000 -     
## 902 1.0000 0.0390 0.4681 0.7369
## 
## P value adjustment method: holm

Joonis

ezPlot(data = fb_friends,
       dv  = Score,
       wid = id,
       between = Friends,
       x= Friends
       )

Kruskall-Wallise test

ANOVA mitteparameetriliseks analoogiks on Kruskall-Wallise test. Selle analüüsi tegemiseks saame kasutada funktsiooni kruskal.test(): kruskal.test (y ~ x, data = andmed), kus y on sõltuv muutuja ja x on sõltumatu muutuja.

kruskal.test(Score ~ Friends, data = fb_friends) 
## 
##  Kruskal-Wallis rank sum test
## 
## data:  Score by Friends
## Kruskal-Wallis chi-squared = 17.053, df = 4, p-value = 0.001888

Nüüd peame ka post-hoc testide puhul kasutama mitteparameetrilist testi (Mann-Whitney U test). R-is saame seda teha funktsiooniga pairwise.wilcox.test:
pairwise.wilcox.test(y, x), kus y on sõltuv muutuja ja x on sõltumatu muutuja.

pairwise.wilcox.test(fb_friends$Score, fb_friends$Friends, p.adj = "holm") 
## 
##  Pairwise comparisons using Wilcoxon rank sum test 
## 
## data:  fb_friends$Score and fb_friends$Friends 
## 
##     102    302    502    702   
## 302 0.0023 -      -      -     
## 502 0.1540 0.7764 -      -     
## 702 0.2382 0.7764 0.8627 -     
## 902 0.7764 0.0216 0.5649 0.7764
## 
## P value adjustment method: holm

Kahesuunaline ANOVA

Kuidas aga lahendada olukorda, kus on mitu erinevat sõltumatut muutujat, millel omakorda on mitu taset? Sellist olukorda võiks näitlikustada ravimiuuringuga, kus vaadatakse kahe erineva ravimi mõju kahe erineva doosiga. Saaksime järgneva uuringu ülesehituse: 2 (ravim 1, ravim 2) x 2 (madal doos, kõrge doos) eksperiment. Eeltoodud kujul raporteeritakse tihtipeale faktoriaalset eksperimenti.
Faktoriaalse lahenduse puhul saab rääkida peaefekti(de)st ja interaktsioonist (koosmõjust ). Eeltoodud näite puhul tähendab peaefekt seda, et nt ravimil 1 oli mõju sõltuvale muutujale, kuid väiksel doosil ei olnud või vastupidi., sealjuures ravimi doosist see efekt ei sõltunud. Interaktsioon tähendaks aga seda, et ravimite efektiivsus sõltub doosist – nt ravim1 on efektiivne siis, kui doos on kõrge, ravim2 on aga efektiivne siis, kui doos on madal.

Kasutame andmefail “drugtrial”. Tegemist on simuleeritud ravimiuuringu andmestikuga, mis sisaldab muutujatena uuritava identifitseerimisindeksit, sugu, ravimi annust ning ravijärgset skoori. Andmestiku allikas: http://staff.bath.ac.uk/pssiw/stats2/page16/page16.html

Faktoriaalse ANOVA puhul kasutatakse järgmisi argumente:

ezANOVA(
    data = andmestiku nimi,
    dv = sõltuv muutuja,
    wid = veerg, kus on katseisiku tunnus,
    between = c(esimene sõltumatu muutuja, teine sõltumatu muutuja),
    type = 3 # ruutude summa arvutamise meetod
)

Andmestiku “drugtrial” puhul:

drug_anova <- ezANOVA(data = drugtrial,
                    dv  = score,
                    wid = subject,
                    between = c(gender, dose),
                    type = 3)

print(drug_anova)
## $ANOVA
##        Effect DFn DFd         F            p p<.05        ges
## 2      gender   1  44 37.493546 2.223837e-07     * 0.46007994
## 3        dose   1  44  2.413819 1.274327e-01       0.05200648
## 4 gender:dose   1  44 15.443432 2.967220e-04     * 0.25980048
## 
## $`Levene's Test for Homogeneity of Variance`
##   DFn DFd      SSn      SSd        F          p p<.05
## 1   3  44 7.229167 37.08333 2.859176 0.04762463     *

Post-hoc testid
Enne Post-hoc testide arvutamist peaksime siinkohal vaatama üle, missuguseid gruppe me tahaksime omavahel võrrelda. Me saame kahe sõltumatu muutuja kombineerimisel 4 gruppi: female high, female low, male high, male low. Nende gruppide võrdlemiseks peaksime tegema andmetesse ühe lisaveeru, kus on kõik kombinatsioonid olemas. Selle saame teha funktsiooni paste() abil.

drugtrial$dummy <- paste(drugtrial$gender, drugtrial$dose)
pairwise.t.test(drugtrial$score, drugtrial$dummy, p.adjust = "holm")
## 
##  Pairwise comparisons using t tests with pooled SD 
## 
## data:  drugtrial$score and drugtrial$dummy 
## 
##            female high female low male high
## female low 0.2000      -          -        
## male high  4.8e-08     1.2e-05    -        
## male low   0.0070      0.2000     0.0014   
## 
## P value adjustment method: holm

Joonis

ezPlot(data = drugtrial,
       dv  = score,
       wid = subject,
       between = c(gender, dose),
       x = gender,
       split = dose,
       x_lab = 'Group',
       y_lab = 'RT (ms)'
       )

Korduvmõõtmiste ANOVA

Korduvmõõtmiste ANOVA (Repeated measures ANOVA) on sarnane tavalise ANOVA-ga (One Way ANOVA). Tavalise ANOVA-ga võrdlesime erinevusi sõltumatute gruppide vahel. Korduvmõõtmiste ANOVA-ga saame võrrelda erinevusi sõltuvate gruppide korral. Eksperimentaalpsühholoogias kohtab seda analüüsi üsna sageli, sest eelistatakse kasutada katsedisaine, kus kõik katseisikud teevad kõik tingimused läbi (sõltuvate gruppidega katsedisain).

Kasutame andmefaili “recalldata”. Selles katses esitati inimestele erineva emotsionaalse väärtusega sõnu ja paluti neid hiljem meenutada. Näeme andmestikus, et iga katseisik on läbinud kõik katsetingimused („Pos“ – positiivse tähendusega sõnad, „Neg“ – negatiivse tähendusega sõnad, „Neu“ – neutraalse tähendusega sõnad).

Vaatame, kas nende tingimuste puhul erines meenutamiste arv.

Korduvmõõtmiste ANOVA puhul kasutatakse järgmisi argumente:

ezANOVA(
    data = andmestiku nimi,
    dv = sõltuv muutuja,
    wid = veerg, kus on katseisiku tunnus,
    within = sõltumatu muutuja,
    type = 3 # ruutude summa arvutamise meetod
)

Andmestiku “recalldata” puhul:

recall_anova <- ezANOVA(data = recalldata,
                    dv  = score,
                    wid = subject,
                    within = condition,
                    type = 3)

print(recall_anova)
## $ANOVA
##      Effect DFn DFd        F            p p<.05       ges
## 2 condition   2  58 14.36539 8.558285e-06     * 0.2693313
## 
## $`Mauchly's Test for Sphericity`
##      Effect         W         p p<.05
## 2 condition 0.9973646 0.9637292      
## 
## $`Sphericity Corrections`
##      Effect       GGe        p[GG] p[GG]<.05      HFe        p[HF] p[HF]<.05
## 2 condition 0.9973715 8.757373e-06         * 1.070945 8.558285e-06         *

Post-hoc testid
Antud andmete puhul peame kasutama sõltuvate gruppidega t-teste, sest kõik katseisikud läbisid kõik katsetingimused. Selle testi tegemiseks kasutame funktsiooni pairwise.t.test(), aga seekord lisame argumendi “paired=TRUE”: pairwise.t.test(y,x,paired=TRUE), kus y on sõltuv muutuja ja x on sõltumatu muutuja.

pairwise.t.test(recalldata$score, recalldata$condition, paired = TRUE)
## 
##  Pairwise comparisons using paired t tests 
## 
## data:  recalldata$score and recalldata$condition 
## 
##     Neg     Neu   
## Neu 4.8e-05 -     
## Pos 0.0037  0.0627
## 
## P value adjustment method: holm

Segatüüpi ANOVA

Andmefailis nimega “anxiety” (paketist “datarium”) on kolmel erineval ajahetkel mõõdetud ärevusskoorid (t1, t2, t3). Lisaks on katseisikud jaotatud kolme gruppi füüsilise treeningu intensiivsuse alusel: madal (grp1), keskmine (grp2), kõrge (grp3). Andmetes on seega kaks sõltumatut muutujat: ärevuse mõõtmise aeg ja treeningu intensiivus. Esimese sõltumatu muutuja puhul on kõik katseisikud vastanud igas tingimuses. Treeningu intensiivsuse puhul on aga katseisikud jaotatud erinevatesse gruppidesse. Seega ühest küljest tahaks analüüsimiseks kasutada korduvmõõtmiste ANOVA-t, teisest küljest tundub aga sobivat tavaline ANOVA. Selliste andmete puhul saame ehitada segatüüpi ANOVA mudeli (mixed model ANOVA), mis võtab arvesse asjaolu, et üks muutuja varieerub katseisikute siseselt ja teine katseisikute vaheliselt.

ax_anova <- ezANOVA(data = anxiety,
                    dv  = score,
                    wid = id,
                    within = time,
                    between = group,
                    type = 3)

print(ax_anova)
## $ANOVA
##       Effect DFn DFd          F            p p<.05       ges
## 2      group   2  42   4.351811 1.916093e-02     * 0.1683558
## 3       time   2  84 394.909490 1.905584e-43     * 0.1785886
## 4 group:time   4  84 110.187610 1.384653e-32     * 0.1081997
## 
## $`Mauchly's Test for Sphericity`
##       Effect         W          p p<.05
## 3       time 0.8836439 0.07919252      
## 4 group:time 0.8836439 0.07919252      
## 
## $`Sphericity Corrections`
##       Effect       GGe        p[GG] p[GG]<.05       HFe        p[HF] p[HF]<.05
## 3       time 0.8957715 3.484600e-39         * 0.9330916 1.037156e-40         *
## 4 group:time 0.8957715 1.966104e-29         * 0.9330916 1.461019e-30         *

Teeme joonise tulemuse illustreerimiseks:

ezPlot(data = anxiety,
       dv  = score,
       wid = id,
       within = time,
       between = group,
       x= time,
       col = .(group)
       )

Ülesanded

Kasutage andmestikku “maad”.
1. Lisage andmetesse uus muutuja, mis jaotab maad SKP alusel kolme gruppi: madal, keskmine, kõrge. Rühmitame andmeid nn. kvantiilide meetodil, mis tagab, et igasse rühma satub võrdne arv riike. Kasutage selleks allolevat koodi:

maad$SKP_grupid = NA # loome andmetesse uue veeru
# Arvutame 0,33 ja 0,66 kvantiili väärtused
quantile(maad$SKP, na.rm = TRUE, probs = c(0.33, 0.66))
##     33%     66% 
## 14.9364 31.1124
#lisame loodud veergu väärtusi:
# kõik riigid, mille SKP on alla 0,33 kvantiili kodeeritakse väärtusega "1"
maad$SKP_grupid[maad$SKP < 14.9364] = "1"
# kõik riigid, mille SKP on üle 0,33 kvantiili ja alla 0,66 kvantiili kodeeritakse väärtusega "2"
maad$SKP_grupid[maad$SKP > 14.9364 & maad$SKP < 31.1124] = "2"
# kõik riigid, mille SKP on üle 0,66 kvantiili kodeeritakse väärtusega "3"
maad$SKP_grupid[maad$SKP > 31.1124] = "3"
  1. Võrrelge PISA testi tulemusi saadud gruppide lõikes. Tehke ka post-hoc testid ja joonis.

  2. Lisage andmetesse uus muutuja, mis jaotab maad demokraatia indeksi põhjal kahte gruppi: alla keskmise, üle keskmise. Kasutage selleks allolevat koodi:

maad$dem_grupid = NA # loome andmetesse uue veeru
#lisame loodud veergu väärtusi:
#kõik riigid, mille demokraatia indeks on alla keskmise kodeeritakse väärtusega "1"
maad$dem_grupid[maad$demokraatia_indeks < mean(maad$demokraatia_indeks,na.rm =TRUE)] = "1"
#kõik riigid, mille demokraatia indeks on võrdne või üle keskmise kodeeritakse väärtusega "2"
maad$dem_grupid[maad$demokraatia_indeks >= mean(maad$demokraatia_indeks,na.rm =TRUE)] = "2"
  1. Tehke kahe faktoriga ANOVA, kus sõltuvaks muutujaks on PISA test ja sõltumatuteks muutujateks regioon ning demokraatia indeksi alusel loodud grupid.

  2. Tehke eelmise ülesande põhjal post-hoc testid ja joonis.