Praktikumi eesmärgid

  • RStudio tutvumine
  • R-i süntaksiga tutvumine
  • Kirjeldav statistika: keskmine, mediaan, standardhälve

Laadige alla praktikumi andmed.

RStudio paigaldamine

Arvutiklassi arvutites on vajalikud programmid juba olemas, aga kui on soovi paigaldada RStudio ka enda arvutisse, siis kasutage järgnevaid linke:

1. RStudio kasutamine

Tutvume esmalt RStudio keskkonnaga (Joonis 1). Pärast RStudio esmakordset käivitamist on avatud kolm paneeli: Konsool (Console), Töökeskkond (Environment), Failid (Files). Konsooli kaudu saame „suhelda“ R-iga ehk saata koodiridu R-ile arvutamiseks. Töökeskkond näitab hetkel aktiivseid andmestikke, üleslaetud lisamooduleid ja faile. Paneeli „Files“ kaudu saame otsida üles arvutis olevaid materjale (nt. andme- ja koodifailid). Lähemalt tuleb nendest paneelidest juttu allpool.

Joonis 1. RStudio ülevaade

Joonis 1. RStudio ülevaade

Avame andmefaili “1praktikumAndmed.RData” kasutades ülaloleval joonisel osutatud nuppu või RStudio aknas paremal allosas paiknevat paneeli Files. Rstudio kasutamise üks eeliseid on see, et me saame kasutada andmeanalüüsi kirjutamiseks teksti- ehk koodifaili (R Script). Arvutis olevaid R-i koodifaile saame avada näiteks Konsooli üleval oleva nupu abil, aga samuti saab seda teha paneeli „Files“ kaudu (vt Joonis 1). Uue koodifaili saame avada valides RStudio menüüribalt File -> New File -> R Script. Koodifaili saate hõlpsalt salvestada käsud, mida olete kasutanud andmete töötlemiseks ja analüüsimiseks. Uue koodfaili loomise järel peaks meil RStudios olema lahti neli akent (Joonis 2).

Joonis 2. RStudio erinevad aknad

Joonis 2. RStudio erinevad aknad

Üleval vasakul olevasse aknasse kirjutame koodi, mille abil ütleme R-ile, mida andmetega teha. Kuidas käib koodi saatmine R-ile? Kui soovime saata ainult ühte rida korraga, siis tuleb viia kursor sellele koodireale ja seejärel vajutada koodiredaktori paneeli paremal ülaosas paiknevat nuppu nimega Run. Nupu asemel võib kasutada ka klahvikombinatsiooni Ctrl + Enter (Maci arvutitel Cmd + Enter). Kui soovime saata mitut koodirida korraga, siis tuleb need koodiredaktoris valida (st märkida need hiirega ära) ja seejärel vajutada Run-nuppu või klahvikombinatsiooni.

All vasakul on konsool (Console). Seal asubki arvutusi teostav R ise. Kui laseme R-il midagi arvutada, siis ilmuvad tulemused nähtavale just selles osas. Koodi võib põhimõtteliselt kirjutada ka otse konsoolile, aga enamasti on mugavam kasutada koodifaili, sest nii on lihtsam parandusi teha ja koodi korduvkasutada.

All paremal asuvad 5 erinevat paneeli:

  • Files: R-i koodi- ja andmefailide avamiseks.
    NB! Selles aknas saame sättida enda “töökausta”. See annab R-ile teada, missuguse kaustaga parasjagu tööd tehakse. Kausta otsimiseks vajutage sümbolile “…”, seejärel otsige üles sobiv kaust ja vajutage “OK”. Seejärel vajutage nupule More ja valige Set As Working Directory. Soovitatav on kasutada töökeskkonnana kausta, kus on teie analüüsitavad andmed.

  • Plots: siia kuvatakse tehtud joonised.

  • Packages: selle osa abil saab installeerida ja laadida lisamooduleid, mis lisavad R-ile täiendavat funktsionaalsust. Lisamoodulite kasutamiseks tuleb need kõigepealt arvutisse installeerida. Vajutage nuppu Install ja kirjutage avanenud aknasse soovitud lisamooduli nimi. Mooduli funktsioonide kasutamiseks tuleb vastav moodul R-is aktiveerida. Aktiveerimiseks tuleb moodul Packages paneeli nimekirjast üles otsida ja selle nime eesasuvasse kasti linnukene teha. Lisamooduleid saab installida ja aktiveerida ka R-i koodi abil: install.packages(“lisamooduli nimi”) ja library(lisamooduli nim).

  • Help: Abiinfo R-i funktsioonide kohta. Siin paneelis saame otsida R-is olevate funktsioonide kohta informatsiooni.

  • Viewer: Selle osa abil saab teha keerulisemat tüüpi andmekuvamist, millel on lisaks joonisele ka kontrollelemendid, mis võimaldavad joonise parameetreid muuta.

Üleval paremal asub 2 paneeli:

  • Environment: selles osas näidatakse kasutusel olevaid andmeid.
  • History: R-i konsoolile saadetud käskude ülevaade.
  • Connection: näitab missugused ühendused on loodud andmebaasidega (seda võimalust ei ole tavalise andmetöötluse puhul vaja kasutada).

Natuke lähemalt Environment paneelist. Kui avasite alguses andmefaili “1praktikumiAndmed.RData”, siis peaks paneel välja nägema nagu alloleval pildil (Joonis 3). Objekt nimega “tabel” viitab konkreetse andmetabeli nimele. 200 obs of 10 variables näitab, et andmetabelis on 200 rida ja 10 veergu ehk tunnust.

Joonis 3. RStudio Global Environment

Joonis 3. RStudio Global Environment

Klõpsates andmestiku nime ees oleval sinisel nupul peaks avanema allolev pilt (Joonis 4).

Joonis 4. RStudio ülevaade

Joonis 4. RStudio ülevaade

Meile näidatakse andmestikus olevate tunnuste nimesid, andmetüüpe ja esimesi andmepunkte. Esimene tunnus kannab nime “vanus”. Andmetüüp on int , mis tuleb inglisekeelsest sõnast integer ehk täisarv, st. tegemist on tunnusega, milles sisalduvad andmed on täisarvud. (Teine R-is levinud numbriliste andmete tüüp on num ehk numeric, mis võib sisaldada ka komakohaga arve.) Teine tunnus kannab nime “elukoht” ja selle tüübiks on märgitud Factor w/ 2 levels „maa“ , „linn“. Factor tähistab R-i kontekstis kategooriaid sisaldavat muutujat. Antud juhul on neid kategooriaid 2 tükki: „maa“ ja „linn“. Kõik ülejäänud tabelis olevad muutujad on täisarvulised (int).

2. R-i süntaks

Enne andmete juurde asumist teeme väikse kõrvalepõike R-i süntaksiga tutvumiseks. Nagu juba eelnevalt mainitud, siis üldiselt on kasulik kirjutada koodi koodifaili (R Script), mis võimaldab tehtud töö salvestada enda arvutisse. Seevastu konsoolile kirjutatud koodiridu on pärast R-i taaskäivitamist raskem taastada. Kui kasutate koodifaili, siis on soovitatav lisada R-ile saadetavate käskude juurde kommentaare, et hiljem oleks lihtsam endal või teistel koodist aru saada. Kommentaaride lisamiseks pange enda sisestatud märkuse ette sümbol „#“. See sümbol annab R-ile teada, et sellest sümbolist alates kuni sama rea lõpuni on kastujapoolne märkus, mida ei ole vaja R-il arvutada.

Aritmeetika

R-i võib kasutada tavalise kalkulaatorina. Proovige teha järgnevaid tehteid R-i konsoolil.

  • liitmine: 2 + 2
  • lahutamine: 4 - 5
  • korrutamine: 5 * 7
  • jagamine: 21 / 3
  • astmesse tõstmine: 2^4

Muutujate loomine

Sageli on vajalik luua andmetöötluse käigus uus muutuja, kuhu on salvestatud mingi oluline väärtus. Uue muutuja loomiseks kasutatakse R-is tavaliselt sümbolit “<-”, aga töötab ka tavaline võrdusmärk “=”. Muutujate nimede puhul ei luba R tühikuid kasutada. Seega on pikema nime puhul hea kasutada punkti (“uus.muutuja”), alakriipsu (“uus_muutuja”) või suurtähti (“uusMuutuja”). Lisaks on oluline teada, et R on tõstutundlik, st. väike- ja suurtähtede kasutamine peab olema muutujate nimede puhul läbivalt sama. Näiteks muutuja nimega „uusMuutuja“ on R-i jaoks erinev kui muutuja nimega „uusmuutuja“.

Muutuja loomiseks saame kasutada järgmist koodirida:

uus_muutuja <- 2

Nüüd on meil R-i töökeskkonnas („Environment“ aknas) muutuja nimega „uus_muutuja“. Töökeskkonnas olevate muutujatega saame teha ka tavalisi aritmeetilisi tehteid. Korrutame näiteks eelnevalt loodud muutuja neljaga:

uus_muutuja * 4
## [1] 8

Andmetüübid ja vektorid

Põhilised andmetüübid, millega kursuse jooksul kokku puutume:

  • numbrilised (numeric, integer): 2.2, 3
  • sõned (character): “hello”
  • tõeväärtused: TRUE, FALSE

Miks on need olulised? Kõik andmestikud koosnevad nendest andmetüüpidest. R käsitleb andmestiku ühte veergu/tunnust vektorina, mis koosneb teatud tüüpi elementidest.

Vaatame kõigepealt, kuidas R-is saab vektoreid luua. Vektorid võivad sisaldada ainult ühte tüüpi elemente. Vektori loomiseks saame kasutada funktsiooni c(), mis võimaldab elemente siduda üheks vektoriks.

# Numbriline vektor
num_vektor <- c(3,1,2)
# Sõnedega vektor
s_vektor <- c("SPSS", "R", "Matlab")
# Tõeväärtustega vektor
t_vektor <- c(FALSE, TRUE, FALSE)

Muutuja tüübi kontrollimiseks saame kasutada funktsiooni nimega class.

class(num_vektor)
## [1] "numeric"

Tehted vektoritega

Vektoritega saab samuti teha tavalisi aritmeetilisi tehteid. Teeme esialgu kaks vektorit:

v1 <- c(1,4,6,7,3)
v2 <- c(1:5) # koolon näitab, et teeme vektori 1-st kuni 5-ni

Nüüd liidame need vektorid omavahel:

v1 + v2
## [1]  2  6  9 11  8

Väljundist näeme, et vektorite liitmisel liidetakse samas positsioonis olevate väärtused. Vektorite esimesed väärtused liidetakse omavahel, teisel kohal olevad väärtused omavahel jne.

Samamoodi töötab ka näiteks korrutamine:

v1 * v2
## [1]  1  8 18 28 15

Paljud R-i funktsioonid vajavad arvutuste teostamiseks sisendiks vektoreid. Näiteks saame võtta ühe andmeveeru (ehk vektori andmetega) ja arvutada selle aritmeetilise keskmise, mediaani jms. Keskmise väärtuse arvutamine:

mean(v1)
## [1] 4.2

Mediaani arvutamine:

median(v1)
## [1] 4

Summa arvutamine:

sum(v1)
## [1] 21

Vektori elementide eristamine

R-i üks peamisi tugevusi peitub selles, et ta võimaldab hõlpsasti teha andmeteisendusi. Vektori elementide eristamiseks saab kasutada indekseid või loogikaavaldisi. Indeksiga andmete eraldamisel peame teadma huvipakkuvate andmete konkreetset asukohta vektoris (nt võtame andmereast kümnendal kohal oleva väärtuse). Loogikaavaldisega saame valida väärtused, mis vastavad meie poolt määratud reeglitele (nt jätame alles andmed, mis on suuremad kui etteantud väärtus).

# Loome vektori
v3 <- seq(1,10,0.5) #teeme vektori 1-st kuni 10-ni sammuga 0,5

# Vaatame vektori esimest väärtust
v3[1]
## [1] 1
# Vaatame vektori kolmandat, neljandat ja viiendat väärtust
v3[3:5]
## [1] 2.0 2.5 3.0
# Vaatame väärtusi, mis on suuremad kui 7
v3[v3 > 7]
## [1]  7.5  8.0  8.5  9.0  9.5 10.0

Ülesanded - R-i süntaks

  1. Tehke kaks erinevat vektorit, kus on vähemalt 10 numbrilist elementi.

  2. Arvutage nende vektori aritmeetiline keskmine ja mediaan.

  3. Liitke need vektorid ja salvestage tulemus uude muutujasse. Arvutage uue muutuja keskmine, mediaan ja summa.

  4. Eraldage eelmises ülesandes loodud muutujast väärtused, mis on suuremad kui selle muutuja aritmeetiline keskmine.

3. Tehted andmetega

Enne alustamist veenduge, et Teil oleks RStudio töökeskkonnas (Global Environment) andmestik nimega “tabel” (Joonis 3.).

Tehke esialgu läbi järgnevad ülesanded:

Ülesanded - andmestikuga tutvumine

  1. Kui palju muutujaid on andmestikus? Mis on nende muutujate nimed?
  2. Kasutage funktsiooni head(), argumendiks pange andmestiku nimi. Mida see funktsioon näitab?
  3. Kasutage funktsiooni tail(), argumendiks pange andmestiku nimi. Mida see funktsioon näitab?
  4. Kasutage funktsiooni str(), argumendiks pange andmestiku nimi. Mida see funktsioon näitab?

Vaatame selle näidisandmestiku põhjal, kuidas saab suuremast andmestikust eraldada konkreetsemaid andmeveerge.

Tutvume lähemalt kolme võimalusega:

  • Dollari märgi abil viitamine
  • Nurgeliste sulgude kasutamine - R’is annavad nurgelised sulud märku, et mingist objektist/andmestikust tahetakse mingit konkreetset muutujat kätte saada.
  • Funktsioon subset - see funktsioon võimaldab teha sama, mida nurgelised sulud.

Veergude eraldamine

Dollarimärgi abil andmeveeru eraldamiseks peame teadma vastava veeru nime.

tabel$vanus # võtab andmestikus veeru nimega "vanus"

Nurgeliste sulgudega andmete eraldamiseks peame teadma huvipakkuva veeru asukohta andmestikus. Nurgeliste sulgude sisse kirjutatakse kaks numbrit: esimene tähistab ridu ja teine tähistab veerge. Kui üks nendest tühjaks jätta, siis see annab R-ile teada, et me tahame andmetest eraldada kas kõiki ridu või veerge, vastavalt sellele kumma osa me tühjaks jätame. Järgnevalt on toodud välja mõned näited, kuidas nurgeliste sulgudega andmeid eraldada. Vaatame elementi, mis paikneb esimeses reas ja esimeses veerus:

#[rida, veerg]
tabel[1,1]
## [1] 42

Vaatame elementi, mis paikneb esimeses reas ja teises veerus:

tabel[1,2]
## [1] linn
## Levels: maa linn

Vaatame kõiki elemente, mis paiknevad esimeses veerus. Selleks jätame rea väärtuse nurgeliste sulgude sisse kirjutamata:

tabel[,1]

Veerge saab eraldada ka funktsiooni subset() abil. Selle kasutamiseks peame teadma ainult veergude nimesid:

subset(tabel, select = vanus) # võtab andmestikust veeru nimega vanus  
subset(tabel, select = c(vanus, elukoht)) # kaks veergu. NB! lisasime c() - see näitab, et anname argumendiks vektori. 

Eelnevalt vaatasime, kuidas saame andmetest võtta välja konkreetseid veerge. Vahepeal võib tekkida aga vajadus ühe veeru eemaldamiseks. Selleks saame kasutada veeru nimes või indeksi ees miinusmärki:

subset(tabel, select = -c(vanus, elukoht)) # eemaldab veerud vanus ja elukoht
tabel[,-1] # eemaldab esimese veeru
tabel[-1,] # eemaldab esimese rea

Ridade eraldamine

Järjekorra numbri abil saab ridasid samamoodi eraldada nagu veerge. Vaatame ainult teises reas olevaid väärtusi:

tabel[2,] 

Vaatame viies esimeses reas olevaid väärtusi:

tabel[1:5,] #esimesed viis rida

Tingimuste kasutamine

Kuidas valida ridu, mis vastavad teatud tingimustele? Proovime näiteks võtta andmestikust need read, kus vaadeldava isiku vanus on alla 30.

Nurgeliste sulgudega:

tabel[tabel$vanus<30,]

Funktsiooniga subset:

subset(tabel, vanus < 30)

Vahepeal on vaja võtta andmetest välja read, mis on sarnase väärtusega. Näiteks püüame eraldada andmetest kõik read, kus elukoha väärtus on “maa”. Selleks saame nurgeliste sulgude sees täpsustada elukoha väärtuse loogikaavaldise abil, st. täpsustame, et tahame neid ridu, kus elukoha väärtus võrdub meie etteantud väärtusega. Loogikaavaldiste puhul peame võrdlemiseks kasutama kahte võrdusmärki. Lisaks on oluline, et elukoha väärtus oleks jutumärkides.

tabel[tabel$elukoht == "maa",] # võtab andmetest ainult need read, kus elukoht on võrdne väärtusega "maa"

Samasuguse tulemuse saame ka funktsiooniga subset

subset(tabel, elukoht == "maa")

Ülesanded - tehted andmetega

  1. Eraldage andmetest veerg “vanus”. Looge uus muutuja, kus on ainult see veerg.

  2. Tehke kaks uut andmestikku. Esimesse salvestage maal elavate katseisikute tulemused ja teise salvestage linnas elavate katseisikute tulemused.

4. Kirjeldav Statistika

Teades, kuidas anda R-ile edasi ainult üks muutuja andmestikust, proovime saada selgemat ülevaadet näidisandmestikus olevate vastajate vanusest. Järgnevalt on toodud näited osade kirjeldavate statistikute arvutamiseks.

Keskmise vanuse saame, kui anname funktsioonile mean() argumendiks vastava tunnuse nime:

mean(tabel$vanus)
## [1] 44.19

Mediaan arvutamine:

median(tabel$vanus)
## [1] 46

Standardhälbe arvutamine:

sd(tabel$vanus)
## [1] 14.61478

Miinimumi ja maksimumi arvutamine:

min(tabel$vanus)
## [1] 18
max(tabel$vanus)
## [1] 70

Puuduvad väärtused
Kui veerus esineb puuduvaid väärtusi, siis annab R meile statistiku väärtuseks samuti puuduva väärtuse ehk NA (not available):

mean(tabel$sotsiaalsus)
## [1] NA

Selleks, et puuduvad väärtused arvutustest välja jätta, tuleb funktsioonile lisada üks täiendav argument – “na.rm=TRUE”.

mean(tabel$sotsiaalsus, na.rm=TRUE)
## [1] 126.0201
median(tabel$sotsiaalsus, na.rm=TRUE)
## [1] 126

Kategooriaid sisaldava tunnuse kirjeldamisel on abiks sagedustabel:

table(tabel$elukoht)
## 
##  maa linn 
##   87  113

Protsentuaalse jaotuse saame, kui lisame sagedustabeli ümber funktsiooni prop.table:

prop.table(table(tabel$elukoht))
## 
##   maa  linn 
## 0.435 0.565

Ülesanded - kirjeldav statistika

  1. Leidke sotsiaalsuse, meelekindluse, ekstravertsuse, neurootilisuse ja avatuse keskmised tulemused.

  2. Kasutage funktsiooni summary(). Andke argumendiks üks veerg. Andke argumendiks terve tabel. Mida see funktsioon väljastab?

  3. Millises vahemikus varieeruvad ekstravertsuse skoorid?