Arvuliste andmete kirjeldamine ja visualiseerimine
Kasutame esimeses praktikumis läbi viidud küsitluse andmestikku.
Aritmeetilise keskmise leidmiseks on R-is käsk mean()
.
Üldiselt on selle käsu sisendiks arvuline vektor (või maatriks).
Plussid:
Miinused:
Juhul, kui andmed on tabelis ja tahame ühe arvuliste väärtuste tulba keskmist, siis peame selle tabelist vektorina välja tõmbama. Selleks on R-i süntaksis kolm varianti (mis annavad sama tulemuse):
# tulba indeks nurksulgudes
kysimustik[,1]
# tulba nimi nurksulgudes
kysimustik[,"synniaasta"]
# tabel$tulp
kysimustik$synniaasta
Küsimustikule vastanud üliõpilaste keskmine sünniaeg.
## [1] 1992.24
Keskmine ülikoolis õpitud aeg:
## [1] 5.826923
Juhul, kui andmete hulgas on NA
väärtusi, siis on
tulemus ka NA
, aga kui tahame teadaolevate väärtuste
keskmist väärtust ikkagi teada saada, siis tuleks lisada käsule argument
na.rm=T
.
Käsk mean()
annab alati kogu sisendiks olevate väärtuste
kohta ühe keskmise. Tihti on meil aga andmestikus mingi kategoriseeriv
tunnus, mille alusel me tahaksime andmeid rühmitada ja saada iga rühma
keskmist väärtust. Näiteks võime me tahta teada iga eriala keskmist
õppimisaega. Selleks võime kõigepealt andmetest vastava alamosa
(subseti) välja võtta ja mean()
käsku ainult
korraga ühele alamosale rakendada:
mean(kysimustik[kysimustik$oppekava == "ajalugu", "kaua_opid"])
mean(kysimustik$kaua_opid[kysimustik$oppekava == "eesti ja soome-ugri keeleteadus"])
# ... jne
Kuna andmestikus on erinevaid õppekavasid 22 tükki, siis ükshaaval neid läbi käia on küllaltki tüütu. Et keskmised õppekavade kaupa ühe korraga kätte saada, on mitmeid võimalusi. Üks võimalus, mis Pythoni kasutajatele võiks tuttav olla, oleks teha tsükkel, mis käib õppekavad läbi ja arvutab keskmise.
for(i in levels(kysimustik$oppekava)){
keskmine <- mean(kysimustik$kaua_opid[kysimustik$oppekava == i])
print(paste0("Õppekaval ", i, " keskmine õppimisaeg on ", keskmine, " aastat."))
}
R-is saab ka kombineerida mean()
käsku
apply()
käsuga. Keskmine ülikoolis õpitud aeg erialati:
# tapply(vektor_väärtustega, vektor_rühmadega, käsk_mida_rühmiti_väärtustele_rakendada)
tapply(kysimustik$kaua_opid, kysimustik$oppekava, mean)
## ajalugu eesti ja soome-ugri keeleteadus
## 4.000000 5.976190
## euroopa keeled ja kultuurid filosoofia
## 2.666667 7.750000
## geenitehnoloogia germaani-romaani filoloogia
## 3.000000 13.000000
## hispaania keel inglise keel
## 1.000000 3.333333
## keeleteadus kirjandus
## 5.125000 5.000000
## klassikaline filoloogia majandusteadus
## 6.000000 15.000000
## matemaatiline statistika riigiteadused
## 1.000000 2.000000
## romanistika semiootika ja kultuuriteooria
## 3.000000 3.000000
## skandinavistika sotsioloogia
## 4.000000 10.000000
## tõlkeõpetus täiendusõpe
## 12.000000 14.400000
## usuteadus õigusteadus
## 7.250000 8.000000
Ja sama asja saab tidyverse
ja flextable
pakettidega. tidyverse
paketist tuleb juttu ülejärgmises
praktikumis, mistõttu siin pikemalt selle süntaksil ei peatu.
library(tidyverse)
library(flextable)
kysimustik %>%
group_by(Õppekava = oppekava) %>%
summarise(Keskmine = round(mean(kaua_opid),1)) %>%
flextable() %>%
set_table_properties( layout = "autofit") %>%
set_caption(caption = "Keskmine õppimisaeg õppekavade kaupa.")
Õppekava | Keskmine |
---|---|
ajalugu | 4.0 |
eesti ja soome-ugri keeleteadus | 6.0 |
euroopa keeled ja kultuurid | 2.7 |
filosoofia | 7.8 |
geenitehnoloogia | 3.0 |
germaani-romaani filoloogia | 13.0 |
hispaania keel | 1.0 |
inglise keel | 3.3 |
keeleteadus | 5.1 |
kirjandus | 5.0 |
klassikaline filoloogia | 6.0 |
majandusteadus | 15.0 |
matemaatiline statistika | 1.0 |
riigiteadused | 2.0 |
romanistika | 3.0 |
semiootika ja kultuuriteooria | 3.0 |
skandinavistika | 4.0 |
sotsioloogia | 10.0 |
tõlkeõpetus | 12.0 |
täiendusõpe | 14.4 |
usuteadus | 7.2 |
õigusteadus | 8.0 |
Mediaan on variatsioonirea keskmine: kui kõik vaatlused panna kasvavasse järjekorda, siis mediaan on keskmiseks jääv vaatlus (paarisarvu vaatluste korral kahe keskmise keskmine).
# Sünniaasta mediaan
median(kysimustik$synniaasta)
# Kontrollime. Sorteerime
# sünniaastad kasvavalt
sort(kysimustik$synniaasta)
Plussid:
Miinused:
Proovime ühe lühema vektori peal:
arvud = c(1,2,3,4,5,7,9,11,13)
length(arvud) # üheksa arvu, seega mediaan on suurusejärjekorras 5. väärtus
## [1] 9
## [1] 6.111111
## [1] 5
## [1] 169.1111
## [1] 5
Sünniaasta mediaan:
## [1] 1994.5
Ülikoolis õpitud aja mediaan:
## [1] 4
Ja seda saab sama moodi kombineerida tapply()
käsuga:
## ajalugu eesti ja soome-ugri keeleteadus
## 3.0 5.0
## euroopa keeled ja kultuurid filosoofia
## 3.0 7.5
## geenitehnoloogia germaani-romaani filoloogia
## 3.0 13.0
## hispaania keel inglise keel
## 1.0 3.0
## keeleteadus kirjandus
## 4.0 5.0
## klassikaline filoloogia majandusteadus
## 6.0 15.0
## matemaatiline statistika riigiteadused
## 1.0 2.0
## romanistika semiootika ja kultuuriteooria
## 3.0 3.0
## skandinavistika sotsioloogia
## 4.0 10.0
## tõlkeõpetus täiendusõpe
## 12.0 14.0
## usuteadus õigusteadus
## 5.5 8.0
Ja lisame mediaani ka tidyverse
paketiga tabelisse:
kysimustik %>%
group_by(Õppekava = oppekava) %>%
summarise(Osalejaid = n(),
Keskmine = round(mean(kaua_opid),1),
Mediaan = round(median(kaua_opid), 1)) %>%
flextable() %>%
set_table_properties( layout = "autofit") %>%
set_caption(caption = "Keskmine õppimisaeg õppekavade kaupa.")
Õppekava | Osalejaid | Keskmine | Mediaan |
---|---|---|---|
ajalugu | 12 | 4.0 | 3.0 |
eesti ja soome-ugri keeleteadus | 42 | 6.0 | 5.0 |
euroopa keeled ja kultuurid | 3 | 2.7 | 3.0 |
filosoofia | 4 | 7.8 | 7.5 |
geenitehnoloogia | 1 | 3.0 | 3.0 |
germaani-romaani filoloogia | 1 | 13.0 | 13.0 |
hispaania keel | 2 | 1.0 | 1.0 |
inglise keel | 9 | 3.3 | 3.0 |
keeleteadus | 8 | 5.1 | 4.0 |
kirjandus | 1 | 5.0 | 5.0 |
klassikaline filoloogia | 2 | 6.0 | 6.0 |
majandusteadus | 1 | 15.0 | 15.0 |
matemaatiline statistika | 1 | 1.0 | 1.0 |
riigiteadused | 1 | 2.0 | 2.0 |
romanistika | 1 | 3.0 | 3.0 |
semiootika ja kultuuriteooria | 2 | 3.0 | 3.0 |
skandinavistika | 1 | 4.0 | 4.0 |
sotsioloogia | 1 | 10.0 | 10.0 |
tõlkeõpetus | 1 | 12.0 | 12.0 |
täiendusõpe | 5 | 14.4 | 14.0 |
usuteadus | 4 | 7.2 | 5.5 |
õigusteadus | 1 | 8.0 | 8.0 |
Kui mediaan on see keskmine punkt andmete jaotusest, millest nii suuremaid kui ka väiksemaid väärtusi on sama palju, siis samamoodi võib andmestikku vaadelda ka muudest punktidest. Need punktid, mis andmestikku sel viisil võrdseteks osadeks jagavad, on kvantiilid.
Andmestikku võib jagada aga ka vähemateks või enamateks osadeks.
# Jaga andmestik kaheks võrdseks osaks
quantile(kysimustik$synniaasta,
probs = c(0, 1/2, 2/2))
# Jaga andmestik kolmeks võrdseks osaks
quantile(kysimustik$synniaasta,
probs = c(0, 1/3, 2/3, 3/3))
# Jaga andmestik seitsmeks võrdseks osaks
quantile(kysimustik$synniaasta,
probs = c(0, 1/7, 2/7, 3/7,
4/7, 5/7, 6/7, 7/7))
# Jaga andmestik kümneks võrdseks osaks
quantile(kysimustik$synniaasta,
probs = c(0, 1/10, 2/10, 3/10,
4/10, 5/10, 6/10, 7/10,
8/10, 9/10, 10/10))
Siin näites on osad esitatud murruna, aga probs
väärtuse
võib sisestada ka kümnendmurruna.
## [1] 1994.5
## 50%
## 1994.5
## 50%
## 1994.5
25%, 50% ja 75% kvantiile nimetatakse kvartiilideks selle järgi, et need jagavad andmestiku neljaks võrdseks osaks. Kvartiile kokku on 3. Mediaan on 50% kvantiil ehk 2. kvartiil.
## 0% 25% 50% 75% 100%
## 1967.00 1987.75 1994.50 1999.00 2003.00
Esimese ja kolmanda kvartiili (ehk 25% ja 75% kvantiili) vahe saab
leida funktsiooniga IQR()
.
Haare on arvulise tunnuse maksimaalse ja minimaalse väärtuse vahe
(max() - min()). See on mõjutatav erinditest ehk
üldiste andmete suhtes mingis mõttes erandlikest vaatlustest. R-is
väljastab haarde funktsioon range()
vaid
suurima ja vähima väärtuse, mitte nende vahe.
## [1] 1967 2003
Nende väärtuste vahe saab kätte funktsiooniga
diff()
## [1] 36
Sama siis õppimisajaga:
Standardhälve iseloomustab vaatluste mingi arvulise tunnuse hajuvust
selle tunnuse keskmise väärtuse ümber. Väike standardhälve näitab, et
tunnuse väärtused on keskmisele üldiselt üsna sarnased, suur
standardhälve näitab, et väärtuste erinevus keskmisest on suur (nt haare
on hästi suur). Standardhälbe funktsioon R-is on
sd()
(standard deviation).
## [1] 8.472108
Kuidas seda arvutatakse:
# Vaatame kõiki sünniaasta väärtusi
kysimustik$synniaasta
# 1. Loeme kokku, kui palju vaatlusi on
(vaatlusi <- length(kysimustik$synniaasta))
# 2. Leiame sünniaastate keskmise
(keskmine <- mean(kysimustik$synniaasta))
# 3. Lahutame igast väärtusest keskmise
# (leiame iga üksiku vaatluse erinevuse keskmisest ehk hälbe)
(erinevused <- kysimustik$synniaasta - keskmine)
# 4. Võtame need erinevused ruutu
(erinevuste_ruut <- erinevused^2)
# 5. Leiame nende erinevuste ruutude summa
(ruutude_summa <- sum(erinevuste_ruut))
# 6. Korrutame erinevuste ruutude summa läbi jagatisega, kus 1 on jagatud vaatluste arvust ühe võrra väiksema arvuga. See ongi tegelikult dispersioon ehk tunnuse hajuvus.
(dispersioon <- ruutude_summa/(vaatlusi-1))
# See on sama, mis
var(kysimustik$synniaasta) # dispersiooni funktsioon
# 7. Standardhälve on ruutjuur dispersioonist
sqrt(dispersioon)
See, kas jagatises, millega ruutude summat korrutatakse, on nimetajas vaatluste arv või tuleb vaatluste arvust lahutada 1 (nagu meie näites), sõltub sellest, kas meil on tegu kõikse valimiga (st meie valim ammendab kõik võimalikud vaatlused) või mitte (meie valimis on juhuslik hulk kõikidest võimalikest). Kui meil oleks kõikide sellel kursusel osalenute vastused, siis võiksime öelda, et meil on kõikne valim (saame selle abil kirjeldada ära iga viimsegi kursusel osaleja), ent kuna meil kõikide vastuseid ei ole, siis peame eeldama, et meil on juhuslik väiksem valim üldisest populatsioonist.
Paneme valemi ühele reale kokku:
dispersioon <- sum((kysimustik$synniaasta - mean(kysimustik$synniaasta))^2) / (length(kysimustik$synniaasta)-1)
standardhälve <- sqrt(sum((kysimustik$synniaasta - mean(kysimustik$synniaasta))^2) / (length(kysimustik$synniaasta)-1))
# See on sama, mis
var(kysimustik$synniaasta) # dispersiooni funktsioon
## [1] 71.77661
## [1] 8.472108
Dispersioon ehk hajuvus on hälvete ruutude aritmeetiline keskmine ehk teisisõnu keskmine vaatluste erinevus keskmisest väärtusest. Mida suurem on dispersioon, seda suurem on hajuvus. Sagedamini raporteeritakse uurimustes standardhälvet, kuna ruutjuure võtmine võimaldab vaadelda hajuvust originaalühikutes (antud juhul nt aastates).
Ja lisame tidyverse
paketiga tabelisse ka
standardhälbe:
kysimustik %>%
group_by(Õppekava = oppekava) %>%
summarise(Osalejaid = n(),
Keskmine = round(mean(kaua_opid),1),
Mediaan = round(median(kaua_opid), 1),
St.hälve = round(sd(kaua_opid),1)) %>%
flextable() %>%
set_table_properties( layout = "autofit") %>%
set_caption(caption = "Keskmine õppimisaeg õppekavade kaupa.")
Õppekava | Osalejaid | Keskmine | Mediaan | St.hälve |
---|---|---|---|---|
ajalugu | 12 | 4.0 | 3.0 | 2.3 |
eesti ja soome-ugri keeleteadus | 42 | 6.0 | 5.0 | 4.5 |
euroopa keeled ja kultuurid | 3 | 2.7 | 3.0 | 1.5 |
filosoofia | 4 | 7.8 | 7.5 | 7.3 |
geenitehnoloogia | 1 | 3.0 | 3.0 | |
germaani-romaani filoloogia | 1 | 13.0 | 13.0 | |
hispaania keel | 2 | 1.0 | 1.0 | 0.0 |
inglise keel | 9 | 3.3 | 3.0 | 1.9 |
keeleteadus | 8 | 5.1 | 4.0 | 1.9 |
kirjandus | 1 | 5.0 | 5.0 | |
klassikaline filoloogia | 2 | 6.0 | 6.0 | 1.4 |
majandusteadus | 1 | 15.0 | 15.0 | |
matemaatiline statistika | 1 | 1.0 | 1.0 | |
riigiteadused | 1 | 2.0 | 2.0 | |
romanistika | 1 | 3.0 | 3.0 | |
semiootika ja kultuuriteooria | 2 | 3.0 | 3.0 | 1.4 |
skandinavistika | 1 | 4.0 | 4.0 | |
sotsioloogia | 1 | 10.0 | 10.0 | |
tõlkeõpetus | 1 | 12.0 | 12.0 | |
täiendusõpe | 5 | 14.4 | 14.0 | 4.4 |
usuteadus | 4 | 7.2 | 5.5 | 6.4 |
õigusteadus | 1 | 8.0 | 8.0 |
Karpdiagramm ehk kastdiagramm (boxplot) esitab arvulise tunnuse kvartiiljaotuse (vt Kvantiilid).
Paks joon on mediaan, kasti sisse jäävad vaatlused, mille väärtused langevad 25% ja 75% kvantiili (ehk vastavalt Q1 ja Q3) vahele, st kast sisaldab 50% kõikidest andmetest. Vurrud joonistatakse väärtuste juurde, mis jäävad kastist pooleteisekordse kvartiilivahe kaugusele. Kvartiilivahe on kasti ülemise ja alumise piiri väärtuste vahe. Ülemisel joonisel on kvartiilivahe 1999 (Q3 e 75% kvantiili) ja 1987.75 (Q1 e 25% kvantiili) vahe ehk st kasti vasaku ja parema külje pikkus on 11.25 aastat. Pooleteisekordne kvartiilivahe on seega 11.25x1.5 ehk 16.875.
Ülemise vurru jaoks võetakse esimene andmestikus esinev väärtus, mis on väiksem kui Q3 + 1.5*IQR.
Alumise vurru jaoks võetakse esimene andmestikus esinev väärtus, mis on suurem kui Q1 - 1.5*IQR.
# Ülemine kvartiil e 75% kvantiil
Q3 <- quantile(kysimustik$synniaasta)[4]
# Alumine kvartiil e 25% kvantiil
Q1 <- quantile(kysimustik$synniaasta)[2]
# Ülemise vurru joonistamise alus
yl_vurr <- Q3 + 1.5*IQR(kysimustik$synniaasta)
# Alumise vurru joonistamise alus
al_vurr <- Q1 - 1.5*IQR(kysimustik$synniaasta)
sort(kysimustik$synniaasta)
# Ülemise vurru tegelik väärtus
# (see, mis on vahetult esimene väärtus,
# mis on väiksem kui ülemise vurru alus).
sort(kysimustik$synniaasta[kysimustik$synniaasta < yl_vurr],
decreasing = TRUE)[1]
# Alumise vurru tegelik väärtus
# (sest see on vahetult esimene väärtus,
# mis on suurem kui alumise vurru alus).
sort(kysimustik$synniaasta[kysimustik$synniaasta > al_vurr],
decreasing = FALSE)[1]
Väärtused, mis vurrude vahele ei mahu, sest nad on teiste andmetega
võrreldes erandlikult suured/väikesed, on erindid
(outliers). Saame ka erindid kätte funktsioonist
boxplot
.
# Salvestame kastdiagrammi eraldi objekti
b <- boxplot(kysimustik$synniaasta)
# Leiame erindid
b$out
Erindid võivad tekkida mõõtmis- või andmekogumisvigade tõttu, ent võivad olla ka osa andmestiku tõelisest varieeruvusest. Sellele, mida erinditega pihta hakata, on mitmesuguseid lähenemisi. Kuna väga suured erindid hakkavad oluliselt mõjutama mudelite hinnanguid parameetritele, mis on seotud aritmeetilise keskmisega, jäetakse need vahel lihtsalt analüüsist välja. Seda tehes võime aga eirata mingit erinditega seotud väärtuslikku informatsiooni. Teinekord kasutatakse hoopis tunnuse transformeerimist (nt logaritmimist), mis suuri erinevusi tasandaks. Mõnikord aga on mõistlik määrata erinditele hoopis mingi muu väärtus, nt aritmeetilise keskmise ja kahekordse standardhälbe summa või vahe.
Kast-vurrud diagramm sobib hästi rühmade võrdlemiseks. Näiteks vaatame vastajate sünniaastat vastavalt sellele, millise looma nad valisid.
Histogramm ehk astmikdiagramm sobib arvuliste andmete
visualiseerimiseks ning esitab mingi tunnuse sageduste jaotumise teatud
intervallide kaupa. R-is saab baasgraafika paketis kasutada funktsiooni
hist()
.
Jooniselt näeme, et kõige enam on neid tudengeid, kes on sündinud 1990ndate teisel poolel. Üksikud tudengid on sündinud vahemikus 1965-1970 ja 1970-1975, kõige nooremad 2000-2005. R arvestab piiripealsed väärtused enamasti sellele eelnenud klassi (nt aastal 1990 sündinud on klassis 1985-1990, mitte 1990-1995).
# Teeme 4 numbrivektorit
vec1 <- 1:10
vec2 <- 10:20
vec3 <- 10:21
vec4 <- 9:20
# Kuvame joonised 2 reas ja 2 tulbas
par(mfrow = c(2,2))
# Joonistame histogrammid
hist(vec1, main = "1:10 (10 elementi)")
hist(vec2, main = "10:20 (11 elementi)")
hist(vec3, main = "10:21 (12 elementi)")
hist(vec4, main = "9:20 (12 elementi)")
Funktsioonis saab erinevate argumentidega täpsustada mh ka seda, mitmes sagedusklassis andmed peaksid olema esitatud (R võtab seda siiski kui soovitust ning pakub selle põhjal enda lahenduse), klasside värvi jne.
hist(kysimustik$synniaasta, # x-telje arvuline tunnus
breaks = 4, # sagedusklasside arv - 1
col = c("blue", "purple", "red", "pink", "green"), # tulpade täitevärvid
border = "grey50", # tulpade piirjoonte värv
xlab = "Sünniaasta", # x-telje pealkiri
ylab = "Sagedus", # y-telje pealkiri
main = "Sünniaasta histogramm") # joonise pealkiri
Hajuvusdiagramm ehk X-Y diagramm (scatterplot) sobib
paremini kahe arvulise tunnuse vaheliste seoste kujutamiseks. Kui
plot()
funktsioonis anda argumendiks
ainult üks vektor, joonistatakse väärtused y-teljele ning x-teljele
vektori indeksid ehk järjekorranumbrid.
Rohkem kasutatakse hajuvusdiagramme kahe arvulise tunnuse seose kuvamiseks. Näiteks kas õppimisaeg ja sünniaeg on omavahel seotud?
plot(kaua_opid ~ synniaasta, # arvuline y ~ arvuline x
data = kysimustik, # andmestiku nimi
col = "grey45", # punktide värv
pch = 15, # punktide suurus
main = "Õpitud aastate seos sünniaastaga", # joonise pealkiri
xlab = "Sünniaasta", # x-telje pealkiri
ylab = "Õpitud aastate arv") # y-telje pealkiri
# Tähistame nüüd veel eri värvidega
# need, kel on kvantitatiivsete
# meetoditega kogemust ja need,
# kellel ei ole.
plot(kaua_opid ~ synniaasta,
data = kysimustik,
pch = 15,
col = c("grey45", "orange")[kogemused_kvant], # punktide värv vastavalt andmestiku tunnusele
main = "Õpitud aastate seos sünniaastaga",
xlab = "Sünniaasta",
ylab = "Õpitud aastate arv")
# Lisame ka legendi
legend("topright", # asend ülemises paremas nurgas
c("Ei", "Jah"), # klasside nimetused
fill = c("grey45", "orange"), # klasside värvid joonisel
title = "Kogemusi kvantmeetoditega", # legendi pealkiri
horiz = TRUE, # klassid kõrvuti (mitte üksteise all)
cex = 1) # suurus
Arvuta õppeaja keskmine, mediaan ja standardhälve.
Arvuta samad asjad loomaeelistuse ja tee-kohvi eelistuse kaupa.
Kasuta tapply()
käsku. Kui on korraga kaks rühmitavat
tunnust, siis tapply()
käsul rühmitava tunnuse sisendiks
võib olla list ja sellisel juhul on tulemuseks risttabel. Proovi umbes
nii
tapply(kirjeldatav_tunnus, list(rühmitav1, rühmitav2), funktsioon)
.
Joonista karpdiagramm (boxplot) õppeaja jaotusest tee-kohvi eelistuse kaupa. Värvi kastid kahe eri värviga.
boxplot()
- joonistab karpdiagrammi, sisendiks üks
arvuline tunnus ja üks või mitu kategoriaalset rühmitavat tunnustdiff()
- leiab kahe või enama arvulise väärtuse
vahe(d)hist()
- joonistab histogrammi, sisendiks üks arvuline
tunnusIQR()
- leiab kvartiilhaardemax()
- leiab vektori või tabeli suurima väärtusemean()
- arvutab arvulise tunnuse aritmeetilise
keskmisemedian()
- arvutab arvulise tunnuse mediaanimin()
- leiab vektori või tabeli vähima väärtuseplot()
- baasgraafika kõige üldisem joonistamise käsk.
Üliselt tahab x ja y telje sisendiks arvulisi vektoreid (nagu Excelis
scatterplot), aga võib muudel juhtudel geneeriliselt muid
väljundeid anda.quantile()
- leiab kvantiilidrange()
- leiab haarde (miinimum- ja
maksimumväärtused)sd()
- arvutab arvulise tunnuse standardhälbe ehk
keskmise erinevuse keskmisesttapply(kirjeldatav_tunnus, rühmitav_tunnus, funktsioon)
- apply funktsioon, mis võimaldab mingit käsku rakendada
vektorile mingi (nt mõnda eelnevatest) rühmitava tunnuse kaupavar()
- arvutab arvulise tunnuse dispersiooni ehk
hajuvuse