These are analysis operations and data for the study titled “Musical expertise better predictor of tension in harmonic intervals than psychoacoustics across North and South Indian listeners” by Imre Lahdelma, Tuomas Eerola, Nashra Ahmad, Martin Clayton, James Armitage, Budhaditya Bhattacharyya, and Niveshan Munsamy.
rm(list = ls())
library(ggplot2)
library(dplyr)
library(papaja)
options(dplyr.summarise.inform = FALSE)
df <- read.csv('data/indian_tension_ratings.csv')
knitr::kable(head(df),format = 'markdown')
omsi1indian | omsi1western | gender | age | participant | Expertise | Interval | tensionrating | Group | musicianship | musicianshipW | musicianshipI | ExpertiseN |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Music-loving nonmusician | Music-loving nonmusician | Male | 29 | I1 | 2 | m2 | 5 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 16.666667 |
Music-loving nonmusician | Music-loving nonmusician | Female | 61 | I2 | 2 | m2 | 2 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 16.666667 |
Nonmusician | Nonmusician | Male | 25 | I3 | 2 | m2 | 4 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 16.666667 |
Music-loving nonmusician | Music-loving nonmusician | Male | 23 | I4 | 2 | m2 | 2 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 16.666667 |
Music-loving nonmusician | Music-loving nonmusician | Male | 18 | I5 | 0 | m2 | 5 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 0.000000 |
Nonmusician | Nonmusician | Male | 22 | I6 | 1 | m2 | 1 | Indian - non-musicians | Non-Musician | Non-Musician | Non-Musician | 8.333333 |
Brief explanation of columns
omsi1indian
refers to participant’s own decision of how they identify themselves as indian musicians according to OMSI 1-item question.omsi1western
refers to participant’s own decision of how they identify themselves as western musicians according to OMSI 1-item question.gender
= Self-defined gender (Male/Female)age
= Age in yearsparticipant
= unique code for each participantExpertise
= Number of questions correct in custom Indian classical music familiary questionnaire. Note that since Carnatic and Hindustani questionnaires have different number of questions, we use the proportion correct (ExpertiseN
) as the index for the expertise.tension_rating
= Rating of tension from 1 to 7 (7-point scale)Group
= Carnatic, Hindustani or Indian non-musiciansmusicianship
= variable inferred fromomsi1indian
participant
= variable inferred fromomsi1western
ExpertiseN
= Proportion of expertise questions correct (0-100)
U<-as.character(unique(df$participant))
background <- NULL
for (k in 1:length(U)) {
tmp <- dplyr::filter(df,participant==U[k])
background<-rbind(background,tmp[1,])
}
SS <- summarise(group_by(background,Group),N=n(),ageM=mean(age,na.rm=TRUE),ageSE=sd(age,na.rm=TRUE)/sqrt(n()),expertiseM=mean(ExpertiseN,na.rm=TRUE),expertiseSE=sd(ExpertiseN,na.rm=TRUE)/sqrt(n()),female=sum(gender=='Female')/n()*100)
knitr::kable(SS,digits = 2,format = 'markdown')
Group | N | ageM | ageSE | expertiseM | expertiseSE | female |
---|---|---|---|---|---|---|
Carnatic | 26 | 28.23 | 1.77 | 85.51 | 2.88 | 53.85 |
Hindustani | 19 | 31.16 | 2.64 | 82.71 | 4.17 | 36.84 |
Indian - non-musicians | 26 | 27.12 | 2.12 | 12.18 | 1.15 | 46.15 |
m1 <- aov(ExpertiseN ~ Group, data=background)
a<-apa_print(summary(m1))
print(a$statistic)
## $Group
## [1] "$F(2, 65) = 234.50$, $p < .001$"
print(TukeyHSD(m1))
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = ExpertiseN ~ Group, data = background)
##
## $Group
## diff lwr upr p adj
## Hindustani-Carnatic -2.800479 -12.72050 7.119538 0.7775883
## Indian - non-musicians-Carnatic -73.327759 -82.48735 -64.168171 0.0000000
## Indian - non-musicians-Hindustani -70.527280 -80.18493 -60.869634 0.0000000
library(lme4)
library(lmerTest)
library(emmeans)
library(effectsize)
# Put the intervals in the correct order in the factor
iv_labels <- c('m2','M2','m3','M3','P4','A4','P5','m6','M6','m7','M7','P8')
df$Interval<-factor(df$Interval,levels = iv_labels)
# Take only Carnatic and Hindustani Musicians
tmp<-dplyr::filter(df,Group=='Carnatic' | Group=='Hindustani')
tmp$Group<-factor(tmp$Group)
m1 <- lmer(tensionrating ~ Interval * Group + (1|participant), data=tmp)
print(anova(m1))
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Interval 375.89 34.172 11 471.19 18.4130 <2e-16 ***
## Group 1.49 1.487 1 43.11 0.8011 0.3757
## Interval:Group 27.96 2.542 11 471.19 1.3695 0.1839
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# No difference between the two expert groups nor interaction
# Combine two musician groups and relabel everybody to musician/non-musician
df$Group2<-as.character(df$Group)
df$Group2[df$Group=='Carnatic']<-'Musicians'
df$Group2[df$Group=='Hindustani']<-'Musicians'
df$Group2[df$Group=='Indian - non-musicians']<-'Non-musicians'
df$Group2<-factor(df$Group2)
m1 <- lmer(tensionrating ~ Group2 * Interval + (1|participant),data = df)
print(anova(m1))
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Group2 2.636 2.6361 1 69.03 1.5836 0.2125
## Interval 160.651 14.6046 11 757.09 8.7738 8.973e-15 ***
## Group2:Interval 190.640 17.3309 11 757.09 10.4117 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
F_to_eta2(8.7738, 11, 757.09) # effect size
## Eta2 (partial) | 95% CI
## -----------------------------
## 0.11 | [0.07, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
F_to_eta2(10.4117, 11, 757.09) # effect size
## Eta2 (partial) | 95% CI
## -----------------------------
## 0.13 | [0.09, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
print(pairs(emmeans(m1,~ Group2|Interval))) # this for each interval
## Interval = m2:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) 1.567 0.381 408 4.108 <.0001
##
## Interval = M2:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) 0.507 0.381 408 1.329 0.1846
##
## Interval = m3:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -0.190 0.381 408 -0.497 0.6191
##
## Interval = M3:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -0.950 0.381 408 -2.492 0.0131
##
## Interval = P4:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -1.572 0.381 408 -4.121 <.0001
##
## Interval = A4:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) 0.489 0.381 408 1.282 0.2006
##
## Interval = P5:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -1.202 0.383 411 -3.141 0.0018
##
## Interval = m6:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -0.897 0.383 411 -2.346 0.0195
##
## Interval = M6:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -1.279 0.381 408 -3.353 0.0009
##
## Interval = m7:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) 0.219 0.381 408 0.574 0.5665
##
## Interval = M7:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) 0.985 0.381 408 2.584 0.0101
##
## Interval = P8:
## contrast estimate SE df t.ratio p.value
## Musicians - (Non-musicians) -1.150 0.381 408 -3.014 0.0027
##
## Degrees-of-freedom method: kenward-roger
The comparison of intervals across musicians/non-musicians is also documented in the Figure 1.
m1 <- lmer(tensionrating ~ Interval + (1|participant),data = dplyr::filter(df,Group2=='Non-musicians'))
anova(m1)
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Interval 64.574 5.8703 11 275 4.5092 2.821e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
F_to_epsilon2(4.5092, 11, 275) # effect size
## Epsilon2 (partial) | 95% CI
## ---------------------------------
## 0.12 | [0.04, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
# posthocs with multiple corrections
emm <- emmeans(m1,specs = pairwise ~ Interval,pbkrtest.limit = 4345, type = "response")
print(emm$contrasts)
## contrast estimate SE df t.ratio p.value
## m2 - M2 -0.6154 0.316 275 -1.945 0.7300
## m2 - m3 -0.4231 0.316 275 -1.337 0.9735
## m2 - M3 -0.9615 0.316 275 -3.038 0.1033
## m2 - P4 -1.5385 0.316 275 -4.862 0.0001
## m2 - A4 -1.5000 0.316 275 -4.740 0.0002
## m2 - P5 -1.1154 0.316 275 -3.525 0.0245
## m2 - m6 -1.0385 0.316 275 -3.282 0.0523
## m2 - M6 -1.4231 0.316 275 -4.497 0.0006
## m2 - m7 -1.1923 0.316 275 -3.768 0.0107
## m2 - M7 -0.6923 0.316 275 -2.188 0.5600
## m2 - P8 -0.5385 0.316 275 -1.702 0.8663
## M2 - m3 0.1923 0.316 275 0.608 1.0000
## M2 - M3 -0.3462 0.316 275 -1.094 0.9948
## M2 - P4 -0.9231 0.316 275 -2.917 0.1408
## M2 - A4 -0.8846 0.316 275 -2.795 0.1878
## M2 - P5 -0.5000 0.316 275 -1.580 0.9150
## M2 - m6 -0.4231 0.316 275 -1.337 0.9735
## M2 - M6 -0.8077 0.316 275 -2.552 0.3125
## M2 - m7 -0.5769 0.316 275 -1.823 0.8040
## M2 - M7 -0.0769 0.316 275 -0.243 1.0000
## M2 - P8 0.0769 0.316 275 0.243 1.0000
## m3 - M3 -0.5385 0.316 275 -1.702 0.8663
## m3 - P4 -1.1154 0.316 275 -3.525 0.0245
## m3 - A4 -1.0769 0.316 275 -3.403 0.0361
## m3 - P5 -0.6923 0.316 275 -2.188 0.5600
## m3 - m6 -0.6154 0.316 275 -1.945 0.7300
## m3 - M6 -1.0000 0.316 275 -3.160 0.0742
## m3 - m7 -0.7692 0.316 275 -2.431 0.3890
## m3 - M7 -0.2692 0.316 275 -0.851 0.9995
## m3 - P8 -0.1154 0.316 275 -0.365 1.0000
## M3 - P4 -0.5769 0.316 275 -1.823 0.8040
## M3 - A4 -0.5385 0.316 275 -1.702 0.8663
## M3 - P5 -0.1538 0.316 275 -0.486 1.0000
## M3 - m6 -0.0769 0.316 275 -0.243 1.0000
## M3 - M6 -0.4615 0.316 275 -1.458 0.9502
## M3 - m7 -0.2308 0.316 275 -0.729 0.9999
## M3 - M7 0.2692 0.316 275 0.851 0.9995
## M3 - P8 0.4231 0.316 275 1.337 0.9735
## P4 - A4 0.0385 0.316 275 0.122 1.0000
## P4 - P5 0.4231 0.316 275 1.337 0.9735
## P4 - m6 0.5000 0.316 275 1.580 0.9150
## P4 - M6 0.1154 0.316 275 0.365 1.0000
## P4 - m7 0.3462 0.316 275 1.094 0.9948
## P4 - M7 0.8462 0.316 275 2.674 0.2451
## P4 - P8 1.0000 0.316 275 3.160 0.0742
## A4 - P5 0.3846 0.316 275 1.215 0.9874
## A4 - m6 0.4615 0.316 275 1.458 0.9502
## A4 - M6 0.0769 0.316 275 0.243 1.0000
## A4 - m7 0.3077 0.316 275 0.972 0.9981
## A4 - M7 0.8077 0.316 275 2.552 0.3125
## A4 - P8 0.9615 0.316 275 3.038 0.1033
## P5 - m6 0.0769 0.316 275 0.243 1.0000
## P5 - M6 -0.3077 0.316 275 -0.972 0.9981
## P5 - m7 -0.0769 0.316 275 -0.243 1.0000
## P5 - M7 0.4231 0.316 275 1.337 0.9735
## P5 - P8 0.5769 0.316 275 1.823 0.8040
## m6 - M6 -0.3846 0.316 275 -1.215 0.9874
## m6 - m7 -0.1538 0.316 275 -0.486 1.0000
## m6 - M7 0.3462 0.316 275 1.094 0.9948
## m6 - P8 0.5000 0.316 275 1.580 0.9150
## M6 - m7 0.2308 0.316 275 0.729 0.9999
## M6 - M7 0.7308 0.316 275 2.309 0.4726
## M6 - P8 0.8846 0.316 275 2.795 0.1878
## m7 - M7 0.5000 0.316 275 1.580 0.9150
## m7 - P8 0.6538 0.316 275 2.066 0.6473
## M7 - P8 0.1538 0.316 275 0.486 1.0000
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 12 estimates
# 7/66 comparison significant at p<.05 level
m1 <- lmer(tensionrating ~ Interval + (1|participant),data = dplyr::filter(df,Group2=='Musicians'))
print(anova(m1))
## Type III Analysis of Variance Table with Satterthwaite's method
## Sum Sq Mean Sq NumDF DenDF F value Pr(>F)
## Interval 367.42 33.402 11 482.16 17.848 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
F_to_epsilon2(17.848, 11, 482.16) # effect size
## Epsilon2 (partial) | 95% CI
## ---------------------------------
## 0.27 | [0.21, 1.00]
##
## - One-sided CIs: upper bound fixed at [1.00].
# posthocs with multiple corrections
emm <- emmeans(m1,specs = pairwise ~ Interval,pbkrtest.limit = 4345, type = "response")
emm$contrasts
## contrast estimate SE df t.ratio p.value
## m2 - M2 0.44444 0.288 482 1.541 0.9283
## m2 - m3 1.33333 0.288 482 4.623 0.0003
## m2 - M3 1.55556 0.288 482 5.394 <.0001
## m2 - P4 1.60000 0.288 482 5.548 <.0001
## m2 - A4 -0.42222 0.288 482 -1.464 0.9494
## m2 - P5 1.65341 0.290 482 5.698 <.0001
## m2 - m6 1.42614 0.290 482 4.915 0.0001
## m2 - M6 1.42222 0.288 482 4.931 0.0001
## m2 - m7 0.15556 0.288 482 0.539 1.0000
## m2 - M7 -0.11111 0.288 482 -0.385 1.0000
## m2 - P8 2.17778 0.288 482 7.551 <.0001
## M2 - m3 0.88889 0.288 482 3.082 0.0896
## M2 - M3 1.11111 0.288 482 3.853 0.0073
## M2 - P4 1.15556 0.288 482 4.007 0.0041
## M2 - A4 -0.86667 0.288 482 -3.005 0.1102
## M2 - P5 1.20897 0.290 482 4.167 0.0021
## M2 - m6 0.98169 0.290 482 3.383 0.0368
## M2 - M6 0.97778 0.288 482 3.390 0.0360
## M2 - m7 -0.28889 0.288 482 -1.002 0.9976
## M2 - M7 -0.55556 0.288 482 -1.926 0.7422
## M2 - P8 1.73333 0.288 482 6.010 <.0001
## m3 - M3 0.22222 0.288 482 0.771 0.9998
## m3 - P4 0.26667 0.288 482 0.925 0.9989
## m3 - A4 -1.75556 0.288 482 -6.087 <.0001
## m3 - P5 0.32008 0.290 482 1.103 0.9945
## m3 - m6 0.09281 0.290 482 0.320 1.0000
## m3 - M6 0.08889 0.288 482 0.308 1.0000
## m3 - m7 -1.17778 0.288 482 -4.084 0.0030
## m3 - M7 -1.44444 0.288 482 -5.008 <.0001
## m3 - P8 0.84444 0.288 482 2.928 0.1344
## M3 - P4 0.04444 0.288 482 0.154 1.0000
## M3 - A4 -1.97778 0.288 482 -6.858 <.0001
## M3 - P5 0.09786 0.290 482 0.337 1.0000
## M3 - m6 -0.12942 0.290 482 -0.446 1.0000
## M3 - M6 -0.13333 0.288 482 -0.462 1.0000
## M3 - m7 -1.40000 0.288 482 -4.854 0.0001
## M3 - M7 -1.66667 0.288 482 -5.779 <.0001
## M3 - P8 0.62222 0.288 482 2.157 0.5814
## P4 - A4 -2.02222 0.288 482 -7.012 <.0001
## P4 - P5 0.05341 0.290 482 0.184 1.0000
## P4 - m6 -0.17386 0.290 482 -0.599 1.0000
## P4 - M6 -0.17778 0.288 482 -0.616 1.0000
## P4 - m7 -1.44444 0.288 482 -5.008 <.0001
## P4 - M7 -1.71111 0.288 482 -5.933 <.0001
## P4 - P8 0.57778 0.288 482 2.003 0.6910
## A4 - P5 2.07563 0.290 482 7.153 <.0001
## A4 - m6 1.84836 0.290 482 6.370 <.0001
## A4 - M6 1.84444 0.288 482 6.395 <.0001
## A4 - m7 0.57778 0.288 482 2.003 0.6910
## A4 - M7 0.31111 0.288 482 1.079 0.9954
## A4 - P8 2.60000 0.288 482 9.015 <.0001
## P5 - m6 -0.22727 0.292 482 -0.779 0.9998
## P5 - M6 -0.23119 0.290 482 -0.797 0.9997
## P5 - m7 -1.49786 0.290 482 -5.162 <.0001
## P5 - M7 -1.76452 0.290 482 -6.081 <.0001
## P5 - P8 0.52437 0.290 482 1.807 0.8136
## m6 - M6 -0.00392 0.290 482 -0.013 1.0000
## m6 - m7 -1.27058 0.290 482 -4.379 0.0009
## m6 - M7 -1.53725 0.290 482 -5.298 <.0001
## m6 - P8 0.75164 0.290 482 2.590 0.2880
## M6 - m7 -1.26667 0.288 482 -4.392 0.0008
## M6 - M7 -1.53333 0.288 482 -5.317 <.0001
## M6 - P8 0.75556 0.288 482 2.620 0.2715
## m7 - M7 -0.26667 0.288 482 -0.925 0.9989
## m7 - P8 2.02222 0.288 482 7.012 <.0001
## M7 - P8 2.28889 0.288 482 7.936 <.0001
##
## Degrees-of-freedom method: kenward-roger
## P value adjustment: tukey method for comparing a family of 12 estimates
# 34/66 comparison significant at p<.05 level
# take the means and 95% CIs
S <- df %>%
group_by(Interval,Group2) %>%
summarize(n=n(),M=mean(tensionrating,na.rm = TRUE),sd=sd(tensionrating,na.rm = TRUE)) %>%
mutate(se=sd/sqrt(n),LCI=M+qnorm(0.025)*se,UCI=M+qnorm(0.975)*se)
dval<-0.33
colnames(S)[2] <- 'Expertise'
fig_india <- ggplot(S,aes(Interval,M,color=Expertise,group=Expertise,linestyle=Expertise,shape=Expertise))+
geom_point(position=position_dodge(dval),size=4)+
geom_line(position=position_dodge(dval))+
geom_errorbar(aes(min=LCI, max=UCI),width=.2,position=position_dodge(dval)) +
scale_y_continuous(breaks = seq(1,7,by=1),limits = c(1,7),expand = c(0.005,0.005))+
scale_color_brewer(type = "div",palette = 'Set2')+
scale_shape_manual(values=c(19,17))+
ylab('Tension Rating (M ± 95% CI)')+
theme_bw()+
theme(legend.position="bottom")+
# Annotations take the statistics from analyses above
annotate("text",x = 1,y=5.87,label='italic(p)<.001',parse = TRUE,size=3)+
annotate("text",x = 4,y=5.87,label='italic(p)<.05',parse = TRUE,size=3)+
annotate("text",x = 5,y=5.87,label='italic(p)<.001',parse = TRUE,size=3)+
annotate("text",x = 7,y=5.87,label='italic(p)<0.01',parse = TRUE,size=3)+
annotate("text",x = 8,y=5.87,label='italic(p)<.05',parse = TRUE,size=3)+
annotate("text",x = 9,y=5.87,label='italic(p)<.001',parse = TRUE,size=3)+
annotate("text",x = 11,y=5.87,label='italic(p)<.05',parse = TRUE,size=3)+
annotate("text",x = 12,y=5.87,label='italic(p)<.01',parse = TRUE,size=3)+
annotate("text",x = 1,y=6.5,label='Between group comparisons',size=4,hjust=0)+
annotate("text",x = 1,y=2.5,label='Within group comparisons',size=4,hjust=0)+
annotate("text",x = 1.5,y=2.0,label='Musicians:~34/66~intervals~differ~at~italic(p)<.05',color=RColorBrewer::brewer.pal(3, 'Set2')[1],size=3,hjust=0,parse=TRUE)+
annotate("text",x = 1.5,y=1.5,label='Non-musicians:~7/66~intervals~differ~at~italic(p)<.05',color=RColorBrewer::brewer.pal(3, 'Set2')[2],size=3,hjust=0,parse=TRUE)+
ggtitle('Indian samples (N=71)')
print(fig_india)
R version and libraries.
print(sessionInfo())
## R version 4.3.1 (2023-06-16)
## Platform: x86_64-apple-darwin20 (64-bit)
## Running under: macOS Ventura 13.6.1
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/lib/libRlapack.dylib; LAPACK version 3.11.0
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## time zone: Europe/London
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] effectsize_0.8.6 emmeans_1.8.9 lmerTest_3.1-3 lme4_1.1-34
## [5] Matrix_1.6-1.1 papaja_0.1.1.9001 tinylabels_0.2.4 dplyr_1.1.4
## [9] ggplot2_3.4.4
##
## loaded via a namespace (and not attached):
## [1] tidyr_1.3.0 utf8_1.2.4 generics_0.1.3
## [4] lattice_0.22-5 digest_0.6.33 magrittr_2.0.3
## [7] RColorBrewer_1.1-3 evaluate_0.22 grid_4.3.1
## [10] estimability_1.4.1 mvtnorm_1.2-3 fastmap_1.1.1
## [13] backports_1.4.1 purrr_1.0.2 fansi_1.0.5
## [16] scales_1.2.1 numDeriv_2016.8-1.1 cli_3.6.1
## [19] rlang_1.1.2 munsell_0.5.0 splines_4.3.1
## [22] withr_2.5.2 yaml_2.3.7 parallel_4.3.1
## [25] pbkrtest_0.5.2 tools_4.3.1 datawizard_0.9.0
## [28] nloptr_2.0.3 coda_0.19-4 minqa_1.2.6
## [31] colorspace_2.1-0 bayestestR_0.13.1 boot_1.3-28.1
## [34] broom_1.0.5 vctrs_0.6.5 R6_2.5.1
## [37] lifecycle_1.0.4 MASS_7.3-60 insight_0.19.6
## [40] pkgconfig_2.0.3 pillar_1.9.0 gtable_0.3.4
## [43] glue_1.6.2 Rcpp_1.0.11 xfun_0.40
## [46] tibble_3.2.1 tidyselect_1.2.0 rstudioapi_0.15.0
## [49] parameters_0.21.2 knitr_1.44 farver_2.1.1
## [52] xtable_1.8-4 htmltools_0.5.7 nlme_3.1-163
## [55] rmarkdown_2.25 compiler_4.3.1