Quidest?

Analysis of a Linear Mixed Model

ยท Lorenzo Drumond

The following data is used to run an example analysis of a linear mixed model, where the random effect is Subject, and Trial is nested in Keyboard and Posture.

mbltxttrials.csv

SubjectKeyboardPosturePosture_OrderTrialWPMError_Rate
1iPhoneSit1121.050.01
1iPhoneSit1215.950.02
1iPhoneSit1321.510.01
1iPhoneSit1424.370.00
1iPhoneSit1522.580.05
 1## Linear Mixed Model (LMM) on WPM
 2
 3mbltxttrials = read.csv("mbltxttrials.csv")
 4View(mbltxttrials)
 5mbltxttrials$Subject = factor(mbltxttrials$Subject) # convert to nominal factor
 6mbltxttrials$Keyboard = factor(mbltxttrials$Keyboard) # Rv4
 7mbltxttrials$Posture = factor(mbltxttrials$Posture) # Rv4
 8mbltxttrials$Posture_Order = factor(mbltxttrials$Posture_Order) # convert to nominal factor
 9mbltxttrials$Trial = factor(mbltxttrials$Trial) # convert to nominal factor
10summary(mbltxttrials)
11
12library(plyr)
13ddply(mbltxttrials, ~ Keyboard * Posture, function(data) summary(data$WPM))
14ddply(mbltxttrials, ~ Keyboard * Posture, summarise, WPM.mean=mean(WPM), WPM.sd=sd(WPM))
15
16hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Sit",]$WPM)
17hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Stand",]$WPM)
18hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Walk",]$WPM)
19hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Sit",]$WPM)
20hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Stand",]$WPM)
21hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Walk",]$WPM)
22boxplot(WPM ~ Keyboard * Posture, data=mbltxttrials, xlab="Keyboard.Posture", ylab="WPM") # boxplots
23with(mbltxttrials, interaction.plot(Posture, Keyboard, WPM, ylim=c(0, max(mbltxttrials$WPM)))) # interaction?
24
25library(lme4) # for lmer
26library(lmerTest)
27library(car) # for Anova
28
29contrasts(mbltxttrials$Keyboard) <- "contr.sum"
30contrasts(mbltxttrials$Posture) <- "contr.sum"
31contrasts(mbltxttrials$Posture_Order) <- "contr.sum"
32contrasts(mbltxttrials$Trial) <- "contr.sum"
33
34m = lmer(WPM ~ (Keyboard * Posture_Order)/Trial + (1|Subject), data=mbltxttrials)
35Anova(m, type=3, test.statistic="F")
36
37m = lmer(WPM ~ (Keyboard * Posture)/Trial  + (1|Subject), data=mbltxttrials)
38Anova(m, type=3, test.statistic="F")
39
40#m = lmer(WPM ~ (Keyboard * Posture)/(1|Trial) + (1|Subject), data=mbltxttrials)  # incorrect in video
41m = lmer(WPM ~ Keyboard * Posture + (1|Keyboard:Posture:Trial) + (1|Subject), data=mbltxttrials) # new, correct
42Anova(m, type=3, test.statistic="F")
43
44library(multcomp) # for glht
45library(emmeans) # for emm
46summary(glht(m, emm(pairwise ~ Keyboard * Posture)), test=adjusted(type="holm"))
47with(mbltxttrials, interaction.plot(Posture, Keyboard, WPM, ylim=c(0, max(mbltxttrials$WPM)))) # for convenience

References

#designing_running_and_analyzing_experiments #week9 #experiment #generalized #regression #nested_effects #linear_model #coursera #random_effects #rlang #fixed_effects #within_subjects #design #theory #test #mixed #statistics