# 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
## -214.3 14.6 157.2 -314.3 670
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1070 -0.6603 0.0313 0.6604 3.3736
##
## Random effects:
## Groups Name Variance Std.Dev.
## participantNo (Intercept) 0.008772 0.09366
## Residual 0.034883 0.18677
## Number of obs: 720, groups: participantNo, 30
##
## Fixed effects:
## Estimate Std. Error
## (Intercept) 0.796581 0.053948
## angle_factor90 -0.082967 0.068199
## angle_factor180 -0.298596 0.068199
## angle_factor280 -0.266239 0.068199
## roomFoyer5m -0.336325 0.068199
## roomLecture2m -0.193346 0.068199
## roomLecture5m -0.442308 0.068199
## roomSeminar2m 0.164957 0.068199
## roomSeminar5m 0.084127 0.068199
## participantGroup_factorL2 -0.233883 0.076294
## angle_factor90:roomFoyer5m -0.002930 0.096448
## angle_factor180:roomFoyer5m 0.118010 0.096448
## angle_factor280:roomFoyer5m 0.073932 0.096448
## angle_factor90:roomLecture2m -0.070269 0.096448
## angle_factor180:roomLecture2m 0.082112 0.096448
## angle_factor280:roomLecture2m -0.052808 0.096448
## angle_factor90:roomLecture5m -0.107998 0.096448
## angle_factor180:roomLecture5m 0.096886 0.096448
## angle_factor280:roomLecture5m 0.078755 0.096448
## angle_factor90:roomSeminar2m -0.029853 0.096448
## angle_factor180:roomSeminar2m 0.228938 0.096448
## angle_factor280:roomSeminar2m 0.123016 0.096448
## angle_factor90:roomSeminar5m -0.165934 0.096448
## angle_factor180:roomSeminar5m 0.107082 0.096448
## angle_factor280:roomSeminar5m 0.046947 0.096448
## angle_factor90:participantGroup_factorL2 0.073687 0.096448
## angle_factor180:participantGroup_factorL2 0.145299 0.096448
## angle_factor280:participantGroup_factorL2 0.036447 0.096448
## roomFoyer5m:participantGroup_factorL2 0.198413 0.096448
## roomLecture2m:participantGroup_factorL2 0.002137 0.096448
## roomLecture5m:participantGroup_factorL2 0.199267 0.096448
## roomSeminar2m:participantGroup_factorL2 0.156532 0.096448
## roomSeminar5m:participantGroup_factorL2 0.095055 0.096448
## angle_factor90:roomFoyer5m:participantGroup_factorL2 -0.046581 0.136398
## angle_factor180:roomFoyer5m:participantGroup_factorL2 0.059890 0.136398
## angle_factor280:roomFoyer5m:participantGroup_factorL2 -0.007814 0.136398
## angle_factor90:roomLecture2m:participantGroup_factorL2 0.092308 0.136398
## angle_factor180:roomLecture2m:participantGroup_factorL2 -0.002808 0.136398
## angle_factor280:roomLecture2m:participantGroup_factorL2 0.176496 0.136398
## angle_factor90:roomLecture5m:participantGroup_factorL2 -0.046825 0.136398
## angle_factor180:roomLecture5m:participantGroup_factorL2 -0.191453 0.136398
## angle_factor280:roomLecture5m:participantGroup_factorL2 -0.062821 0.136398
## angle_factor90:roomSeminar2m:participantGroup_factorL2 -0.094628 0.136398
## angle_factor180:roomSeminar2m:participantGroup_factorL2 -0.035897 0.136398
## angle_factor280:roomSeminar2m:participantGroup_factorL2 0.042552 0.136398
## angle_factor90:roomSeminar5m:participantGroup_factorL2 -0.124359 0.136398
## angle_factor180:roomSeminar5m:participantGroup_factorL2 -0.061050 0.136398
## angle_factor280:roomSeminar5m:participantGroup_factorL2 0.012637 0.136398
## df t value
## (Intercept) 373.303785 14.766
## angle_factor90 690.000000 -1.217
## angle_factor180 690.000000 -4.378
## angle_factor280 690.000000 -3.904
## roomFoyer5m 690.000000 -4.932
## roomLecture2m 690.000000 -2.835
## roomLecture5m 690.000000 -6.486
## roomSeminar2m 690.000000 2.419
## roomSeminar5m 690.000000 1.234
## participantGroup_factorL2 373.303785 -3.066
## angle_factor90:roomFoyer5m 690.000000 -0.030
## angle_factor180:roomFoyer5m 690.000000 1.224
## angle_factor280:roomFoyer5m 690.000000 0.767
## angle_factor90:roomLecture2m 690.000000 -0.729
## angle_factor180:roomLecture2m 690.000000 0.851
## angle_factor280:roomLecture2m 690.000000 -0.548
## angle_factor90:roomLecture5m 690.000000 -1.120
## angle_factor180:roomLecture5m 690.000000 1.005
## angle_factor280:roomLecture5m 690.000000 0.817
## angle_factor90:roomSeminar2m 690.000000 -0.310
## angle_factor180:roomSeminar2m 690.000000 2.374
## angle_factor280:roomSeminar2m 690.000000 1.275
## angle_factor90:roomSeminar5m 690.000000 -1.720
## angle_factor180:roomSeminar5m 690.000000 1.110
## angle_factor280:roomSeminar5m 690.000000 0.487
## angle_factor90:participantGroup_factorL2 690.000000 0.764
## angle_factor180:participantGroup_factorL2 690.000000 1.507
## angle_factor280:participantGroup_factorL2 690.000000 0.378
## roomFoyer5m:participantGroup_factorL2 690.000000 2.057
## roomLecture2m:participantGroup_factorL2 690.000000 0.022
## roomLecture5m:participantGroup_factorL2 690.000000 2.066
## roomSeminar2m:participantGroup_factorL2 690.000000 1.623
## roomSeminar5m:participantGroup_factorL2 690.000000 0.986
## angle_factor90:roomFoyer5m:participantGroup_factorL2 690.000000 -0.342
## angle_factor180:roomFoyer5m:participantGroup_factorL2 690.000000 0.439
## angle_factor280:roomFoyer5m:participantGroup_factorL2 690.000000 -0.057
## angle_factor90:roomLecture2m:participantGroup_factorL2 690.000000 0.677
## angle_factor180:roomLecture2m:participantGroup_factorL2 690.000000 -0.021
## angle_factor280:roomLecture2m:participantGroup_factorL2 690.000000 1.294
## angle_factor90:roomLecture5m:participantGroup_factorL2 690.000000 -0.343
## angle_factor180:roomLecture5m:participantGroup_factorL2 690.000000 -1.404
## angle_factor280:roomLecture5m:participantGroup_factorL2 690.000000 -0.461
## angle_factor90:roomSeminar2m:participantGroup_factorL2 690.000000 -0.694
## angle_factor180:roomSeminar2m:participantGroup_factorL2 690.000000 -0.263
## angle_factor280:roomSeminar2m:participantGroup_factorL2 690.000000 0.312
## angle_factor90:roomSeminar5m:participantGroup_factorL2 690.000000 -0.912
## angle_factor180:roomSeminar5m:participantGroup_factorL2 690.000000 -0.448
## angle_factor280:roomSeminar5m:participantGroup_factorL2 690.000000 0.093
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## angle_factor90 0.224193
## angle_factor180 1.38e-05 ***
## angle_factor280 0.000104 ***
## roomFoyer5m 1.02e-06 ***
## roomLecture2m 0.004716 **
## roomLecture5m 1.69e-10 ***
## roomSeminar2m 0.015831 *
## roomSeminar5m 0.217789
## participantGroup_factorL2 0.002331 **
## angle_factor90:roomFoyer5m 0.975770
## angle_factor180:roomFoyer5m 0.221535
## angle_factor280:roomFoyer5m 0.443613
## angle_factor90:roomLecture2m 0.466514
## angle_factor180:roomLecture2m 0.394861
## angle_factor280:roomLecture2m 0.584189
## angle_factor90:roomLecture5m 0.263209
## angle_factor180:roomLecture5m 0.315466
## angle_factor280:roomLecture5m 0.414466
## angle_factor90:roomSeminar2m 0.757012
## angle_factor180:roomSeminar2m 0.017884 *
## angle_factor280:roomSeminar2m 0.202573
## angle_factor90:roomSeminar5m 0.085798 .
## angle_factor180:roomSeminar5m 0.267275
## angle_factor280:roomSeminar5m 0.626578
## angle_factor90:participantGroup_factorL2 0.445120
## angle_factor180:participantGroup_factorL2 0.132395
## angle_factor280:participantGroup_factorL2 0.705626
## roomFoyer5m:participantGroup_factorL2 0.040042 *
## roomLecture2m:participantGroup_factorL2 0.982331
## roomLecture5m:participantGroup_factorL2 0.039195 *
## roomSeminar2m:participantGroup_factorL2 0.105051
## roomSeminar5m:participantGroup_factorL2 0.324695
## angle_factor90:roomFoyer5m:participantGroup_factorL2 0.732823
## angle_factor180:roomFoyer5m:participantGroup_factorL2 0.660738
## angle_factor280:roomFoyer5m:participantGroup_factorL2 0.954330
## angle_factor90:roomLecture2m:participantGroup_factorL2 0.498788
## angle_factor180:roomLecture2m:participantGroup_factorL2 0.983579
## angle_factor280:roomLecture2m:participantGroup_factorL2 0.196105
## angle_factor90:roomLecture5m:participantGroup_factorL2 0.731477
## angle_factor180:roomLecture5m:participantGroup_factorL2 0.160876
## angle_factor280:roomLecture5m:participantGroup_factorL2 0.645253
## angle_factor90:roomSeminar2m:participantGroup_factorL2 0.488064
## angle_factor180:roomSeminar2m:participantGroup_factorL2 0.792489
## angle_factor280:roomSeminar2m:participantGroup_factorL2 0.755158
## angle_factor90:roomSeminar5m:participantGroup_factorL2 0.362225
## angle_factor180:roomSeminar5m:participantGroup_factorL2 0.654590
## angle_factor280:roomSeminar5m:participantGroup_factorL2 0.926208
## ---
## 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 + room:participantGroup_factor
## Data: mean_combined_byParticipant
##
## AIC BIC logLik -2*log(L) df.resid
## -231.6 -85.0 147.8 -295.6 688
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.8985 -0.6659 0.0313 0.6391 3.5255
##
## Random effects:
## Groups Name Variance Std.Dev.
## participantNo (Intercept) 0.008732 0.09345
## Residual 0.035845 0.18933
## Number of obs: 720, groups: participantNo, 30
##
## Fixed effects:
## Estimate Std. Error df t value
## (Intercept) 0.76465 0.04556 235.33523 16.784
## angle_factor90 -0.04612 0.04888 690.00000 -0.944
## angle_factor180 -0.22595 0.04888 690.00000 -4.622
## angle_factor280 -0.24802 0.04888 690.00000 -5.074
## roomFoyer5m -0.33701 0.05465 690.00000 -6.166
## roomLecture2m -0.22659 0.05465 690.00000 -4.146
## roomLecture5m -0.40467 0.05465 690.00000 -7.404
## roomSeminar2m 0.17595 0.05465 690.00000 3.219
## roomSeminar5m 0.10572 0.05465 690.00000 1.934
## participantGroup_factorL2 -0.17002 0.04857 87.77951 -3.501
## angle_factor90:roomFoyer5m -0.02622 0.06913 690.00000 -0.379
## angle_factor180:roomFoyer5m 0.14796 0.06913 690.00000 2.140
## angle_factor280:roomFoyer5m 0.07002 0.06913 690.00000 1.013
## angle_factor90:roomLecture2m -0.02412 0.06913 690.00000 -0.349
## angle_factor180:roomLecture2m 0.08071 0.06913 690.00000 1.167
## angle_factor280:roomLecture2m 0.03544 0.06913 690.00000 0.513
## angle_factor90:roomLecture5m -0.13141 0.06913 690.00000 -1.901
## angle_factor180:roomLecture5m 0.00116 0.06913 690.00000 0.017
## angle_factor280:roomLecture5m 0.04734 0.06913 690.00000 0.685
## angle_factor90:roomSeminar2m -0.07717 0.06913 690.00000 -1.116
## angle_factor180:roomSeminar2m 0.21099 0.06913 690.00000 3.052
## angle_factor280:roomSeminar2m 0.14429 0.06913 690.00000 2.087
## angle_factor90:roomSeminar5m -0.22811 0.06913 690.00000 -3.300
## angle_factor180:roomSeminar5m 0.07656 0.06913 690.00000 1.107
## angle_factor280:roomSeminar5m 0.05327 0.06913 690.00000 0.770
## roomFoyer5m:participantGroup_factorL2 0.19979 0.04888 690.00000 4.087
## roomLecture2m:participantGroup_factorL2 0.06864 0.04888 690.00000 1.404
## roomLecture5m:participantGroup_factorL2 0.12399 0.04888 690.00000 2.536
## roomSeminar2m:participantGroup_factorL2 0.13454 0.04888 690.00000 2.752
## roomSeminar5m:participantGroup_factorL2 0.05186 0.04888 690.00000 1.061
## Pr(>|t|)
## (Intercept) < 2e-16 ***
## angle_factor90 0.345741
## angle_factor180 4.53e-06 ***
## angle_factor280 5.02e-07 ***
## roomFoyer5m 1.19e-09 ***
## roomLecture2m 3.80e-05 ***
## roomLecture5m 3.85e-13 ***
## roomSeminar2m 0.001345 **
## roomSeminar5m 0.053470 .
## participantGroup_factorL2 0.000732 ***
## angle_factor90:roomFoyer5m 0.704591
## angle_factor180:roomFoyer5m 0.032691 *
## angle_factor280:roomFoyer5m 0.311461
## angle_factor90:roomLecture2m 0.727330
## angle_factor180:roomLecture2m 0.243434
## angle_factor280:roomLecture2m 0.608371
## angle_factor90:roomLecture5m 0.057738 .
## angle_factor180:roomLecture5m 0.986618
## angle_factor280:roomLecture5m 0.493677
## angle_factor90:roomSeminar2m 0.264714
## angle_factor180:roomSeminar2m 0.002361 **
## angle_factor280:roomSeminar2m 0.037238 *
## angle_factor90:roomSeminar5m 0.001018 **
## angle_factor180:roomSeminar5m 0.268509
## angle_factor280:roomSeminar5m 0.441269
## roomFoyer5m:participantGroup_factorL2 4.88e-05 ***
## roomLecture2m:participantGroup_factorL2 0.160753
## roomLecture5m:participantGroup_factorL2 0.011417 *
## roomSeminar2m:participantGroup_factorL2 0.006075 **
## roomSeminar5m:participantGroup_factorL2 0.289096
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation matrix not shown by default, as p = 30 > 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 -219.28 -100.220 135.64 -271.28
## combined_updated_model 32 -231.58 -85.045 147.79 -295.58 24.301 6
## Pr(>Chisq)
## no_participantGroup_model
## combined_updated_model 0.0004598 ***
## ---
## 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 -137.29 -73.182 82.646 -165.29
## combined_updated_model 32 -231.58 -85.045 147.791 -295.58 130.29 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.05 94 3.401 0.0010
##
## room = Foyer5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.05 94 -0.595 0.5530
##
## room = Lecture2m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1014 0.05 94 2.028 0.0454
##
## room = Lecture5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0460 0.05 94 0.921 0.3595
##
## room = Seminar2m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.05 94 0.710 0.4795
##
## room = Seminar5m, angle_factor = -90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.05 94 2.364 0.0201
##
## room = Foyer2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.05 94 3.401 0.0010
##
## room = Foyer5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.05 94 -0.595 0.5530
##
## room = Lecture2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1014 0.05 94 2.028 0.0454
##
## room = Lecture5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0460 0.05 94 0.921 0.3595
##
## room = Seminar2m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.05 94 0.710 0.4795
##
## room = Seminar5m, angle_factor = 90:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.05 94 2.364 0.0201
##
## room = Foyer2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.05 94 3.401 0.0010
##
## room = Foyer5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.05 94 -0.595 0.5530
##
## room = Lecture2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1014 0.05 94 2.028 0.0454
##
## room = Lecture5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0460 0.05 94 0.921 0.3595
##
## room = Seminar2m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.05 94 0.710 0.4795
##
## room = Seminar5m, angle_factor = 180:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.05 94 2.364 0.0201
##
## room = Foyer2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1700 0.05 94 3.401 0.0010
##
## room = Foyer5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 -0.0298 0.05 94 -0.595 0.5530
##
## room = Lecture2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1014 0.05 94 2.028 0.0454
##
## room = Lecture5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0460 0.05 94 0.921 0.3595
##
## room = Seminar2m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.0355 0.05 94 0.710 0.4795
##
## room = Seminar5m, angle_factor = 280:
## contrast estimate SE df t.ratio p.value
## L1 - L2 0.1182 0.05 94 2.364 0.0201
##
## 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.0499 719 0.924 0.7919
## (angle_factor-90) - angle_factor180 0.22595 0.0499 719 4.527 <.0001
## (angle_factor-90) - angle_factor280 0.24802 0.0499 719 4.970 <.0001
## angle_factor90 - angle_factor180 0.17982 0.0499 719 3.603 0.0019
## angle_factor90 - angle_factor280 0.20189 0.0499 719 4.045 0.0003
## angle_factor180 - angle_factor280 0.02207 0.0499 719 0.442 0.9711
##
## room = Foyer5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07234 0.0499 719 1.450 0.4688
## (angle_factor-90) - angle_factor180 0.07799 0.0499 719 1.563 0.4007
## (angle_factor-90) - angle_factor280 0.17799 0.0499 719 3.566 0.0022
## angle_factor90 - angle_factor180 0.00565 0.0499 719 0.113 0.9995
## angle_factor90 - angle_factor280 0.10565 0.0499 719 2.117 0.1487
## angle_factor180 - angle_factor280 0.10000 0.0499 719 2.004 0.1875
##
## room = Lecture2m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07024 0.0499 719 1.407 0.4951
## (angle_factor-90) - angle_factor180 0.14524 0.0499 719 2.910 0.0195
## (angle_factor-90) - angle_factor280 0.21258 0.0499 719 4.259 0.0001
## angle_factor90 - angle_factor180 0.07500 0.0499 719 1.503 0.4363
## angle_factor90 - angle_factor280 0.14234 0.0499 719 2.852 0.0231
## angle_factor180 - angle_factor280 0.06734 0.0499 719 1.349 0.5318
##
## room = Lecture5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.17753 0.0499 719 3.557 0.0023
## (angle_factor-90) - angle_factor180 0.22479 0.0499 719 4.504 <.0001
## (angle_factor-90) - angle_factor280 0.20067 0.0499 719 4.021 0.0004
## angle_factor90 - angle_factor180 0.04725 0.0499 719 0.947 0.7795
## angle_factor90 - angle_factor280 0.02314 0.0499 719 0.464 0.9669
## angle_factor180 - angle_factor280 -0.02411 0.0499 719 -0.483 0.9628
##
## room = Seminar2m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.12329 0.0499 719 2.470 0.0655
## (angle_factor-90) - angle_factor180 0.01496 0.0499 719 0.300 0.9906
## (angle_factor-90) - angle_factor280 0.10372 0.0499 719 2.078 0.1612
## angle_factor90 - angle_factor180 -0.10833 0.0499 719 -2.171 0.1324
## angle_factor90 - angle_factor280 -0.01957 0.0499 719 -0.392 0.9795
## angle_factor180 - angle_factor280 0.08877 0.0499 719 1.779 0.2845
##
## room = Seminar5m, participantGroup_factor = L1:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.27424 0.0499 719 5.495 <.0001
## (angle_factor-90) - angle_factor180 0.14939 0.0499 719 2.993 0.0151
## (angle_factor-90) - angle_factor280 0.19475 0.0499 719 3.902 0.0006
## angle_factor90 - angle_factor180 -0.12485 0.0499 719 -2.502 0.0605
## angle_factor90 - angle_factor280 -0.07949 0.0499 719 -1.593 0.3834
## angle_factor180 - angle_factor280 0.04536 0.0499 719 0.909 0.8001
##
## room = Foyer2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.04612 0.0499 719 0.924 0.7919
## (angle_factor-90) - angle_factor180 0.22595 0.0499 719 4.527 <.0001
## (angle_factor-90) - angle_factor280 0.24802 0.0499 719 4.970 <.0001
## angle_factor90 - angle_factor180 0.17982 0.0499 719 3.603 0.0019
## angle_factor90 - angle_factor280 0.20189 0.0499 719 4.045 0.0003
## angle_factor180 - angle_factor280 0.02207 0.0499 719 0.442 0.9711
##
## room = Foyer5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07234 0.0499 719 1.450 0.4688
## (angle_factor-90) - angle_factor180 0.07799 0.0499 719 1.563 0.4007
## (angle_factor-90) - angle_factor280 0.17799 0.0499 719 3.566 0.0022
## angle_factor90 - angle_factor180 0.00565 0.0499 719 0.113 0.9995
## angle_factor90 - angle_factor280 0.10565 0.0499 719 2.117 0.1487
## angle_factor180 - angle_factor280 0.10000 0.0499 719 2.004 0.1875
##
## room = Lecture2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.07024 0.0499 719 1.407 0.4951
## (angle_factor-90) - angle_factor180 0.14524 0.0499 719 2.910 0.0195
## (angle_factor-90) - angle_factor280 0.21258 0.0499 719 4.259 0.0001
## angle_factor90 - angle_factor180 0.07500 0.0499 719 1.503 0.4363
## angle_factor90 - angle_factor280 0.14234 0.0499 719 2.852 0.0231
## angle_factor180 - angle_factor280 0.06734 0.0499 719 1.349 0.5318
##
## room = Lecture5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.17753 0.0499 719 3.557 0.0023
## (angle_factor-90) - angle_factor180 0.22479 0.0499 719 4.504 <.0001
## (angle_factor-90) - angle_factor280 0.20067 0.0499 719 4.021 0.0004
## angle_factor90 - angle_factor180 0.04725 0.0499 719 0.947 0.7795
## angle_factor90 - angle_factor280 0.02314 0.0499 719 0.464 0.9669
## angle_factor180 - angle_factor280 -0.02411 0.0499 719 -0.483 0.9628
##
## room = Seminar2m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.12329 0.0499 719 2.470 0.0655
## (angle_factor-90) - angle_factor180 0.01496 0.0499 719 0.300 0.9906
## (angle_factor-90) - angle_factor280 0.10372 0.0499 719 2.078 0.1612
## angle_factor90 - angle_factor180 -0.10833 0.0499 719 -2.171 0.1324
## angle_factor90 - angle_factor280 -0.01957 0.0499 719 -0.392 0.9795
## angle_factor180 - angle_factor280 0.08877 0.0499 719 1.779 0.2845
##
## room = Seminar5m, participantGroup_factor = L2:
## contrast estimate SE df t.ratio p.value
## (angle_factor-90) - angle_factor90 0.27424 0.0499 719 5.495 <.0001
## (angle_factor-90) - angle_factor180 0.14939 0.0499 719 2.993 0.0151
## (angle_factor-90) - angle_factor280 0.19475 0.0499 719 3.902 0.0006
## angle_factor90 - angle_factor180 -0.12485 0.0499 719 -2.502 0.0605
## angle_factor90 - angle_factor280 -0.07949 0.0499 719 -1.593 0.3834
## angle_factor180 - angle_factor280 0.04536 0.0499 719 0.909 0.8001
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 4 estimates