Seni oleme
Põhiliselt oleme tegelenud ühe tunnuse uurimise ja kirjeldamisega.
Nüüd liigume edasi kahe tunnuse vaheliste seoste juurde ning vaatleme korrelatsiooni. Korrelatsioon ehk sõltuvus tähendab, et ühe tunnuse muutus mingis kindlas suunas toob kaasa teise tunnuse muutuse kindlas suunas.
Tänased teemad:
1. Arvuliste tunnuste vaheline korrelatsioon
2. Mittearvuliste tunnuste vaheline korrelatsioon
Sõltuvust saab iseloomustada selle järgi, kas see on
set.seed(100)
x <- 1:100
y1 <- x + runif(100, 1, 100)
y2 <- log(y1)
y3 <- c(rev(y1[1:50]), y1[51:100])
par(mfrow = c(1, 3))
plot(x, y1, main = "Monotoonne lineaarne");abline(lm(y1~x))
plot(x, y2, main = "Monotoonne mittelineaarne");lines(predict(loess(y2~x)))
plot(x, y3, main = "Mittemonotoonne");lines(predict(loess(y3~x)))
Korrelatsioonikordaja näitab seose
Pideva normaaljaotusega tunnuste jaoks sobib Pearsoni korrelatsioonikordaja r.
Järjestustunnuste või mitte normaaljaotusega pidevatele tunnustele sobivad Spearmani korrelatsioonikordaja ρ ehk astakkkorrelatsioonikordaja ning Kendalli korrelatsioonikordaja τ.
On ka muid valikuid, millest siin kursusel juttu ei tule, nt Goodmani-Kruskali gamma, Somersi D, neljavälja korrelatsioonikordaja ja veel palju muud.
Korrelatsioonikordaja väärtused on tavaliselt vahemikus [-1;1]. Väärtus 1 tähendab, et tegemist on täpse positiivse korrelatsiooniga, -1 tähendab, et tegemist on täpse negatiivse korrelatsiooniga, 0 tähendab, et korrelatsiooni pole.
Pearsoni korrelatsioonikordaja sobib, kui
set.seed(20)
m <- 1:10
n1 <- 4*m
n2 <- -4*m
n3 <- m
n4 <- runif(10, 1, 10)
n5 <- rnorm(10, 6.6, 3.5)
n6 <- rnorm(10, mean(m), sd(m))
par(mfrow = c(3, 2))
plot(m, n1, main = paste("r = ", round(cor(m, n1), 1)));abline(lm(n1~m))
plot(m, n2, main = paste("r = ", round(cor(m, n2), 1)));abline(lm(n2~m))
plot(m, n3, main = paste("r = ", round(cor(m, n3), 1)), ylim = c(0, 40));abline(lm(n3~m))
plot(m, n4, main = paste("r = ", round(cor(m, n4), 1)));abline(lm(n4~m))
plot(m, n5, main = paste("r = ", round(cor(m, n5), 1)));abline(lm(n5~m))
plot(m, n6, main = paste("r = ", round(cor(m, n6), 1)));abline(lm(n6~m))
Omadused:
1^2*100
ehk 100% teise tunnuse muutumisest; kui r = -0.5, kirjeldab ühe tunnuse muutumine ära (-0.5)^2*100
ehk 25% teise tunnuse muutumisest.Seose tugevus:
Selle, millisest väärtusest alates tegelikult seost tugevaks pidada, määravad tihtipeale ära valdkond, uurimisküsimus, andmed vm tegurid, seega tuleb seose tugevust tõlgendada alati kontekstuaalselt.
Pearsoni korrelatsioonikordaja on väga tundlik erindite suhtes!
# install.packages("MASS")
library(MASS)
set.seed(10)
test <- mvrnorm(n = 10, mu = c(5,5), Sigma = matrix(c(1,0,0,1), nrow = 2), empirical = TRUE)
a <- test[, 1]
b <- test[, 2]
cor(a,b)
## [1] 6.01236e-16
## [1] 0.8700447
par(mfrow = c(1,2))
plot(b~a, xlim = c(0,20), ylim = c(0,20), main = "r = 0");abline(lm(b~a))
plot(b2~a2, xlim = c(0,20), ylim = c(0,20), main = "r = 0.87");abline(lm(b2~a2))
Loeme sisse andmestiku ldt.csv
paketist Rling
, mis on lisamaterjal Natalia Levshina õpikule “How to do linguistics with R” (2015). Andmestik sisaldab 100 juhuslikult valitud sõna the English Lexicon Projecti andmebaasist (Balota jt 2007). ELP sisaldab katselisi ja kirjeldavaid andmeid (nt sõna pikkus, sagedus, ortograafiliste naabrite arv, konkreetsus/abstraktsus, sõnaliik, sõna keskmine äratundmisaeg, sõna keskmine nimetamisaeg jpm) enam kui 40 000 inglise keele sõna kohta, samuti andmeid väljamõeldud sõnade kohta.
ldt <- read.csv("ldt.csv")
head(ldt)
## X Length Freq Mean_RT
## 1 marveled 8 131 819.19
## 2 persuaders 10 82 977.63
## 3 midmost 7 0 908.22
## 4 crutch 6 592 766.30
## 5 resuspension 12 2 1125.42
## 6 efflorescent 12 9 948.33
Selles andmestikus on ainult 5 tunnust: X
(sõna ise), Length
(sõna pikkus tähemärkides), Freq
(sõna sagedus HAL korpuses), Mean_RT
(keskmine reaktsiooniaeg millisekundites sõna-mittesõna äratundmisel).
Tahaksime teada, kas sõna-mittesõna otsuse tegemiseks kuluv aeg sõltub sõna pikkusest. Meie hüpotees on, et pikemate sõnade äratundmiseks kuluv aeg on pikem.
Lisame ka regressioonijoone, mis lihtsustatult öeldes näitab üldist suundumust andmetes. Regressioonist tuleb pikemalt juttu järgmises praktikumis.
# Sama asi ggplotiga
library(ggplot2)
ggplot(data = ldt,
aes(x = Length, y = Mean_RT)) +
geom_point(shape = 1, size = 3) +
stat_smooth(method = lm,
se = FALSE,
col = "red")
Tundub, et tegemist on positiivse monotoonse korrelatsiooniga: mida pikem on sõna, seda rohkem aega kulub otsustamiseks, kas tegemist on sõna või mitte-sõnaga.
Leiame Pearsoni korrelatsioonikordaja. Mida selle väärtus näitab?
cor(ldt$Mean_RT, ldt$Length)
## [1] 0.6147456
# või
cor(ldt$Mean_RT, ldt$Length,
use = "everything",
method = "pearson")
## [1] 0.6147456
Näeme jooniselt, et andmestikus tundub olevat paar sõna, mille reaktsiooniaeg on eriti pikk (üle 1200 ms). Kontrollime, kas need võivad olla erindid ja seega meie korrelatsioonikordajat mõjutada.
Vaatame, mis korrelatsioonikordajaga juhtub, kui viskame erindid andmestikust välja.
# Joonistame algsele joonisele ldt andmestikust
# veel ühe regressioonijoone ldt1 andmestiku põhjal
plot(Mean_RT ~ Length, ldt)
abline(lm(Mean_RT~Length, ldt), col = "red")
abline(lm(Mean_RT~Length, ldt1), col = "blue", lty = "dashed")
Näeme, et regressioonijoone kalle muutub laugemaks ning tegelikult väheneb ka korrelatsiooni tugevus.
Selleks, et olla kindlam selles, et korrelatsioonikordaja näitab olulist seost ka mõnes teises üldkogumist juhuslikult võetud valimis, tuleb testida korrelatsioonikordaja statistilist olulisust. Selle testimisel on mitmeid eeldusi:
Valimi juhuslikkus (1) on antud juhul täidetud ning mõlemad tunnused on tõepoolest vähemalt intervallskaalal (2). Teiste eelduste jaoks peame kasutama juba tegelikult lineaarse regressiooni mudelit funktsiooniga lm(y~x)
.
3. Normaaljaotuse kontrollimine.
# Kuna andmestik on suur (N > 30), peame kontrollima ainult
# tunnuste ühisjaotust.
# install.packages("energy")
library(energy)
# Funktsiooni sisendiks on maatriks,
# seega peame andmestiku tulbad
# kombineerima maatriksiks nt käsuga cbind.
# H0: ühisjaotus on normaaljaotusega,
# H1: ühisjaotus ei ole normaaljaotusega
mvnorm.etest(cbind(ldt1$Length, ldt1$Mean_RT),
R = 999)
##
## Energy test of multivariate normality: estimated parameters
##
## data: x, sample size 97, dimension 2, replicates 999
## E-statistic = 0.48503, p-value = 0.8899
# Iga kord saab natuke erineva väärtuse!
Nagu ka Shapiro-Wilk’i testi puhul on siin nullhüpoteesiks, et andmete ühisjaotus läheneb normaaljaotusele. Seega näitab suur p-väärtus siin, et peame jääma selle nullhüpoteesi juurde ning tõdeme, et normaaljaotuse eeldusega on kõik hästi.
4. Jääkide dispersiooni kontrollimine. Jäägid on iga vaatluse kaugus regressioonijoonest (samades ühikutes, mis y-teljel olev tunnus).
# Vaatleme kaht suvalist arvulist tunnust q ja w1
set.seed(1)
q <- 1:50
w1 <- q + runif(50, 1, 50)
plot(w1 ~ q);abline(lm(w1 ~ q), col = "red")
for (i in w1) {
indeks <- which(w1 == i)
lines(rep(q[indeks],
length(w1[indeks]:lm(w1~q)$fitted[indeks])),
w1[indeks]:lm(w1~q)$fitted[indeks],
lty = "dashed")
}
# Tegelikud y-teljel oleva tunnuse väärtused
head(w1)
## [1] 15.00992 21.23407 32.06981 49.50218 15.88241 51.02109
# Regressioonijoone y-teljel oleva tunnuse väärtused
ennustatud <- lm(w1 ~ q)$fitted
head(ennustatud)
## 1 2 3 4 5 6
## 26.95910 28.00554 29.05199 30.09844 31.14488 32.19133
# Leiame jäägid ja kuvame need graafikul
resid <- w1-ennustatud
par(mfrow = c(1,2))
plot(q, resid, main = "Homoskedastiline jaotumine")
plot(q, resid*q, main = "Heteroskedastiline jaotumine")
Kui jääkide dispersioon on homoskedastiline, siis on iga x-teljel oleva tunnuse väärtuse puhul jääkide hajuvus ühesugune. Kui jääkide dispersioon on heteroskedastiline, siis märkame enamasti lehtrikujulist jaotust: y-teljel oleva tunnuse väärtused ei kasva/kahane x-telje igas vahemikus ühtmoodi ning mingite x-telje väärtuste puhul on y-telje väärtused üksteisest palju erinevamad kui mingite teiste x-telje väärtuste puhul.
Vaatleme nüüd pikkuse ja reaktsiooniaja jääke.
teg <- ldt1$Mean_RT
enn <- lm(ldt1$Mean_RT ~ ldt1$Length)$fitted
res <- teg-enn
plot(ldt1$Length, res)
Jääkide homoskedastilisuse kontrollimiseks on kindlam kasutada testi ncvTest
paketist car
.
# install.packages("car")
library(car)
# H0: jääkide dispersioon on homoskedastiline
# H1: jääkide dispersioon on heteroskedastiline
ncvTest(lm(ldt1$Mean_RT ~ ldt1$Length))
## Non-constant Variance Score Test
## Variance formula: ~ fitted.values
## Chisquare = 1.243717, Df = 1, p = 0.26476
Kuna p > 0.05, siis saame öelda, et ka jääkide homosekdastilisusega on kõik korras.
5. Jääkide sõltumatus
# library(car)
# H0: autokorrelatsiooni jääkide vahel ei ole
# H1: autokorrelatsioon jääkide vahel eksisteerib
durbinWatsonTest(lm(ldt1$Mean_RT ~ ldt1$Length))
## lag Autocorrelation D-W Statistic p-value
## 1 0.03234626 1.923466 0.682
## Alternative hypothesis: rho != 0
# Iga kord saab natuke erineva väärtuse!
Kuna p > 0.05, siis jääme nullhüpoteesi juurde, mille järgi jääkide vahel ei ole autokorrelatsiooni. Seega ei sõltu tunnuse väärtus tunnuse eelmisest väärtusest (= ühe mingi pikkusega sõna reaktsiooniaeg ei sõltu sellele eelnevast mingi pikkusega sõna reaktsiooniajast). Jääkide autokorrelatsiooni võib ette tulla tunnuste puhul, kus muutus on järk-järguline (nt temperatuur), aegridade analüüsis, aga ka juhul, kui nt ühelt subjektilt on mitu vaatlust. Autokorrelatsiooni testimisel tuleb hoolikas olla ka nt andmete sorteerimisega!
durbinWatsonTest(lm(sort(ldt1$Mean_RT) ~ sort(ldt1$Length)))
## lag Autocorrelation D-W Statistic p-value
## 1 0.6504728 0.6412619 0
## Alternative hypothesis: rho != 0
Kui oleme kindlad, et andmestik vastab kõikidele eeldustele, siis saame testida kordaja olulisust. Nagu ka t-testi puhul, võib valida, kas teeme ühepoolse või kahepoolse testi. Kui eeldame, et korrelatsioon on positiivne ehk sisukas hüpotees on, et korrelatsioonikordaja > 0, siis teeme ühepoolse hüpoteesi ja lisame alternative = “greater”. Kui eeldame, et korrelatsioon on negatiivne (korrelatsioonikordaja < 0), siis lisame alternative = “less”. NB! Funktsiooni cor.test()
argumendid on kujul x, y
, mitte y ~ x
.
cor.test(ldt1$Length, ldt1$Mean_RT, alternative="greater")
##
## Pearson's product-moment correlation
##
## data: ldt1$Length and ldt1$Mean_RT
## t = 7.0965, df = 95, p-value = 1.145e-10
## alternative hypothesis: true correlation is greater than 0
## 95 percent confidence interval:
## 0.4667205 1.0000000
## sample estimates:
## cor
## 0.5886011
# vrd cor(ldt1$Length, ldt1$Mean_RT)
Saame sama korrelatsioonikordaja, mis funktsiooni cor()
puhul. Korrelatsioon on seega positiivne ja väga tugev. p-väärtus 1.145e-10 ehk 0.0000000001145 näitab, et korrelatsioon on statistiliselt oluline ehk kehtib tõenäoliselt ka üldkogumis.
Sobivad, kui
Omadused:
Spearmani ja Kendalli korrelatsioonikordaja olulisuse testimisel on kaks eeldust:
Ilmselgelt peab tegemist olema ka monotoonse seosega, vastasel juhul ei ole korrelatsioonikordajal mingit sisu.
Vaatleme näiteks, kas eesti ja üldkeeleteaduse instituudis aastatel 1994-2019 kaitstud doktoritööd on läinud aastatega mahukamaks?
dr <- read.csv("DISSERTATIONES_PHILOLOGIAE_ESTONICAE.txt", encoding = "UTF-8", head = TRUE, sep = "\t")
plot(dr$aasta, dr$lk);abline(lm(dr$lk~dr$aasta))
Kontrollime, kas tunnused on normaaljaotusega.
Kuna tunnused ei ole kumbki normaaljaotusega, oleks parem kasutada Spearmani või Kendalli korrelatsioonikordajat.
cor.test(dr$aasta, dr$lk, method = "spearman", alternative = "greater")
## Warning in cor.test.default(dr$aasta, dr$lk, method = "spearman", alternative =
## "greater"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dr$aasta and dr$lk
## S = 11709, p-value = 0.1282
## alternative hypothesis: true rho is greater than 0
## sample estimates:
## rho
## 0.1748364
Nende andmete põhjal ei saa me väita, et korrelatsioon oleks ei tugev ega ka statistiliselt oluline.
Aga kas pealkirjad on läinud pikemaks?
cor.test(dr$aasta, dr$pealp,
method = "spearman",
alternative = "greater")
## Warning in cor.test.default(dr$aasta, dr$pealp, method = "spearman", alternative
## = "greater"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: dr$aasta and dr$pealp
## S = 9518.3, p-value = 0.01455
## alternative hypothesis: true rho is greater than 0
## sample estimates:
## rho
## 0.3292281
Arvutame ka Kendalli tau.
cor.test(dr$aasta, dr$pealp,
method = "kendall",
alternative = "greater")
## Warning in cor.test.default(dr$aasta, dr$pealp, method = "kendall", alternative
## = "greater"): Cannot compute exact p-value with ties
##
## Kendall's rank correlation tau
##
## data: dr$aasta and dr$pealp
## z = 2.0749, p-value = 0.019
## alternative hypothesis: true tau is greater than 0
## sample estimates:
## tau
## 0.2240774
Kumba valida? Selle üle vaieldakse ja tavaliselt valitakse see, mis vastavas uurimisvaldkonnas tavaks on. Samas ütlevad mõned, et kui andmestik on väike ja mitmed tunnused on samade väärtustega, siis peaks eelistama Kendalli korrelatsioonikordajat.
Vaatame veel lõpuks, kas meil oli tegu ikka puhtalt monotoonse seosega.
Eeldused | Pearson | Spearman või Kendall |
---|---|---|
Juhuslikud valimid | Jah | Jah |
Sõltumatud vaatlused | Jah | Jah |
Jääkide vahel ei ole autokorrelatsiooni |
Jah | Jah |
Vähemalt …skaalal tunnus | intervall- | järjestus- |
Normaaljaotus (või n>30) | Jah | Ei |
Jääkide ühtlane hajuvus | Jah | Ei |
Lineaarne suhe | Jah | Ei |
#Andmestik Euroopa linnade meelelahutuskohtade, söögikohtade,
# vaatamisväärsuste jm hinnangute kohta.
load(url("http://www.ms.ut.ee/mart/andmeteadus/ratings.RData"))
head(ratings)
## restoranid pitsa pagarid kohvikud baarid tantsuklubid rannad ujulad spa
## 1 2.33 1.69 0.5 0 2.64 0.59 3.63 0.5 0
## 2 2.33 1.69 0.5 0 2.65 0.59 3.63 0.5 0
## 3 2.33 1.69 0.5 0 2.64 0.59 3.63 0.5 0
## 4 2.33 1.69 0.5 0 2.64 0.59 3.63 0.5 0
## 5 2.33 1.69 0.5 0 2.64 0.59 3.63 0.5 0
## 6 2.33 1.69 0.5 0 2.65 0.59 3.63 0.5 0
## spordikeskus aiad pargid vaatekohad kirikud muuseumid kunstigaleriid teatrid
## 1 0 0 3.65 0 0 2.92 1.74 5
## 2 0 0 3.65 0 0 2.92 1.74 5
## 3 0 0 3.63 0 0 2.92 1.74 5
## 4 0 0 3.63 0 0 2.92 1.74 5
## 5 0 0 3.63 0 0 2.92 1.74 5
## 6 0 0 3.63 0 0 2.92 1.74 5
## poed majutus
## 1 5 1.70
## 2 5 1.70
## 3 5 1.70
## 4 5 1.70
## 5 5 1.70
## 6 5 1.69
korrelatsioonid <- cor(ratings, use = "pairwise.complete.obs")
# install.packages("corrplot")
library(corrplot)
corrplot(korrelatsioonid,
type = "upper",
diag = FALSE)
Mida tumedam ja suurem on ring, seda tugevam on kahe tunnuse vaheline sõltuvus (sinisega positiivne, punasega negatiivne).
Mittearvuliste tunnuste vahelise sõltuvuse hindamiseks võib kasutada nt hii-ruut-testi või Fisheri testi, mis töötavad kahemõõtmeliste sagedustabelite ehk risttabelite peal (see ei tähenda aga, et sisendiks peaks tingimata olema risttabel).
Hii-ruut-test (chi-squared test) on statistiline test, millega saab hinnata kahe kategoriaalse tunnuse sõltuvust. Test töötab risttabeliga, milles on lihtsagedused (mitte suhtelised ega normaliseeritud sagedused).
Vaatleme näitena andmeid Ann Siimani artiklist “Ainsuse sisseütleva vormi valiku seos morfosüntaktiliste ja semantiliste tunnustega - materjali ning meetodi sobivus korpusanalüüsiks” (2015), kus ta kasutas hii-ruut-testi, et selgitada välja, millest sõltub see, kas kasutatakse lühikest sisseütleva käände vormi ehk aditiivi (majja) või pikka sisseütleva käände vormi ehk illatiivi (majasse).
Uurime siin esmalt, kas käände vormi valik sõltub sellest, kas tegemist on pärisnime või üldnimega (nt Amblasse vs. ajajärku).
# Koostame esmalt risttabeli.
tab <- matrix(c(43, 77, 377, 343),
nrow = 2,
dimnames = list(c("Aditiiv", "Illatiiv"),
c("Pärisnimi", "Üldnimi")))
tab
## Pärisnimi Üldnimi
## Aditiiv 43 377
## Illatiiv 77 343
Risttabelit saab mõistagi teha ka andmestiku tunnustest, nt table(andmed$tunnus1, andmed$tunnus2)
.
Visualiseerime tabelit.
par(mfrow = c(1, 2))
barplot(tab,
col = c("gold1", "grey50"),
legend.text = c("aditiiv", "illatiiv"),
beside = TRUE,
args.legend = list(x = "topleft"))
barplot(prop.table(tab, margin = 2),
col = c("gold1", "grey50"))
Vaadeldud/tegelikud (observed) sagedused on tegelikud sagedused igas tabeli lahtris.
Oodatud/teoreetilised (expected) sagedused leitakse valemiga reasumma*veerusumma/kogusumma. Teoreetilised sagedused eeldavad, et andmed on ühtlaselt jaotunud ja kehtib nullhüpotees, et tunnuse väärtused on juhuslikud ja kaks tunnust ei ole üksteisest sõltuvad. Mida suurem on tegelike sageduste erinevus oodatud sagedustest, seda suurem on ka hii-ruut-statistiku väärtus.
addmargins(tab)
## Pärisnimi Üldnimi Sum
## Aditiiv 43 377 420
## Illatiiv 77 343 420
## Sum 120 720 840
# Näiteks illatiivis pärisnimede oodatud sagedus oleks
addmargins(tab)[7]*addmargins(tab)[3]/addmargins(tab)[9]
## [1] 60
chisq.test(tab)$expected # teoreetilised sagedused
## Pärisnimi Üldnimi
## Aditiiv 60 360
## Illatiiv 60 360
Hii-ruut-testi eeldused:
Teeme nüüd päriselt hii-ruut-testi. Vaikimisi tehakse test Yates’i pidevuse parandusega, mis püüab parandada sellest tekkivat viga, et diskreetset jaotust püütakse lähendada pideva jaotusega. Selle kasutamise kohta on palju vastuolulisi arvamusi, aga teeme esialgu testi ilma pidevusparanduseta (correct = FALSE
).
# H0: tunnuste väärtused on saadud juhuslikult ehk
# kaks tunnust ei ole omavahel sõltuvad.
# H1: tunnuste väärtused ei ole saadud juhuslikult ehk
# kaks tunnust on omavahel sõltuvuses.
chisq.test(tab, correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 11.239, df = 1, p-value = 0.000801
Hii-ruut-statistik leitakse valemiga \(x^2 = \sum \frac{(o-e)^2}{e}\) ehk
Testi p-väärtus näitab tõenäosust, et saaksime sama ekstreemse statistiku väärtuse juhul, kui tunnuste vahel ei oleks mingit seost. Kuna p-väärtus on siin väga väike, võime hüljata nullhüpoteesi ja võtta vastu sisuka hüpoteesi, mille kohaselt kaks tunnust on omavahel sõltuvuses.
Vaatame ka, millised erinevused tegelike ja oodatud sageduste vahel on olulised. Selleks vaatleme taas jääke, mida siin arvutatakse valemiga \(\frac{(o-e)}{\sqrt{e}}\).
# Näiteks illatiivis pärisnimede jääk oleks
(t$observed[1]-t$expected[1])/sqrt(t$expected[1])
## [1] -2.194691
# Jäägid saab kätte ka testi väljundist
t$residuals
## Pärisnimi Üldnimi
## Aditiiv -2.194691 0.8959787
## Illatiiv 2.194691 -0.8959787
Kui jääk on positiivne, on tegelik sagedus suurem kui oodatud. Kui jääk on negatiivne, on tegelik sagedus väiksem kui oodatud.
Teeme jääkide graafiku.
Jääkide graafikul on helesinisega märgitud positiivne jääk vahemikus 2 kuni 4 (meie graafikul illatiivis pärisnimed) ja tumesinisega sellest suurem positiivne jääk (4+, meie graafikul puudub). Helepunasega on märgitud negatiivne jääk vahemikus -2 kuni -4 (meie graafikul aditiivis pärisnimed) ja tumepunasega sellest suurem negatiivne jääk (väiksem kui -4, meie graafikul puudub).
Graafikul on samuti kujutatud kõikide lahtrite, ridade ja veergude osakaalud tabelis. Näiteks on pärisnimesid mõlema käändevormiga oluliselt vähem kui üldnimesid.
Selleks, et näha, millised jäägid esindavad olulist erinevust oodatud sagedustest, vaatame standardiseeritud jääke. Standardiseeritud jäägid on erinevus tegeliku ja oodatud sageduse vahel, mis on jagatud
Kui olulisuse nivoo on 0.05, siis on statistiliselt olulised need jäägid, mis on suuremad kui 1.96 või väiksemad kui -1.96 (tihti ümardatakse ka 2 ja -2).
Mida teha siis, kui andmestikus on teoreetilised (!) sagedused, mis on < 5 või lausa 0? Tihti räägitakse, et sellistel juhtudel hii-ruut-test ei sobi.
Alternatiiv on Fisheri täpne test:
Vaatleme nüüd käändevormi sõltuvust sellest, millise sõnaliigiga on tegemist.
tab2 <- matrix(c(4, 4, 2, 6, 389, 391, 25, 19),
nrow = 2, ncol = 4,
dimnames = list(c("Aditiiv", "Illatiiv"),
c("Arvsõna", "Asesõna", "Nimisõna", "Omadussõna")))
tab2
## Arvsõna Asesõna Nimisõna Omadussõna
## Aditiiv 4 2 389 25
## Illatiiv 4 6 391 19
chisq.test(tab2)
## Warning in chisq.test(tab2): Chi-squared approximation may be incorrect
##
## Pearson's Chi-squared test
##
## data: tab2
## X-squared = 2.8233, df = 3, p-value = 0.4197
t2 <- chisq.test(tab2)
## Warning in chisq.test(tab2): Chi-squared approximation may be incorrect
t2$expected
## Arvsõna Asesõna Nimisõna Omadussõna
## Aditiiv 4 4 390 22
## Illatiiv 4 4 390 22
fisher.test(tab2)
##
## Fisher's Exact Test for Count Data
##
## data: tab2
## p-value = 0.4329
## alternative hypothesis: two.sided
Vali Fisheri test, kui
Muudel juhtudel sobib kasutamiseks siiski ka hii-ruut-test.
Ruuttabeli (2x2, 3x3, 4x4 jne) puhul on Craméri V ja φ-kordaja samad ja vahemikus [0,1].
NB! Seose tugevuse hindamine ei käi samadel alustel nagu korrelatsioonikordajate puhul. Samuti ei näita Craméri V ega φ-kordaja seose suunda.
Suuremate (mitteruut)tabelite puhul võivad hakata kordajate väärtused erinema. Craméri V jääb alati vahemikku [0,1], φ-kordaja kordaja väärtus võib minna ka üle 1.
Tavaliselt kasutatakse 2x2 tabelist suuremate tabelite puhul Craméri V-d, sest see on võrreldav ka eri suurustega tabelite korral.
# install.packages("vcd")
library(vcd)
## Loading required package: grid
assocstats(tab)
## X^2 df P(> X^2)
## Likelihood Ratio 11.373 1 0.00074531
## Pearson 11.239 1 0.00080101
##
## Phi-Coefficient : 0.116
## Contingency Coeff.: 0.115
## Cramer's V : 0.116
Tegemist on pigem nõrga seosega.
cor()
.
cor.test()
), kui
shapiro.test()
, energy::mvnorm.etest()
),car::ncvTest()
),car::durbinWatsonTest()
).cor.test()
), kui
vcd::mosaic()
ja vcd::assoc()
, samuti näeb seda standardiseeritud jääkidest.vcd::assocstats()
).