# Libraries
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(datasets)
library(ggplot2)
library(ggpubr)
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.3.3
library(lme4)
## Warning: package 'lme4' was built under R version 4.3.3
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
library(car)
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.3.3
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
library(broom)
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(lmerTest)
##
## Attaching package: 'lmerTest'
## The following object is masked from 'package:lme4':
##
## lmer
## The following object is masked from 'package:stats':
##
## step
library(xtable)
## Warning: package 'xtable' was built under R version 4.3.3
setwd("C:/Users/victo/OneDrive/Desktop/2025 Notes/P4P/Stats Analysis")
Reconstruct data
seminar_data <- read_excel("Seminar_Full_Response_Marked.xlsx", sheet = "Raw Marked Scores")
seminar_data <- seminar_data %>% mutate(Acoustics = "Real") %>%
mutate(room = paste("Seminar", distance, sep = ''))
foyer_data <- read_excel("Foyer_Full_Response_Marked.xlsx", sheet = "Raw Marked Scores")
foyer_data <- foyer_data %>% mutate(Acoustics = "Real") %>%
mutate(room = paste("Foyer", distance, sep = ''))
lecture_data <- read_excel("Lecture_Full_Response_Marked.xlsx", sheet = "Raw Marked Scores")
lecture_data <- lecture_data %>% mutate(Acoustics = "Real") %>%
mutate(room = paste("Lecture", distance, sep = ''))
dataset_combined <- rbind(seminar_data[c("participantNo","room","angle", "Acoustics","correct","participantGroup")], foyer_data[c("participantNo","room","angle","Acoustics", "correct","participantGroup")],lecture_data[c("participantNo","room","angle","Acoustics","correct","participantGroup")])
Plot raw data
# Overall score, but individual variation missing
mean_combined <- dataset_combined %>%
aggregate(correct ~ room+angle+Acoustics+participantGroup, mean)
mean_combined$room <- factor(mean_combined$room, levels = c("Seminar2m", "Foyer2m", "Lecture2m", "Seminar5m", "Foyer5m", "Lecture5m"))
mean_combined$angle <- factor(mean_combined$angle, levels = c(-90, 90, 180, 280))
ggplot(mean_combined, aes(x=angle, y=correct)) +
geom_line(aes(color = participantGroup, group = participantGroup), linewidth = 1) +
facet_wrap(~room) +
scale_x_discrete(name = "Direction of Noise Angle (Degrees)")+
scale_y_continuous(limits = c(0, 1), name = "Proportion Correct") + labs(color = "Participant Group")

ggsave("./Figures/raw_data.png", width = 8, height = 5, dpi=300)
Group data (preserve participant-level variation)
mean_combined_byParticipant <- dataset_combined %>%
aggregate(correct ~ participantNo+Acoustics+angle+room+participantGroup, ., mean)
Preliminary check for linear model
mean_combined_byParticipant$angle_factor <- as.factor(mean_combined_byParticipant$angle)
mean_combined_byParticipant$participantGroup_factor <- factor(mean_combined_byParticipant$participantGroup)
combined.model <- lmer(correct ~ angle_factor * room * participantGroup_factor + (1|participantNo), data = mean_combined_byParticipant, REML = FALSE)
#library(nlme)
resid_vals <- residuals(combined.model)
fitted_vals <- fitted(combined.model)
plot(fitted_vals, resid_vals,
xlab = "Fitted values", ylab = "Residuals",
main = "Residuals vs Fitted")
abline(h = 0, col = "red")

qqnorm(resid_vals)
qqline(resid_vals)

summary(combined.model)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: correct ~ angle_factor * room * participantGroup_factor + (1 |
## participantNo)
## Data: mean_combined_byParticipant
##
## AIC BIC logLik -2*log(L) df.resid
## -220.4 8.0 160.2 -320.4 662
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1299 -0.6719 0.0194 0.6495 3.3943
##
## Random effects:
## Groups Name Variance Std.Dev.
## participantNo (Intercept) 0.009248 0.09617
## Residual 0.034314 0.18524
## Number of obs: 712, groups: participantNo, 30
##
## Fixed effects:
## Estimate Std. Error
## (Intercept) 0.796581 0.053891
## angle_factor90 -0.082967 0.067641
## angle_factor180 -0.298596 0.067641
## angle_factor280 -0.266239 0.067641
## roomFoyer5m -0.336325 0.067641
## roomLecture2m -0.170549 0.068898
## roomLecture5m -0.470262 0.068898
## roomSeminar2m 0.164957 0.067641
## roomSeminar5m 0.084127 0.067641
## participantGroup_factorL2 -0.233883 0.076213
## angle_factor90:roomFoyer5m -0.002930 0.095658
## angle_factor180:roomFoyer5m 0.118010 0.095658
## angle_factor280:roomFoyer5m 0.073932 0.095658
## angle_factor90:roomLecture2m -0.086709 0.097352
## angle_factor180:roomLecture2m 0.030019 0.097352
## angle_factor280:roomLecture2m -0.088418 0.097352
## angle_factor90:roomLecture5m -0.089587 0.097352
## angle_factor180:roomLecture5m 0.120940 0.097352
## angle_factor280:roomLecture5m 0.079557 0.097352
## angle_factor90:roomSeminar2m -0.029853 0.095658
## angle_factor180:roomSeminar2m 0.228938 0.095658
## angle_factor280:roomSeminar2m 0.123016 0.095658
## angle_factor90:roomSeminar5m -0.165934 0.095658
## angle_factor180:roomSeminar5m 0.107082 0.095658
## angle_factor280:roomSeminar5m 0.046947 0.095658
## angle_factor90:participantGroup_factorL2 0.073687 0.095658
## angle_factor180:participantGroup_factorL2 0.145299 0.095658
## angle_factor280:participantGroup_factorL2 0.036447 0.095658
## roomFoyer5m:participantGroup_factorL2 0.198413 0.095658
## roomLecture2m:participantGroup_factorL2 -0.020659 0.096552
## roomLecture5m:participantGroup_factorL2 0.227221 0.096552
## roomSeminar2m:participantGroup_factorL2 0.156532 0.095658
## roomSeminar5m:participantGroup_factorL2 0.095055 0.095658
## angle_factor90:roomFoyer5m:participantGroup_factorL2 -0.046581 0.135281
## angle_factor180:roomFoyer5m:participantGroup_factorL2 0.059890 0.135281
## angle_factor280:roomFoyer5m:participantGroup_factorL2 -0.007814 0.135281
## angle_factor90:roomLecture2m:participantGroup_factorL2 0.108748 0.136484
## angle_factor180:roomLecture2m:participantGroup_factorL2 0.049285 0.136484
## angle_factor280:roomLecture2m:participantGroup_factorL2 0.212105 0.136484
## angle_factor90:roomLecture5m:participantGroup_factorL2 -0.065236 0.136484
## angle_factor180:roomLecture5m:participantGroup_factorL2 -0.215507 0.136484
## angle_factor280:roomLecture5m:participantGroup_factorL2 -0.063623 0.136484
## angle_factor90:roomSeminar2m:participantGroup_factorL2 -0.094628 0.135281
## angle_factor180:roomSeminar2m:participantGroup_factorL2 -0.035897 0.135281
## angle_factor280:roomSeminar2m:participantGroup_factorL2 0.042552 0.135281
## angle_factor90:roomSeminar5m:participantGroup_factorL2 -0.124359 0.135281
## angle_factor180:roomSeminar5m:participantGroup_factorL2 -0.061050 0.135281
## angle_factor280:roomSeminar5m:participantGroup_factorL2 0.012637 0.135281
## df t value
## (Intercept) 350.398927 14.781
## angle_factor90 681.835085 -1.227
## angle_factor180 681.835086 -4.414
## angle_factor280 681.835085 -3.936
## roomFoyer5m 681.835085 -4.972
## roomLecture2m 682.354678 -2.475
## roomLecture5m 682.354678 -6.825
## roomSeminar2m 681.835085 2.439
## roomSeminar5m 681.835085 1.244
## participantGroup_factorL2 350.398928 -3.069
## angle_factor90:roomFoyer5m 681.835085 -0.031
## angle_factor180:roomFoyer5m 681.835085 1.234
## angle_factor280:roomFoyer5m 681.835085 0.773
## angle_factor90:roomLecture2m 681.835086 -0.891
## angle_factor180:roomLecture2m 681.835086 0.308
## angle_factor280:roomLecture2m 681.835085 -0.908
## angle_factor90:roomLecture5m 681.835085 -0.920
## angle_factor180:roomLecture5m 681.835085 1.242
## angle_factor280:roomLecture5m 681.835085 0.817
## angle_factor90:roomSeminar2m 681.835085 -0.312
## angle_factor180:roomSeminar2m 681.835085 2.393
## angle_factor280:roomSeminar2m 681.835085 1.286
## angle_factor90:roomSeminar5m 681.835085 -1.735
## angle_factor180:roomSeminar5m 681.835085 1.119
## angle_factor280:roomSeminar5m 681.835085 0.491
## angle_factor90:participantGroup_factorL2 681.835085 0.770
## angle_factor180:participantGroup_factorL2 681.835086 1.519
## angle_factor280:participantGroup_factorL2 681.835085 0.381
## roomFoyer5m:participantGroup_factorL2 681.835085 2.074
## roomLecture2m:participantGroup_factorL2 682.100156 -0.214
## roomLecture5m:participantGroup_factorL2 682.100156 2.353
## roomSeminar2m:participantGroup_factorL2 681.835085 1.636
## roomSeminar5m:participantGroup_factorL2 681.835085 0.994
## angle_factor90:roomFoyer5m:participantGroup_factorL2 681.835085 -0.344
## angle_factor180:roomFoyer5m:participantGroup_factorL2 681.835085 0.443
## angle_factor280:roomFoyer5m:participantGroup_factorL2 681.835085 -0.058
## angle_factor90:roomLecture2m:participantGroup_factorL2 681.835085 0.797
## angle_factor180:roomLecture2m:participantGroup_factorL2 681.835085 0.361
## angle_factor280:roomLecture2m:participantGroup_factorL2 681.835085 1.554
## angle_factor90:roomLecture5m:participantGroup_factorL2 681.835085 -0.478
## angle_factor180:roomLecture5m:participantGroup_factorL2 681.835085 -1.579
## angle_factor280:roomLecture5m:participantGroup_factorL2 681.835085 -0.466
## angle_factor90:roomSeminar2m:participantGroup_factorL2 681.835085 -0.699
## angle_factor180:roomSeminar2m:participantGroup_factorL2 681.835085 -0.265
## angle_factor280:roomSeminar2m:participantGroup_factorL2 681.835085 0.315
## angle_factor90:roomSeminar5m:participantGroup_factorL2 681.835085 -0.919
## angle_factor180:roomSeminar5m:participantGroup_factorL2 681.835085 -0.451
## angle_factor280:roomSeminar5m:participantGroup_factorL2 681.835085 0.093
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## angle_factor90 0.22040
## angle_factor180 1.18e-05 ***
## angle_factor280 9.13e-05 ***
## roomFoyer5m 8.38e-07 ***
## roomLecture2m 0.01355 *
## roomLecture5m 1.94e-11 ***
## roomSeminar2m 0.01499 *
## roomSeminar5m 0.21403
## participantGroup_factorL2 0.00232 **
## angle_factor90:roomFoyer5m 0.97557
## angle_factor180:roomFoyer5m 0.21776
## angle_factor280:roomFoyer5m 0.43987
## angle_factor90:roomLecture2m 0.37342
## angle_factor180:roomLecture2m 0.75790
## angle_factor280:roomLecture2m 0.36408
## angle_factor90:roomLecture5m 0.35777
## angle_factor180:roomLecture5m 0.21455
## angle_factor280:roomLecture5m 0.41409
## angle_factor90:roomSeminar2m 0.75507
## angle_factor180:roomSeminar2m 0.01697 *
## angle_factor280:roomSeminar2m 0.19888
## angle_factor90:roomSeminar5m 0.08325 .
## angle_factor180:roomSeminar5m 0.26336
## angle_factor280:roomSeminar5m 0.62374
## angle_factor90:participantGroup_factorL2 0.44138
## angle_factor180:participantGroup_factorL2 0.12924
## angle_factor280:participantGroup_factorL2 0.70331
## roomFoyer5m:participantGroup_factorL2 0.03844 *
## roomLecture2m:participantGroup_factorL2 0.83063
## roomLecture5m:participantGroup_factorL2 0.01889 *
## roomSeminar2m:participantGroup_factorL2 0.10222
## roomSeminar5m:participantGroup_factorL2 0.32073
## angle_factor90:roomFoyer5m:participantGroup_factorL2 0.73071
## angle_factor180:roomFoyer5m:participantGroup_factorL2 0.65812
## angle_factor280:roomFoyer5m:participantGroup_factorL2 0.95395
## angle_factor90:roomLecture2m:participantGroup_factorL2 0.42586
## angle_factor180:roomLecture2m:participantGroup_factorL2 0.71813
## angle_factor280:roomLecture2m:participantGroup_factorL2 0.12063
## angle_factor90:roomLecture5m:participantGroup_factorL2 0.63282
## angle_factor180:roomLecture5m:participantGroup_factorL2 0.11480
## angle_factor280:roomLecture5m:participantGroup_factorL2 0.64125
## angle_factor90:roomSeminar2m:participantGroup_factorL2 0.48449
## angle_factor180:roomSeminar2m:participantGroup_factorL2 0.79082
## angle_factor280:roomSeminar2m:participantGroup_factorL2 0.75320
## angle_factor90:roomSeminar5m:participantGroup_factorL2 0.35828
## angle_factor180:roomSeminar5m:participantGroup_factorL2 0.65193
## angle_factor280:roomSeminar5m:participantGroup_factorL2 0.92560
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 48 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
#xtable(as.data.frame(coef(summary(combined_updated_model))),
#caption = "Fixed Effects from Combined LME Model")
#glance(combined.model)
#library(knitr)
#library(kableExtra)
#fixed_effects <- as.data.frame(coef(summary(combined_updated_model)))
#fixed_effects %>%
#kable(format = "latex", booktabs = TRUE, caption = "Fixed Effects from Combined Model") %>%
#kable_styling(latex_options = c("striped", "hold_position"))
Simplify model
step.model <- step(combined.model)
final.model <- get_model(step.model)
summary(final.model)
## Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's
## method [lmerModLmerTest]
## Formula: correct ~ angle_factor + room + participantGroup_factor + (1 |
## participantNo) + angle_factor:room + angle_factor:participantGroup_factor +
## room:participantGroup_factor
## Data: mean_combined_byParticipant
##
## AIC BIC logLik -2*log(L) df.resid
## -238.0 -78.2 154.0 -308.0 677
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0870 -0.6408 0.0321 0.6570 3.4137
##
## Random effects:
## Groups Name Variance Std.Dev.
## participantNo (Intercept) 0.009221 0.09602
## Residual 0.034945 0.18693
## Number of obs: 712, groups: participantNo, 30
##
## Fixed effects:
## Estimate Std. Error df
## (Intercept) 0.79173 0.04710 241.66293
## angle_factor90 -0.06412 0.05218 681.83277
## angle_factor180 -0.28194 0.05218 681.83277
## angle_factor280 -0.28232 0.05218 681.83277
## roomFoyer5m -0.33701 0.05396 681.83277
## roomLecture2m -0.21854 0.05470 682.68374
## roomLecture5m -0.42586 0.05470 682.68374
## roomSeminar2m 0.17595 0.05396 681.83277
## roomSeminar5m 0.10572 0.05396 681.83277
## participantGroup_factorL2 -0.22417 0.05462 124.07811
## angle_factor90:roomFoyer5m -0.02622 0.06826 681.83277
## angle_factor180:roomFoyer5m 0.14795 0.06826 681.83277
## angle_factor280:roomFoyer5m 0.07002 0.06826 681.83277
## angle_factor90:roomLecture2m -0.02981 0.06885 681.83277
## angle_factor180:roomLecture2m 0.05609 0.06885 681.83277
## angle_factor280:roomLecture2m 0.02074 0.06885 681.83277
## angle_factor90:roomLecture5m -0.12268 0.06885 681.83277
## angle_factor180:roomLecture5m 0.01005 0.06885 681.83277
## angle_factor280:roomLecture5m 0.04609 0.06885 681.83277
## angle_factor90:roomSeminar2m -0.07717 0.06826 681.83277
## angle_factor180:roomSeminar2m 0.21099 0.06826 681.83277
## angle_factor280:roomSeminar2m 0.14429 0.06826 681.83277
## angle_factor90:roomSeminar5m -0.22811 0.06826 681.83277
## angle_factor180:roomSeminar5m 0.07656 0.06826 681.83277
## angle_factor280:roomSeminar5m 0.05327 0.06826 681.83277
## angle_factor90:participantGroup_factorL2 0.03599 0.03964 681.83277
## angle_factor180:participantGroup_factorL2 0.11199 0.03964 681.83277
## angle_factor280:participantGroup_factorL2 0.06861 0.03964 681.83277
## roomFoyer5m:participantGroup_factorL2 0.19979 0.04827 681.83277
## roomLecture2m:participantGroup_factorL2 0.07184 0.04878 682.90113
## roomLecture5m:participantGroup_factorL2 0.14109 0.04878 682.90113
## roomSeminar2m:participantGroup_factorL2 0.13454 0.04827 681.83277
## roomSeminar5m:participantGroup_factorL2 0.05186 0.04827 681.83277
## t value Pr(>|t|)
## (Intercept) 16.811 < 2e-16 ***
## angle_factor90 -1.229 0.219530
## angle_factor180 -5.404 9.04e-08 ***
## angle_factor280 -5.411 8.69e-08 ***
## roomFoyer5m -6.245 7.45e-10 ***
## roomLecture2m -3.995 7.17e-05 ***
## roomLecture5m -7.785 2.59e-14 ***
## roomSeminar2m 3.261 0.001167 **
## roomSeminar5m 1.959 0.050500 .
## participantGroup_factorL2 -4.104 7.30e-05 ***
## angle_factor90:roomFoyer5m -0.384 0.700994
## angle_factor180:roomFoyer5m 2.168 0.030538 *
## angle_factor280:roomFoyer5m 1.026 0.305319
## angle_factor90:roomLecture2m -0.433 0.665166
## angle_factor180:roomLecture2m 0.815 0.415570
## angle_factor280:roomLecture2m 0.301 0.763352
## angle_factor90:roomLecture5m -1.782 0.075213 .
## angle_factor180:roomLecture5m 0.146 0.884038
## angle_factor280:roomLecture5m 0.670 0.503401
## angle_factor90:roomSeminar2m -1.131 0.258659
## angle_factor180:roomSeminar2m 3.091 0.002076 **
## angle_factor280:roomSeminar2m 2.114 0.034887 *
## angle_factor90:roomSeminar5m -3.342 0.000878 ***
## angle_factor180:roomSeminar5m 1.122 0.262442
## angle_factor280:roomSeminar5m 0.780 0.435453
## angle_factor90:participantGroup_factorL2 0.908 0.364151
## angle_factor180:participantGroup_factorL2 2.825 0.004861 **
## angle_factor280:participantGroup_factorL2 1.731 0.083935 .
## roomFoyer5m:participantGroup_factorL2 4.139 3.92e-05 ***
## roomLecture2m:participantGroup_factorL2 1.473 0.141309
## roomLecture5m:participantGroup_factorL2 2.892 0.003946 **
## roomSeminar2m:participantGroup_factorL2 2.787 0.005461 **
## roomSeminar5m:participantGroup_factorL2 1.074 0.282980
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 33 > 12.
## Use print(x, correlation=TRUE) or
## vcov(x) if you need it
Update model
combined_updated_model <- lmer(correct ~ angle_factor + room + participantGroup_factor + (1 | participantNo) + angle_factor:room + room:participantGroup_factor,
data = mean_combined_byParticipant, REML = FALSE)
mean_combined_byParticipant$room <- factor(mean_combined_byParticipant$room, levels = c("Seminar2m", "Foyer2m", "Lecture2m", "Seminar5m", "Foyer5m", "Lecture5m"))
Plot the predicted model
emmip(combined_updated_model, participantGroup_factor ~ angle_factor | room, style="factor", CIs=TRUE, levels=0.99) +
geom_line(linetype = "solid",size = 2) +
geom_point(size = 4) +
scale_y_continuous(name = "Linear Prediction of Proportion Correct", breaks = c(0,0.25,0.5,0.75,1)) +
scale_x_discrete(name = "Direction of Noise Angle (Degree)", breaks = c(-90, 90, 180, 280)) + labs(color = "Participant Group", shape = "Participant Group")
## Warning: `aes_()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`
## ℹ The deprecated feature was likely used in the emmeans package.
## Please report the issue at <https://github.com/rvlenth/emmeans/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

ggsave("./Figures/emmip2.png", width = 8, height = 5, dpi=300)
Likelihood ratio test
no_participantGroup_model <- lmer(correct ~ angle_factor * room +angle_factor:room + (1 | participantNo),
data = mean_combined_byParticipant, REML = FALSE)
no_angle_model <- lmer(correct ~ participantGroup_factor * room + (1 | participantNo),
data = mean_combined_byParticipant, REML = FALSE)
anova(combined_updated_model, no_participantGroup_model)
## Data: mean_combined_byParticipant
## Models:
## no_participantGroup_model: correct ~ angle_factor * room + angle_factor:room + (1 | participantNo)
## combined_updated_model: correct ~ angle_factor + room + participantGroup_factor + (1 | participantNo) + angle_factor:room + room:participantGroup_factor
## npar AIC BIC logLik -2*log(L) Chisq Df
## no_participantGroup_model 26 -222.57 -103.797 137.28 -274.57
## combined_updated_model 32 -235.42 -89.242 149.71 -299.42 24.854 6
## Pr(>Chisq)
## no_participantGroup_model
## combined_updated_model 0.0003634 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(combined_updated_model, no_angle_model)
## Data: mean_combined_byParticipant
## Models:
## no_angle_model: correct ~ participantGroup_factor * room + (1 | participantNo)
## combined_updated_model: correct ~ angle_factor + room + participantGroup_factor + (1 | participantNo) + angle_factor:room + room:participantGroup_factor
## npar AIC BIC logLik -2*log(L) Chisq Df
## no_angle_model 14 -139.37 -75.415 83.684 -167.37
## combined_updated_model 32 -235.42 -89.242 149.710 -299.42 132.05 18
## Pr(>Chisq)
## no_angle_model
## combined_updated_model < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Posthoc pariwise comparison
emmeans(combined_updated_model, pairwise ~ participantGroup_factor | room*angle_factor, type = "response")$contrasts
## room = Foyer2m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.0505 89.6 3.366 0.0011
##
## room = Foyer5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.0505 89.6 -0.589 0.5572
##
## room = Lecture2m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0982 0.0510 93.0 1.925 0.0573
##
## room = Lecture5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0290 0.0505 90.5 0.573 0.5678
##
## room = Seminar2m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.0505 89.6 0.703 0.4841
##
## room = Seminar5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.0510 91.8 2.316 0.0228
##
## room = Foyer2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.0505 89.6 3.366 0.0011
##
## room = Foyer5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.0505 89.6 -0.589 0.5572
##
## room = Lecture2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0982 0.0510 93.0 1.925 0.0573
##
## room = Lecture5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0290 0.0505 90.5 0.573 0.5678
##
## room = Seminar2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.0505 89.6 0.703 0.4841
##
## room = Seminar5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.0510 91.8 2.316 0.0228
##
## room = Foyer2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.0505 89.6 3.366 0.0011
##
## room = Foyer5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.0505 89.6 -0.589 0.5572
##
## room = Lecture2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0982 0.0510 93.0 1.925 0.0573
##
## room = Lecture5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0290 0.0505 90.5 0.573 0.5678
##
## room = Seminar2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.0505 89.6 0.703 0.4841
##
## room = Seminar5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.0510 91.8 2.316 0.0228
##
## room = Foyer2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.0505 89.6 3.366 0.0011
##
## room = Foyer5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.0505 89.6 -0.589 0.5572
##
## room = Lecture2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0982 0.0510 93.0 1.925 0.0573
##
## room = Lecture5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0290 0.0505 90.5 0.573 0.5678
##
## room = Seminar2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.0505 89.6 0.703 0.4841
##
## room = Seminar5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.0510 91.8 2.316 0.0228
##
## Degrees-of-freedom method: kenward-roger
emmip(combined_updated_model, participantGroup_factor ~ room|angle_factor, type = "response", CIs = TRUE, levels = 0.99) + theme(axis.text.x = element_text(angle = 45, hjust = 1))

emmeans(combined_updated_model, pairwise ~ angle_factor | room * participantGroup_factor, type = "response")$contrasts
## room = Foyer2m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.04612 0.0496 711 0.930 0.7888
## (angle_factor-90) - angle_factor180 0.22595 0.0496 711 4.555 <.0001
## (angle_factor-90) - angle_factor280 0.24802 0.0496 711 5.000 <.0001
## angle_factor90 - angle_factor180 0.17982 0.0496 711 3.625 0.0018
## angle_factor90 - angle_factor280 0.20189 0.0496 711 4.070 0.0003
## angle_factor180 - angle_factor280 0.02207 0.0496 711 0.445 0.9706
##
## room = Foyer5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07234 0.0496 711 1.459 0.4633
## (angle_factor-90) - angle_factor180 0.07799 0.0496 711 1.572 0.3951
## (angle_factor-90) - angle_factor280 0.17799 0.0496 711 3.588 0.0020
## angle_factor90 - angle_factor180 0.00565 0.0496 711 0.114 0.9995
## angle_factor90 - angle_factor280 0.10565 0.0496 711 2.130 0.1446
## angle_factor180 - angle_factor280 0.10000 0.0496 711 2.016 0.1830
##
## room = Lecture2m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07531 0.0504 711 1.493 0.4423
## (angle_factor-90) - angle_factor180 0.16793 0.0504 711 3.329 0.0051
## (angle_factor-90) - angle_factor280 0.22610 0.0504 711 4.482 0.0001
## angle_factor90 - angle_factor180 0.09262 0.0504 711 1.836 0.2573
## angle_factor90 - angle_factor280 0.15078 0.0504 711 2.989 0.0153
## angle_factor180 - angle_factor280 0.05817 0.0504 711 1.153 0.6567
##
## room = Lecture5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.16818 0.0496 665 3.391 0.0041
## (angle_factor-90) - angle_factor180 0.21397 0.0496 665 4.314 0.0001
## (angle_factor-90) - angle_factor280 0.20074 0.0496 665 4.047 0.0003
## angle_factor90 - angle_factor180 0.04579 0.0496 665 0.923 0.7925
## angle_factor90 - angle_factor280 0.03256 0.0496 665 0.656 0.9133
## angle_factor180 - angle_factor280 -0.01323 0.0496 665 -0.267 0.9934
##
## room = Seminar2m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.12329 0.0496 711 2.486 0.0630
## (angle_factor-90) - angle_factor180 0.01496 0.0496 711 0.302 0.9905
## (angle_factor-90) - angle_factor280 0.10372 0.0496 711 2.091 0.1569
## angle_factor90 - angle_factor180 -0.10833 0.0496 711 -2.184 0.1286
## angle_factor90 - angle_factor280 -0.01957 0.0496 711 -0.394 0.9792
## angle_factor180 - angle_factor280 0.08877 0.0496 711 1.790 0.2791
##
## room = Seminar5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.27424 0.0504 761 5.436 <.0001
## (angle_factor-90) - angle_factor180 0.14939 0.0504 761 2.961 0.0166
## (angle_factor-90) - angle_factor280 0.19475 0.0504 761 3.860 0.0007
## angle_factor90 - angle_factor180 -0.12485 0.0504 761 -2.475 0.0647
## angle_factor90 - angle_factor280 -0.07949 0.0504 761 -1.576 0.3932
## angle_factor180 - angle_factor280 0.04536 0.0504 761 0.899 0.8053
##
## room = Foyer2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.04612 0.0496 711 0.930 0.7888
## (angle_factor-90) - angle_factor180 0.22595 0.0496 711 4.555 <.0001
## (angle_factor-90) - angle_factor280 0.24802 0.0496 711 5.000 <.0001
## angle_factor90 - angle_factor180 0.17982 0.0496 711 3.625 0.0018
## angle_factor90 - angle_factor280 0.20189 0.0496 711 4.070 0.0003
## angle_factor180 - angle_factor280 0.02207 0.0496 711 0.445 0.9706
##
## room = Foyer5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07234 0.0496 711 1.459 0.4633
## (angle_factor-90) - angle_factor180 0.07799 0.0496 711 1.572 0.3951
## (angle_factor-90) - angle_factor280 0.17799 0.0496 711 3.588 0.0020
## angle_factor90 - angle_factor180 0.00565 0.0496 711 0.114 0.9995
## angle_factor90 - angle_factor280 0.10565 0.0496 711 2.130 0.1446
## angle_factor180 - angle_factor280 0.10000 0.0496 711 2.016 0.1830
##
## room = Lecture2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07531 0.0504 711 1.493 0.4423
## (angle_factor-90) - angle_factor180 0.16793 0.0504 711 3.329 0.0051
## (angle_factor-90) - angle_factor280 0.22610 0.0504 711 4.482 0.0001
## angle_factor90 - angle_factor180 0.09262 0.0504 711 1.836 0.2573
## angle_factor90 - angle_factor280 0.15078 0.0504 711 2.989 0.0153
## angle_factor180 - angle_factor280 0.05817 0.0504 711 1.153 0.6567
##
## room = Lecture5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.16818 0.0496 665 3.391 0.0041
## (angle_factor-90) - angle_factor180 0.21397 0.0496 665 4.314 0.0001
## (angle_factor-90) - angle_factor280 0.20074 0.0496 665 4.047 0.0003
## angle_factor90 - angle_factor180 0.04579 0.0496 665 0.923 0.7925
## angle_factor90 - angle_factor280 0.03256 0.0496 665 0.656 0.9133
## angle_factor180 - angle_factor280 -0.01323 0.0496 665 -0.267 0.9934
##
## room = Seminar2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.12329 0.0496 711 2.486 0.0630
## (angle_factor-90) - angle_factor180 0.01496 0.0496 711 0.302 0.9905
## (angle_factor-90) - angle_factor280 0.10372 0.0496 711 2.091 0.1569
## angle_factor90 - angle_factor180 -0.10833 0.0496 711 -2.184 0.1286
## angle_factor90 - angle_factor280 -0.01957 0.0496 711 -0.394 0.9792
## angle_factor180 - angle_factor280 0.08877 0.0496 711 1.790 0.2791
##
## room = Seminar5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.27424 0.0504 761 5.436 <.0001
## (angle_factor-90) - angle_factor180 0.14939 0.0504 761 2.961 0.0166
## (angle_factor-90) - angle_factor280 0.19475 0.0504 761 3.860 0.0007
## angle_factor90 - angle_factor180 -0.12485 0.0504 761 -2.475 0.0647
## angle_factor90 - angle_factor280 -0.07949 0.0504 761 -1.576 0.3932
## angle_factor180 - angle_factor280 0.04536 0.0504 761 0.899 0.8053
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 4 estimates