# 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