Quidest?

Analysis of a Generalized Linear Mixed Model

· Lorenzo Drumond

Off the back of the earlier example (analysis-of-a-linear-mixed-model), we can use a generalized model to model the error rate. It’s a count variable, so we need Poisson distribution for the regression.

 1## Generalized Linear Mixed Model (GLMM) on Error_Rate
 2
 3mbltxttrials$Errors = mbltxttrials$Error_Rate * 100
 4View(mbltxttrials) # verify
 5summary(mbltxttrials)
 6
 7library(plyr)
 8ddply(mbltxttrials, ~ Keyboard * Posture, function(data) summary(data$Errors))
 9ddply(mbltxttrials, ~ Keyboard * Posture, summarise, Errors.mean=mean(Errors), Errors.sd=sd(Errors))
10
11hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Sit",]$Errors)
12hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Stand",]$Errors)
13hist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Walk",]$Errors)
14hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Sit",]$Errors)
15hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Stand",]$Errors)
16hist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Walk",]$Errors)
17boxplot(Errors ~ Keyboard * Posture, data=mbltxttrials, xlab="Keyboard.Posture", ylab="Errors") # boxplots
18with(mbltxttrials, interaction.plot(Posture, Keyboard, Errors, ylim=c(0, max(mbltxttrials$Errors)))) # interaction?
19
20library(fitdistrplus)
21fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Sit",]$Errors, "pois", discrete=TRUE)
22gofstat(fit) # goodness-of-fit test
23fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Stand",]$Errors, "pois", discrete=TRUE)
24gofstat(fit) # goodness-of-fit test
25fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "iPhone" & mbltxttrials$Posture == "Walk",]$Errors, "pois", discrete=TRUE)
26gofstat(fit) # goodness-of-fit test
27fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Sit",]$Errors, "pois", discrete=TRUE)
28gofstat(fit) # goodness-of-fit test
29fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Stand",]$Errors, "pois", discrete=TRUE)
30gofstat(fit) # goodness-of-fit test
31fit = fitdist(mbltxttrials[mbltxttrials$Keyboard == "Galaxy" & mbltxttrials$Posture == "Walk",]$Errors, "pois", discrete=TRUE)
32gofstat(fit) # goodness-of-fit test
33
34library(lme4) # for glmer
35library(car) # for Anova
36
37contrasts(mbltxttrials$Keyboard) <- "contr.sum"
38contrasts(mbltxttrials$Posture) <- "contr.sum"
39contrasts(mbltxttrials$Trial) <- "contr.sum"
40
41m = glmer(Errors ~ (Keyboard * Posture)/Trial + (1|Subject), data=mbltxttrials, family=poisson, nAGQ=0)
42Anova(m, type=3)
43
44m = glmer(Errors ~ (Keyboard * Posture) + (1|Keyboard:Posture:Trial) + (1|Subject), data=mbltxttrials, family=poisson, nAGQ=0) # new, correct syntax
45Anova(m, type=3)
46
47with(mbltxttrials, interaction.plot(Posture, Keyboard, Errors, ylim=c(0, max(mbltxttrials$Errors)))) # for convenience
48library(multcomp) # for glht
49library(emmeans) # for emm
50summary(glht(m, emm(pairwise ~ Keyboard * Posture)), test=adjusted(type="holm"))

References

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