Viimases praktikumis tutvutasin Markdowni kasutamist ja paari uut paketti. Markdown võimaldab teha R’is teistele arusaadavaid dokumente. Kõik praktikumijuhendid (k.a. antud juhend) on koostatud Markdownis. Selle saab avada RStudios alamenüüst File (File - > New File -> R Markdown). Markdownist tehtuid dokumente saab salvestada enda arvutisse (pdf või doc formaadis) või “avaldada” netis (selleks on R’i meeskond loonud Rpubs.com lehekülje).

Andmed

Kasutan selles konspektis kahte andmestikku.
1. R’is saab netis olevaid andmed otse enda töökeskkonnale salvestada:

datafilename = "http://personality-project.org/r/datasets/R.appendix2.data" # aadress
data.ex=read.table(datafilename,header=T)   # loeb andmed tabelisse
head(data.ex)                                   #näitab esimesi ridu
##   Observation Gender Dosage Alertness
## 1           1      m      a         8
## 2           2      m      a        12
## 3           3      m      a        13
## 4           4      m      a        12
## 5           5      m      b         6
## 6           6      m      b         7
  1. Paketi ez näidisandmestik ANT
library(ez)
data(ANT)
head(ANT)
##   subnum     group block trial     cue     flank location direction
## 1      1 Treatment     1     1    None   Neutral       up      left
## 2      1 Treatment     1     2  Center   Neutral       up      left
## 3      1 Treatment     1     3  Double   Neutral       up      left
## 4      1 Treatment     1     4 Spatial   Neutral       up      left
## 5      1 Treatment     1     5    None Congruent       up      left
## 6      1 Treatment     1     6  Center Congruent       up      left
##         rt error
## 1 398.6773     0
## 2 389.1822     0
## 3 333.2186     0
## 4 419.7640     0
## 5 446.4754     0
## 6 338.9766     0

Uue muutuja arvutamine

# Kui tahame arvutada uue muutuja juba olemasoleva muutuja põhjal
ANT$uusmuutuja <- ANT$rt/100 #jagan rt veeru sajaga ja lisan väärtused andmestikku veergu "uusmuutuja"

# Kui tahame arvutamisel arvestada erinevate veergude väärtustega - nt uue kategoriseeriva tunnuse loomine. lisame ANT tabelisse uue veeru, mis põhine veergude "group" ja "cue" väärtustel.
#1. Lisan tabelisse ANT uue kategoriseeriva tunnuse nimega "kat"
ANT$kat <- NA # annan alguses selle veeru väärtusteks NA - nii on lihtsam sinna hiljem järk-järgult väärtusi juurde lisada
#2. Kontrollin oluliste veergude väärtusi ja täiendan vastavalt nendele väärtustele veergu "kat"
ANT[ANT$group =="Treatment" & ANT$cue == "Center", "kat"] <- 1 
# sarnaselt peaks läbi tegema kõik kombinatsioonid
ANT[ANT$group =="Treatment" & ANT$cue == "Spatial", "kat"] <- 2
#jne

Pakett plyr ja funktsioon ddply()

# PLYR pakett
library(plyr)
ddply(data.ex, .(Gender,Dosage), summarise, keskmine = mean(Alertness)) #arvutan keskmise tulemuse soo ja saadud doosi põhjal
##   Gender Dosage keskmine
## 1      f      a    15.75
## 2      f      b    16.75
## 3      m      a    11.25
## 4      m      b    12.50

Pakett dplyr

library(dplyr)
filter(data.ex, Gender == "m", Dosage == "a")
##   Observation Gender Dosage Alertness
## 1           1      m      a         8
## 2           2      m      a        12
## 3           3      m      a        13
## 4           4      m      a        12
data.ex[data.ex$Gender == "m" & data.ex$Dosage == "a", ]
##   Observation Gender Dosage Alertness
## 1           1      m      a         8
## 2           2      m      a        12
## 3           3      m      a        13
## 4           4      m      a        12
#veergude ümberpaigutamine:
arrange(data.ex, Observation, Dosage, Gender, Alertness)
##    Observation Gender Dosage Alertness
## 1            1      m      a         8
## 2            2      m      a        12
## 3            3      m      a        13
## 4            4      m      a        12
## 5            5      m      b         6
## 6            6      m      b         7
## 7            7      m      b        23
## 8            8      m      b        14
## 9            9      f      a        15
## 10          10      f      a        12
## 11          11      f      a        22
## 12          12      f      a        14
## 13          13      f      b        15
## 14          14      f      b        12
## 15          15      f      b        18
## 16          16      f      b        22
#sorteerimine:
arrange(data.ex, desc(Alertness))
##    Observation Gender Dosage Alertness
## 1            7      m      b        23
## 2           11      f      a        22
## 3           16      f      b        22
## 4           15      f      b        18
## 5            9      f      a        15
## 6           13      f      b        15
## 7            8      m      b        14
## 8           12      f      a        14
## 9            3      m      a        13
## 10           2      m      a        12
## 11           4      m      a        12
## 12          10      f      a        12
## 13          14      f      b        12
## 14           1      m      a         8
## 15           6      m      b         7
## 16           5      m      b         6
data.ex[order(-data.ex$Alertness), ]
##    Observation Gender Dosage Alertness
## 7            7      m      b        23
## 11          11      f      a        22
## 16          16      f      b        22
## 15          15      f      b        18
## 9            9      f      a        15
## 13          13      f      b        15
## 8            8      m      b        14
## 12          12      f      a        14
## 3            3      m      a        13
## 2            2      m      a        12
## 4            4      m      a        12
## 10          10      f      a        12
## 14          14      f      b        12
## 1            1      m      a         8
## 6            6      m      b         7
## 5            5      m      b         6
#Veergude valimine:
select(data.ex, Gender, Alertness)
##    Gender Alertness
## 1       m         8
## 2       m        12
## 3       m        13
## 4       m        12
## 5       m         6
## 6       m         7
## 7       m        23
## 8       m        14
## 9       f        15
## 10      f        12
## 11      f        22
## 12      f        14
## 13      f        15
## 14      f        12
## 15      f        18
## 16      f        22

Funktsioonid tapply() ja apply()

# tapply'iga saab teha kategooriate kaupa arvutusi (sarnaselt ddply() funktsiooniga)
tapply(ANT$rt, ANT$cue,mean)
##     None   Center   Double  Spatial 
## 451.3324 409.3842 402.9237 364.0087
#apply funktsioon
m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3)
head(m)# maatrikis esimesed 6 rida
##            [,1]      [,2]     [,3]
## [1,] -0.9332115 2.2251936 6.273383
## [2,] -0.9479844 3.2282671 3.719649
## [3,] -1.4868620 1.7146093 7.184025
## [4,]  1.8064514 1.9910130 6.002359
## [5,]  1.1492593 3.6893281 5.068190
## [6,]  0.2493283 0.4307898 3.576568
apply(m, 2, mean) #veergude alusel
## [1] -0.02529204  1.86653050  4.92650229
apply(m, 1, mean) #ridade alusel
##  [1] 2.521788 1.999977 2.470591 3.266608 3.302259 1.418895 2.520839
##  [8] 2.283148 2.448580 1.508209 3.412485 1.440043 2.403446 2.957014
## [15] 1.467636 2.248873 2.268178 3.192155 1.592748 1.805745 1.888928
## [22] 2.327724 2.731798 2.172173 1.469959 2.265227 2.146056 2.571949
## [29] 1.970461 1.603916
# Enda funktsiooni kasutamine:
apply(m, 2, function(x) mean(x[x>0]))#ainult positiivsete väärtuste keskmine
## [1] 0.8962084 2.0146334 4.9265023
apply(m, 2, function(x) length(x[x<0])) #kui palju negatiivseid väärtusi on igas veerus
## [1] 16  2  0

ANOVA paketiga ez

ANOVA’t saab teha ka funktsiooniga aov().
Lühike ülevaade aov() funktsiooni kasutamisest - https://rpubs.com/kolnesm/anova

library(ez)
?ezANOVA
#Read in the ANT data (see ?ANT).
data(ANT)
?ANT
head(ANT)
##   subnum     group block trial     cue     flank location direction
## 1      1 Treatment     1     1    None   Neutral       up      left
## 2      1 Treatment     1     2  Center   Neutral       up      left
## 3      1 Treatment     1     3  Double   Neutral       up      left
## 4      1 Treatment     1     4 Spatial   Neutral       up      left
## 5      1 Treatment     1     5    None Congruent       up      left
## 6      1 Treatment     1     6  Center Congruent       up      left
##         rt error
## 1 398.6773     0
## 2 389.1822     0
## 3 333.2186     0
## 4 419.7640     0
## 5 446.4754     0
## 6 338.9766     0
ezPrecis(ANT)
## Data frame dimensions: 5760 rows, 10 columns
##              type missing values      min         max
## subnum     factor       0     20        1          20
## group      factor       0      2  Control   Treatment
## block     numeric       0      6        1           6
## trial     numeric       0     48        1          48
## cue        factor       0      4     None     Spatial
## flank      factor       0      3  Neutral Incongruent
## location   factor       0      2     down          up
## direction  factor       0      2     left       right
## rt        numeric       0   5760 179.5972    657.6986
## error     numeric       0      2        0           1
#Run an ANOVA on the mean correct RT data.
rt_anova = ezANOVA(
        data = ANT[ANT$error==0,]
        , dv = rt
        , wid = subnum #katseisik
        , within = .(cue,flank) #katseisikusisene muutuja
        , between = group #katseisikute vaheline muutuja
)

#Show the ANOVA and assumption tests.
print(rt_anova)
## $ANOVA
##            Effect DFn DFd           F            p p<.05        ges
## 2           group   1  18   18.430592 4.377562e-04     * 0.07633358
## 3             cue   3  54  516.605213 1.005518e-39     * 0.89662286
## 5           flank   2  36 1350.598810 1.386546e-34     * 0.92710583
## 4       group:cue   3  54    2.553236 6.497492e-02       0.04110445
## 6     group:flank   2  36    8.768499 7.900829e-04     * 0.07627434
## 7       cue:flank   6 108    5.193357 9.938494e-05     * 0.11436699
## 8 group:cue:flank   6 108    6.377225 9.012515e-06     * 0.13686958
## 
## $`Mauchly's Test for Sphericity`
##            Effect         W         p p<.05
## 3             cue 0.7828347 0.5366835      
## 4       group:cue 0.7828347 0.5366835      
## 5           flank 0.8812738 0.3415406      
## 6     group:flank 0.8812738 0.3415406      
## 7       cue:flank 0.1737053 0.1254796      
## 8 group:cue:flank 0.1737053 0.1254796      
## 
## $`Sphericity Corrections`
##            Effect       GGe        p[GG] p[GG]<.05       HFe        p[HF]
## 3             cue 0.8652559 1.115029e-34         * 1.0239520 1.005518e-39
## 4       group:cue 0.8652559 7.472046e-02           1.0239520 6.497492e-02
## 5           flank 0.8938738 3.763312e-31         * 0.9858964 3.964046e-34
## 6     group:flank 0.8938738 1.297752e-03         * 0.9858964 8.438369e-04
## 7       cue:flank 0.6022111 1.546166e-03         * 0.7721473 4.745714e-04
## 8 group:cue:flank 0.6022111 3.424499e-04         * 0.7721473 7.170939e-05
##   p[HF]<.05
## 3         *
## 4          
## 5         *
## 6         *
## 7         *
## 8         *