Arvuliste andmete kirjeldamine ja visualiseerimine

Tänased teemad

Arvuliste andmete kirjeldamine ja visualiseerimine

  • paiknemise karakteristikud:
    • keskmine
    • mediaan
  • hajuvuse karakteristikud:
    • kvantiilid
    • haare
    • standardhälve
    • dispersioon
  • visualiseerimine
    • karpdiagramm
    • histogramm
    • hajuvusdiagramm

Kasutame esimeses praktikumis läbi viidud küsitluse andmestikku.

load("data/kysimustik_2024.RData")

Aritmeetiline keskmine

Aritmeetilise keskmise leidmiseks on R-is käsk mean(). Üldiselt on selle käsu sisendiks arvuline vektor (või maatriks).

Plussid:

  • arvestab kõiki vaatlusi;
  • dispersioon on keskmisest mõlemas suunas sama;
  • valimid samast üldkogumist annavad üldjuhul sarnase keskmise;
  • lihtne aru saada.

Miinused:

  • erinditest (erandlikult suurtest/väikestest vaatlustest) kergesti mõjutatud;

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.

mean(kysimustik$synniaasta)
## [1] 1992.24

Keskmine ülikoolis õpitud aeg:

mean(kysimustik$kaua_opid)
## [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_byppekava = oppekava) %>% 
    summarise(Keskmine = round(mean(kaua_opid),1)) %>% 
    flextable() %>% 
    set_table_properties( layout = "autofit") %>% 
    set_caption(caption = "Keskmine õppimisaeg õppekavade kaupa.")
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

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:

  • pole erinditest mõjutatud;
  • saab kasutada ka siis, kui kõiki andmeid pole (veel) teada, aga teatakse seda, kas puuduvad vaatlused on teistest suuremad või väiksemad.

Miinused:

  • ei arvesta kõiki vaatlusi;
  • ei arvesta tunnuse jaotust:
    • nt gruppidel [1, 1, 50, 100, 100] ja [50, 50, 50, 50, 50] on sama mediaan.

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
mean(arvud)
## [1] 6.111111
median(arvud)
## [1] 5
arvud = c(1,2,3,4,5,7,90,110,1300)
mean(arvud)
## [1] 169.1111
median(arvud) # mediaan on endiselt 5
## [1] 5

Sünniaasta mediaan:

median(kysimustik$synniaasta)
## [1] 1994.5

Ülikoolis õpitud aja mediaan:

median(kysimustik$kaua_opid)
## [1] 4

Ja seda saab sama moodi kombineerida tapply() käsuga:

tapply(kysimustik$kaua_opid, kysimustik$oppekava, median)
##                         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_byppekava = 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.")
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

Kvantiilid

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.

quantile(kysimustik$synniaasta)

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.

# mediaan
median(kysimustik$synniaasta)
## [1] 1994.5
# on sama mis 50% kvantiil
quantile(kysimustik$synniaasta, probs = 0.5)
##    50% 
## 1994.5
# ja 0.5 on sama mis 1/2 või 50/100 või 2024/4048...
quantile(kysimustik$synniaasta, probs = 1/2)
##    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.

quantile(kysimustik$synniaasta)
##      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().

IQR(kysimustik$synniaasta)

# See on sama, mis
quantile(kysimustik$synniaasta)[[4]]-
  quantile(kysimustik$synniaasta)[[2]]

Haare

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.

range(kysimustik$synniaasta)
## [1] 1967 2003

Nende väärtuste vahe saab kätte funktsiooniga diff()

diff(range(kysimustik$synniaasta))
## [1] 36

Sama siis õppimisajaga:

range(kysimustik$kaua_opid)

# Leiame vahe
range(kysimustik$kaua_opid)[2]-
  range(kysimustik$kaua_opid)[1]

# Sama saab leida tegelikult
# funktsioonide min() ja max() abil

Standardhälve ja dispersioon

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).

sd(kysimustik$synniaasta)
## [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
# ja standardhälve on ruutjuur dispersioonist
sqrt(dispersioon)
## [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_byppekava = 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.")
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

Karpdiagramm ehk kastdiagramm (boxplot) esitab arvulise tunnuse kvartiiljaotuse (vt Kvantiilid).

boxplot(kysimustik$synniaasta)

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.

boxplot(synniaasta ~ lemmikloom, # arvuline y ~ mittearvuline x
        data = kysimustik, # andmestiku nimi
        col = c("lightblue", "yellow", "grey", "red"), # mittearvulise x-i klasside värvid
        las = 1, # y-telje sildid horisontaalselt 
        ylab = "Sünniaasta") # y-telje pealkiri

Histogramm

Histogramm ehk astmikdiagramm sobib arvuliste andmete visualiseerimiseks ning esitab mingi tunnuse sageduste jaotumise teatud intervallide kaupa. R-is saab baasgraafika paketis kasutada funktsiooni hist().

hist(kysimustik$synniaasta)

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

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.

plot(kysimustik$kaua_opid)

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

Harjutusi

  1. Arvuta õppeaja keskmine, mediaan ja standardhälve.

  2. 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).

  3. Joonista karpdiagramm (boxplot) õppeaja jaotusest tee-kohvi eelistuse kaupa. Värvi kastid kahe eri värviga.

Funktsioonide sõnastik

  • boxplot() - joonistab karpdiagrammi, sisendiks üks arvuline tunnus ja üks või mitu kategoriaalset rühmitavat tunnust
  • diff() - leiab kahe või enama arvulise väärtuse vahe(d)
  • hist() - joonistab histogrammi, sisendiks üks arvuline tunnus
  • IQR() - leiab kvartiilhaarde
  • max() - leiab vektori või tabeli suurima väärtuse
  • mean() - arvutab arvulise tunnuse aritmeetilise keskmise
  • median() - arvutab arvulise tunnuse mediaani
  • min() - leiab vektori või tabeli vähima väärtuse
  • plot() - 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 kvantiilid
  • range() - leiab haarde (miinimum- ja maksimumväärtused)
  • sd() - arvutab arvulise tunnuse standardhälbe ehk keskmise erinevuse keskmisest
  • tapply(kirjeldatav_tunnus, rühmitav_tunnus, funktsioon) - apply funktsioon, mis võimaldab mingit käsku rakendada vektorile mingi (nt mõnda eelnevatest) rühmitava tunnuse kaupa
  • var() - arvutab arvulise tunnuse dispersiooni ehk hajuvuse