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