Võrdlen eesti keele tasemeeksamite kirjutisi neljal keeleoskustasemel. Vaadeldavad tunnused on tekstis esindatud käänete arv (yld_kaanded) ja sidesõnade osakaal tekstis (J_osak).
print(tekstid %>% select(kood, keeletase, yld_kaanded, J_osak))
## # A tibble: 400 x 4
## kood keeletase yld_kaanded J_osak
## <chr> <dbl> <dbl> <dbl>
## 1 A2I_001-014 1 4 0.0256
## 2 A2I_001-015 1 7 0.0972
## 3 A2I_001-023 1 8 0.0263
## 4 A2I_001-025 1 7 0.0656
## 5 A2I_001-027 1 10 0.0933
## 6 A2II_001-010 1 7 0
## 7 A2II_001-025 1 6 0.0426
## 8 A2II_001-039 1 5 0.025
## 9 A2II_002-026 1 8 0.0698
## 10 A2II_002-042 1 7 0.0526
## # … with 390 more rows
Küsimus: Kas tekstis esindatud käänete arv erineb keeleoskustasemeti? Eeldus: Erinevus on olemas, sest keskmine käänete arv tasemeti on valimis u 6, 8, 9 ja 11. Dispersioonanalüüsi (ANOVA) tulemus: Tõenäosus, et käänete arv kõigil neljal tasemel on sarnane, on peaaegu olematu.
tekstid %>% group_by(keeletase) %>% summarise(keskmine=mean(yld_kaanded))
## # A tibble: 4 x 2
## keeletase keskmine
## <dbl> <dbl>
## 1 1 6.25
## 2 2 8.25
## 3 3 9.13
## 4 4 10.6
summary(aov(yld_kaanded~keeletase, data=tekstid))
## Df Sum Sq Mean Sq F value Pr(>F)
## keeletase 1 970.2 970.2 581.2 <2e-16 ***
## Residuals 398 664.5 1.7
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Edasine küsimus: Kas kõik tasemed erinevad üksteisest või ainult mõningad tasemed? Proovin kasutada Tukey järeltesti, kuid saan veateate, mis viitab, et “keeletase” ei sobi faktortunnuseks ehk grupeerivaks tunnuseks:
Error in TukeyHSD.aov(aov(yld_kaanded ~ keeletase, data = tekstid)) : no factors in the fitted model In addition: Warning message: In replications(paste(“~”, xx), data = mf) : non-factors ignored: keeletase
Muudan keeleoskustaseme arvtunnusest nimitunnuseks, et R käsitleks seda faktortunnusena.
tekstid <- tekstid %>%
mutate(keeletase=replace(keeletase, keeletase==1, "A2"),
keeletase=replace(keeletase, keeletase==2, "B1"),
keeletase=replace(keeletase, keeletase==3, "B2"),
keeletase=replace(keeletase, keeletase==4, "C1"))
ANOVA tulemus on endiselt sarnane, st gruppide sarnasuse tõenäosus ligi 0. Nüüd õnnestub ka Tukey järeltest. Kõik tasemed erinevad üksteisest olulisel määral. Eelkõige pakuvad huvi aga kõrvutiasetsevad tasemed: B1-A2, B2-B1, C1-B2.
summary(aov(yld_kaanded~keeletase, data=tekstid))
## Df Sum Sq Mean Sq F value Pr(>F)
## keeletase 3 991.9 330.6 203.7 <2e-16 ***
## Residuals 396 642.8 1.6
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(aov(yld_kaanded~keeletase, data=tekstid))
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = yld_kaanded ~ keeletase, data = tekstid)
##
## $keeletase
## diff lwr upr p adj
## B1-A2 2.00 1.5351382 2.464862 0e+00
## B2-A2 2.88 2.4151382 3.344862 0e+00
## C1-A2 4.35 3.8851382 4.814862 0e+00
## B2-B1 0.88 0.4151382 1.344862 9e-06
## C1-B1 2.35 1.8851382 2.814862 0e+00
## C1-B2 1.47 1.0051382 1.934862 0e+00
ANOVA eeldus on see, et tunnus on võrreldavates gruppides normaaljaotusega ja sarnase hajuvusega (erinevad üksteisest sarnasel määral). Normaaljaotuse eelduse suhtes on ANOVA üsna robustne - selle mittetäidetud mõjutab tulemusi vähe. Tulpdiagrammid viitavad siiski, et väärtused on koondunud enamjaolt keskmise ümber. Siin on toodud C1-taseme näide.
tekstid %>% filter(keeletase=="C1") %>% group_by(yld_kaanded) %>% summarise(kogus=n()) %>%
ggplot(aes(yld_kaanded, kogus)) + geom_col()
Hajuvuste sarnasuse väljaselgitamiseks kasutan Bartletti testi, mille jaoks ei pea eraldi paketti alla laadima. Kuna p väärtus on üle 0.05, siis võib lugeda gruppide hajuvuse sarnaseks. Ka karpdiagrammilt paistab, et kolmel tasemel on käänete arv sarnaselt jaotunud, rohkem erineb C1-tase.
bartlett.test(yld_kaanded~keeletase, data=tekstid)
##
## Bartlett test of homogeneity of variances
##
## data: yld_kaanded by keeletase
## Bartlett's K-squared = 5.4272, df = 3, p-value = 0.1431
tekstid %>% ggplot(aes(keeletase, yld_kaanded)) + geom_boxplot()
Küsimus nr 2: Kas sidesõnade osakaal tekstis erineb keeleoskustasemeti? Kui võrrelda keskmisi osakaalusid valimis, võib eeldada, et vähemalt osa tasemeid erineb üksteisest. Karpdiagramm viitab, et sidesõnade osakaal ei ole tasemeti sarnase hajuvusega.
tekstid %>% group_by(keeletase) %>% summarise(keskmine=mean(J_osak))
## # A tibble: 4 x 2
## keeletase keskmine
## <chr> <dbl>
## 1 A2 0.0509
## 2 B1 0.0802
## 3 B2 0.0946
## 4 C1 0.0888
tekstid %>% ggplot(aes(keeletase, J_osak)) + geom_boxplot()
Klassikalise dispersioonanalüüsi põhjal on gruppide vahel statistiliselt oluline erinevus, kuid Bartletti testi alusel ei ole sarnase hajuvuse eeldus täidetud.
summary(aov(J_osak~keeletase, data=tekstid))
## Df Sum Sq Mean Sq F value Pr(>F)
## keeletase 3 0.1134 0.03778 55.75 <2e-16 ***
## Residuals 396 0.2684 0.00068
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
bartlett.test(J_osak~keeletase, data=tekstid)
##
## Bartlett test of homogeneity of variances
##
## data: J_osak by keeletase
## Bartlett's K-squared = 47.522, df = 3, p-value = 2.691e-10
Järelikult tasub eelistada alternatiivset meetodit - Welchi ANOVAt, mis sarnast hajuvust ei eelda. Paigaldasin selleks paketi “onewaytests”, kuid siis avastasin, et Welchi ANOVAt võimaldab kasutada ka R-i sisseehitatud pakett “stats”. Tulemus on igatahes sama: rühmade vahel on erinevus olemas.
library(onewaytests)
welch.test(J_osak~keeletase, data=tekstid)
##
## Welch's Heteroscedastic F Test (alpha = 0.05)
## -------------------------------------------------------------
## data : J_osak and keeletase
##
## statistic : 45.46865
## num df : 3
## denom df : 213.2848
## p.value : 9.288152e-23
##
## Result : Difference is statistically significant.
## -------------------------------------------------------------
stats::oneway.test(J_osak~keeletase, data=tekstid)
##
## One-way analysis of means (not assuming equal variances)
##
## data: J_osak and keeletase
## F = 45.469, num df = 3.00, denom df = 213.28, p-value < 2.2e-16
Koos Welchi ANOVAga tuleks kasutada ka teistsugust järeltest, Games-Howelli testi. Seda võimalust pakub mitu R-i paketti. Mina laadisin neist alla paketi “userfriendlyscience”. Tulemus: erinevad A2- ja B1-tase ning B1- ja B2-tase, kuid mitte B2- ja C1-tase.
library(userfriendlyscience)
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
## Registered S3 methods overwritten by 'lme4':
## method from
## cooks.distance.influence.merMod car
## influence.merMod car
## dfbeta.influence.merMod car
## dfbetas.influence.merMod car
posthocTGH(y=tekstid$J_osak, x=tekstid$keeletase, method="games-howell")
## n means variances
## A2 100 0.051 0.00105
## B1 100 0.080 0.00088
## B2 100 0.095 0.00050
## C1 100 0.089 0.00028
## Registered S3 methods overwritten by 'ufs':
## method from
## grid.draw.ggProportionPlot userfriendlyscience
## pander.associationMatrix userfriendlyscience
## pander.dataShape userfriendlyscience
## pander.descr userfriendlyscience
## pander.normalityAssessment userfriendlyscience
## print.CramersV userfriendlyscience
## print.associationMatrix userfriendlyscience
## print.confIntOmegaSq userfriendlyscience
## print.confIntV userfriendlyscience
## print.dataShape userfriendlyscience
## print.descr userfriendlyscience
## print.ggProportionPlot userfriendlyscience
## print.meanConfInt userfriendlyscience
## print.multiVarFreq userfriendlyscience
## print.normalityAssessment userfriendlyscience
## print.scaleDiagnosis userfriendlyscience
## print.scaleStructure userfriendlyscience
## print.scatterMatrix userfriendlyscience
## diff ci.lo ci.hi t df p
## B1-A2 0.0293 0.01796 0.0407 6.7 197 <.01
## B2-A2 0.0438 0.03358 0.0540 11.1 175 <.01
## C1-A2 0.0380 0.02847 0.0474 10.4 149 <.01
## B2-B1 0.0144 0.00480 0.0240 3.9 183 <.01
## C1-B1 0.0086 -0.00026 0.0175 2.5 157 .06
## C1-B2 -0.0058 -0.01305 0.0014 2.1 184 .16