load necessary packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.0 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.2 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(readxl)
library(ggplot2)
library(ggeffects)
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
library(ordinal)
##
## Attaching package: 'ordinal'
##
## The following object is masked from 'package:dplyr':
##
## slice
library(cluster)
library(ltm)
## Loading required package: MASS
##
## Attaching package: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
##
## Loading required package: msm
## Loading required package: polycor
library(psych)
##
## Attaching package: 'psych'
##
## The following object is masked from 'package:ltm':
##
## factor.scores
##
## The following object is masked from 'package:polycor':
##
## polyserial
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(writexl)
library(openxlsx)
load datasets
data_aut <- read_excel("data_aut.xlsx")
data_nt <- read_excel("data_nt.xlsx")
define variables
data_aut$participant <- as.factor(data_aut$participant)
data_nt$participant <- as.factor(data_nt$participant)
data_aut$age <- as.numeric(data_aut$age)
data_nt$age <- as.numeric(data_nt$age)
data_aut$group <- as.factor(data_aut$group)
data_nt$group <- as.factor(data_nt$group)
data_aut$gender <- as.factor(data_aut$gender)
data_nt$gender <- as.factor(data_nt$gender)
data_aut <- mutate(data_aut, gender_sum = factor(gender))
contrasts(data_aut$gender_sum) <- contr.sum(4)
data_nt <- mutate(data_nt, gender_sum = factor(gender))
contrasts(data_nt$gender_sum) <- contr.sum(3)
data_aut$choice <- as.factor(data_aut$choice)
data_nt$choice <- as.factor(data_nt$choice)
data_aut$condition <- as.factor(data_aut$condition)
data_nt$condition <- as.factor(data_nt$condition)
data_aut$condition <- factor(data_aut$condition, levels = 1:19)
data_nt$condition <- factor(data_nt$condition, levels = 1:19)
data_aut <- mutate(data_aut, condition_sum = factor(condition))
contrasts(data_aut$condition_sum) <- contr.sum(19)
data_nt <- mutate(data_nt, condition_sum = factor(condition))
contrasts(data_nt$condition_sum) <- contr.sum(19)
data_aut$condition_name <- as.factor(data_aut$condition_name)
data_nt$condition_name <- as.factor(data_nt$condition_name)
data_aut$item <- as.factor(data_aut$item)
data_nt$item <- as.factor(data_nt$item)
glimpse(data_aut)
## Rows: 1,960
## Columns: 16
## $ participant <fct> 1748852021, 1748852021, 1748852021, 1748852021, 1748852…
## $ age <dbl> 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,…
## $ group <fct> ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, …
## $ gender <fct> female, female, female, female, female, female, female,…
## $ contact <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes",…
## $ type <chr> "items_experimentales1", "items_experimentales1", "item…
## $ choice <fct> 3, 4, 7, 5, 6, 6, 3, 3, 4, 3, 7, 4, 5, 2, 4, 2, 5, 5, 6…
## $ list <chr> "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", …
## $ item <fct> 12, 35, 40, 23, 27, 3, 29, 15, 17, 9, 7, 21, 25, 31, 14…
## $ marking <chr> "IMPL", "IMPL", "BASELINE", "IMPL", "EXPL", "EXPL", "EX…
## $ type_ts <chr> "ASS", "NASS", "BASELINE", "TOPRE", "NASS", "ASS", "NAS…
## $ feed <chr> "ASSERT", "ASSERT", "BASELINE", "ASSERT", "QUEST", "QUE…
## $ condition <fct> 6, 18, 19, 12, 14, 2, 15, 8, 9, 5, 4, 11, 13, 16, 7, 17…
## $ condition_name <fct> Impl ass assert, Impl nass assert, No TS, Impl topre as…
## $ gender_sum <fct> female, female, female, female, female, female, female,…
## $ condition_sum <fct> 6, 18, 19, 12, 14, 2, 15, 8, 9, 5, 4, 11, 13, 16, 7, 17…
glimpse(data_nt)
## Rows: 3,840
## Columns: 16
## $ participant <fct> 1732541225, 1732541225, 1732541225, 1732541225, 1732541…
## $ age <dbl> 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,…
## $ group <fct> NT, NT, NT, NT, NT, NT, NT, NT, NT, NT, NT, NT, NT, NT,…
## $ gender <fct> male, male, male, male, male, male, male, male, male, m…
## $ contact <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes",…
## $ type <chr> "items_experimentales1", "items_experimentales1", "item…
## $ choice <fct> 7, 3, 6, 5, 7, 3, 6, 7, 6, 5, 2, 6, 1, 7, 5, 6, 7, 7, 3…
## $ list <chr> "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", …
## $ item <fct> 12, 15, 27, 35, 9, 29, 14, 23, 21, 17, 33, 25, 31, 40, …
## $ marking <chr> "IMPL", "EXPL", "EXPL", "IMPL", "IMPL", "EXPL", "EXPL",…
## $ type_ts <chr> "ASS", "TOPRE", "NASS", "NASS", "ASS", "NASS", "TOPRE",…
## $ feed <chr> "ASSERT", "QUEST", "QUEST", "ASSERT", "QUEST", "ASSERT"…
## $ condition <fct> 6, 8, 14, 18, 5, 15, 7, 12, 11, 9, 17, 13, 16, 19, 2, 4…
## $ condition_name <fct> Impl ass assert, Expl topre quest, Expl nass quest, Imp…
## $ gender_sum <fct> male, male, male, male, male, male, male, male, male, m…
## $ condition_sum <fct> 6, 8, 14, 18, 5, 15, 7, 12, 11, 9, 17, 13, 16, 19, 2, 4…
average ratings per condition (raw data)
data_aut$choice <- as.numeric (data_aut$choice)
average_ratings <- data_aut %>%
group_by(condition) %>%
summarise(average_score = mean(choice))
average_ratings
## # A tibble: 19 × 2
## condition average_score
## <fct> <dbl>
## 1 1 6.14
## 2 2 4.85
## 3 3 4.61
## 4 4 5.88
## 5 5 4.34
## 6 6 5.49
## 7 7 5.14
## 8 8 4.62
## 9 9 4.68
## 10 10 4.80
## 11 11 4.23
## 12 12 4.60
## 13 13 4.01
## 14 14 3.51
## 15 15 2.69
## 16 16 3.37
## 17 17 2.26
## 18 18 2.78
## 19 19 6.70
perform statistical analyses (autistic adults)
# cumulative link mixed model
data_aut$choice <- as.factor(data_aut$choice)
clmm_model_aut <- clmm(choice ~ condition_sum + gender_sum + (1|participant) + (1|item), data = data_aut)
summary(clmm_model_aut)
## Cumulative Link Mixed Model fitted with the Laplace approximation
##
## formula: choice ~ condition_sum + gender_sum + (1 | participant) + (1 |
## item)
## data: data_aut
##
## link threshold nobs logLik AIC niter max.grad cond.H
## logit flexible 1960 -3000.16 6058.32 3833(15336) 7.11e-03 1.2e+03
##
## Random effects:
## Groups Name Variance Std.Dev.
## participant (Intercept) 0.9029 0.9502
## item (Intercept) 0.1491 0.3861
## Number of groups: participant 49, item 40
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## condition_sum1 1.94421 0.34124 5.697 1.22e-08 ***
## condition_sum2 0.35356 0.32282 1.095 0.273409
## condition_sum3 -0.01624 0.31636 -0.051 0.959048
## condition_sum4 1.47011 0.33147 4.435 9.20e-06 ***
## condition_sum5 -0.26176 0.31773 -0.824 0.410038
## condition_sum6 0.89673 0.32003 2.802 0.005078 **
## condition_sum7 0.68127 0.32446 2.100 0.035754 *
## condition_sum8 0.03706 0.32038 0.116 0.907916
## condition_sum9 0.10740 0.31887 0.337 0.736261
## condition_sum10 0.19841 0.32006 0.620 0.535323
## condition_sum11 -0.30553 0.31905 -0.958 0.338265
## condition_sum12 0.06847 0.31985 0.214 0.830493
## condition_sum13 -0.53248 0.31983 -1.665 0.095934 .
## condition_sum14 -1.05764 0.32214 -3.283 0.001026 **
## condition_sum15 -1.94553 0.32742 -5.942 2.82e-09 ***
## condition_sum16 -1.10170 0.31847 -3.459 0.000542 ***
## condition_sum17 -2.51987 0.33563 -7.508 6.01e-14 ***
## condition_sum18 -1.80036 0.32405 -5.556 2.76e-08 ***
## gender_sum1 -0.43483 0.31372 -1.386 0.165728
## gender_sum2 -1.21820 0.33190 -3.670 0.000242 ***
## gender_sum3 0.24366 0.38935 0.626 0.531433
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Threshold coefficients:
## Estimate Std. Error z value
## 1|2 -2.8347 0.2959 -9.580
## 2|3 -2.1556 0.2929 -7.359
## 3|4 -1.4827 0.2909 -5.098
## 4|5 -1.0013 0.2898 -3.455
## 5|6 -0.2834 0.2889 -0.981
## 6|7 0.7522 0.2893 2.600
# extract model predictions
predictions <- ggeffect(clmm_model_aut, terms = "condition_sum")
## You are calculating adjusted predictions on the population-level (i.e.
## `type = "fixed"`) for a *generalized* linear mixed model.
## This may produce biased estimates due to Jensen's inequality. Consider
## setting `bias_correction = TRUE` to correct for this bias.
## See also the documentation of the `bias_correction` argument.
# extract the mean predicted ratings per condition
df_predictions <- as.data.frame(predictions)
predicted_ratings <- df_predictions %>%
mutate(response.level = as.numeric(gsub("X", "", response.level))) %>%
group_by(x) %>%
summarize(mean_score = sum(response.level * predicted, na.rm = TRUE), sd_score = sd(response.level * predicted, na.rm = TRUE), ci_low_mean = sum(response.level * conf.low),
ci_high_mean = sum(response.level * conf.high)
)
predicted_ratings <- predicted_ratings %>%
rename(condition = x)
predicted_ratings
## # A tibble: 19 × 5
## condition mean_score sd_score ci_low_mean ci_high_mean
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 1 6.32 1.67 4.42 8.32
## 2 2 5.08 0.726 3.55 7.12
## 3 3 4.69 0.556 3.29 6.63
## 4 4 6.03 1.37 4.12 8.17
## 5 5 4.42 0.456 3.08 6.32
## 6 6 5.59 1.02 3.93 7.64
## 7 7 5.40 0.897 3.79 7.46
## 8 8 4.75 0.579 3.32 6.73
## 9 9 4.82 0.610 3.38 6.81
## 10 10 4.92 0.652 3.44 6.93
## 11 11 4.37 0.440 3.04 6.27
## 12 12 4.78 0.593 3.35 6.76
## 13 13 4.12 0.358 2.84 5.96
## 14 14 3.52 0.199 2.39 5.20
## 15 15 2.58 0.0652 1.68 3.95
## 16 16 3.47 0.187 2.36 5.11
## 17 17 2.08 0.132 1.31 3.25
## 18 18 2.72 0.0641 1.79 4.13
## 19 19 6.86 2.42 6.23 7.46
# plot the distribution of ratings with fitted values
data_aut$condition <- factor(data_aut$condition, levels = as.character(1:19))
grouped_colors <- c(
# Assign different colors to distinguish topic shift types
"#B05285", "#E285BF", "#F2A6C9", "#C95A8D", "#E285BF", "#F2A6C9", "#3399CC", "#66B2E6", "#99CCFF", "#3399CC", "#66B2E6", "#99CCFF",
"#7DCA3E", "#A6D854", "#B0D86B", "#7DCA3E", "#A6D854","#B0D86B", "#FF6F00",
"#FF69B4" )
data_aut$choice <- as.numeric(data_aut$choice)
plot_judgments <- ggplot(data_aut, aes(x = condition, y = choice, fill = condition)) +
geom_boxplot(aes(color = condition),
fill = "white",
alpha = 0.6,
size =0.7,
outlier.color = "brown",
show.legend = FALSE) +
geom_point(data = predicted_ratings,
aes(x = condition, y = mean_score, color = condition),
size = 4, shape = 16, show.legend = FALSE) +
scale_y_continuous(expand = c(0, 0.05), breaks = seq(0, 7, by = 1)) +
scale_fill_manual(values = grouped_colors) +
scale_color_manual(values = grouped_colors) +
labs(
title = "",
x = "Condition",
y = "Score"
) +
theme_bw() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(hjust = 0.5)
)
plot_judgments

# post-hoc analyses
emmeans_clmm_aut <- emmeans(clmm_model_aut, ~ condition_sum)
emmeans_df <- as.data.frame(emmeans_clmm_aut)
options(max.print = 10000)
pairwise_clmm <- pairs(emmeans_clmm_aut, adjust = "tukey") # pairwise comparisons
pairwise_clmm
## contrast estimate SE df z.ratio p.value
## condition_sum1 - condition_sum2 1.5906 0.483 Inf 3.294 0.0992
## condition_sum1 - condition_sum3 1.9605 0.478 Inf 4.098 0.0059
## condition_sum1 - condition_sum4 0.4741 0.488 Inf 0.972 1.0000
## condition_sum1 - condition_sum5 2.2060 0.480 Inf 4.595 0.0007
## condition_sum1 - condition_sum6 1.0475 0.480 Inf 2.184 0.7889
## condition_sum1 - condition_sum7 1.2629 0.484 Inf 2.612 0.4704
## condition_sum1 - condition_sum8 1.9072 0.481 Inf 3.962 0.0102
## condition_sum1 - condition_sum9 1.8368 0.480 Inf 3.825 0.0171
## condition_sum1 - condition_sum10 1.7458 0.481 Inf 3.632 0.0341
## condition_sum1 - condition_sum11 2.2497 0.481 Inf 4.677 0.0005
## condition_sum1 - condition_sum12 1.8757 0.481 Inf 3.900 0.0129
## condition_sum1 - condition_sum13 2.4767 0.482 Inf 5.139 <0.0001
## condition_sum1 - condition_sum14 3.0019 0.484 Inf 6.197 <0.0001
## condition_sum1 - condition_sum15 3.8897 0.489 Inf 7.949 <0.0001
## condition_sum1 - condition_sum16 3.0459 0.482 Inf 6.324 <0.0001
## condition_sum1 - condition_sum17 4.4641 0.496 Inf 8.999 <0.0001
## condition_sum1 - condition_sum18 3.7446 0.487 Inf 7.694 <0.0001
## condition_sum1 - condition_sum19 -1.8397 0.468 Inf -3.930 0.0115
## condition_sum2 - condition_sum3 0.3698 0.464 Inf 0.797 1.0000
## condition_sum2 - condition_sum4 -1.1166 0.475 Inf -2.349 0.6745
## condition_sum2 - condition_sum5 0.6153 0.465 Inf 1.322 0.9986
## condition_sum2 - condition_sum6 -0.5432 0.467 Inf -1.164 0.9997
## condition_sum2 - condition_sum7 -0.3277 0.470 Inf -0.697 1.0000
## condition_sum2 - condition_sum8 0.3165 0.467 Inf 0.677 1.0000
## condition_sum2 - condition_sum9 0.2462 0.466 Inf 0.528 1.0000
## condition_sum2 - condition_sum10 0.1552 0.467 Inf 0.332 1.0000
## condition_sum2 - condition_sum11 0.6591 0.466 Inf 1.413 0.9967
## condition_sum2 - condition_sum12 0.2851 0.467 Inf 0.611 1.0000
## condition_sum2 - condition_sum13 0.8860 0.467 Inf 1.898 0.9271
## condition_sum2 - condition_sum14 1.4112 0.469 Inf 3.010 0.2106
## condition_sum2 - condition_sum15 2.2991 0.473 Inf 4.860 0.0002
## condition_sum2 - condition_sum16 1.4553 0.466 Inf 3.123 0.1587
## condition_sum2 - condition_sum17 2.8734 0.480 Inf 5.992 <0.0001
## condition_sum2 - condition_sum18 2.1539 0.470 Inf 4.579 0.0007
## condition_sum2 - condition_sum19 -3.4303 0.458 Inf -7.498 <0.0001
## condition_sum3 - condition_sum4 -1.4864 0.471 Inf -3.158 0.1448
## condition_sum3 - condition_sum5 0.2455 0.460 Inf 0.533 1.0000
## condition_sum3 - condition_sum6 -0.9130 0.462 Inf -1.977 0.8974
## condition_sum3 - condition_sum7 -0.6975 0.465 Inf -1.499 0.9933
## condition_sum3 - condition_sum8 -0.0533 0.462 Inf -0.115 1.0000
## condition_sum3 - condition_sum9 -0.1236 0.461 Inf -0.268 1.0000
## condition_sum3 - condition_sum10 -0.2147 0.462 Inf -0.465 1.0000
## condition_sum3 - condition_sum11 0.2893 0.461 Inf 0.627 1.0000
## condition_sum3 - condition_sum12 -0.0847 0.462 Inf -0.183 1.0000
## condition_sum3 - condition_sum13 0.5162 0.462 Inf 1.118 0.9999
## condition_sum3 - condition_sum14 1.0414 0.464 Inf 2.245 0.7485
## condition_sum3 - condition_sum15 1.9293 0.468 Inf 4.122 0.0054
## condition_sum3 - condition_sum16 1.0855 0.461 Inf 2.355 0.6698
## condition_sum3 - condition_sum17 2.5036 0.474 Inf 5.277 <0.0001
## condition_sum3 - condition_sum18 1.7841 0.465 Inf 3.834 0.0166
## condition_sum3 - condition_sum19 -3.8002 0.453 Inf -8.388 <0.0001
## condition_sum4 - condition_sum5 1.7319 0.472 Inf 3.667 0.0302
## condition_sum4 - condition_sum6 0.5734 0.472 Inf 1.214 0.9995
## condition_sum4 - condition_sum7 0.7888 0.476 Inf 1.657 0.9799
## condition_sum4 - condition_sum8 1.4331 0.474 Inf 3.024 0.2034
## condition_sum4 - condition_sum9 1.3627 0.473 Inf 2.883 0.2809
## condition_sum4 - condition_sum10 1.2717 0.473 Inf 2.688 0.4132
## condition_sum4 - condition_sum11 1.7756 0.473 Inf 3.752 0.0224
## condition_sum4 - condition_sum12 1.4016 0.473 Inf 2.962 0.2359
## condition_sum4 - condition_sum13 2.0026 0.474 Inf 4.224 0.0035
## condition_sum4 - condition_sum14 2.5278 0.476 Inf 5.305 <0.0001
## condition_sum4 - condition_sum15 3.4156 0.481 Inf 7.095 <0.0001
## condition_sum4 - condition_sum16 2.5718 0.474 Inf 5.429 <0.0001
## condition_sum4 - condition_sum17 3.9900 0.488 Inf 8.176 <0.0001
## condition_sum4 - condition_sum18 3.2705 0.479 Inf 6.833 <0.0001
## condition_sum4 - condition_sum19 -2.3138 0.461 Inf -5.017 <0.0001
## condition_sum5 - condition_sum6 -1.1585 0.463 Inf -2.501 0.5571
## condition_sum5 - condition_sum7 -0.9430 0.467 Inf -2.021 0.8782
## condition_sum5 - condition_sum8 -0.2988 0.463 Inf -0.645 1.0000
## condition_sum5 - condition_sum9 -0.3692 0.462 Inf -0.799 1.0000
## condition_sum5 - condition_sum10 -0.4602 0.463 Inf -0.994 1.0000
## condition_sum5 - condition_sum11 0.0438 0.462 Inf 0.095 1.0000
## condition_sum5 - condition_sum12 -0.3302 0.463 Inf -0.713 1.0000
## condition_sum5 - condition_sum13 0.2707 0.463 Inf 0.585 1.0000
## condition_sum5 - condition_sum14 0.7959 0.464 Inf 1.714 0.9717
## condition_sum5 - condition_sum15 1.6838 0.468 Inf 3.597 0.0384
## condition_sum5 - condition_sum16 0.8399 0.462 Inf 1.820 0.9498
## condition_sum5 - condition_sum17 2.2581 0.474 Inf 4.759 0.0003
## condition_sum5 - condition_sum18 1.5386 0.466 Inf 3.304 0.0965
## condition_sum5 - condition_sum19 -4.0457 0.455 Inf -8.891 <0.0001
## condition_sum6 - condition_sum7 0.2155 0.468 Inf 0.461 1.0000
## condition_sum6 - condition_sum8 0.8597 0.465 Inf 1.849 0.9420
## condition_sum6 - condition_sum9 0.7893 0.464 Inf 1.702 0.9736
## condition_sum6 - condition_sum10 0.6983 0.464 Inf 1.504 0.9931
## condition_sum6 - condition_sum11 1.2023 0.464 Inf 2.589 0.4879
## condition_sum6 - condition_sum12 0.8283 0.464 Inf 1.783 0.9584
## condition_sum6 - condition_sum13 1.4292 0.465 Inf 3.073 0.1803
## condition_sum6 - condition_sum14 1.9544 0.467 Inf 4.182 0.0042
## condition_sum6 - condition_sum15 2.8423 0.472 Inf 6.021 <0.0001
## condition_sum6 - condition_sum16 1.9984 0.464 Inf 4.303 0.0025
## condition_sum6 - condition_sum17 3.4166 0.479 Inf 7.136 <0.0001
## condition_sum6 - condition_sum18 2.6971 0.469 Inf 5.747 <0.0001
## condition_sum6 - condition_sum19 -2.8872 0.453 Inf -6.367 <0.0001
## condition_sum7 - condition_sum8 0.6442 0.468 Inf 1.375 0.9976
## condition_sum7 - condition_sum9 0.5739 0.467 Inf 1.228 0.9995
## condition_sum7 - condition_sum10 0.4829 0.468 Inf 1.032 1.0000
## condition_sum7 - condition_sum11 0.9868 0.468 Inf 2.110 0.8327
## condition_sum7 - condition_sum12 0.6128 0.468 Inf 1.310 0.9987
## condition_sum7 - condition_sum13 1.2138 0.468 Inf 2.591 0.4863
## condition_sum7 - condition_sum14 1.7389 0.470 Inf 3.696 0.0273
## condition_sum7 - condition_sum15 2.6268 0.475 Inf 5.531 <0.0001
## condition_sum7 - condition_sum16 1.7830 0.468 Inf 3.812 0.0180
## condition_sum7 - condition_sum17 3.2011 0.482 Inf 6.648 <0.0001
## condition_sum7 - condition_sum18 2.4816 0.472 Inf 5.254 <0.0001
## condition_sum7 - condition_sum19 -3.1026 0.458 Inf -6.778 <0.0001
## condition_sum8 - condition_sum9 -0.0703 0.464 Inf -0.152 1.0000
## condition_sum8 - condition_sum10 -0.1613 0.465 Inf -0.347 1.0000
## condition_sum8 - condition_sum11 0.3426 0.464 Inf 0.738 1.0000
## condition_sum8 - condition_sum12 -0.0314 0.465 Inf -0.068 1.0000
## condition_sum8 - condition_sum13 0.5695 0.465 Inf 1.225 0.9995
## condition_sum8 - condition_sum14 1.0947 0.467 Inf 2.345 0.6769
## condition_sum8 - condition_sum15 1.9826 0.471 Inf 4.211 0.0037
## condition_sum8 - condition_sum16 1.1388 0.464 Inf 2.454 0.5934
## condition_sum8 - condition_sum17 2.5569 0.477 Inf 5.358 <0.0001
## condition_sum8 - condition_sum18 1.8374 0.468 Inf 3.924 0.0118
## condition_sum8 - condition_sum19 -3.7469 0.456 Inf -8.212 <0.0001
## condition_sum9 - condition_sum10 -0.0910 0.464 Inf -0.196 1.0000
## condition_sum9 - condition_sum11 0.4129 0.463 Inf 0.891 1.0000
## condition_sum9 - condition_sum12 0.0389 0.464 Inf 0.084 1.0000
## condition_sum9 - condition_sum13 0.6399 0.464 Inf 1.380 0.9975
## condition_sum9 - condition_sum14 1.1650 0.466 Inf 2.502 0.5565
## condition_sum9 - condition_sum15 2.0529 0.470 Inf 4.369 0.0019
## condition_sum9 - condition_sum16 1.2091 0.463 Inf 2.612 0.4701
## condition_sum9 - condition_sum17 2.6273 0.476 Inf 5.516 <0.0001
## condition_sum9 - condition_sum18 1.9078 0.467 Inf 4.084 0.0063
## condition_sum9 - condition_sum19 -3.6765 0.455 Inf -8.081 <0.0001
## condition_sum10 - condition_sum11 0.5039 0.464 Inf 1.086 0.9999
## condition_sum10 - condition_sum12 0.1299 0.465 Inf 0.280 1.0000
## condition_sum10 - condition_sum13 0.7309 0.465 Inf 1.572 0.9886
## condition_sum10 - condition_sum14 1.2561 0.467 Inf 2.691 0.4112
## condition_sum10 - condition_sum15 2.1439 0.471 Inf 4.550 0.0008
## condition_sum10 - condition_sum16 1.3001 0.464 Inf 2.802 0.3331
## condition_sum10 - condition_sum17 2.7183 0.478 Inf 5.692 <0.0001
## condition_sum10 - condition_sum18 1.9988 0.468 Inf 4.266 0.0030
## condition_sum10 - condition_sum19 -3.5855 0.455 Inf -7.874 <0.0001
## condition_sum11 - condition_sum12 -0.3740 0.464 Inf -0.806 1.0000
## condition_sum11 - condition_sum13 0.2270 0.464 Inf 0.489 1.0000
## condition_sum11 - condition_sum14 0.7521 0.465 Inf 1.616 0.9846
## condition_sum11 - condition_sum15 1.6400 0.469 Inf 3.495 0.0537
## condition_sum11 - condition_sum16 0.7962 0.463 Inf 1.721 0.9705
## condition_sum11 - condition_sum17 2.2143 0.476 Inf 4.657 0.0005
## condition_sum11 - condition_sum18 1.4948 0.467 Inf 3.203 0.1282
## condition_sum11 - condition_sum19 -4.0894 0.456 Inf -8.967 <0.0001
## condition_sum12 - condition_sum13 0.6010 0.465 Inf 1.294 0.9989
## condition_sum12 - condition_sum14 1.1261 0.466 Inf 2.414 0.6248
## condition_sum12 - condition_sum15 2.0140 0.471 Inf 4.280 0.0028
## condition_sum12 - condition_sum16 1.1702 0.464 Inf 2.524 0.5388
## condition_sum12 - condition_sum17 2.5883 0.477 Inf 5.426 <0.0001
## condition_sum12 - condition_sum18 1.8688 0.468 Inf 3.993 0.0091
## condition_sum12 - condition_sum19 -3.7154 0.456 Inf -8.155 <0.0001
## condition_sum13 - condition_sum14 0.5252 0.466 Inf 1.127 0.9998
## condition_sum13 - condition_sum15 1.4130 0.469 Inf 3.010 0.2104
## condition_sum13 - condition_sum16 0.5692 0.463 Inf 1.229 0.9994
## condition_sum13 - condition_sum17 1.9874 0.476 Inf 4.178 0.0043
## condition_sum13 - condition_sum18 1.2679 0.467 Inf 2.716 0.3930
## condition_sum13 - condition_sum19 -4.3164 0.457 Inf -9.440 <0.0001
## condition_sum14 - condition_sum15 0.8879 0.470 Inf 1.888 0.9301
## condition_sum14 - condition_sum16 0.0441 0.464 Inf 0.095 1.0000
## condition_sum14 - condition_sum17 1.4622 0.476 Inf 3.072 0.1810
## condition_sum14 - condition_sum18 0.7427 0.468 Inf 1.588 0.9872
## condition_sum14 - condition_sum19 -4.8416 0.460 Inf -10.517 <0.0001
## condition_sum15 - condition_sum16 -0.8438 0.467 Inf -1.805 0.9533
## condition_sum15 - condition_sum17 0.5743 0.478 Inf 1.201 0.9996
## condition_sum15 - condition_sum18 -0.1452 0.470 Inf -0.309 1.0000
## condition_sum15 - condition_sum19 -5.7294 0.466 Inf -12.292 <0.0001
## condition_sum16 - condition_sum17 1.4182 0.473 Inf 2.996 0.2178
## condition_sum16 - condition_sum18 0.6987 0.465 Inf 1.503 0.9931
## condition_sum16 - condition_sum19 -4.8856 0.457 Inf -10.682 <0.0001
## condition_sum17 - condition_sum18 -0.7195 0.476 Inf -1.512 0.9927
## condition_sum17 - condition_sum19 -6.3038 0.474 Inf -13.310 <0.0001
## condition_sum18 - condition_sum19 -5.5843 0.463 Inf -12.052 <0.0001
##
## Results are averaged over the levels of: gender_sum
## P value adjustment: tukey method for comparing a family of 19 estimates
# clustering analysis (k-means)
# determine the optimal number of clusters using the Elbow method
clustering <- sapply(1:7, function(k) {
kmeans_result <- kmeans(predicted_ratings$mean_score, centers = k, nstart = 25)
sum(kmeans_result$withinss)
})
elbow_plot <- plot(1:7, clustering, type = "b", pch = 19, xlab = "Number of clusters",
ylab = "WSS",
main = "")

# run the k means with the three clusters
kmeans_result_3 <- kmeans(predicted_ratings$mean_score, centers = 3, nstart = 25)
print(kmeans_result_3$centers)
## [,1]
## 1 4.735771
## 2 2.874470
## 3 6.198801
data_clusters_3 <- predicted_ratings %>%
mutate(cluster = kmeans_result_3$cluster) # assign the cluster number to each condition
# visualization
plot_cond_cl <- ggplot(data_clusters_3, aes(x = mean_score, y = condition, color = as.factor(cluster))) +
geom_point(size = 5) +
geom_text(aes(label = condition), vjust = -0.8, size = 4) +
labs(title = "",
x = "Mean predicted rating", y = "Condition",
color = "Cluster") +
theme_minimal()
# mean ratings per cluster
table_clusters_3 <- data_clusters_3 %>%
group_by(cluster) %>%
summarise(
mean_rating = mean(mean_score, na.rm = TRUE),
sd_rating = sd(mean_score, na.rm = TRUE)
)
# examine whether the clusters are statistically significant from each other
anova_result <- aov(mean_score ~ as.factor(cluster), data = data_clusters_3)
summary(anova_result)
## Df Sum Sq Mean Sq F value Pr(>F)
## as.factor(cluster) 2 25.256 12.628 56.58 5.55e-08 ***
## Residuals 16 3.571 0.223
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
TukeyHSD(anova_result)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = mean_score ~ as.factor(cluster), data = data_clusters_3)
##
## $`as.factor(cluster)`
## diff lwr upr p adj
## 2-1 -1.861301 -2.5289961 -1.193606 0.0000061
## 3-1 1.463029 0.7418366 2.184222 0.0002287
## 3-2 3.324331 2.5065748 4.142087 0.0000000
plot_clusters <- ggplot(data_clusters_3, aes(x = as.factor(cluster), y = mean_score, fill = cluster)) +
geom_boxplot(show.legend = FALSE) +
labs(title = "Average ratings per cluster", x = "Cluster", y = "Mean ratings") +
theme_bw()
plot_clusters

# For the paper, cluster numbers were reassigned to make the interpretation more intuitive. The cluster with the lowest ratings (originally labeled as 2) is labeled as 1 in the paper. The cluster originally labeled as 1 is labeled as 2, and the cluster 3 remains unchanged.
perform statistical analyses (autistic vs. neurotypical adults)
# merge the two datasets
data_groups <- rbind(data_aut, data_nt)
glimpse(data_groups)
## Rows: 5,800
## Columns: 16
## $ participant <fct> 1748852021, 1748852021, 1748852021, 1748852021, 1748852…
## $ age <dbl> 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,…
## $ group <fct> ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, ASD, …
## $ gender <fct> female, female, female, female, female, female, female,…
## $ contact <chr> "yes", "yes", "yes", "yes", "yes", "yes", "yes", "yes",…
## $ type <chr> "items_experimentales1", "items_experimentales1", "item…
## $ choice <chr> "3", "4", "7", "5", "6", "6", "3", "3", "4", "3", "7", …
## $ list <chr> "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", …
## $ item <fct> 12, 35, 40, 23, 27, 3, 29, 15, 17, 9, 7, 21, 25, 31, 14…
## $ marking <chr> "IMPL", "IMPL", "BASELINE", "IMPL", "EXPL", "EXPL", "EX…
## $ type_ts <chr> "ASS", "NASS", "BASELINE", "TOPRE", "NASS", "ASS", "NAS…
## $ feed <chr> "ASSERT", "ASSERT", "BASELINE", "ASSERT", "QUEST", "QUE…
## $ condition <fct> 6, 18, 19, 12, 14, 2, 15, 8, 9, 5, 4, 11, 13, 16, 7, 17…
## $ condition_name <fct> Impl ass assert, Impl nass assert, No TS, Impl topre as…
## $ gender_sum <fct> female, female, female, female, female, female, female,…
## $ condition_sum <fct> 6, 18, 19, 12, 14, 2, 15, 8, 9, 5, 4, 11, 13, 16, 7, 17…
data_groups$choice <- as.factor(data_groups$choice)
data_groups <- mutate(data_groups, group_sum = factor(group))
contrasts(data_groups$group_sum) <- contr.sum(2)
# cumulative link mixed model
clmm_groups <- clmm(choice ~ condition_sum * group_sum + age + gender_sum + (1|participant) + (1|item), data = data_groups)
summary(clmm_groups)
## Cumulative Link Mixed Model fitted with the Laplace approximation
##
## formula: choice ~ condition_sum * group_sum + age + gender_sum + (1 |
## participant) + (1 | item)
## data: data_groups
##
## link threshold nobs logLik AIC niter max.grad cond.H
## logit flexible 5800 -9089.36 18276.72 12246(48989) 6.16e-02 4.0e+05
##
## Random effects:
## Groups Name Variance Std.Dev.
## participant (Intercept) 0.7523 0.8674
## item (Intercept) 0.2392 0.4891
## Number of groups: participant 145, item 40
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## condition_sum2 -1.720600 0.518324 -3.320 0.000902 ***
## condition_sum3 -1.717229 0.517085 -3.321 0.000897 ***
## condition_sum4 -0.461012 0.519784 -0.887 0.375117
## condition_sum5 -2.179789 0.517701 -4.211 2.55e-05 ***
## condition_sum6 -0.874762 0.517734 -1.690 0.091105 .
## condition_sum7 -1.138043 0.518416 -2.195 0.028147 *
## condition_sum8 -2.010914 0.518051 -3.882 0.000104 ***
## condition_sum9 -1.669329 0.517555 -3.225 0.001258 **
## condition_sum10 -1.646539 0.517915 -3.179 0.001477 **
## condition_sum11 -2.193058 0.518095 -4.233 2.31e-05 ***
## condition_sum12 -1.833635 0.517518 -3.543 0.000395 ***
## condition_sum13 -2.374943 0.517621 -4.588 4.47e-06 ***
## condition_sum14 -3.231530 0.518833 -6.228 4.71e-10 ***
## condition_sum15 -4.087651 0.521018 -7.846 4.31e-15 ***
## condition_sum16 -3.316236 0.518295 -6.398 1.57e-10 ***
## condition_sum17 -4.742499 0.523334 -9.062 < 2e-16 ***
## condition_sum18 -3.967618 0.520488 -7.623 2.48e-14 ***
## condition_sum19 1.762917 0.463063 3.807 0.000141 ***
## group_sum1 0.262168 0.154815 1.693 0.090375 .
## age 0.006320 0.008092 0.781 0.434822
## gender_summale -0.391848 0.161564 -2.425 0.015294 *
## gender_sumnon-binary 0.776243 0.358463 2.165 0.030351 *
## gender_sumprefer not to say 2.287039 0.940935 2.431 0.015074 *
## condition_sum2:group_sum1 -0.023858 0.174593 -0.137 0.891310
## condition_sum3:group_sum1 -0.409940 0.170756 -2.401 0.016362 *
## condition_sum4:group_sum1 -0.012747 0.178738 -0.071 0.943146
## condition_sum5:group_sum1 -0.244205 0.170375 -1.433 0.151760
## condition_sum6:group_sum1 -0.229611 0.173167 -1.326 0.184856
## condition_sum7:group_sum1 -0.217023 0.175395 -1.237 0.215962
## condition_sum8:group_sum1 -0.068596 0.172940 -0.397 0.691629
## condition_sum9:group_sum1 -0.337846 0.172317 -1.961 0.049925 *
## condition_sum10:group_sum1 -0.200184 0.173188 -1.156 0.247732
## condition_sum11:group_sum1 -0.266313 0.172593 -1.543 0.122827
## condition_sum12:group_sum1 -0.205700 0.172231 -1.194 0.232351
## condition_sum13:group_sum1 -0.351532 0.171898 -2.045 0.040854 *
## condition_sum14:group_sum1 -0.078460 0.173863 -0.451 0.651791
## condition_sum15:group_sum1 -0.205939 0.176963 -1.164 0.244529
## condition_sum16:group_sum1 -0.044821 0.172311 -0.260 0.794772
## condition_sum17:group_sum1 -0.167884 0.182614 -0.919 0.357920
## condition_sum18:group_sum1 -0.163585 0.175037 -0.935 0.350008
## condition_sum19:group_sum1 0.177303 0.189363 0.936 0.349112
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Threshold coefficients:
## Estimate Std. Error z value
## 1|2 -4.26316 0.46839 -9.102
## 2|3 -3.44923 0.46729 -7.381
## 3|4 -2.74093 0.46653 -5.875
## 4|5 -2.11872 0.46598 -4.547
## 5|6 -1.24599 0.46544 -2.677
## 6|7 -0.08816 0.46518 -0.190
# post-hoc analyses
emmeans(clmm_groups, pairwise~list(group_sum|condition_sum, condition_sum|group_sum), adjust="Tukey")
## $emmeans
## condition_sum = 1:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 3.463 0.485 Inf 2.5117 4.4138
## NT 2.938 0.460 Inf 2.0372 3.8395
##
## condition_sum = 2:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.718 0.472 Inf 0.7924 2.6441
## NT 1.242 0.457 Inf 0.3463 2.1370
##
## condition_sum = 3:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.336 0.467 Inf 0.4211 2.2500
## NT 1.631 0.457 Inf 0.7360 2.5262
##
## condition_sum = 4:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 2.989 0.479 Inf 2.0496 3.9283
## NT 2.490 0.459 Inf 1.5908 3.3894
##
## condition_sum = 5:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.039 0.467 Inf 0.1230 1.9544
## NT 1.003 0.455 Inf 0.1108 1.8948
##
## condition_sum = 6:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 2.358 0.471 Inf 1.4362 3.2805
## NT 2.293 0.458 Inf 1.3946 3.1919
##
## condition_sum = 7:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 2.108 0.474 Inf 1.1786 3.0367
## NT 2.017 0.457 Inf 1.1207 2.9140
##
## condition_sum = 8:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.383 0.470 Inf 0.4615 2.3050
## NT 0.996 0.456 Inf 0.1019 1.8903
##
## condition_sum = 9:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.456 0.469 Inf 0.5368 2.3742
## NT 1.607 0.457 Inf 0.7112 2.5025
##
## condition_sum = 10:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.616 0.470 Inf 0.6940 2.5380
## NT 1.492 0.457 Inf 0.5960 2.3880
##
## condition_sum = 11:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.003 0.468 Inf 0.0853 1.9214
## NT 1.012 0.457 Inf 0.1155 1.9078
##
## condition_sum = 12:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 1.423 0.470 Inf 0.5024 2.3444
## NT 1.310 0.456 Inf 0.4168 2.2041
##
## condition_sum = 13:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 0.736 0.469 Inf -0.1834 1.6559
## NT 0.915 0.455 Inf 0.0230 1.8070
##
## condition_sum = 14:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 0.153 0.471 Inf -0.7695 1.0750
## NT -0.215 0.456 Inf -1.1094 0.6800
##
## condition_sum = 15:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD -0.831 0.472 Inf -1.7564 0.0947
## NT -0.943 0.459 Inf -1.8432 -0.0435
##
## condition_sum = 16:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 0.102 0.467 Inf -0.8136 1.0169
## NT -0.333 0.458 Inf -1.2302 0.5642
##
## condition_sum = 17:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD -1.448 0.477 Inf -2.3828 -0.5125
## NT -1.636 0.463 Inf -2.5430 -0.7295
##
## condition_sum = 18:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD -0.668 0.470 Inf -1.5899 0.2529
## NT -0.866 0.459 Inf -1.7646 0.0333
##
## condition_sum = 19:
## group_sum emmean SE df asymp.LCL asymp.UCL
## ASD 5.403 0.435 Inf 4.5506 6.2553
## NT 4.524 0.389 Inf 3.7620 5.2860
##
## Results are averaged over the levels of: gender_sum
## Confidence level used: 0.95
##
## $contrasts
## condition_sum = 1:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.52434 0.310 Inf 1.693 0.0904
##
## condition_sum = 2:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.47662 0.286 Inf 1.665 0.0960
##
## condition_sum = 3:
## contrast estimate SE df z.ratio p.value
## ASD - NT -0.29554 0.277 Inf -1.068 0.2857
##
## condition_sum = 4:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.49884 0.296 Inf 1.683 0.0924
##
## condition_sum = 5:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.03593 0.275 Inf 0.130 0.8962
##
## condition_sum = 6:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.06511 0.283 Inf 0.230 0.8179
##
## condition_sum = 7:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.09029 0.288 Inf 0.313 0.7540
##
## condition_sum = 8:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.38714 0.282 Inf 1.373 0.1696
##
## condition_sum = 9:
## contrast estimate SE df z.ratio p.value
## ASD - NT -0.15136 0.281 Inf -0.539 0.5897
##
## condition_sum = 10:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.12397 0.283 Inf 0.438 0.6611
##
## condition_sum = 11:
## contrast estimate SE df z.ratio p.value
## ASD - NT -0.00829 0.281 Inf -0.030 0.9765
##
## condition_sum = 12:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.11294 0.280 Inf 0.403 0.6870
##
## condition_sum = 13:
## contrast estimate SE df z.ratio p.value
## ASD - NT -0.17873 0.279 Inf -0.640 0.5225
##
## condition_sum = 14:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.36742 0.284 Inf 1.293 0.1961
##
## condition_sum = 15:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.11246 0.292 Inf 0.385 0.6999
##
## condition_sum = 16:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.43469 0.280 Inf 1.550 0.1211
##
## condition_sum = 17:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.18857 0.305 Inf 0.618 0.5366
##
## condition_sum = 18:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.19717 0.287 Inf 0.687 0.4918
##
## condition_sum = 19:
## contrast estimate SE df z.ratio p.value
## ASD - NT 0.87894 0.322 Inf 2.730 0.0063
##
## Results are averaged over the levels of: gender_sum