# 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