Block 1. Empirical audit and human effects

Participant coverage, item structure, response distributions, response times, and first-pass behavioral phenomena

Author

Alejandro Martínez-Mingo

Published

July 3, 2026

1 Analytical role of Block 1

This first block is deliberately empirical. Before evaluating any quantum-like metric, the notebook checks what was actually collected, how many participants and items are available for each task, which response-time variables are usable, which duplicate/repeated-response decisions were made, and which behavioral effects are already present in the human data.

This is the part that should prevent the later computational analysis from becoming a heroic story about elegant operators floating above a swamp of uninspected data. Tragic that this needs saying, but here we are.

The corpus should be treated as temporally and culturally aligned with the participants: the language model was built from Spanish news between 2013 and 2019, and the human data were collected in 2020 from Spanish participants. Therefore, the main limitation is not a gross corpus-participant mismatch, but the narrower question of whether corpus frequency and contextual diversity approximate the participants’ media exposure and conceptual familiarity.

2 Packages, paths, and helpers

Show code
required_packages <- c(
  "tidyverse", "vroom", "broom", "knitr", "scales", "stringr", "forcats", "fs"
)

missing_packages <- required_packages[!vapply(required_packages, requireNamespace, logical(1), quietly = TRUE)]
if (length(missing_packages) > 0) {
  if (isTRUE(params$install_missing)) {
    install.packages(missing_packages)
  } else {
    stop(
      "Missing packages: ", paste(missing_packages, collapse = ", "),
      "\nInstall them or render with -P install_missing:true. Apparently even data need tribute."
    )
  }
}

library(tidyverse)
library(vroom)
library(broom)
library(knitr)
library(scales)
library(stringr)
library(forcats)
library(fs)
Show code
project_root <- normalizePath(getwd(), mustWork = TRUE)
data_dir <- file.path(project_root, params$data_dir)
empirical_dir <- file.path(project_root, params$empirical_dir)

clean_paths <- function(paths) {
  paths <- unlist(paths, use.names = FALSE)
  paths <- paths[!is.na(paths) & nzchar(paths)]
  unique(paths)
}

first_existing <- function(paths, type = c("file", "dir"), required = TRUE, label = "path") {
  type <- match.arg(type)
  paths <- clean_paths(paths)
  exists_fun <- if (type == "file") file.exists else dir.exists
  hit <- paths[exists_fun(paths)]
  if (length(hit) > 0) return(normalizePath(hit[[1]], mustWork = TRUE))
  if (required) {
    stop(
      "Could not find ", label, ". Tried:\n",
      paste(paths, collapse = "\n"),
      "\n\nCheck folder names or pass the explicit path with a Quarto parameter."
    )
  }
  NA_character_
}

find_parent_by_file <- function(roots, filename, max_depth = 6) {
  roots <- clean_paths(roots)
  roots <- roots[dir.exists(roots)]
  if (length(roots) == 0) return(character())
  hits <- character()
  for (r in roots) {
    files <- list.files(
      r,
      pattern = paste0("^", gsub("\\.", "\\\\.", filename), "$"),
      recursive = TRUE,
      full.names = TRUE
    )
    if (length(files) > 0) {
      root_norm <- normalizePath(r, mustWork = FALSE)
      file_norm <- normalizePath(files, mustWork = FALSE)
      rel <- sub(paste0("^", root_norm, "/?"), "", file_norm)
      depth <- stringr::str_count(rel, .Platform$file.sep)
      hits <- c(hits, dirname(files[depth <= max_depth]))
    }
  }
  unique(hits)
}

read_csv_fast <- function(path, required = TRUE) {
  if (is.na(path) || !file.exists(path)) {
    if (required) stop("File not found: ", path)
    return(tibble())
  }
  if (file.info(path)$size <= 1) return(tibble())
  vroom::vroom(path, delim = ",", show_col_types = FALSE, progress = FALSE)
}

read_optional <- function(path) read_csv_fast(path, required = FALSE)

write_table <- function(data, filename) {
  readr::write_csv(data, file.path(output_dir, "tables", filename))
}

# In knitr, objects created inside if/for blocks are not always auto-printed.
# These wrappers force tables and figures to appear in the rendered notebook.
show_table <- function(data, caption = NULL, ...) {
  print(knitr::kable(data, caption = caption, ...))
}

show_plot <- function(plot) {
  print(plot)
}

save_plot <- function(plot, filename, width = 10, height = 6) {
  ggplot2::ggsave(
    filename = file.path(output_dir, "figures", filename),
    plot = plot,
    width = width,
    height = height,
    dpi = 300
  )
}

apa_p <- function(p) {
  case_when(
    is.na(p) ~ "",
    p < .001 ~ "< .001",
    TRUE ~ sub("^0", "", sprintf("%.3f", p))
  )
}

apa_r <- function(x, digits = 2) {
  out <- sprintf(paste0("%0.", digits, "f"), x)
  out <- str_replace(out, "^-0\\.", "−.")
  out <- str_replace(out, "^0\\.", ".")
  out
}

nice_task <- function(x) {
  x %>%
    str_replace_all("_", " ") %>%
    str_replace("asymmetry 1 forced choice", "H1 asymmetry forced choice") %>%
    str_replace("saliency 1 forced choice", "H2 salience forced choice") %>%
    str_replace("saliency 2 single rating", "H2b salience rating") %>%
    str_replace("asymmetry 2 a direct", "H3 direct rating") %>%
    str_replace("asymmetry 2 b reverse", "H3 reverse rating") %>%
    str_replace("contextuality aggregate main", "Contextuality / priming") %>%
    str_replace("diagnosticity 1 choice cleaned", "H6 diagnostic choice") %>%
    str_replace("diagnosticity 2 rating cleaned", "H6 diagnostic rating") %>%
    str_to_sentence()
}

safe_n_distinct <- function(x) if (length(x) == 0) NA_integer_ else n_distinct(x, na.rm = TRUE)

summarise_model <- function(model) {
  broom::glance(model) %>%
    select(any_of(c("r.squared", "adj.r.squared", "AIC", "BIC", "sigma", "statistic", "p.value", "df", "df.residual")))
}

theme_block1 <- function(base_size = 12) {
  ggplot2::theme_minimal(base_size = base_size) +
    theme(
      panel.grid.minor = element_blank(),
      panel.grid.major.x = element_line(linewidth = .25, colour = "grey85"),
      panel.grid.major.y = element_line(linewidth = .25, colour = "grey90"),
      axis.title = element_text(face = "bold"),
      plot.title = element_text(face = "bold", size = base_size + 3, margin = margin(b = 5)),
      plot.subtitle = element_text(size = base_size + 1, colour = "grey25", margin = margin(b = 8)),
      plot.caption = element_text(size = base_size - 2, colour = "grey35", hjust = 0),
      legend.position = "bottom",
      legend.title = element_blank(),
      strip.text = element_text(face = "bold")
    )
}

palette_block1 <- c(
  "asymmetry" = "#0072B2",
  "saliency" = "#009E73",
  "contextuality" = "#D55E00",
  "diagnosticity" = "#CC79A7",
  "gk" = "#999999"
)

phase2_candidates <- c(
  params$phase2_dir,
  file.path(empirical_dir, "tidy_outputs"),
  file.path(empirical_dir, "phase2_tidy_outputs"),
  file.path(data_dir, "phase2_tidy_outputs"),
  file.path(project_root, "tidy_outputs"),
  file.path(project_root, "phase2_tidy_outputs"),
  find_parent_by_file(c(empirical_dir, data_dir, project_root), "responses_all_long.csv", max_depth = 6)
)

audit_candidates <- c(
  params$audit_dir,
  file.path(empirical_dir, "audit_outputs"),
  file.path(data_dir, "audit_outputs"),
  file.path(project_root, "audit_outputs"),
  file.path(project_root, "phase1_audit_outputs"),
  file.path(project_root, "phase1_audit_outputs_v2"),
  find_parent_by_file(c(empirical_dir, data_dir, project_root), "file_level_summary.csv", max_depth = 6)
)

hypothesis_candidates <- c(
  params$hypothesis_dir,
  file.path(empirical_dir, "empirical_hypothesis_outputs"),
  file.path(data_dir, "phase2_empirical_hypothesis_outputs"),
  file.path(project_root, "empirical_hypothesis_outputs"),
  file.path(project_root, "phase2_empirical_hypothesis_outputs"),
  find_parent_by_file(c(empirical_dir, data_dir, project_root), "hypothesis_level_summary.csv", max_depth = 6)
)

phase2_dir <- first_existing(phase2_candidates, type = "dir", label = "Phase 2 tidy outputs directory")
audit_dir <- first_existing(audit_candidates, type = "dir", required = FALSE, label = "audit outputs directory")
hypothesis_dir <- first_existing(hypothesis_candidates, type = "dir", required = FALSE, label = "empirical hypothesis outputs directory")

output_dir <- file.path(project_root, params$output_dir)
fs::dir_create(output_dir)
fs::dir_create(file.path(output_dir, "tables"))
fs::dir_create(file.path(output_dir, "figures"))
fs::dir_create(file.path(output_dir, "data"))

paths <- list(
  project_root = project_root,
  data_dir = data_dir,
  empirical_dir = empirical_dir,
  phase2_dir = phase2_dir,
  audit_dir = audit_dir,
  hypothesis_dir = hypothesis_dir,
  output_dir = output_dir
)

paths
$project_root
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel"

$data_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Computational_data"

$empirical_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Empirical_data"

$phase2_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Empirical_data/tidy_outputs"

$audit_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Empirical_data/audit_outputs"

$hypothesis_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Empirical_data/empirical_hypothesis_outputs"

$output_dir
[1] "/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Computational_data/block1_empirical_audit_outputs_v5"

3 Load empirical data

Show code
phase2_files <- list(
  responses_all = file.path(phase2_dir, "tables", "responses_all_long.csv"),
  participants = file.path(phase2_dir, "tables", "participants_phase2.csv"),
  items_catalog = file.path(phase2_dir, "tables", "items_catalog_phase2.csv"),
  response_counts = file.path(phase2_dir, "tables", "response_value_counts_phase2.csv"),
  rt_summary = file.path(phase2_dir, "tables", "rt_summary_phase2.csv"),
  processing_decisions = file.path(phase2_dir, "tables", "processing_decisions_phase2.csv"),
  coverage_summary = file.path(phase2_dir, "tables", "coverage_summary_phase2.csv"),
  phase2_table_summary = file.path(phase2_dir, "tables", "phase2_table_summary.csv"),
  data_dictionary = file.path(phase2_dir, "tables", "data_dictionary_phase2.csv")
)

audit_files <- list(
  file_level_summary = file.path(audit_dir, "file_level_summary.csv"),
  column_missingness = file.path(audit_dir, "column_missingness.csv"),
  duplicate_participant_ids = file.path(audit_dir, "duplicate_participant_ids.csv"),
  participant_overlap_matrix = file.path(audit_dir, "participant_overlap_matrix.csv"),
  participants_core_coverage = file.path(audit_dir, "participants_core_coverage.csv"),
  rt_audit_long = file.path(audit_dir, "rt_audit_long.csv"),
  rt_summary_by_column = file.path(audit_dir, "rt_summary_by_column.csv"),
  audit_anomalies = file.path(audit_dir, "audit_anomalies.csv"),
  duplicate_resolution_log = file.path(audit_dir, "duplicate_resolution_log.csv"),
  contextuality_cleaning_options = file.path(audit_dir, "contextuality_cleaning_options_summary.csv")
)

hypothesis_files <- list(
  hypothesis_level_summary = file.path(hypothesis_dir, "tables", "hypothesis_level_summary.csv"),
  asymmetry_1_binomial = file.path(hypothesis_dir, "tables", "asymmetry_1_forced_choice_item_binomial_tests_primary_excluding_attempt_duplicates.csv"),
  asymmetry_1_binomial_sensitivity = file.path(hypothesis_dir, "tables", "asymmetry_1_forced_choice_item_binomial_tests_sensitivity_all_attempts.csv"),
  saliency_1_binomial = file.path(hypothesis_dir, "tables", "saliency_1_forced_choice_item_binomial_tests.csv"),
  asym_sal_forced_cor = file.path(hypothesis_dir, "tables", "asymmetry_saliency_forced_choice_item_correlation_table.csv"),
  asym_sal_single_cor = file.path(hypothesis_dir, "tables", "asymmetry_saliency_single_rating_item_correlation_table.csv"),
  asym2_order_tests = file.path(hypothesis_dir, "tables", "asymmetry_2_likert_order_effect_item_tests.csv"),
  contextuality_broad = file.path(hypothesis_dir, "tables", "contextuality_broad_condition_summary.csv"),
  contextuality_model = file.path(hypothesis_dir, "tables", "contextuality_model_summary.csv"),
  diagnostic_choice = file.path(hypothesis_dir, "tables", "diagnosticity_1_choice_context_tests.csv"),
  diagnostic_rating = file.path(hypothesis_dir, "tables", "diagnosticity_2_rating_context_interaction_tests.csv"),
  vdtm_triangle = file.path(hypothesis_dir, "tables", "vdtm_exploratory_triangle_tests_from_asymmetry_2_ratings.csv")
)

responses_all <- read_csv_fast(phase2_files$responses_all)
participants <- read_optional(phase2_files$participants)
items_catalog <- read_optional(phase2_files$items_catalog)
response_counts <- read_optional(phase2_files$response_counts)
rt_summary_phase2 <- read_optional(phase2_files$rt_summary)
processing_decisions <- read_optional(phase2_files$processing_decisions)
coverage_summary <- read_optional(phase2_files$coverage_summary)
phase2_table_summary <- read_optional(phase2_files$phase2_table_summary)
data_dictionary <- read_optional(phase2_files$data_dictionary)

file_level_summary <- read_optional(audit_files$file_level_summary)
column_missingness <- read_optional(audit_files$column_missingness)
duplicate_participant_ids <- read_optional(audit_files$duplicate_participant_ids)
participant_overlap_matrix <- read_optional(audit_files$participant_overlap_matrix)
participants_core_coverage <- read_optional(audit_files$participants_core_coverage)
rt_audit_long <- read_optional(audit_files$rt_audit_long)
rt_summary_by_column <- read_optional(audit_files$rt_summary_by_column)
audit_anomalies <- read_optional(audit_files$audit_anomalies)
duplicate_resolution_log <- read_optional(audit_files$duplicate_resolution_log)
contextuality_cleaning_options <- read_optional(audit_files$contextuality_cleaning_options)

hypothesis_level_summary <- read_optional(hypothesis_files$hypothesis_level_summary)
asymmetry_1_binomial <- read_optional(hypothesis_files$asymmetry_1_binomial)
asymmetry_1_binomial_sensitivity <- read_optional(hypothesis_files$asymmetry_1_binomial_sensitivity)
saliency_1_binomial <- read_optional(hypothesis_files$saliency_1_binomial)
asym_sal_forced_cor <- read_optional(hypothesis_files$asym_sal_forced_cor)
asym_sal_single_cor <- read_optional(hypothesis_files$asym_sal_single_cor)
asym2_order_tests <- read_optional(hypothesis_files$asym2_order_tests)
contextuality_broad <- read_optional(hypothesis_files$contextuality_broad)
contextuality_model <- read_optional(hypothesis_files$contextuality_model)
diagnostic_choice <- read_optional(hypothesis_files$diagnostic_choice)
diagnostic_rating <- read_optional(hypothesis_files$diagnostic_rating)
vdtm_triangle <- read_optional(hypothesis_files$vdtm_triangle)

responses_all <- responses_all %>%
  mutate(
    valid_rt = !is.na(rt_ms) & rt_ms >= params$rt_min_ms & rt_ms <= params$rt_max_ms,
    task_label = nice_task(subexperiment),
    experiment = as.character(experiment),
    response_type = as.character(response_type)
  )

import_overview <- tibble(
  data_object = c(
    "responses_all", "participants", "items_catalog", "response_counts", "rt_summary_phase2",
    "processing_decisions", "file_level_summary", "column_missingness", "duplicate_participant_ids",
    "rt_audit_long", "hypothesis_level_summary"
  ),
  rows = c(
    nrow(responses_all), nrow(participants), nrow(items_catalog), nrow(response_counts), nrow(rt_summary_phase2),
    nrow(processing_decisions), nrow(file_level_summary), nrow(column_missingness), nrow(duplicate_participant_ids),
    nrow(rt_audit_long), nrow(hypothesis_level_summary)
  ),
  columns = c(
    ncol(responses_all), ncol(participants), ncol(items_catalog), ncol(response_counts), ncol(rt_summary_phase2),
    ncol(processing_decisions), ncol(file_level_summary), ncol(column_missingness), ncol(duplicate_participant_ids),
    ncol(rt_audit_long), ncol(hypothesis_level_summary)
  )
)

show_table(import_overview, caption = "Table 1. Imported empirical data objects.")


Table: Table 1. Imported empirical data objects.

|data_object               |   rows| columns|
|:-------------------------|------:|-------:|
|responses_all             | 101119|      65|
|participants              |    395|      33|
|items_catalog             |    510|      33|
|response_counts           |     79|       5|
|rt_summary_phase2         |      9|       9|
|processing_decisions      |      7|       4|
|file_level_summary        |     11|       7|
|column_missingness        |    775|       5|
|duplicate_participant_ids |     11|       5|
|rt_audit_long             |  85284|      10|
|hypothesis_level_summary  |      6|       4|
Show code
write_table(import_overview, "table_01_imported_empirical_objects.csv")

4 1.1 Task-level scope

The first check is whether each task contributes enough observations, enough unique items, enough participants, and enough usable response times to support the later analyses.

Show code
task_scope <- responses_all %>%
  group_by(experiment, subexperiment, task_label, task_family, response_type) %>%
  summarise(
    n_rows = n(),
    n_participants = n_distinct(participant_id, na.rm = TRUE),
    n_raw_ids = n_distinct(raw_ID, na.rm = TRUE),
    n_items = n_distinct(item_id, na.rm = TRUE),
    n_nonmissing_response = sum(!is.na(response_coded) | !is.na(rating) | !is.na(selected_code_assuming_a_first_d_second), na.rm = TRUE),
    n_rating = sum(!is.na(rating), na.rm = TRUE),
    n_selected = sum(!is.na(selected_code_assuming_a_first_d_second) | !is.na(selected_code), na.rm = TRUE),
    n_rt_observed = sum(!is.na(rt_ms), na.rm = TRUE),
    n_rt_valid = sum(valid_rt, na.rm = TRUE),
    pct_rt_valid = n_rt_valid / n_rows,
    median_rt_ms = median(rt_ms[valid_rt], na.rm = TRUE),
    mean_rt_ms = mean(rt_ms[valid_rt], na.rm = TRUE),
    pct_fast_lt_min = mean(!is.na(rt_ms) & rt_ms < params$rt_min_ms),
    pct_slow_gt_max = mean(!is.na(rt_ms) & rt_ms > params$rt_max_ms),
    .groups = "drop"
  ) %>%
  arrange(experiment, subexperiment)

show_table(
  task_scope %>%
    mutate(
      pct_rt_valid = scales::percent(pct_rt_valid, accuracy = .1),
      pct_fast_lt_min = scales::percent(pct_fast_lt_min, accuracy = .1),
      pct_slow_gt_max = scales::percent(pct_slow_gt_max, accuracy = .1),
      median_rt_ms = round(median_rt_ms, 0),
      mean_rt_ms = round(mean_rt_ms, 0)
    ),
  caption = "Table 2. Task-level empirical scope and response-time availability."
)


Table: Table 2. Task-level empirical scope and response-time availability.

|experiment    |subexperiment                  |task_label                 |task_family                      |response_type              | n_rows| n_participants| n_raw_ids| n_items| n_nonmissing_response| n_rating| n_selected| n_rt_observed| n_rt_valid|pct_rt_valid | median_rt_ms| mean_rt_ms|pct_fast_lt_min |pct_slow_gt_max |
|:-------------|:------------------------------|:--------------------------|:--------------------------------|:--------------------------|------:|--------------:|---------:|-------:|---------------------:|--------:|----------:|-------------:|----------:|:------------|------------:|----------:|:---------------|:---------------|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |forced_choice_pair               |forced_choice_ad           |  11250|            369|       369|      30|                 11250|        0|      11250|         11250|      11239|99.9%        |         2930|       3635|0.0%            |0.1%            |
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |rating_pair                      |rating_1_9                 |  17370|            193|       193|      90|                 17370|    17370|          0|         17370|      17164|98.8%        |         3147|       3687|1.1%            |0.1%            |
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |rating_pair                      |rating_1_9                 |  15930|            177|       177|      90|                 15930|    15930|          0|         15930|      15740|98.8%        |         2977|       3463|1.1%            |0.1%            |
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |binary_measurement_contextuality |binary_a_d_modal_aggregate |   5180|            370|       370|     126|                  5180|        0|          0|          5180|       5176|99.9%        |         1888|       2397|0.0%            |0.1%            |
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |forced_choice_diagnosticity      |choice_country_code        |   4059|            369|       369|      22|                  4059|        0|       4059|             0|          0|0.0%         |           NA|        NaN|0.0%            |0.0%            |
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |rating_candidate_target          |rating_0_6                 |   7370|            335|       335|      44|                  7370|     7370|          0|             0|          0|0.0%         |           NA|        NaN|0.0%            |0.0%            |
|gk            |gk_test                        |Gk test                    |general_knowledge_item           |binary_correct             |  12580|            370|       370|      34|                 12240|        0|          0|             0|          0|0.0%         |           NA|        NaN|0.0%            |0.0%            |
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |forced_choice_pair               |forced_choice_ad           |  11100|            370|       370|      30|                 11100|        0|      11100|         11100|      11098|100.0%       |         1566|       1965|0.0%            |0.0%            |
|saliency      |saliency_2_single_rating       |H2b salience rating        |rating_single_country            |rating_1_9                 |  16280|            370|       370|      44|                 16280|    16280|          0|         16280|      16277|100.0%       |         1925|       2345|0.0%            |0.0%            |
Show code
write_table(task_scope, "table_02_task_level_scope.csv")
Show code
task_scope_plot <- task_scope %>%
  mutate(task_label = fct_reorder(task_label, n_rows)) %>%
  ggplot(aes(x = task_label, y = n_rows, fill = experiment)) +
  geom_col(width = .72, alpha = .9) +
  geom_text(aes(label = comma(n_rows)), hjust = -0.08, size = 3.4) +
  coord_flip(clip = "off") +
  scale_y_continuous(labels = comma, expand = expansion(mult = c(0, .12))) +
  scale_fill_manual(values = palette_block1, na.value = "grey60") +
  labs(
    title = "Rows available by task",
    subtitle = "This defines the empirical weight of each task before any computational model is evaluated.",
    x = NULL,
    y = "Rows"
  ) +
  theme_block1()

show_plot(task_scope_plot)

Show code
save_plot(task_scope_plot, "fig_01_rows_by_task.png", width = 11, height = 6)

Interpretation. This table is the denominator for everything that follows. Any later computational-human association should be read against this empirical structure: forced-choice effects are usually based on many participant-level binary decisions but few item-level pairs; single-concept salience has fewer concepts but cleaner item-level interpretation; diagnosticity and contextuality have their own condition structure and should not be silently folded into pairwise similarity.

5 1.2 Participant coverage and overlap

Show code
participant_by_task <- responses_all %>%
  distinct(participant_id, experiment, subexperiment, task_label) %>%
  count(experiment, subexperiment, task_label, name = "n_participants") %>%
  arrange(experiment, subexperiment)

participant_global <- responses_all %>%
  group_by(participant_id) %>%
  summarise(
    n_rows = n(),
    n_experiments = n_distinct(experiment, na.rm = TRUE),
    n_subexperiments = n_distinct(subexperiment, na.rm = TRUE),
    n_items = n_distinct(item_id, na.rm = TRUE),
    n_valid_rt = sum(valid_rt, na.rm = TRUE),
    .groups = "drop"
  )

participant_global_summary <- participant_global %>%
  summarise(
    n_participants = n(),
    median_rows = median(n_rows),
    min_rows = min(n_rows),
    max_rows = max(n_rows),
    median_subexperiments = median(n_subexperiments),
    min_subexperiments = min(n_subexperiments),
    max_subexperiments = max(n_subexperiments),
    median_valid_rt = median(n_valid_rt),
    min_valid_rt = min(n_valid_rt),
    max_valid_rt = max(n_valid_rt)
  )

show_table(participant_by_task, caption = "Table 3. Participant counts by task.")


Table: Table 3. Participant counts by task.

|experiment    |subexperiment                  |task_label                 | n_participants|
|:-------------|:------------------------------|:--------------------------|--------------:|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |            369|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |            193|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |            177|
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |            370|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |            369|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |            335|
|gk            |gk_test                        |Gk test                    |            370|
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |            370|
|saliency      |saliency_2_single_rating       |H2b salience rating        |            370|
Show code
write_table(participant_by_task, "table_03_participants_by_task.csv")

show_table(participant_global_summary, caption = "Table 4. Participant-level coverage summary.")


Table: Table 4. Participant-level coverage summary.

| n_participants| median_rows| min_rows| max_rows| median_subexperiments| min_subexperiments| max_subexperiments| median_valid_rt| min_valid_rt| max_valid_rt|
|--------------:|-----------:|--------:|--------:|---------------------:|------------------:|------------------:|---------------:|------------:|------------:|
|            395|         275|       11|      365|                     8|                  1|                  8|             207|            0|          297|
Show code
write_table(participant_global_summary, "table_04_participant_level_coverage_summary.csv")
Show code
participant_task_wide <- responses_all %>%
  distinct(participant_id, task_label) %>%
  mutate(value = 1L) %>%
  pivot_wider(names_from = task_label, values_from = value, values_fill = 0)

if (ncol(participant_task_wide) > 2) {
  overlap_mat <- participant_task_wide %>%
    select(-participant_id) %>%
    as.matrix() %>%
    crossprod()

  # Robust conversion from matrix to long table. Depending on R/tibble versions,
  # as_tibble(as.table(.)) may produce columns named Var1/Var2/n, Freq, or even
  # preserve matrix dimnames differently. as.data.frame.table is less glamorous,
  # which is precisely why it behaves.
  overlap_long <- as.data.frame.table(
    overlap_mat,
    responseName = "n_overlap",
    stringsAsFactors = FALSE
  ) %>%
    as_tibble()

  names(overlap_long)[1:2] <- c("task_1", "task_2")

  overlap_long <- overlap_long %>%
    mutate(
      task_1 = as.character(task_1),
      task_2 = as.character(task_2),
      n_overlap = as.integer(n_overlap)
    )
} else {
  overlap_long <- tibble(task_1 = character(), task_2 = character(), n_overlap = integer())
}

show_table(overlap_long %>% arrange(desc(n_overlap)) %>% slice_head(n = 25), caption = "Table 5. Largest participant overlaps between tasks.")


Table: Table 5. Largest participant overlaps between tasks.

|task_1                     |task_2                     | n_overlap|
|:--------------------------|:--------------------------|---------:|
|H2 salience forced choice  |H2 salience forced choice  |       370|
|H2b salience rating        |H2b salience rating        |       370|
|Gk test                    |H2b salience rating        |       370|
|Contextuality / priming    |Contextuality / priming    |       370|
|H2b salience rating        |Gk test                    |       370|
|Gk test                    |Gk test                    |       370|
|H1 asymmetry forced choice |H1 asymmetry forced choice |       369|
|H6 diagnostic choice       |H6 diagnostic choice       |       369|
|Contextuality / priming    |H1 asymmetry forced choice |       365|
|H1 asymmetry forced choice |Contextuality / priming    |       365|
|H6 diagnostic choice       |Contextuality / priming    |       364|
|Contextuality / priming    |H6 diagnostic choice       |       364|
|Contextuality / priming    |H2b salience rating        |       362|
|H2b salience rating        |Contextuality / priming    |       362|
|Gk test                    |Contextuality / priming    |       362|
|Contextuality / priming    |Gk test                    |       362|
|H6 diagnostic choice       |H1 asymmetry forced choice |       361|
|Contextuality / priming    |H2 salience forced choice  |       361|
|H2 salience forced choice  |Contextuality / priming    |       361|
|H1 asymmetry forced choice |H6 diagnostic choice       |       361|
|H2 salience forced choice  |H1 asymmetry forced choice |       360|
|H1 asymmetry forced choice |H2 salience forced choice  |       360|
|H2b salience rating        |H1 asymmetry forced choice |       359|
|Gk test                    |H1 asymmetry forced choice |       359|
|H1 asymmetry forced choice |H2b salience rating        |       359|
Show code
write_table(overlap_long, "table_05_participant_task_overlap.csv")
Show code
if (nrow(overlap_long) > 0) {
  overlap_plot <- overlap_long %>%
    ggplot(aes(x = task_1, y = task_2, fill = n_overlap)) +
    geom_tile(colour = "white", linewidth = .35) +
    geom_text(aes(label = n_overlap), size = 2.8, colour = "white") +
    scale_fill_gradient(low = "#D0E3F0", high = "#08519C", labels = comma) +
    labs(
      title = "Participant overlap between tasks",
      subtitle = "Large overlaps imply that later cross-task correlations are not fully independent evidence.",
      x = NULL,
      y = NULL
    ) +
    theme_block1(base_size = 10) +
    theme(axis.text.x = element_text(angle = 35, hjust = 1))
  show_plot(overlap_plot)
  save_plot(overlap_plot, "fig_02_participant_overlap_heatmap.png", width = 9, height = 7)
}

Interpretation. Participant overlap is analytically useful but inferentially dangerous. If the same participants contribute to salience, asymmetry, and similarity tasks, cross-task convergence should be interpreted as within-sample convergent evidence, not as three independent replications that magically multiply evidential force. Statistics, annoyingly, still remembers who answered what.

6 1.3 Item catalog and design coverage

Show code
if (nrow(items_catalog) > 0) {
  item_scope_input <- items_catalog %>%
    mutate(task_label = nice_task(subexperiment))

  # Some exported item catalogs do not carry a hypothesis column.
  # Do not use if_else() here: it evaluates both branches and therefore
  # still tries to read hypothesis when the column is absent. R, in its
  # infinite theatrical fragility, considers that a personal insult.
  if (!"hypothesis" %in% names(item_scope_input)) {
    item_scope_input <- item_scope_input %>% mutate(hypothesis = NA_character_)
  } else {
    item_scope_input <- item_scope_input %>% mutate(hypothesis = as.character(hypothesis))
  }

  item_scope <- item_scope_input %>%
    group_by(experiment, subexperiment, task_label, task_family, response_type) %>%
    summarise(
      n_items_catalog = n_distinct(item_id, na.rm = TRUE),
      n_rows_catalog = sum(n_rows, na.rm = TRUE),
      n_participants_catalog = max(n_participants, na.rm = TRUE),
      mean_nonmissing_response = mean(n_nonmissing_response, na.rm = TRUE),
      .groups = "drop"
    ) %>%
    arrange(experiment, subexperiment)
} else {
  item_scope <- responses_all %>%
    group_by(experiment, subexperiment, task_label, task_family, response_type) %>%
    summarise(
      n_items_catalog = n_distinct(item_id, na.rm = TRUE),
      n_rows_catalog = n(),
      n_participants_catalog = n_distinct(participant_id, na.rm = TRUE),
      mean_nonmissing_response = NA_real_,
      .groups = "drop"
    )
}

show_table(item_scope, caption = "Table 6. Item catalog coverage by task.")


Table: Table 6. Item catalog coverage by task.

|experiment    |subexperiment                  |task_label                 |task_family                      |response_type              | n_items_catalog| n_rows_catalog| n_participants_catalog| mean_nonmissing_response|
|:-------------|:------------------------------|:--------------------------|:--------------------------------|:--------------------------|---------------:|--------------:|----------------------:|------------------------:|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |forced_choice_pair               |forced_choice_ad           |              30|          11250|                    369|                375.00000|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |rating_pair                      |rating_1_9                 |              90|          17370|                    193|                193.00000|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |rating_pair                      |rating_1_9                 |              90|          15930|                    177|                177.00000|
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |binary_measurement_contextuality |binary_a_d_modal_aggregate |             126|           5180|                     50|                 41.11111|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |forced_choice_diagnosticity      |choice_country_code        |              22|           4059|                    193|                184.50000|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |rating_candidate_target          |rating_0_6                 |              44|           7370|                    177|                167.50000|
|gk            |gk_test                        |Gk test                    |general_knowledge_item           |binary_correct             |              34|          12580|                    370|                360.00000|
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |forced_choice_pair               |forced_choice_ad           |              30|          11100|                    370|                370.00000|
|saliency      |saliency_2_single_rating       |H2b salience rating        |rating_single_country            |rating_1_9                 |              44|          16280|                    370|                370.00000|
Show code
write_table(item_scope, "table_06_item_catalog_coverage.csv")
Show code
item_plot <- item_scope %>%
  mutate(task_label = fct_reorder(task_label, n_items_catalog)) %>%
  ggplot(aes(x = task_label, y = n_items_catalog, fill = experiment)) +
  geom_col(width = .72) +
  geom_text(aes(label = n_items_catalog), hjust = -0.08, size = 3.5) +
  coord_flip(clip = "off") +
  scale_y_continuous(expand = expansion(mult = c(0, .12))) +
  scale_fill_manual(values = palette_block1, na.value = "grey60") +
  labs(
    title = "Unique items by task",
    subtitle = "Later item-level correlations are constrained by these denominators.",
    x = NULL,
    y = "Unique items"
  ) +
  theme_block1()

show_plot(item_plot)

Show code
save_plot(item_plot, "fig_03_items_by_task.png", width = 10, height = 6)

Interpretation. This block separates participant-level power from item-level generality. A task may have hundreds of participant responses but only 30 pairs or 44 single concepts. Later computational correlations with item means therefore test whether a model explains the selected stimulus set, not the universe of concepts. Apparently the universe declined to fit in one experiment.

7 1.4 Duplicates, repeated attempts, and cleaning decisions

Show code
duplicate_attempt_summary <- responses_all %>%
  mutate(
    has_multiple_attempts = !is.na(n_rows_for_participant_in_source) & n_rows_for_participant_in_source > 1,
    attempt_index_available = !is.na(attempt_index_within_source),
    repeated_condition = !is.na(n_replicates_participant_condition) & n_replicates_participant_condition > 1
  ) %>%
  group_by(experiment, subexperiment, task_label) %>%
  summarise(
    n_rows = n(),
    n_rows_multiple_attempts = sum(has_multiple_attempts, na.rm = TRUE),
    pct_rows_multiple_attempts = mean(has_multiple_attempts, na.rm = TRUE),
    n_rows_repeated_condition = sum(repeated_condition, na.rm = TRUE),
    pct_rows_repeated_condition = mean(repeated_condition, na.rm = TRUE),
    max_attempt_index = suppressWarnings(max(attempt_index_within_source, na.rm = TRUE)),
    max_replicates_condition = suppressWarnings(max(n_replicates_participant_condition, na.rm = TRUE)),
    .groups = "drop"
  ) %>%
  mutate(
    max_attempt_index = if_else(is.infinite(max_attempt_index), NA_real_, max_attempt_index),
    max_replicates_condition = if_else(is.infinite(max_replicates_condition), NA_real_, max_replicates_condition)
  )

show_table(
  duplicate_attempt_summary %>%
    mutate(
      pct_rows_multiple_attempts = scales::percent(pct_rows_multiple_attempts, accuracy = .1),
      pct_rows_repeated_condition = scales::percent(pct_rows_repeated_condition, accuracy = .1)
    ),
  caption = "Table 7. Duplicate attempts and repeated participant-condition rows by task."
)


Table: Table 7. Duplicate attempts and repeated participant-condition rows by task.

|experiment    |subexperiment                  |task_label                 | n_rows| n_rows_multiple_attempts|pct_rows_multiple_attempts | n_rows_repeated_condition|pct_rows_repeated_condition | max_attempt_index| max_replicates_condition|
|:-------------|:------------------------------|:--------------------------|------:|------------------------:|:--------------------------|-------------------------:|:---------------------------|-----------------:|------------------------:|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |  11250|                      240|2.1%                       |                         0|0.0%                        |                 4|                       NA|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |  17370|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |  15930|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |   5180|                     5180|100.0%                     |                        98|1.9%                        |                NA|                        4|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |   4059|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |   7370|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
|gk            |gk_test                        |Gk test                    |  12580|                        0|0.0%                       |                         0|0.0%                        |                NA|                       NA|
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |  11100|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
|saliency      |saliency_2_single_rating       |H2b salience rating        |  16280|                        0|0.0%                       |                         0|0.0%                        |                 1|                       NA|
Show code
write_table(duplicate_attempt_summary, "table_07_duplicates_repeated_conditions_by_task.csv")

if (nrow(processing_decisions) > 0) {
  show_table(processing_decisions, caption = "Table 8. Processing decisions recorded by the Phase 2 tidy pipeline.")
  write_table(processing_decisions, "table_08_processing_decisions.csv")
}


Table: Table 8. Processing decisions recorded by the Phase 2 tidy pipeline.

|decision_area                     |decision                                                                                                           |rationale                                                                                                                                 |applied_to                                                                                |
|:---------------------------------|:------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------|
|ID normalization                  |Crear participant_id canónico eliminando ceros iniciales y conservando raw_ID.                                     |Permite unir datasets con codificación heterogénea sin destruir el identificador original.                                                |all tables                                                                                |
|Safe exact duplicates             |Eliminar filas duplicadas exactas solo en gk_test.csv y saliency_2.csv.                                            |Eran duplicados idénticos documentados; no introducen pérdida de información.                                                             |analysis_ready_default_sources/gk_test.csv; analysis_ready_default_sources/saliency_2.csv |
|asymmetry_1 repeated attempts     |Mantener intentos repetidos en tabla principal y generar variante excluyendo participantes con intentos repetidos. |Los intentos repetidos estaban completos; no hay criterio objetivo para elegir uno automáticamente.                                       |responses_asymmetry_long.csv; responses_asymmetry_exclude_attempt_duplicates_variant.csv  |
|contextuality repeated blocks     |Usar como tabla principal la agregación participante × condición; conservar raw y variantes.                       |Siete participantes tienen 56 filas = 14 condiciones × 4 repeticiones. La agregación evita pseudo-replicación sin eliminar participantes. |responses_contextuality_aggregate_main.csv; variants/*                                    |
|RT filtering                      |Calcular log_rt y flags, pero no eliminar RT extremos.                                                             |Permite análisis de sensibilidad con/sin RT extremos en fases inferenciales.                                                              |all RT-bearing long tables                                                                |
|Country mapping                   |Añadir nombres canónicos ES/EN desde country_code_to_canonical_mapping y conservar códigos originales.             |Los códigos originales preservan trazabilidad; los nombres canónicos permiten subespacios y joins semánticos.                             |country-coded items                                                                       |
|Contextuality non-country stimuli |Mantener etiquetas crudas como target_label_raw/context_label_raw cuando no son países.                            |La tarea contiene conceptos/pseudopalabras además de países; no deben forzarse al diccionario de países.                                  |contextuality tables                                                                      |
Show code
if (nrow(audit_anomalies) > 0) {
  audit_anomalies_display <- audit_anomalies %>% slice_head(n = 30)
  show_table(audit_anomalies_display, caption = "Table 9. Audit anomalies, first 30 rows.")
  write_table(audit_anomalies, "table_09_audit_anomalies.csv")
}


Table: Table 9. Audit anomalies, first 30 rows.

|source_file            | participant_id| n_rows| n_unique_full_rows|duplicate_type                             |severity                |issue                                       |
|:----------------------|--------------:|------:|------------------:|:------------------------------------------|:-----------------------|:-------------------------------------------|
|asymmetry_1.csv        |        2575955|      4|                  4|wide_file_repeated_participant             |requires_decision       |NA                                          |
|asymmetry_1.csv        |       36146898|      4|                  4|wide_file_repeated_participant             |requires_decision       |NA                                          |
|gk_test.csv            |       53845284|      2|                  1|wide_file_repeated_participant             |resolved_safe           |NA                                          |
|saliency_2.csv         |       53845284|      4|                  1|wide_file_repeated_participant             |resolved_safe           |NA                                          |
|contextuality_long.csv |       51761187|     56|                 43|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |       51788004|     56|                 39|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |       51797421|     56|                 31|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |       31889576|     56|                 39|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |        3230959|     56|                 31|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |        2778535|     56|                 43|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|contextuality_long.csv |        2730799|     56|                 35|long_file_nonstandard_rows_per_participant |requires_decision       |NA                                          |
|asymmetry_1.csv        |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=1, gt30000=10, high_iqr=740 |
|asymmetry_2_a.csv      |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=3, gt30000=10, high_iqr=974 |
|asymmetry_2_b.csv      |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=3, gt30000=10, high_iqr=938 |
|contextuality_long.csv |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=1, gt30000=3, high_iqr=305  |
|diagnosticity_1.csv    |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=0, gt30000=0, high_iqr=201  |
|saliency_1.csv         |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=0, gt30000=2, high_iqr=750  |
|saliency_2.csv         |             NA|     NA|                 NA|NA                                         |flagged_for_sensitivity |RT flags: lt300=2, gt30000=1, high_iqr=1017 |

Interpretation. Duplicates and repeated participant-condition rows matter because Phase 4 compares computational metrics against aggregated human behavior. If repeated attempts are retained in some places but not others, the item mean no longer has a stable interpretation. The notebook therefore treats duplicate handling as part of the empirical model, not as administrative trivia banished to a folder called old_final_USE_THIS_ONE_v3.

8 1.5 Response distributions

Show code
response_distribution <- responses_all %>%
  mutate(
    response_family = case_when(
      response_type %in% c("forced_choice_ad", "forced_choice_diagnosticity") ~ "Forced choice",
      str_detect(response_type, "rating") ~ "Rating",
      response_type %in% c("contextuality") | experiment == "contextuality" ~ "Contextuality",
      TRUE ~ response_type
    ),
    response_display = case_when(
      !is.na(rating) ~ as.character(rating),
      !is.na(response_coded) ~ as.character(response_coded),
      !is.na(selected_code_assuming_a_first_d_second) ~ as.character(selected_code_assuming_a_first_d_second),
      !is.na(selected_code) ~ as.character(selected_code),
      TRUE ~ NA_character_
    )
  ) %>%
  filter(!is.na(response_display)) %>%
  count(experiment, subexperiment, task_label, response_family, response_type, response_display, name = "n") %>%
  group_by(experiment, subexperiment, task_label, response_family, response_type) %>%
  mutate(prop = n / sum(n)) %>%
  ungroup()

show_table(response_distribution %>% arrange(experiment, subexperiment, response_display), caption = "Table 10. Response-value distributions by task.")


Table: Table 10. Response-value distributions by task.

|experiment    |subexperiment                  |task_label                 |response_family     |response_type              |response_display |    n|      prop|
|:-------------|:------------------------------|:--------------------------|:-------------------|:--------------------------|:----------------|----:|---------:|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |Forced choice       |forced_choice_ad           |a                | 5969| 0.5305778|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |Forced choice       |forced_choice_ad           |d                | 5281| 0.4694222|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |1                | 2211| 0.1272884|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |2                | 2334| 0.1343696|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |3                | 2235| 0.1286701|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |4                | 2064| 0.1188256|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |5                | 1763| 0.1014968|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |6                | 1939| 0.1116292|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |7                | 2228| 0.1282671|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |8                | 1775| 0.1021877|
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |Rating              |rating_1_9                 |9                |  821| 0.0472654|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |1                | 2078| 0.1304457|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |2                | 2053| 0.1288763|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |3                | 2034| 0.1276836|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |4                | 1892| 0.1187696|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |5                | 1606| 0.1008161|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |6                | 1814| 0.1138732|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |7                | 2072| 0.1300691|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |8                | 1619| 0.1016321|
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |Rating              |rating_1_9                 |9                |  762| 0.0478343|
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |Contextuality       |binary_a_d_modal_aggregate |a                | 1941| 0.3747104|
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |Contextuality       |binary_a_d_modal_aggregate |d                | 3239| 0.6252896|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |alem             |  158| 0.0389258|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |arge             |  298| 0.0734171|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |aust             |  436| 0.1074156|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |belg             |   57| 0.0140429|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |bielor           |   85| 0.0209411|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |bulg             |   21| 0.0051737|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |cana             |  246| 0.0606061|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |chil             |   47| 0.0115792|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |cors             |  157| 0.0386795|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |costr            |  120| 0.0295639|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |cuba             |   21| 0.0051737|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |egip             |   57| 0.0140429|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |esp              |    1| 0.0002464|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |espa             |  161| 0.0396649|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |fran             |  148| 0.0364622|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |grec             |  157| 0.0386795|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |hola             |   78| 0.0192166|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |hond             |    9| 0.0022173|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |hung             |  113| 0.0278394|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |iraq             |   67| 0.0165065|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |irla             |    1| 0.0002464|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |ital             |    5| 0.0012318|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |jamai            |  210| 0.0517369|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |japo             |   50| 0.0123183|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |mong             |    7| 0.0017246|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |noru             |   33| 0.0081301|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |nzel             |   62| 0.0152747|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |pana             |    8| 0.0019709|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |polo             |  297| 0.0731707|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |port             |  207| 0.0509978|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |rusi             |   37| 0.0091155|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |saha             |  122| 0.0300567|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |siri             |  140| 0.0344913|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |suec             |  183| 0.0450850|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |uk               |  119| 0.0293176|
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |choice_country_code |choice_country_code        |venez            |  141| 0.0347376|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |0                |  235| 0.0318860|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |1                |  483| 0.0655360|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |2                |  738| 0.1001357|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |3                | 1419| 0.1925373|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |4                | 2156| 0.2925373|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |5                | 1877| 0.2546811|
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |Rating              |rating_0_6                 |6                |  462| 0.0626866|
|gk            |gk_test                        |Gk test                    |binary_correct      |binary_correct             |0.0              | 8968| 0.7326797|
|gk            |gk_test                        |Gk test                    |binary_correct      |binary_correct             |1.0              | 3272| 0.2673203|
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |Forced choice       |forced_choice_ad           |a                | 5409| 0.4872973|
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |Forced choice       |forced_choice_ad           |d                | 5691| 0.5127027|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |1                | 3052| 0.1874693|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |2                | 1942| 0.1192875|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |3                | 1783| 0.1095209|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |4                | 1631| 0.1001843|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |5                | 1484| 0.0911548|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |6                | 1543| 0.0947789|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |7                | 1692| 0.1039312|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |8                | 1441| 0.0885135|
|saliency      |saliency_2_single_rating       |H2b salience rating        |Rating              |rating_1_9                 |9                | 1712| 0.1051597|
Show code
write_table(response_distribution, "table_10_response_distributions.csv")
Show code
forced_choice_distribution <- response_distribution %>%
  filter(response_family == "Forced choice")

if (nrow(forced_choice_distribution) > 0) {
  forced_choice_plot <- forced_choice_distribution %>%
    mutate(task_label = fct_reorder(task_label, prop, .fun = max)) %>%
    ggplot(aes(x = response_display, y = prop, fill = response_display)) +
    geom_col(width = .72, alpha = .9) +
    geom_text(aes(label = percent(prop, accuracy = 1)), vjust = -0.35, size = 3.2) +
    facet_wrap(~ task_label, scales = "free_x") +
    scale_y_continuous(labels = percent, limits = c(0, NA), expand = expansion(mult = c(0, .12))) +
    scale_fill_manual(values = c("a" = "#0072B2", "d" = "#D55E00", "first" = "#0072B2", "second" = "#D55E00"), na.value = "grey60") +
    labs(
      title = "Forced-choice response distributions",
      subtitle = "Large deviations from 50% at item level are the empirical basis for H1/H2 forced-choice analyses.",
      x = "Response",
      y = "Proportion"
    ) +
    theme_block1()
  show_plot(forced_choice_plot)
  save_plot(forced_choice_plot, "fig_04_forced_choice_response_distributions.png", width = 11, height = 7)
}

Show code
rating_distribution <- response_distribution %>%
  filter(response_family == "Rating") %>%
  mutate(response_numeric = suppressWarnings(as.numeric(response_display))) %>%
  filter(!is.na(response_numeric))

if (nrow(rating_distribution) > 0) {
  rating_plot <- rating_distribution %>%
    ggplot(aes(x = response_numeric, y = prop, group = task_label, colour = experiment)) +
    geom_line(linewidth = .9, alpha = .85) +
    geom_point(size = 2, alpha = .85) +
    facet_wrap(~ task_label, scales = "free_y") +
    scale_y_continuous(labels = percent) +
    scale_colour_manual(values = palette_block1, na.value = "grey60") +
    labs(
      title = "Rating response distributions",
      subtitle = "Scale use matters before interpreting mean ratings as psychological distances.",
      x = "Rating value",
      y = "Response proportion"
    ) +
    theme_block1()
  show_plot(rating_plot)
  save_plot(rating_plot, "fig_05_rating_response_distributions.png", width = 11, height = 7)
}

Interpretation. Forced-choice tasks should be inspected at item level, because the global proportion can hide pairs going in opposite directions. Rating tasks require scale-use checks because means only behave like useful continuous scores if participants actually use enough of the scale.

9 1.6 Response-time availability and distributions

Show code
rt_task_summary <- responses_all %>%
  group_by(experiment, subexperiment, task_label, task_family, response_type) %>%
  summarise(
    n_rows = n(),
    n_rt_observed = sum(!is.na(rt_ms)),
    n_rt_valid = sum(valid_rt),
    pct_rt_valid = n_rt_valid / n_rows,
    median_rt_ms = median(rt_ms[valid_rt], na.rm = TRUE),
    q25_rt_ms = quantile(rt_ms[valid_rt], .25, na.rm = TRUE),
    q75_rt_ms = quantile(rt_ms[valid_rt], .75, na.rm = TRUE),
    mean_log_rt = mean(log_rt[valid_rt], na.rm = TRUE),
    sd_log_rt = sd(log_rt[valid_rt], na.rm = TRUE),
    pct_lt_min = mean(!is.na(rt_ms) & rt_ms < params$rt_min_ms),
    pct_gt_max = mean(!is.na(rt_ms) & rt_ms > params$rt_max_ms),
    pct_missing_rt = mean(is.na(rt_ms)),
    .groups = "drop"
  ) %>%
  mutate(across(c(median_rt_ms, q25_rt_ms, q75_rt_ms), ~ if_else(is.nan(.x), NA_real_, .x)))

show_table(
  rt_task_summary %>%
    mutate(
      pct_rt_valid = percent(pct_rt_valid, accuracy = .1),
      pct_lt_min = percent(pct_lt_min, accuracy = .1),
      pct_gt_max = percent(pct_gt_max, accuracy = .1),
      pct_missing_rt = percent(pct_missing_rt, accuracy = .1),
      across(c(median_rt_ms, q25_rt_ms, q75_rt_ms), ~ round(.x, 0)),
      across(c(mean_log_rt, sd_log_rt), ~ round(.x, 3))
    ),
  caption = "Table 11. Response-time availability and distribution by task."
)


Table: Table 11. Response-time availability and distribution by task.

|experiment    |subexperiment                  |task_label                 |task_family                      |response_type              | n_rows| n_rt_observed| n_rt_valid|pct_rt_valid | median_rt_ms| q25_rt_ms| q75_rt_ms| mean_log_rt| sd_log_rt|pct_lt_min |pct_gt_max |pct_missing_rt |
|:-------------|:------------------------------|:--------------------------|:--------------------------------|:--------------------------|------:|-------------:|----------:|:------------|------------:|---------:|---------:|-----------:|---------:|:----------|:----------|:--------------|
|asymmetry     |asymmetry_1_forced_choice      |H1 asymmetry forced choice |forced_choice_pair               |forced_choice_ad           |  11250|         11250|      11239|99.9%        |         2930|      2146|      4209|       8.040|     0.532|0.0%       |0.1%       |0.0%           |
|asymmetry     |asymmetry_2_a_direct           |H3 direct rating           |rating_pair                      |rating_1_9                 |  17370|         17370|      17164|98.8%        |         3147|      2395|      4312|       8.098|     0.457|1.1%       |0.1%       |0.0%           |
|asymmetry     |asymmetry_2_b_reverse          |H3 reverse rating          |rating_pair                      |rating_1_9                 |  15930|         15930|      15740|98.8%        |         2977|      2299|      4012|       8.040|     0.446|1.1%       |0.1%       |0.0%           |
|contextuality |contextuality_aggregate_main   |Contextuality / priming    |binary_measurement_contextuality |binary_a_d_modal_aggregate |   5180|          5180|       5176|99.9%        |         1888|      1240|      2883|       7.571|     0.624|0.0%       |0.1%       |0.0%           |
|diagnosticity |diagnosticity_1_choice_cleaned |H6 diagnostic choice       |forced_choice_diagnosticity      |choice_country_code        |   4059|             0|          0|0.0%         |           NA|        NA|        NA|         NaN|        NA|0.0%       |0.0%       |100.0%         |
|diagnosticity |diagnosticity_2_rating_cleaned |H6 diagnostic rating       |rating_candidate_target          |rating_0_6                 |   7370|             0|          0|0.0%         |           NA|        NA|        NA|         NaN|        NA|0.0%       |0.0%       |100.0%         |
|gk            |gk_test                        |Gk test                    |general_knowledge_item           |binary_correct             |  12580|             0|          0|0.0%         |           NA|        NA|        NA|         NaN|        NA|0.0%       |0.0%       |100.0%         |
|saliency      |saliency_1_forced_choice       |H2 salience forced choice  |forced_choice_pair               |forced_choice_ad           |  11100|         11100|      11098|100.0%       |         1566|      1171|      2295|       7.436|     0.505|0.0%       |0.0%       |0.0%           |
|saliency      |saliency_2_single_rating       |H2b salience rating        |rating_single_country            |rating_1_9                 |  16280|         16280|      16277|100.0%       |         1925|      1463|      2703|       7.618|     0.501|0.0%       |0.0%       |0.0%           |
Show code
write_table(rt_task_summary, "table_11_rt_summary_by_task.csv")
Show code
rt_plot_data <- responses_all %>%
  filter(valid_rt) %>%
  mutate(task_label = fct_reorder(task_label, rt_ms, .fun = median, .na_rm = TRUE))

if (nrow(rt_plot_data) > 0) {
  rt_distribution_plot <- rt_plot_data %>%
    ggplot(aes(x = task_label, y = rt_ms, fill = experiment)) +
    geom_violin(trim = TRUE, alpha = .55, colour = NA) +
    geom_boxplot(width = .14, outlier.alpha = .15, alpha = .95) +
    coord_flip() +
    scale_y_continuous(labels = comma) +
    scale_fill_manual(values = palette_block1, na.value = "grey60") +
    labs(
      title = "Response-time distributions by task",
      subtitle = paste0("Valid RTs are defined as ", params$rt_min_ms, "–", params$rt_max_ms, " ms."),
      x = NULL,
      y = "RT (ms)"
    ) +
    theme_block1()
  show_plot(rt_distribution_plot)
  save_plot(rt_distribution_plot, "fig_06_rt_distributions_by_task.png", width = 12, height = 7)
}

Show code
rt_flag_summary <- responses_all %>%
  group_by(experiment, subexperiment, task_label) %>%
  summarise(
    missing = mean(is.na(rt_ms)),
    too_fast = mean(!is.na(rt_ms) & rt_ms < params$rt_min_ms),
    too_slow = mean(!is.na(rt_ms) & rt_ms > params$rt_max_ms),
    valid = mean(valid_rt),
    .groups = "drop"
  ) %>%
  pivot_longer(cols = c(missing, too_fast, too_slow, valid), names_to = "rt_status", values_to = "prop")

rt_flags_plot <- rt_flag_summary %>%
  mutate(
    task_label = fct_reorder(task_label, prop, .fun = function(x) max(x, na.rm = TRUE)),
    rt_status = factor(rt_status, levels = c("valid", "missing", "too_fast", "too_slow"))
  ) %>%
  ggplot(aes(x = task_label, y = prop, fill = rt_status)) +
  geom_col(width = .72) +
  coord_flip() +
  scale_y_continuous(labels = percent) +
  scale_fill_manual(values = c("valid" = "#009E73", "missing" = "#999999", "too_fast" = "#E69F00", "too_slow" = "#D55E00")) +
  labs(
    title = "RT status by task",
    subtitle = "Diagnosticity currently has little or no usable RT in the tidy outputs, so RT analyses should not be forced onto it.",
    x = NULL,
    y = "Proportion of rows"
  ) +
  theme_block1()

show_plot(rt_flags_plot)

Show code
save_plot(rt_flags_plot, "fig_07_rt_status_by_task.png", width = 10, height = 6)
write_table(rt_flag_summary, "table_12_rt_flag_summary.csv")

Interpretation. RTs are not merely another dependent variable. They are a process-level measure of decision difficulty. Later models should therefore use RTs to test whether computational clarity, such as absolute containment asymmetry or salience extremity, predicts not only what participants choose but how costly the choice is.

10 1.7 Observed contextuality / priming variables

The tidy data include contextuality variables that were not fully exploited in the thesis narrative: mediator, pseudoword, and congruent_priming. These should be treated as observed data-driven conditions, not reconstructed from the diagnosticity task.

Show code
contextuality_observed <- responses_all %>%
  filter(experiment == "contextuality" | str_detect(subexperiment, "contextuality"))

contextuality_condition_summary <- contextuality_observed %>%
  mutate(
    mediator = as.character(mediator),
    pseudoword = as.character(pseudoword),
    congruent_priming = as.character(congruent_priming),
    response_binary = case_when(
      response_coded %in% c("d", "1", 1) ~ 1,
      response_coded %in% c("a", "0", 0) ~ 0,
      TRUE ~ suppressWarnings(as.numeric(response_coded))
    )
  ) %>%
  group_by(mediator, pseudoword, congruent_priming) %>%
  summarise(
    n_rows = n(),
    n_participants = n_distinct(participant_id, na.rm = TRUE),
    mean_response = mean(response_binary, na.rm = TRUE),
    n_valid_rt = sum(valid_rt),
    median_rt_ms = median(rt_ms[valid_rt], na.rm = TRUE),
    mean_log_rt = mean(log_rt[valid_rt], na.rm = TRUE),
    .groups = "drop"
  ) %>%
  arrange(mediator, pseudoword, congruent_priming)

if (nrow(contextuality_condition_summary) > 0) {
  show_table(
    contextuality_condition_summary %>%
      mutate(
        mean_response = round(mean_response, 3),
        median_rt_ms = round(median_rt_ms, 0),
        mean_log_rt = round(mean_log_rt, 3)
      ),
    caption = "Table 13. Observed contextuality/priming condition structure."
  )
  write_table(contextuality_condition_summary, "table_13_contextuality_priming_condition_summary.csv")
}


Table: Table 13. Observed contextuality/priming condition structure.

|mediator |pseudoword |congruent_priming | n_rows| n_participants| mean_response| n_valid_rt| median_rt_ms| mean_log_rt|
|:--------|:----------|:-----------------|------:|--------------:|-------------:|----------:|------------:|-----------:|
|0        |0          |NA                |   1278|            132|         0.667|       1278|         1627|       7.427|
|0        |1          |NA                |    570|            132|         0.546|        569|         1693|       7.480|
|1        |0          |0                 |   1272|            238|         0.645|       1271|         2013|       7.631|
|1        |0          |1                 |   1029|            238|         0.661|       1027|         2063|       7.639|
|1        |1          |0                 |   1031|            238|         0.558|       1031|         2066|       7.657|
Show code
if (nrow(contextuality_condition_summary) > 0) {
  contextuality_plot <- contextuality_condition_summary %>%
    mutate(
      condition = paste0("med=", mediator, "\npseudo=", pseudoword, "\ncongr=", congruent_priming),
      condition = fct_reorder(condition, mean_response)
    ) %>%
    ggplot(aes(x = condition, y = mean_response, fill = pseudoword)) +
    geom_col(width = .72, alpha = .9) +
    geom_hline(yintercept = .5, linetype = "dashed", colour = "grey35") +
    coord_flip() +
    scale_y_continuous(labels = percent, limits = c(0, 1)) +
    scale_fill_manual(values = c("FALSE" = "#0072B2", "TRUE" = "#D55E00", "0" = "#0072B2", "1" = "#D55E00"), na.value = "grey60") +
    labs(
      title = "Observed contextuality / priming conditions",
      subtitle = "These conditions are data-driven and should be analyzed separately from diagnosticity.",
      x = NULL,
      y = "Mean coded response"
    ) +
    theme_block1()
  show_plot(contextuality_plot)
  save_plot(contextuality_plot, "fig_08_contextuality_priming_observed_conditions.png", width = 10, height = 6)
}

Interpretation. Contextuality/priming is a distinct empirical block. Diagnosticity manipulates a context in candidate choice/rating; contextuality contains explicit condition variables about mediation, pseudowords, and priming congruence. Later theoretical sections can connect both under contextual projection, but Block 1 should keep them separate unless it wants to manufacture conceptual soup. Nobody needs that.

11 1.8 Basic human effects already established in Phase 2

This section imports the Phase 2 empirical hypothesis summaries when available. These outputs are not yet computational tests; they tell us whether the behavioral phenomena exist in the human data.

Show code
if (nrow(hypothesis_level_summary) > 0) {
  show_table(hypothesis_level_summary, caption = "Table 14. Phase 2 hypothesis-level empirical summary.")
  write_table(hypothesis_level_summary, "table_14_phase2_hypothesis_level_summary.csv")
}


Table: Table 14. Phase 2 hypothesis-level empirical summary.

|hypothesis                                                        |empirical_test                                                                                                 |main_result                                                                                                                                         |decision                                                                                                                              |
|:-----------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------|
|H1. Asimetría ipsativa en juicios de similitud                    |Binomial por ítem, respuesta a/d, excluyendo participantes con intentos repetidos                              |24/30 ítems p<.05; 23/30 p<.01; 23/30 FDR<.05                                                                                                       |Apoyada de forma fuerte                                                                                                               |
|H2. La saliencia se asocia con la dirección de la asimetría       |Correlación de proporciones por ítem entre saliencia forzada y asimetría; correlación con saliencia rating     |Saliencia forzada vs asimetría: Pearson r=-0.970, p=9.74e-19; saliencia rating: r=-0.835, p=9.77e-09; elección inversa dentro de sujeto=0.751       |Apoyada de forma muy fuerte; dirección inversa al código a/d, consistente con que el menos saliente se juzgue similar al más saliente |
|H3. Asimetría por orden en escala Likert                          |Welch/Mann-Whitney por par entre versión directa e inversa                                                     |0/89 pares con p<.05; 0 tras FDR; diferencia media por par=-0.014; test por ítems t=-0.807, p=0.422                                                 |No apoyada                                                                                                                            |
|H4. Violación de desigualdad triangular multiplicativa en ratings |Exploración de triángulos completos en red de pares Likert; similitud=(rating-1)/8; bootstrap por participante |7/66 contrastes violan V-DTM; 6/66 tienen IC95% bootstrap completamente <0                                                                          |Apoyo parcial/moderado; conviene pre-especificar tripletas en el paper                                                                |
|H5. Contextualidad/priming conductual                             |GEE logística y OLS de logRT por participante                                                                  |Pseudopalabra reduce respuesta d: β=-0.437, p=3.30e-08; mediador aumenta logRT: β=0.197, p=2.31e-06; congruencia no significativa: β=0.068, p=0.411 |Apoyo débil/parcial: hay efecto de lexicalidad y coste de mediación, pero no efecto claro de congruencia                              |
|H6. Efecto diagnóstico por contexto                               |Choice: χ² target×context; Ratings: interacción contexto×candidato                                             |Choice incluyendo opción-contexto: 10/11 targets FDR<.05; excluyendo elección del contexto: 1/11; Ratings: 1/11 nominal, 0 FDR                      |Apoyo limitado: el contexto afecta la distribución global de elección, pero el desplazamiento diagnóstico entre candidatos es débil   |
Show code
summarise_item_tests <- function(df, label) {
  if (nrow(df) == 0) return(tibble())

  # Resolve column names before summarise(). Defining temporary objects inside
  # summarise() is surprisingly brittle across dplyr/R versions, because why
  # would a table-summary function allow calm human dignity.
  p_col <- names(df)[str_detect(names(df), regex("p(_|\\.)?value|p_value|pval", ignore_case = TRUE))][1]
  fdr_col <- names(df)[str_detect(names(df), regex("fdr|q", ignore_case = TRUE))][1]
  prop_col <- names(df)[str_detect(names(df), regex("prop|proportion|mean", ignore_case = TRUE))][1]

  if (is.na(p_col)) p_col <- NULL
  if (is.na(fdr_col)) fdr_col <- NULL
  if (is.na(prop_col)) prop_col <- NULL

  df %>%
    summarise(
      analysis = label,
      n_items = n(),
      n_significant_p_lt_05 = if (!is.null(p_col)) sum(.data[[p_col]] < .05, na.rm = TRUE) else NA_integer_,
      n_significant_fdr_lt_05 = if (!is.null(fdr_col)) sum(.data[[fdr_col]] < .05, na.rm = TRUE) else NA_integer_,
      mean_effect = if (!is.null(prop_col)) mean(.data[[prop_col]], na.rm = TRUE) else NA_real_,
      median_effect = if (!is.null(prop_col)) median(.data[[prop_col]], na.rm = TRUE) else NA_real_,
      .groups = "drop"
    )
}

forced_choice_effect_summary <- bind_rows(
  summarise_item_tests(asymmetry_1_binomial, "H1 asymmetry forced-choice"),
  summarise_item_tests(asymmetry_1_binomial_sensitivity, "H1 asymmetry sensitivity, all attempts"),
  summarise_item_tests(saliency_1_binomial, "H2 salience forced-choice")
)

if (nrow(forced_choice_effect_summary) > 0) {
  show_table(forced_choice_effect_summary, caption = "Table 15. Forced-choice item-level effect summary.")
  write_table(forced_choice_effect_summary, "table_15_forced_choice_item_effect_summary.csv")
}


Table: Table 15. Forced-choice item-level effect summary.

|analysis                               | n_items| n_significant_p_lt_05| n_significant_fdr_lt_05| mean_effect| median_effect|
|:--------------------------------------|-------:|---------------------:|-----------------------:|-----------:|-------------:|
|H1 asymmetry forced-choice             |      30|                    24|                      23|          NA|            NA|
|H1 asymmetry sensitivity, all attempts |      30|                    24|                      24|          NA|            NA|
|H2 salience forced-choice              |      30|                    23|                      23|          NA|            NA|
Show code
cross_task_correlations <- bind_rows(
  asym_sal_forced_cor %>% mutate(source = "forced_choice_asymmetry_salience"),
  asym_sal_single_cor %>% mutate(source = "single_rating_asymmetry_salience")
)

if (nrow(cross_task_correlations) > 0) {
  show_table(cross_task_correlations, caption = "Table 16. Cross-task human correlations from Phase 2 outputs.")
  write_table(cross_task_correlations, "table_16_cross_task_human_correlations.csv")
}


Table: Table 16. Cross-task human correlations from Phase 2 outputs.

|item                 | n_asym| n_a_asym| n_d_asym|  p_a_asym| diff_a_minus_d_asym|predominant_response_asym | p_value_asym| p_fdr_asym| n_sal| n_a_sal| n_d_sal|   p_a_sal| diff_a_minus_d_sal|predominant_response_sal | p_value_sal| p_fdr_sal|source                           |   n| n_a| n_d|       p_a| diff_a_minus_d|predominant_response |   p_value|     p_fdr|code_a    |code_b     |canon_a      |canon_b          | salience_a| salience_b| salience_diff_a_minus_b|
|:--------------------|------:|--------:|--------:|---------:|-------------------:|:-------------------------|------------:|----------:|-----:|-------:|-------:|---------:|------------------:|:------------------------|-----------:|---------:|:--------------------------------|---:|---:|---:|---------:|--------------:|:--------------------|---------:|---------:|:---------|:----------|:------------|:----------------|----------:|----------:|-----------------------:|
|bielorus.rusia       |    367|      352|       15| 0.9591281|           0.9182561|a                         |    0.0000000|  0.0000000|   370|       7|     363| 0.0189189|         -0.9621622|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|belice.eeuu          |    367|      351|       16| 0.9564033|           0.9128065|a                         |    0.0000000|  0.0000000|   370|       2|     368| 0.0054054|         -0.9891892|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|andorra.españa       |    367|      350|       17| 0.9536785|           0.9073569|a                         |    0.0000000|  0.0000000|   370|       8|     362| 0.0216216|         -0.9567568|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|rusia.burkinaf       |    367|       31|      336| 0.0844687|          -0.8310627|d                         |    0.0000000|  0.0000000|   370|     365|       5| 0.9864865|          0.9729730|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|china.singapur       |    367|       32|      335| 0.0871935|          -0.8256131|d                         |    0.0000000|  0.0000000|   370|     358|      12| 0.9675676|          0.9351351|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|argentina.paraguay   |    367|       42|      325| 0.1144414|          -0.7711172|d                         |    0.0000000|  0.0000000|   370|     357|      13| 0.9648649|          0.9297297|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|francia.bolivia      |    367|       46|      321| 0.1253406|          -0.7493188|d                         |    0.0000000|  0.0000000|   370|     354|      16| 0.9567568|          0.9135135|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|china.luxem          |    367|       48|      319| 0.1307902|          -0.7384196|d                         |    0.0000000|  0.0000000|   370|     350|      20| 0.9459459|          0.8918919|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|laos.mejico          |    367|      319|       48| 0.8692098|           0.7384196|a                         |    0.0000000|  0.0000000|   370|      20|     350| 0.0540541|         -0.8918919|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|feroe.singapur       |    367|      319|       48| 0.8692098|           0.7384196|a                         |    0.0000000|  0.0000000|   370|      31|     339| 0.0837838|         -0.8324324|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|ghana.luxemburgo     |    367|      304|       63| 0.8283379|           0.6566757|a                         |    0.0000000|  0.0000000|   370|      44|     326| 0.1189189|         -0.7621622|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|mongolia.bulgaria    |    367|      285|       82| 0.7765668|           0.5531335|a                         |    0.0000000|  0.0000000|   370|      68|     302| 0.1837838|         -0.6324324|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|francia.belgica      |    367|      100|      267| 0.2724796|          -0.4550409|d                         |    0.0000000|  0.0000000|   370|     289|      81| 0.7810811|          0.5621622|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|francia.brasil       |    367|      106|      261| 0.2888283|          -0.4223433|d                         |    0.0000000|  0.0000000|   370|     314|      56| 0.8486486|          0.6972973|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|japon.italia         |    367|      111|      256| 0.3024523|          -0.3950954|d                         |    0.0000000|  0.0000000|   370|     276|      94| 0.7459459|          0.4918919|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|uk.eeuu              |    367|      252|      115| 0.6866485|           0.3732970|a                         |    0.0000000|  0.0000000|   370|      30|     340| 0.0810811|         -0.8378378|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|italia.españa        |    367|      249|      118| 0.6784741|           0.3569482|a                         |    0.0000000|  0.0000000|   370|     108|     262| 0.2918919|         -0.4162162|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|laos.camboya         |    367|      233|      134| 0.6348774|           0.2697548|a                         |    0.0000003|  0.0000004|   370|     145|     225| 0.3918919|         -0.2162162|d                        |   0.0000376| 0.0000537|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|suecia.noruega       |    367|      233|      134| 0.6348774|           0.2697548|a                         |    0.0000003|  0.0000004|   370|     199|     171| 0.5378378|          0.0756757|a                        |   0.1603279| 0.1849938|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|zambia.zimbabue      |    367|      224|      143| 0.6103542|           0.2207084|a                         |    0.0000277|  0.0000415|   370|     177|     193| 0.4783784|         -0.0432432|d                        |   0.4355420| 0.4666521|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|oman.yemen           |    367|      221|      146| 0.6021798|           0.2043597|a                         |    0.0001066|  0.0001522|   370|     119|     251| 0.3216216|         -0.3567568|d                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|alemania.canada      |    367|      150|      217| 0.4087193|          -0.1825613|d                         |    0.0005528|  0.0007538|   370|     295|      75| 0.7972973|          0.5945946|a                        |   0.0000000| 0.0000000|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|ecuador.peru         |    367|      211|      156| 0.5749319|           0.1498638|a                         |    0.0047539|  0.0062007|   370|     175|     195| 0.4729730|         -0.0540541|d                        |   0.3232718| 0.3591909|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|argentina.marruecos  |    367|      164|      203| 0.4468665|          -0.1062670|d                         |    0.0471545|  0.0589432|   370|     199|     171| 0.5378378|          0.0756757|a                        |   0.1603279| 0.1849938|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|india.mejico         |    367|      169|      198| 0.4604905|          -0.0790191|d                         |    0.1437508|  0.1725010|   370|     179|     191| 0.4837838|         -0.0324324|d                        |   0.5674740| 0.5674740|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|turkmeni.uzbeki      |    367|      191|      176| 0.5204360|           0.0408719|a                         |    0.4649526|  0.5166140|   370|     150|     220| 0.4054054|         -0.1891892|d                        |   0.0003221| 0.0004392|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|eslovenia.eslovaquia |    367|      191|      176| 0.5204360|           0.0408719|a                         |    0.4649526|  0.5166140|   370|     227|     143| 0.6135135|          0.2270270|a                        |   0.0000147| 0.0000221|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|brasil.portugal      |    367|      190|      177| 0.5177112|           0.0354223|a                         |    0.5311130|  0.5690496|   370|     214|     156| 0.5783784|          0.1567568|a                        |   0.0029923| 0.0039030|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|burkinaf.guayanaf    |    367|      183|      184| 0.4986376|          -0.0027248|d                         |    1.0000000|  1.0000000|   370|     171|     199| 0.4621622|         -0.0756757|d                        |   0.1603279| 0.1849938|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|oman.belice          |    367|      184|      183| 0.5013624|           0.0027248|a                         |    1.0000000|  1.0000000|   370|     178|     192| 0.4810811|         -0.0378378|d                        |   0.4991965| 0.5164102|forced_choice_asymmetry_salience |  NA|  NA|  NA|        NA|             NA|NA                   |        NA|        NA|NA        |NA         |NA           |NA               |         NA|         NA|                      NA|
|bielorus.rusia       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 352|  15| 0.9591281|      0.9182561|a                    | 0.0000000| 0.0000000|bielorus  |rusia      |Bielorrusia  |Rusia            |   4.470270|   8.391892|              -3.9216216|
|belice.eeuu          |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 351|  16| 0.9564033|      0.9128065|a                    | 0.0000000| 0.0000000|belice    |eeuu       |Belice       |Estados Unidos   |   2.329730|   8.654054|              -6.3243243|
|andorra.españa       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 350|  17| 0.9536785|      0.9073569|a                    | 0.0000000| 0.0000000|andorra   |españa     |Andorra      |España           |   4.008108|   7.135135|              -3.1270270|
|rusia.burkinaf       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367|  31| 336| 0.0844687|     -0.8310627|d                    | 0.0000000| 0.0000000|rusia     |burkinaf   |Rusia        |Burkina Faso     |   8.391892|   2.200000|               6.1918919|
|china.singapur       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367|  32| 335| 0.0871935|     -0.8256131|d                    | 0.0000000| 0.0000000|china     |singapur   |China        |Singapur         |   8.110811|   8.048649|               0.0621622|
|argentina.paraguay   |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367|  42| 325| 0.1144414|     -0.7711172|d                    | 0.0000000| 0.0000000|argentina |paraguay   |Argentina    |Paraguay         |   5.167568|   3.151351|               2.0162162|
|francia.bolivia      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367|  46| 321| 0.1253406|     -0.7493188|d                    | 0.0000000| 0.0000000|francia   |bolivia    |Francia      |Bolivia          |   7.305405|   3.689189|               3.6162162|
|china.luxem          |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367|  48| 319| 0.1307902|     -0.7384196|d                    | 0.0000000| 0.0000000|china     |luxem      |China        |Luxemburgo       |   8.110811|   4.300000|               3.8108108|
|laos.mejico          |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 319|  48| 0.8692098|      0.7384196|a                    | 0.0000000| 0.0000000|laos      |mejico     |Laos         |México           |   2.121622|   5.343243|              -3.2216216|
|feroe.singapur       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 319|  48| 0.8692098|      0.7384196|a                    | 0.0000000| 0.0000000|feroe     |singapur   |Islas Feroe  |Singapur         |   1.845946|   8.048649|              -6.2027027|
|ghana.luxemburgo     |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 304|  63| 0.8283379|      0.6566757|a                    | 0.0000000| 0.0000000|ghana     |luxemburgo |Ghana        |Luxemburgo       |   2.243243|   4.300000|              -2.0567568|
|mongolia.bulgaria    |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 285|  82| 0.7765668|      0.5531335|a                    | 0.0000000| 0.0000000|mongolia  |bulgaria   |Mongolia     |Bulgaria         |   2.605405|   3.913514|              -1.3081081|
|francia.belgica      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 100| 267| 0.2724796|     -0.4550409|d                    | 0.0000000| 0.0000000|francia   |belgica    |Francia      |Bélgica          |   7.305405|   6.116216|               1.1891892|
|francia.brasil       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 106| 261| 0.2888283|     -0.4223433|d                    | 0.0000000| 0.0000000|francia   |brasil     |Francia      |Brasil           |   7.305405|   5.518919|               1.7864865|
|japon.italia         |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 111| 256| 0.3024523|     -0.3950954|d                    | 0.0000000| 0.0000000|japon     |italia     |Japón        |Italia           |   6.178378|   7.072973|              -0.8945946|
|uk.eeuu              |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 252| 115| 0.6866485|      0.3732970|a                    | 0.0000000| 0.0000000|uk        |eeuu       |Reino Unido  |Estados Unidos   |   4.989189|   8.654054|              -3.6648649|
|italia.españa        |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 249| 118| 0.6784741|      0.3569482|a                    | 0.0000000| 0.0000000|italia    |españa     |Italia       |España           |   7.072973|   7.135135|              -0.0621622|
|laos.camboya         |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 233| 134| 0.6348774|      0.2697548|a                    | 0.0000003| 0.0000004|laos      |camboya    |Laos         |Camboya          |   2.121622|   2.537838|              -0.4162162|
|suecia.noruega       |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 233| 134| 0.6348774|      0.2697548|a                    | 0.0000003| 0.0000004|suecia    |noruega    |Suecia       |Noruega          |   4.013514|   5.743243|              -1.7297297|
|zambia.zimbabue      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 224| 143| 0.6103542|      0.2207084|a                    | 0.0000277| 0.0000415|zambia    |zimbabue   |Zambia       |Zimbabue         |   1.962162|   2.127027|              -0.1648649|
|oman.yemen           |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 221| 146| 0.6021798|      0.2043597|a                    | 0.0001066| 0.0001522|oman      |yemen      |Omán         |Yemen            |   2.178378|   3.008108|              -0.8297297|
|alemania.canada      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 150| 217| 0.4087193|     -0.1825613|d                    | 0.0005528| 0.0007538|alemania  |canada     |Alemania     |Canadá           |   7.635135|   6.045946|               1.5891892|
|ecuador.peru         |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 211| 156| 0.5749319|      0.1498638|a                    | 0.0047539| 0.0062007|ecuador   |peru       |Ecuador      |Perú             |   5.510811|   3.594595|               1.9162162|
|argentina.marruecos  |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 164| 203| 0.4468665|     -0.1062670|d                    | 0.0471545| 0.0589432|argentina |marruecos  |Argentina    |Marruecos        |   5.167568|   7.072973|              -1.9054054|
|india.mejico         |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 169| 198| 0.4604905|     -0.0790191|d                    | 0.1437508| 0.1725010|india     |mejico     |India        |México           |   5.397297|   5.343243|               0.0540541|
|turkmeni.uzbeki      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 191| 176| 0.5204360|      0.0408719|a                    | 0.4649526| 0.5166140|turkmeni  |uzbeki     |Turkmenistán |Uzbekistán       |   2.159460|   2.324324|              -0.1648649|
|eslovenia.eslovaquia |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 191| 176| 0.5204360|      0.0408719|a                    | 0.4649526| 0.5166140|eslovenia |eslovaquia |Eslovenia    |Eslovaquia       |   3.489189|   3.454054|               0.0351351|
|brasil.portugal      |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 190| 177| 0.5177112|      0.0354223|a                    | 0.5311130| 0.5690496|brasil    |portugal   |Brasil       |Portugal         |   5.518919|   5.421622|               0.0972973|
|burkinaf.guayanaf    |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 183| 184| 0.4986376|     -0.0027248|d                    | 1.0000000| 1.0000000|burkinaf  |guayanaf   |Burkina Faso |Guayana Francesa |   2.200000|   2.135135|               0.0648649|
|oman.belice          |     NA|       NA|       NA|        NA|                  NA|NA                        |           NA|         NA|    NA|      NA|      NA|        NA|                 NA|NA                       |          NA|        NA|single_rating_asymmetry_salience | 367| 184| 183| 0.5013624|      0.0027248|a                    | 1.0000000| 1.0000000|oman      |belice     |Omán         |Belice           |   2.178378|   2.329730|              -0.1513514|
Show code
if (nrow(asym2_order_tests) > 0) {
  order_summary <- asym2_order_tests %>%
    summarise(
      n_pairs = n(),
      mean_delta = mean(across(where(is.numeric))[[1]], na.rm = TRUE),
      n_numeric_columns = sum(vapply(., is.numeric, logical(1)))
    )
  show_table(asym2_order_tests %>% slice_head(n = 20), caption = "Table 17. H3 Likert order-effect item tests, first 20 rows.")
  write_table(asym2_order_tests, "table_17_h3_likert_order_effect_item_tests.csv")
}


Table: Table 17. H3 Likert order-effect item tests, first 20 rows.

|unordered_pair_key               | n_direct| n_reverse| mean_direct| mean_reverse| diff_direct_minus_reverse| median_direct| median_reverse|          t|       p_t|       u|       p_u|   p_t_fdr|   p_u_fdr|
|:--------------------------------|--------:|---------:|-----------:|------------:|-------------------------:|-------------:|--------------:|----------:|---------:|-------:|---------:|---------:|---------:|
|Alemania &#124; Canadá           |      193|       177|    5.569948|     5.796610|                -0.2266620|             6|              6| -1.1249417| 0.2613476| 16054.0| 0.3107796| 0.9077863| 0.8857419|
|Alemania &#124; Francia          |      193|       177|    6.803109|     6.802260|                 0.0008489|             7|              7|  0.0051258| 0.9959130| 17476.0| 0.6930699| 0.9984901| 0.8857419|
|Alemania &#124; Groenlandia      |      193|       177|    4.331606|     4.446328|                -0.1147215|             4|              4| -0.5495204| 0.5829843| 16401.5| 0.5047390| 0.9608446| 0.8857419|
|Alemania &#124; Guayana Francesa |      193|       177|    3.051814|     3.146893|                -0.0950792|             3|              3| -0.5244398| 0.6002888| 16265.5| 0.4200402| 0.9713765| 0.8857419|
|Alemania &#124; Noruega          |      193|       177|    6.274611|     6.282486|                -0.0078745|             7|              7| -0.0456807| 0.9635904| 16579.5| 0.6165049| 0.9984901| 0.8857419|
|Andorra &#124; España            |      193|       177|    7.502591|     7.310734|                 0.1918562|             8|              8|  1.1179002| 0.2643640| 18011.0| 0.3507665| 0.9077863| 0.8857419|
|Argelia &#124; Francia           |      193|       177|    3.549223|     3.259887|                 0.2893358|             3|              3|  1.4429608| 0.1498865| 18573.5| 0.1406753| 0.9077863| 0.8857419|
|Argelia &#124; Países Bajos      |      193|       177|    2.378238|     2.378531|                -0.0002927|             2|              2| -0.0018938| 0.9984901| 17417.5| 0.7338302| 0.9984901| 0.8857419|
|Argentina &#124; Marruecos       |      193|       177|    3.088083|     3.005650|                 0.0824332|             3|              3|  0.4877329| 0.6260331| 17650.5| 0.5719704| 0.9732461| 0.8857419|
|Argentina &#124; Paraguay        |      193|       177|    6.611399|     6.548023|                 0.0633764|             7|              7|  0.3684968| 0.7127150| 17749.0| 0.5072894| 0.9984901| 0.8857419|
|Austria &#124; Panamá            |      193|       177|    2.673575|     2.672316|                 0.0012587|             2|              2|  0.0078063| 0.9937759| 17201.0| 0.9044755| 0.9984901| 0.9588553|
|Austria &#124; Suiza             |      193|       177|    7.046632|     6.966102|                 0.0805304|             8|              7|  0.4526807| 0.6510462| 17955.0| 0.3830487| 0.9735360| 0.8857419|
|Belice &#124; Estados Unidos     |      193|       177|    3.051814|     2.807910|                 0.2439039|             3|              2|  1.4272735| 0.1543499| 18464.5| 0.1697741| 0.9077863| 0.8857419|
|Belice &#124; Omán               |      193|       177|    4.103627|     4.084746|                 0.0188812|             4|              4|  0.0953965| 0.9240533| 17305.5| 0.8250400| 0.9984901| 0.9413918|
|Bielorrusia &#124; Rusia         |      193|       177|    7.010363|     6.819209|                 0.1911537|             7|              7|  1.0555312| 0.2919002| 17828.5| 0.4566090| 0.9077863| 0.8857419|
|Bolivia &#124; Francia           |      193|       177|    2.740933|     2.887006|                -0.1460730|             2|              3| -0.8135584| 0.4164335| 16334.0| 0.4573139| 0.9077863| 0.8857419|
|Brasil &#124; Francia            |      193|       177|    3.533679|     3.502825|                 0.0308539|             3|              3|  0.1733539| 0.8624689| 17211.5| 0.8973930| 0.9984901| 0.9588553|
|Brasil &#124; Portugal           |      386|       354|    6.500000|     6.367232|                 0.1327684|             7|              7|  0.9275991| 0.3539248| 70218.5| 0.5076749| 0.9077863| 0.8857419|
|Brasil &#124; Uruguay            |      193|       177|    5.668394|     5.497175|                 0.1712186|             6|              6|  0.9296757| 0.3531642| 17740.0| 0.5148866| 0.9077863| 0.8857419|
|Bulgaria &#124; Mongolia         |      193|       177|    3.730570|     3.734463|                -0.0038933|             3|              3| -0.0193213| 0.9845954| 17207.5| 0.9007813| 0.9984901| 0.9588553|
Show code
if (nrow(contextuality_broad) > 0) {
  show_table(contextuality_broad, caption = "Table 18. Contextuality broad condition summary.")
  write_table(contextuality_broad, "table_18_contextuality_broad_condition_summary.csv")
}


Table: Table 18. Contextuality broad condition summary.

| mediator| pseudoword| congruent_priming|    n|       p_d| rt_median|  rt_mean|
|--------:|----------:|-----------------:|----:|---------:|---------:|--------:|
|        0|          0|                NA| 1278| 0.6666667|   1627.20| 2052.643|
|        0|          1|                NA|  570| 0.5456140|   1697.95| 2230.445|
|        1|          0|                 0| 1272| 0.6454403|   2014.05| 2552.845|
|        1|          0|                 1| 1029| 0.6608358|   2063.20| 2621.521|
|        1|          1|                 0| 1031| 0.5577110|   2066.30| 2606.084|
Show code
if (nrow(contextuality_model) > 0) {
  show_table(contextuality_model, caption = "Table 19. Contextuality model summary.")
  write_table(contextuality_model, "table_19_contextuality_model_summary.csv")
}


Table: Table 19. Contextuality model summary.

|model                                                         |outcome         |predictor         |       coef|        se|          z|         p|    z_or_t|
|:-------------------------------------------------------------|:---------------|:-----------------|----------:|---------:|----------:|---------:|---------:|
|GEE logistic clustered by participant                         |response d vs a |mediator          | -0.0266549| 0.0525474| -0.5072553| 0.6119757|        NA|
|GEE logistic clustered by participant                         |response d vs a |pseudoword        | -0.4374887| 0.0791902| -5.5245298| 0.0000000|        NA|
|GEE logistic clustered by participant, mediator=1 & real word |response d vs a |congruent_priming |  0.0679651| 0.0826627|  0.8221984| 0.4109640|        NA|
|OLS clustered by participant                                  |log_rt          |mediator          |  0.1966878| 0.0416346|         NA| 0.0000023| 4.7241430|
|OLS clustered by participant                                  |log_rt          |pseudoword        |  0.0343497| 0.0159168|         NA| 0.0309215| 2.1580814|
|OLS clustered by participant, mediator=1 & real word          |log_rt          |congruent_priming |  0.0060565| 0.0242130|         NA| 0.8024840| 0.2501337|
Show code
if (nrow(diagnostic_choice) > 0) {
  show_table(diagnostic_choice, caption = "Table 20. Diagnosticity choice-context tests.")
  write_table(diagnostic_choice, "table_20_diagnosticity_choice_context_tests.csv")
}


Table: Table 20. Diagnosticity choice-context tests.

|target |   n| n_contexts| n_choices|  chi2_all|     p_all| cramers_v_all| chi2_candidates| p_candidates| cramers_v_candidates|table_all                                                                                                |table_candidates                                                                 | p_all_fdr| p_candidates_fdr|
|:------|---:|----------:|---------:|---------:|---------:|-------------:|---------------:|------------:|--------------------:|:--------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------|---------:|----------------:|
|aust   | 369|          2|         4|  76.76602| 0.0000000|     0.4561118|       3.5853994|    0.0582894|            0.1100583|{"columns":["hung","noru","polo","suec"],"index":["noru","polo"],"data":[[63,33,0,80],[50,0,40,103]]}    |{"columns":["hung","suec"],"index":["noru","polo"],"data":[[63,80],[50,103]]}    | 0.0000000|        0.2137278|
|bras   | 369|          2|         4|  53.27691| 0.0000000|     0.3799762|       2.9454923|    0.0861175|            0.0957914|{"columns":["arge","chil","esp","port"],"index":["chil","esp"],"data":[[48,47,0,98],[75,0,1,100]]}       |{"columns":["arge","port"],"index":["chil","esp"],"data":[[48,98],[75,100]]}     | 0.0000000|        0.2368230|
|corn   | 369|          2|         4|  83.29878| 0.0000000|     0.4751231|       5.3872745|    0.0202841|            0.1344548|{"columns":["cors","cuba","japo","venez"],"index":["cuba","japo"],"data":[[101,21,0,71],[56,0,50,70]]}   |{"columns":["cors","venez"],"index":["cuba","japo"],"data":[[101,71],[56,70]]}   | 0.0000000|        0.1115627|
|cuba   | 369|          2|         4| 166.26613| 0.0000000|     0.6712568|       1.3857184|    0.2391295|            0.0756711|{"columns":["costr","jamai","mong","rusi"],"index":["costr","mong"],"data":[[120,60,0,13],[0,150,7,19]]} |{"columns":["jamai","rusi"],"index":["costr","mong"],"data":[[60,13],[150,19]]}  | 0.0000000|        0.4849772|
|eeuu   | 369|          2|         4|   4.55194| 0.2077039|     0.1110670|       0.2199651|    0.6390665|            0.0245488|{"columns":["cana","fran","irla","uk"],"index":["fran","irla"],"data":[[114,3,0,59],[132,0,1,60]]}       |{"columns":["cana","uk"],"index":["fran","irla"],"data":[[114,59],[132,60]]}     | 0.2077039|        0.8787164|
|fran   | 369|          2|         4|  96.14407| 0.0000000|     0.5104440|       0.0634860|    0.8010686|            0.0150043|{"columns":["alem","espa","hola","port"],"index":["hola","port"],"data":[[57,58,78,0],[79,88,0,9]]}      |{"columns":["alem","espa"],"index":["hola","port"],"data":[[57,58],[79,88]]}     | 0.0000000|        0.8826369|
|hung   | 369|          2|         4|  26.41377| 0.0000078|     0.2675482|       0.0626230|    0.8023972|            0.0135318|{"columns":["alem","bielor","polo","rusi"],"index":["alem","rusi"],"data":[[22,44,127,0],[0,41,130,5]]}  |{"columns":["bielor","polo"],"index":["alem","rusi"],"data":[[44,127],[41,130]]} | 0.0000086|        0.8826369|
|marr   | 369|          2|         4|  83.15714| 0.0000000|     0.4747190|       0.0084603|    0.9267142|            0.0053372|{"columns":["arge","egip","espa","saha"],"index":["egip","espa"],"data":[[71,57,0,48],[104,0,15,74]]}    |{"columns":["arge","saha"],"index":["egip","espa"],"data":[[71,48],[104,74]]}    | 0.0000000|        0.9267142|
|suiz   | 369|          2|         4|  31.52843| 0.0000007|     0.2923062|       1.2448780|    0.2645330|            0.0605987|{"columns":["aust","bulg","hond","pana"],"index":["bulg","hond"],"data":[[170,21,0,2],[161,0,9,6]]}      |{"columns":["aust","pana"],"index":["bulg","hond"],"data":[[170,2],[161,6]]}     | 0.0000008|        0.4849772|
|turk   | 369|          2|         4| 110.72534| 0.0000000|     0.5477852|      18.5958160|    0.0000162|            0.2502242|{"columns":["grec","iraq","ital","siri"],"index":["iraq","ital"],"data":[[76,67,0,33],[81,0,5,107]]}     |{"columns":["grec","siri"],"index":["iraq","ital"],"data":[[76,33],[81,107]]}    | 0.0000000|        0.0001777|
|uk     | 369|          2|         4| 120.95431| 0.0000000|     0.5725290|       0.3749496|    0.5403186|            0.0387272|{"columns":["aust","belg","fran","nzel"],"index":["belg","nzel"],"data":[[60,57,76,0],[45,0,69,62]]}     |{"columns":["aust","fran"],"index":["belg","nzel"],"data":[[60,76],[45,69]]}     | 0.0000000|        0.8490721|
Show code
if (nrow(diagnostic_rating) > 0) {
  show_table(diagnostic_rating, caption = "Table 21. Diagnosticity rating context-interaction tests.")
  write_table(diagnostic_rating, "table_21_diagnosticity_rating_context_interaction_tests.csv")
}


Table: Table 21. Diagnosticity rating context-interaction tests.

|target    |candidate_1 |candidate_2 |context_1 |context_2    | n_context_1| n_context_2| mean_diff_context_1| mean_diff_context_2| interaction_diff|          t|       p_t|       u|       p_u|   cohens_d|   p_t_fdr|   p_u_fdr|
|:---------|:-----------|:-----------|:---------|:------------|-----------:|-----------:|-------------------:|-------------------:|----------------:|----------:|---------:|-------:|---------:|----------:|---------:|---------:|
|austria   |Hungría     |Suecia      |Noruega   |Polonia      |         177|         158|          -0.4576271|          -0.5379747|        0.0803476|  0.4831604| 0.6292999| 14570.0| 0.4986732|  0.0526607| 0.8559817| 0.9142342|
|brasil    |Argentina   |Portugal    |Chile     |España       |         158|         177|          -0.4240506|          -0.1412429|       -0.2828077| -1.6707422| 0.0957524| 12986.0| 0.2495981| -0.1838376| 0.3562102| 0.8018554|
|corean    |CoreaS      |Venezuela   |Cuba      |Japón        |         158|         177|          -0.1898734|          -0.1864407|       -0.0034327| -0.0120064| 0.9904277| 14093.5| 0.9004237| -0.0013081| 0.9904277| 0.9233796|
|cuba      |Jamaica     |Rusia       |CostaRica |Mongolia     |         158|         177|           2.0949367|           2.4915254|       -0.3965887| -1.6635249| 0.0971482| 12230.5| 0.0453444| -0.1808242| 0.3562102| 0.2493940|
|eeuu      |Canadá      |ReinoUnido  |Francia   |Irlanda      |         177|         158|           0.7514124|           0.6075949|        0.1438175|  1.1072215| 0.2690401| 14870.0| 0.2972677|  0.1220025| 0.5937078| 0.8018554|
|francia   |Alemania    |España      |Holanda   |Portugal     |         158|         177|          -0.0569620|           0.0056497|       -0.0626117| -0.5091225| 0.6110036| 13535.5| 0.5989155| -0.0553908| 0.8559817| 0.9233796|
|hungria   |Bielorrusia |Polonia     |Alemania  |Rusia        |         158|         177|          -0.3860759|          -0.6836158|        0.2975399|  2.2275986| 0.0265755| 15832.5| 0.0301696|  0.2419177| 0.2923302| 0.2493940|
|marruecos |Argelia     |Sahara      |Egipto    |España       |         177|         158|           0.0847458|           0.0316456|        0.0531002|  0.4004780| 0.6890673| 14065.0| 0.9233796|  0.0439284| 0.8559817| 0.9233796|
|suiza     |Austria     |Panamá      |Bulgaria  |Honduras     |         158|         177|           2.9810127|           3.0282486|       -0.0472359| -0.2819394| 0.7781652| 13761.0| 0.7983358| -0.0306328| 0.8559817| 0.9233796|
|turquia   |Grecia      |Siria       |Iraq      |Italia       |         177|         158|           0.1129944|          -0.1329114|        0.2459057|  1.1052193| 0.2698672| 14777.5| 0.3644797|  0.1207104| 0.5937078| 0.8018554|
|uk        |Australia   |Francia     |Bélgica   |NuevaZelanda |         158|         177|          -0.2278481|          -0.1638418|       -0.0640063| -0.3536202| 0.7238530| 13791.5| 0.8261750| -0.0388034| 0.8559817| 0.9233796|
Show code
if (nrow(vdtm_triangle) > 0) {
  show_table(vdtm_triangle, caption = "Table 22. Triangle / MTI empirical tests from Phase 2 ratings.")
  write_table(vdtm_triangle, "table_22_triangle_mti_empirical_tests.csv")
}


Table: Table 22. Triangle / MTI empirical tests from Phase 2 ratings.

|country_x              |country_y              |via                    |triangle                                                   | sim_direct| product_path| vdtm_margin|violation |direct_key                                    |path_key1                                     |path_key2                             |     ci_low|    ci_high| p_boot_one_sided_violation|violation_ci_excludes_0 |
|:----------------------|:----------------------|:----------------------|:----------------------------------------------------------|----------:|------------:|-----------:|:---------|:---------------------------------------------|:---------------------------------------------|:-------------------------------------|----------:|----------:|--------------------------:|:-----------------------|
|Alemania               |Guayana Francesa       |Francia                |Alemania &#124; Francia &#124; Guayana Francesa            |  0.2621622|    0.3487013|  -0.0865391|TRUE      |Alemania &#124; Guayana Francesa              |Alemania &#124; Francia                       |Francia &#124; Guayana Francesa       | -0.1114555| -0.0636528|                     0.0000|TRUE                    |
|Canadá                 |México                 |Estados Unidos         |Canadá &#124; Estados Unidos &#124; México                 |  0.2918919|    0.3561389|  -0.0642471|TRUE      |Canadá &#124; México                          |Canadá &#124; Estados Unidos                  |Estados Unidos &#124; México          | -0.0907854| -0.0383844|                     0.0000|TRUE                    |
|Portugal               |Uruguay                |Brasil                 |Brasil &#124; Portugal &#124; Uruguay                      |  0.3347973|    0.3895996|  -0.0548023|TRUE      |Portugal &#124; Uruguay                       |Brasil &#124; Portugal                        |Brasil &#124; Uruguay                 | -0.0808358| -0.0279596|                     0.0000|TRUE                    |
|Jamaica                |Rusia                  |Cuba                   |Cuba &#124; Jamaica &#124; Rusia                           |  0.1043919|    0.1426497|  -0.0382579|TRUE      |Jamaica &#124; Rusia                          |Cuba &#124; Jamaica                           |Cuba &#124; Rusia                     | -0.0578163| -0.0191012|                     0.0000|TRUE                    |
|Argelia                |Países Bajos           |Francia                |Argelia &#124; Francia &#124; Países Bajos                 |  0.1722973|    0.2081971|  -0.0358998|TRUE      |Argelia &#124; Países Bajos                   |Argelia &#124; Francia                        |Francia &#124; Países Bajos           | -0.0577763| -0.0133651|                     0.0010|TRUE                    |
|Alemania               |Groenlandia            |Noruega                |Alemania &#124; Groenlandia &#124; Noruega                 |  0.4233108|    0.4531648|  -0.0298540|TRUE      |Alemania &#124; Groenlandia                   |Alemania &#124; Noruega                       |Groenlandia &#124; Noruega            | -0.0544672| -0.0043926|                     0.0100|TRUE                    |
|Mozambique             |Reino Unido            |Nueva Zelanda          |Mozambique &#124; Nueva Zelanda &#124; Reino Unido         |  0.1496622|    0.1536254|  -0.0039632|TRUE      |Mozambique &#124; Reino Unido                 |Mozambique &#124; Nueva Zelanda               |Nueva Zelanda &#124; Reino Unido      | -0.0204559|  0.0121752|                     0.3255|FALSE                   |
|Indonesia              |Mónaco                 |Singapur               |Indonesia &#124; Mónaco &#124; Singapur                    |  0.2273649|    0.2162450|   0.0111199|FALSE     |Indonesia &#124; Mónaco                       |Indonesia &#124; Singapur                     |Mónaco &#124; Singapur                | -0.0122494|  0.0343859|                     0.8385|FALSE                   |
|Reino Unido            |Tailandia              |India                  |India &#124; Reino Unido &#124; Tailandia                  |  0.1665541|    0.1493624|   0.0171916|FALSE     |Reino Unido &#124; Tailandia                  |India &#124; Reino Unido                      |India &#124; Tailandia                | -0.0016892|  0.0359973|                     0.9620|FALSE                   |
|India                  |Irán                   |Pakistán               |India &#124; Irán &#124; Pakistán                          |  0.4216216|    0.4032870|   0.0183347|FALSE     |India &#124; Irán                             |India &#124; Pakistán                         |Irán &#124; Pakistán                  | -0.0068975|  0.0443815|                     0.9250|FALSE                   |
|Mozambique             |Reino Unido            |Sudáfrica              |Mozambique &#124; Reino Unido &#124; Sudáfrica             |  0.1496622|    0.1263980|   0.0232641|FALSE     |Mozambique &#124; Reino Unido                 |Mozambique &#124; Sudáfrica                   |Reino Unido &#124; Sudáfrica          |  0.0041156|  0.0431155|                     0.9905|FALSE                   |
|Papúa Nueva Guinea     |Reino Unido            |Nueva Zelanda          |Nueva Zelanda &#124; Papúa Nueva Guinea &#124; Reino Unido |  0.2361486|    0.1974276|   0.0387210|FALSE     |Papúa Nueva Guinea &#124; Reino Unido         |Nueva Zelanda &#124; Papúa Nueva Guinea       |Nueva Zelanda &#124; Reino Unido      |  0.0167258|  0.0606526|                     0.9995|FALSE                   |
|Mozambique             |Nueva Zelanda          |Madagascar             |Madagascar &#124; Mozambique &#124; Nueva Zelanda          |  0.2452703|    0.2046151|   0.0406551|FALSE     |Mozambique &#124; Nueva Zelanda               |Madagascar &#124; Mozambique                  |Madagascar &#124; Nueva Zelanda       |  0.0166663|  0.0648403|                     1.0000|FALSE                   |
|Estados Unidos         |Laos                   |México                 |Estados Unidos &#124; Laos &#124; México                   |  0.1753378|    0.1329075|   0.0424304|FALSE     |Estados Unidos &#124; Laos                    |Estados Unidos &#124; México                  |Laos &#124; México                    |  0.0243034|  0.0606300|                     1.0000|FALSE                   |
|Nepal                  |República Dominicana   |Haití                  |Haití &#124; Nepal &#124; República Dominicana             |  0.2969595|    0.2539307|   0.0430288|FALSE     |Nepal &#124; República Dominicana             |Haití &#124; Nepal                            |Haití &#124; República Dominicana     |  0.0194330|  0.0659409|                     1.0000|FALSE                   |
|Austria                |Panamá                 |Suiza                  |Austria &#124; Panamá &#124; Suiza                         |  0.2091216|    0.1616201|   0.0475015|FALSE     |Austria &#124; Panamá                         |Austria &#124; Suiza                          |Panamá &#124; Suiza                   |  0.0300862|  0.0654986|                     1.0000|FALSE                   |
|Egipto                 |Estados Unidos         |Israel                 |Egipto &#124; Estados Unidos &#124; Israel                 |  0.1807432|    0.1313760|   0.0493672|FALSE     |Egipto &#124; Estados Unidos                  |Egipto &#124; Israel                          |Estados Unidos &#124; Israel          |  0.0305096|  0.0669548|                     1.0000|FALSE                   |
|España                 |Nicaragua              |Panamá                 |España &#124; Nicaragua &#124; Panamá                      |  0.2682432|    0.2126157|   0.0556275|FALSE     |España &#124; Nicaragua                       |España &#124; Panamá                          |Nicaragua &#124; Panamá               |  0.0360274|  0.0749070|                     1.0000|FALSE                   |
|Panamá                 |Suiza                  |Austria                |Austria &#124; Panamá &#124; Suiza                         |  0.2152027|    0.1570532|   0.0581495|FALSE     |Panamá &#124; Suiza                           |Austria &#124; Panamá                         |Austria &#124; Suiza                  |  0.0399764|  0.0770319|                     1.0000|FALSE                   |
|Líbano                 |Rusia                  |Siria                  |Líbano &#124; Rusia &#124; Siria                           |  0.2611486|    0.1944385|   0.0667102|FALSE     |Líbano &#124; Rusia                           |Líbano &#124; Siria                           |Rusia &#124; Siria                    |  0.0456945|  0.0882296|                     1.0000|FALSE                   |
|Estados Unidos         |Laos                   |Vietnam                |Estados Unidos &#124; Laos &#124; Vietnam                  |  0.1753378|    0.0859117|   0.0894261|FALSE     |Estados Unidos &#124; Laos                    |Estados Unidos &#124; Vietnam                 |Laos &#124; Vietnam                   |  0.0721691|  0.1072093|                     1.0000|FALSE                   |
|Estados Unidos         |Vietnam                |Laos                   |Estados Unidos &#124; Laos &#124; Vietnam                  |  0.1763514|    0.0854180|   0.0909334|FALSE     |Estados Unidos &#124; Vietnam                 |Estados Unidos &#124; Laos                    |Laos &#124; Vietnam                   |  0.0728417|  0.1088812|                     1.0000|FALSE                   |
|Corea del Sur          |Venezuela              |Corea del Norte        |Corea del Norte &#124; Corea del Sur &#124; Venezuela      |  0.2844595|    0.1866645|   0.0977949|FALSE     |Corea del Sur &#124; Venezuela                |Corea del Norte &#124; Corea del Sur          |Corea del Norte &#124; Venezuela      |  0.0718058|  0.1251589|                     1.0000|FALSE                   |
|India                  |Reino Unido            |Tailandia              |India &#124; Reino Unido &#124; Tailandia                  |  0.2253378|    0.1103983|   0.1149395|FALSE     |India &#124; Reino Unido                      |India &#124; Tailandia                        |Reino Unido &#124; Tailandia          |  0.0949139|  0.1361003|                     1.0000|FALSE                   |
|Estados Unidos         |Israel                 |Egipto                 |Egipto &#124; Estados Unidos &#124; Israel                 |  0.2219595|    0.1069805|   0.1149790|FALSE     |Estados Unidos &#124; Israel                  |Egipto &#124; Estados Unidos                  |Egipto &#124; Israel                  |  0.0906522|  0.1396905|                     1.0000|FALSE                   |
|Corea del Norte        |Yemen                  |Emiratos Árabes Unidos |Corea del Norte &#124; Emiratos Árabes Unidos &#124; Yemen |  0.3648649|    0.2194079|   0.1454570|FALSE     |Corea del Norte &#124; Yemen                  |Corea del Norte &#124; Emiratos Árabes Unidos |Emiratos Árabes Unidos &#124; Yemen   |  0.1204905|  0.1705383|                     1.0000|FALSE                   |
|Reino Unido            |Sudáfrica              |Mozambique             |Mozambique &#124; Reino Unido &#124; Sudáfrica             |  0.2293919|    0.0824659|   0.1469260|FALSE     |Reino Unido &#124; Sudáfrica                  |Mozambique &#124; Reino Unido                 |Mozambique &#124; Sudáfrica           |  0.1208558|  0.1719378|                     1.0000|FALSE                   |
|Mozambique             |Nueva Zelanda          |Reino Unido            |Mozambique &#124; Nueva Zelanda &#124; Reino Unido         |  0.2452703|    0.0937411|   0.1515292|FALSE     |Mozambique &#124; Nueva Zelanda               |Mozambique &#124; Reino Unido                 |Nueva Zelanda &#124; Reino Unido      |  0.1313172|  0.1724228|                     1.0000|FALSE                   |
|España                 |Panamá                 |Nicaragua              |España &#124; Nicaragua &#124; Panamá                      |  0.3317568|    0.1719113|   0.1598455|FALSE     |España &#124; Panamá                          |España &#124; Nicaragua                       |Nicaragua &#124; Panamá               |  0.1393820|  0.1803393|                     1.0000|FALSE                   |
|Cuba                   |Rusia                  |Jamaica                |Cuba &#124; Jamaica &#124; Rusia                           |  0.2297297|    0.0648217|   0.1649080|FALSE     |Cuba &#124; Rusia                             |Cuba &#124; Jamaica                           |Jamaica &#124; Rusia                  |  0.1403760|  0.1903950|                     1.0000|FALSE                   |
|Rusia                  |Siria                  |Líbano                 |Líbano &#124; Rusia &#124; Siria                           |  0.3229730|    0.1572185|   0.1657544|FALSE     |Rusia &#124; Siria                            |Líbano &#124; Rusia                           |Líbano &#124; Siria                   |  0.1409166|  0.1898566|                     1.0000|FALSE                   |
|Nueva Zelanda          |Papúa Nueva Guinea     |Reino Unido            |Nueva Zelanda &#124; Papúa Nueva Guinea &#124; Reino Unido |  0.3152027|    0.1479120|   0.1672907|FALSE     |Nueva Zelanda &#124; Papúa Nueva Guinea       |Nueva Zelanda &#124; Reino Unido              |Papúa Nueva Guinea &#124; Reino Unido |  0.1433580|  0.1908140|                     1.0000|FALSE                   |
|Argelia                |Francia                |Países Bajos           |Argelia &#124; Francia &#124; Países Bajos                 |  0.3013514|    0.1190365|   0.1823149|FALSE     |Argelia &#124; Francia                        |Argelia &#124; Países Bajos                   |Francia &#124; Países Bajos           |  0.1581375|  0.2061725|                     1.0000|FALSE                   |
|Estados Unidos         |México                 |Canadá                 |Canadá &#124; Estados Unidos &#124; México                 |  0.4361486|    0.2383455|   0.1978031|FALSE     |Estados Unidos &#124; México                  |Canadá &#124; Estados Unidos                  |Canadá &#124; México                  |  0.1742755|  0.2227023|                     1.0000|FALSE                   |
|Corea del Norte        |Emiratos Árabes Unidos |Yemen                  |Corea del Norte &#124; Emiratos Árabes Unidos &#124; Yemen |  0.4074324|    0.1964847|   0.2109478|FALSE     |Corea del Norte &#124; Emiratos Árabes Unidos |Corea del Norte &#124; Yemen                  |Emiratos Árabes Unidos &#124; Yemen   |  0.1830590|  0.2385928|                     1.0000|FALSE                   |
|Mónaco                 |Singapur               |Indonesia              |Indonesia &#124; Mónaco &#124; Singapur                    |  0.3554054|    0.1383392|   0.2170662|FALSE     |Mónaco &#124; Singapur                        |Indonesia &#124; Mónaco                       |Indonesia &#124; Singapur             |  0.1896579|  0.2446808|                     1.0000|FALSE                   |
|Laos                   |México                 |Estados Unidos         |Estados Unidos &#124; Laos &#124; México                   |  0.3047297|    0.0764734|   0.2282564|FALSE     |Laos &#124; México                            |Estados Unidos &#124; Laos                    |Estados Unidos &#124; México          |  0.2081251|  0.2492751|                     1.0000|FALSE                   |
|India                  |Pakistán               |Irán                   |India &#124; Irán &#124; Pakistán                          |  0.5665541|    0.3001205|   0.2664335|FALSE     |India &#124; Pakistán                         |India &#124; Irán                             |Irán &#124; Pakistán                  |  0.2414776|  0.2912623|                     1.0000|FALSE                   |
|Madagascar             |Nueva Zelanda          |Mozambique             |Madagascar &#124; Mozambique &#124; Nueva Zelanda          |  0.4067568|    0.1233809|   0.2833759|FALSE     |Madagascar &#124; Nueva Zelanda               |Madagascar &#124; Mozambique                  |Mozambique &#124; Nueva Zelanda       |  0.2569386|  0.3103007|                     1.0000|FALSE                   |
|Francia                |Guayana Francesa       |Alemania               |Alemania &#124; Francia &#124; Guayana Francesa            |  0.4807432|    0.1901561|   0.2905871|FALSE     |Francia &#124; Guayana Francesa               |Alemania &#124; Francia                       |Alemania &#124; Guayana Francesa      |  0.2642724|  0.3166056|                     1.0000|FALSE                   |
|Corea del Norte        |Venezuela              |Corea del Sur          |Corea del Norte &#124; Corea del Sur &#124; Venezuela      |  0.4185811|    0.1268535|   0.2917275|FALSE     |Corea del Norte &#124; Venezuela              |Corea del Norte &#124; Corea del Sur          |Corea del Sur &#124; Venezuela        |  0.2550150|  0.3259872|                     1.0000|FALSE                   |
|Corea del Norte        |Corea del Sur          |Venezuela              |Corea del Norte &#124; Corea del Sur &#124; Venezuela      |  0.4459459|    0.1190693|   0.3268766|FALSE     |Corea del Norte &#124; Corea del Sur          |Corea del Norte &#124; Venezuela              |Corea del Sur &#124; Venezuela        |  0.2890715|  0.3645774|                     1.0000|FALSE                   |
|Haití                  |Nepal                  |República Dominicana   |Haití &#124; Nepal &#124; República Dominicana             |  0.4922297|    0.1531950|   0.3390348|FALSE     |Haití &#124; Nepal                            |Haití &#124; República Dominicana             |Nepal &#124; República Dominicana     |  0.3127536|  0.3662678|                     1.0000|FALSE                   |
|Brasil                 |Uruguay                |Portugal               |Brasil &#124; Portugal &#124; Uruguay                      |  0.5733108|    0.2275151|   0.3457957|FALSE     |Brasil &#124; Uruguay                         |Brasil &#124; Portugal                        |Portugal &#124; Uruguay               |  0.3210163|  0.3716637|                     1.0000|FALSE                   |
|Alemania               |Noruega                |Groenlandia            |Alemania &#124; Groenlandia &#124; Noruega                 |  0.6597973|    0.2907402|   0.3690571|FALSE     |Alemania &#124; Noruega                       |Alemania &#124; Groenlandia                   |Groenlandia &#124; Noruega            |  0.3438569|  0.3920830|                     1.0000|FALSE                   |
|Haití                  |República Dominicana   |Nepal                  |Haití &#124; Nepal &#124; República Dominicana             |  0.5158784|    0.1461723|   0.3697061|FALSE     |Haití &#124; República Dominicana             |Haití &#124; Nepal                            |Nepal &#124; República Dominicana     |  0.3386561|  0.4004326|                     1.0000|FALSE                   |
|Estados Unidos         |México                 |Laos                   |Estados Unidos &#124; Laos &#124; México                   |  0.4361486|    0.0534307|   0.3827180|FALSE     |Estados Unidos &#124; México                  |Estados Unidos &#124; Laos                    |Laos &#124; México                    |  0.3570125|  0.4081404|                     1.0000|FALSE                   |
|Emiratos Árabes Unidos |Yemen                  |Corea del Norte        |Corea del Norte &#124; Emiratos Árabes Unidos &#124; Yemen |  0.5385135|    0.1486578|   0.3898557|FALSE     |Emiratos Árabes Unidos &#124; Yemen           |Corea del Norte &#124; Emiratos Árabes Unidos |Corea del Norte &#124; Yemen          |  0.3614970|  0.4174976|                     1.0000|FALSE                   |
|Madagascar             |Mozambique             |Nueva Zelanda          |Madagascar &#124; Mozambique &#124; Nueva Zelanda          |  0.5030405|    0.0997653|   0.4032752|FALSE     |Madagascar &#124; Mozambique                  |Madagascar &#124; Nueva Zelanda               |Mozambique &#124; Nueva Zelanda       |  0.3765350|  0.4311143|                     1.0000|FALSE                   |
|Groenlandia            |Noruega                |Alemania               |Alemania &#124; Groenlandia &#124; Noruega                 |  0.6868243|    0.2792993|   0.4075250|FALSE     |Groenlandia &#124; Noruega                    |Alemania &#124; Groenlandia                   |Alemania &#124; Noruega               |  0.3833817|  0.4312437|                     1.0000|FALSE                   |
|Laos                   |Vietnam                |Estados Unidos         |Estados Unidos &#124; Laos &#124; Vietnam                  |  0.4871622|    0.0309211|   0.4562411|FALSE     |Laos &#124; Vietnam                           |Estados Unidos &#124; Laos                    |Estados Unidos &#124; Vietnam         |  0.4295451|  0.4829641|                     1.0000|FALSE                   |
|Irán                   |Pakistán               |India                  |India &#124; Irán &#124; Pakistán                          |  0.7118243|    0.2388714|   0.4729529|FALSE     |Irán &#124; Pakistán                          |India &#124; Irán                             |India &#124; Pakistán                 |  0.4482446|  0.4956541|                     1.0000|FALSE                   |
|Brasil                 |Portugal               |Uruguay                |Brasil &#124; Portugal &#124; Uruguay                      |  0.6795608|    0.1919429|   0.4876179|FALSE     |Brasil &#124; Portugal                        |Brasil &#124; Uruguay                         |Portugal &#124; Uruguay               |  0.4620244|  0.5120050|                     1.0000|FALSE                   |
|Mozambique             |Sudáfrica              |Reino Unido            |Mozambique &#124; Reino Unido &#124; Sudáfrica             |  0.5510135|    0.0343313|   0.5166822|FALSE     |Mozambique &#124; Sudáfrica                   |Mozambique &#124; Reino Unido                 |Reino Unido &#124; Sudáfrica          |  0.4889122|  0.5447729|                     1.0000|FALSE                   |
|Líbano                 |Siria                  |Rusia                  |Líbano &#124; Rusia &#124; Siria                           |  0.6020270|    0.0843440|   0.5176831|FALSE     |Líbano &#124; Siria                           |Líbano &#124; Rusia                           |Rusia &#124; Siria                    |  0.4910415|  0.5433750|                     1.0000|FALSE                   |
|Indonesia              |Singapur               |Mónaco                 |Indonesia &#124; Mónaco &#124; Singapur                    |  0.6084459|    0.0808067|   0.5276392|FALSE     |Indonesia &#124; Singapur                     |Indonesia &#124; Mónaco                       |Mónaco &#124; Singapur                |  0.4984556|  0.5547520|                     1.0000|FALSE                   |
|Egipto                 |Israel                 |Estados Unidos         |Egipto &#124; Estados Unidos &#124; Israel                 |  0.5918919|    0.0401177|   0.5517742|FALSE     |Egipto &#124; Israel                          |Egipto &#124; Estados Unidos                  |Estados Unidos &#124; Israel          |  0.5244840|  0.5785783|                     1.0000|FALSE                   |
|Nicaragua              |Panamá                 |España                 |España &#124; Nicaragua &#124; Panamá                      |  0.6408784|    0.0889915|   0.5518869|FALSE     |Nicaragua &#124; Panamá                       |España &#124; Nicaragua                       |España &#124; Panamá                  |  0.5271444|  0.5770814|                     1.0000|FALSE                   |
|Nueva Zelanda          |Reino Unido            |Papúa Nueva Guinea     |Nueva Zelanda &#124; Papúa Nueva Guinea &#124; Reino Unido |  0.6263514|    0.0744347|   0.5519167|FALSE     |Nueva Zelanda &#124; Reino Unido              |Nueva Zelanda &#124; Papúa Nueva Guinea       |Papúa Nueva Guinea &#124; Reino Unido |  0.5287073|  0.5751275|                     1.0000|FALSE                   |
|Nueva Zelanda          |Reino Unido            |Mozambique             |Mozambique &#124; Nueva Zelanda &#124; Reino Unido         |  0.6263514|    0.0367077|   0.5896437|FALSE     |Nueva Zelanda &#124; Reino Unido              |Mozambique &#124; Nueva Zelanda               |Mozambique &#124; Reino Unido         |  0.5669743|  0.6124141|                     1.0000|FALSE                   |
|Cuba                   |Jamaica                |Rusia                  |Cuba &#124; Jamaica &#124; Rusia                           |  0.6209459|    0.0239819|   0.5969640|FALSE     |Cuba &#124; Jamaica                           |Cuba &#124; Rusia                             |Jamaica &#124; Rusia                  |  0.5722692|  0.6221622|                     1.0000|FALSE                   |
|Alemania               |Francia                |Guayana Francesa       |Alemania &#124; Francia &#124; Guayana Francesa            |  0.7253378|    0.1260327|   0.5993051|FALSE     |Alemania &#124; Francia                       |Alemania &#124; Guayana Francesa              |Francia &#124; Guayana Francesa       |  0.5770751|  0.6232516|                     1.0000|FALSE                   |
|India                  |Tailandia              |Reino Unido            |India &#124; Reino Unido &#124; Tailandia                  |  0.6628378|    0.0375309|   0.6253069|FALSE     |India &#124; Tailandia                        |India &#124; Reino Unido                      |Reino Unido &#124; Tailandia          |  0.5999617|  0.6489587|                     1.0000|FALSE                   |
|Francia                |Países Bajos           |Argelia                |Argelia &#124; Francia &#124; Países Bajos                 |  0.6908784|    0.0519220|   0.6389564|FALSE     |Francia &#124; Países Bajos                   |Argelia &#124; Francia                        |Argelia &#124; Países Bajos           |  0.6166838|  0.6608810|                     1.0000|FALSE                   |
|Canadá                 |Estados Unidos         |México                 |Canadá &#124; Estados Unidos &#124; México                 |  0.8165541|    0.1273083|   0.6892458|FALSE     |Canadá &#124; Estados Unidos                  |Canadá &#124; México                          |Estados Unidos &#124; México          |  0.6670621|  0.7099198|                     1.0000|FALSE                   |
|Austria                |Suiza                  |Panamá                 |Austria &#124; Panamá &#124; Suiza                         |  0.7510135|    0.0450035|   0.7060100|FALSE     |Austria &#124; Suiza                          |Austria &#124; Panamá                         |Panamá &#124; Suiza                   |  0.6823540|  0.7291382|                     1.0000|FALSE                   |

Interpretation. This section determines which phenomena deserve computational modeling. H1/H2 forced-choice effects are central because they define the strongest directional human contrasts. H3 order asymmetry should be treated cautiously if the human effect is weak. H4 is better framed as a continuous residual analysis than as binary violation hunting when violations are rare. H6 should separate diagnostic choice, diagnostic rating, and contextuality/priming.

12 1.9 Response-time process checks for Block 1

These checks do not yet test quantum-like metrics. They ask whether response times behave like a meaningful process variable.

Show code
forced_choice_item_rt <- responses_all %>%
  filter(response_type %in% c("forced_choice_ad", "forced_choice_diagnosticity"), valid_rt) %>%
  mutate(
    chose_second = case_when(
      response_coded %in% c("d", "second") ~ 1,
      response_coded %in% c("a", "first") ~ 0,
      selected_position_assuming_a_first_d_second == "second" ~ 1,
      selected_position_assuming_a_first_d_second == "first" ~ 0,
      TRUE ~ NA_real_
    )
  ) %>%
  group_by(experiment, subexperiment, task_label, item_id) %>%
  summarise(
    n = n(),
    prop_second = mean(chose_second, na.rm = TRUE),
    decision_clarity = abs(prop_second - .5),
    median_rt_ms = median(rt_ms, na.rm = TRUE),
    mean_log_rt = mean(log_rt, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(!is.na(decision_clarity), !is.na(median_rt_ms), n >= 5)

rt_clarity_cor <- forced_choice_item_rt %>%
  group_by(experiment, subexperiment, task_label) %>%
  group_modify(~ {
    d <- .x %>% filter(is.finite(decision_clarity), is.finite(median_rt_ms))
    if (nrow(d) < 3 || n_distinct(d$decision_clarity) < 2 || n_distinct(d$median_rt_ms) < 2) {
      return(tibble(n = nrow(d), rho = NA_real_, p = NA_real_))
    }
    ct <- suppressWarnings(cor.test(d$decision_clarity, d$median_rt_ms, method = "spearman", exact = FALSE))
    tibble(n = nrow(d), rho = unname(ct$estimate), p = ct$p.value)
  }) %>%
  ungroup()

if (nrow(rt_clarity_cor) > 0) {
  show_table(
    rt_clarity_cor %>% mutate(rho = apa_r(rho), p = apa_p(p)),
    caption = "Table 23. Item-level decision clarity and median RT in forced-choice tasks."
  )
  write_table(rt_clarity_cor, "table_23_forced_choice_decision_clarity_rt.csv")
}


Table: Table 23. Item-level decision clarity and median RT in forced-choice tasks.

|experiment |subexperiment             |task_label                 |  n|rho  |p      |
|:----------|:-------------------------|:--------------------------|--:|:----|:------|
|asymmetry  |asymmetry_1_forced_choice |H1 asymmetry forced choice | 30|−.69 |< .001 |
|saliency   |saliency_1_forced_choice  |H2 salience forced choice  | 30|−.87 |< .001 |
Show code
if (nrow(forced_choice_item_rt) > 0) {
  clarity_plot <- forced_choice_item_rt %>%
    ggplot(aes(x = decision_clarity, y = median_rt_ms, colour = experiment)) +
    geom_point(size = 2.4, alpha = .82) +
    geom_smooth(method = "lm", se = TRUE, linewidth = .9, colour = "grey25") +
    facet_wrap(~ task_label, scales = "free") +
    scale_colour_manual(values = palette_block1, na.value = "grey60") +
    scale_x_continuous(labels = percent) +
    labs(
      title = "Decision clarity and response time in forced-choice tasks",
      subtitle = "Clearer item-level preferences should usually be answered faster.",
      x = "Decision clarity |p(second) − .50|",
      y = "Median RT (ms)"
    ) +
    theme_block1()
  show_plot(clarity_plot)
  save_plot(clarity_plot, "fig_09_forced_choice_clarity_rt.png", width = 10, height = 6)
}

Show code
single_salience_rt <- responses_all %>%
  filter(subexperiment == "saliency_2_single_rating", valid_rt, !is.na(rating)) %>%
  mutate(concept = coalesce(target_code, stimulus_1_code, target_es, stimulus_1_es)) %>%
  group_by(concept) %>%
  summarise(
    n = n(),
    mean_salience = mean(rating, na.rm = TRUE),
    median_salience = median(rating, na.rm = TRUE),
    sd_salience = sd(rating, na.rm = TRUE),
    median_rt_ms = median(rt_ms, na.rm = TRUE),
    mean_log_rt = mean(log_rt, na.rm = TRUE),
    .groups = "drop"
  ) %>%
  filter(!is.na(concept), n >= 5)

if (nrow(single_salience_rt) >= 5) {
  salience_rt_linear <- lm(median_rt_ms ~ mean_salience, data = single_salience_rt)
  salience_rt_quadratic <- lm(median_rt_ms ~ mean_salience + I(mean_salience^2), data = single_salience_rt)
  salience_rt_comparison <- bind_rows(
    summarise_model(salience_rt_linear) %>% mutate(model = "linear"),
    summarise_model(salience_rt_quadratic) %>% mutate(model = "quadratic")
  ) %>%
    relocate(model)
  salience_rt_anova <- broom::tidy(anova(salience_rt_linear, salience_rt_quadratic))

  show_table(salience_rt_comparison, caption = "Table 24. Single-concept salience RT: linear versus quadratic model.")
  show_table(salience_rt_anova, caption = "Table 25. Incremental test for the quadratic salience-RT model.")
  write_table(single_salience_rt, "table_24a_single_salience_rt_by_concept.csv")
  write_table(salience_rt_comparison, "table_24b_single_salience_rt_linear_quadratic_models.csv")
  write_table(salience_rt_anova, "table_25_single_salience_rt_quadratic_increment.csv")
}


Table: Table 24. Single-concept salience RT: linear versus quadratic model.

|model     | r.squared| adj.r.squared|      AIC|      BIC|    sigma| statistic|   p.value| df| df.residual|
|:---------|---------:|-------------:|--------:|--------:|--------:|---------:|---------:|--:|-----------:|
|linear    | 0.0850761|     0.0632922| 607.8340| 613.1865| 231.2140|  3.905458| 0.0547217|  1|          42|
|quadratic | 0.6804160|     0.6648266| 563.5539| 570.6906| 138.3079| 43.645896| 0.0000000|  2|          41|


Table: Table 25. Incremental test for the quadratic salience-RT model.

|term                                              | df.residual|       rss| df|   sumsq| statistic| p.value|
|:-------------------------------------------------|-----------:|---------:|--:|-------:|---------:|-------:|
|median_rt_ms ~ mean_salience                      |          42| 2245317.1| NA|      NA|        NA|      NA|
|median_rt_ms ~ mean_salience + I(mean_salience^2) |          41|  784291.9|  1| 1461025|  76.37722|       0|
Show code
if (nrow(single_salience_rt) >= 5) {
  salience_rt_plot <- single_salience_rt %>%
    ggplot(aes(x = mean_salience, y = median_rt_ms)) +
    geom_point(size = 3, alpha = .82, colour = "#009E73") +
    geom_smooth(method = "lm", formula = y ~ x, se = FALSE, linetype = "dashed", linewidth = .85, colour = "grey35") +
    geom_smooth(method = "lm", formula = y ~ poly(x, 2, raw = TRUE), se = TRUE, linewidth = 1.05, colour = "#0072B2", fill = "#0072B2", alpha = .16) +
    labs(
      title = "Single-concept salience and response time",
      subtitle = "Dashed line = linear model; curved line = quadratic model.",
      x = "Mean Likert salience rating",
      y = "Median RT (ms)"
    ) +
    theme_block1()
  show_plot(salience_rt_plot)
  save_plot(salience_rt_plot, "fig_10_single_salience_rt_linear_quadratic.png", width = 10, height = 6)
}

Interpretation. RT analyses should move into the paper as process checks. If clearer choices are faster, then human judgments are not only correlated with item means but also show a decision-cost structure. The single-concept salience RT result is especially interesting if the quadratic model clearly improves the linear model: low-salience and high-salience countries may be processed quickly, whereas intermediate-salience countries require more evaluative integration.

13 1.10 What Block 1 establishes for the later computational analyses

Show code
block1_conclusions <- tibble(
  point = c(
    "Corpus alignment",
    "Participant coverage",
    "Item-level denominators",
    "Duplicate handling",
    "Response-time usability",
    "Contextuality/priming",
    "Forced-choice effects",
    "Likert order effects",
    "Diagnosticity",
    "Triangle/MTI"
  ),
  implication_for_later_blocks = c(
    "The 2013–2019 Spanish news corpus is temporally and culturally close to the 2020 Spanish sample; frequency remains a baseline, not a nuisance to ignore.",
    "Cross-task overlap must be reported because convergence across tasks may be within-sample rather than independent replication.",
    "Computational correlations should be read at the item/concept level, where denominators are often modest.",
    "Duplicate/repeated-condition decisions define the target human means used in Phase 4.",
    "RTs are usable in asymmetry, salience, and contextuality, but not necessarily in every diagnosticity table.",
    "Mediator, pseudoword, and congruent_priming are observed variables and should form their own contextuality block.",
    "H1/H2 forced-choice tasks provide the strongest directional human targets for containment-like metrics.",
    "If order effects are weak, they should be treated as boundary conditions rather than central support.",
    "Diagnosticity should be split into choice, rating, and contextual mechanisms.",
    "Triangle analyses should prioritize continuous residuals when binary violations are rare."
  )
)

show_table(block1_conclusions, caption = "Table 26. Block 1 conclusions and implications for later analyses.")


Table: Table 26. Block 1 conclusions and implications for later analyses.

|point                   |implication_for_later_blocks                                                                                                                             |
|:-----------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------|
|Corpus alignment        |The 2013–2019 Spanish news corpus is temporally and culturally close to the 2020 Spanish sample; frequency remains a baseline, not a nuisance to ignore. |
|Participant coverage    |Cross-task overlap must be reported because convergence across tasks may be within-sample rather than independent replication.                           |
|Item-level denominators |Computational correlations should be read at the item/concept level, where denominators are often modest.                                                |
|Duplicate handling      |Duplicate/repeated-condition decisions define the target human means used in Phase 4.                                                                    |
|Response-time usability |RTs are usable in asymmetry, salience, and contextuality, but not necessarily in every diagnosticity table.                                              |
|Contextuality/priming   |Mediator, pseudoword, and congruent_priming are observed variables and should form their own contextuality block.                                        |
|Forced-choice effects   |H1/H2 forced-choice tasks provide the strongest directional human targets for containment-like metrics.                                                  |
|Likert order effects    |If order effects are weak, they should be treated as boundary conditions rather than central support.                                                    |
|Diagnosticity           |Diagnosticity should be split into choice, rating, and contextual mechanisms.                                                                            |
|Triangle/MTI            |Triangle analyses should prioritize continuous residuals when binary violations are rare.                                                                |
Show code
write_table(block1_conclusions, "table_26_block1_conclusions.csv")

14 Exported files

Show code
exported_tables <- list.files(file.path(output_dir, "tables"), full.names = FALSE)
exported_figures <- list.files(file.path(output_dir, "figures"), full.names = FALSE)

export_summary <- tibble(
  output_type = c("tables", "figures"),
  n_files = c(length(exported_tables), length(exported_figures)),
  directory = c(file.path(output_dir, "tables"), file.path(output_dir, "figures"))
)

show_table(export_summary, caption = "Table 27. Exported Block 1 files.")


Table: Table 27. Exported Block 1 files.

|output_type | n_files|directory                                                                                                                     |
|:-----------|-------:|:-----------------------------------------------------------------------------------------------------------------------------|
|tables      |      27|/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Computational_data/block1_empirical_audit_outputs_v5/tables  |
|figures     |      10|/home/alex/Documentos/RESEARCH/QuantumNLP/Paper1_StructuralModel/Computational_data/block1_empirical_audit_outputs_v5/figures |

15 Session information

Show code
sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0

locale:
 [1] LC_CTYPE=es_ES.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=es_ES.UTF-8        LC_COLLATE=es_ES.UTF-8    
 [5] LC_MONETARY=es_ES.UTF-8    LC_MESSAGES=es_ES.UTF-8   
 [7] LC_PAPER=es_ES.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=es_ES.UTF-8 LC_IDENTIFICATION=C       

time zone: Europe/Madrid
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] fs_1.6.6        scales_1.4.0    knitr_1.51      broom_1.0.7    
 [5] vroom_1.6.5     lubridate_1.9.3 forcats_1.0.0   stringr_1.5.2  
 [9] dplyr_1.1.4     purrr_1.1.0     readr_2.1.6     tidyr_1.3.1    
[13] tibble_3.3.0    ggplot2_4.0.0   tidyverse_2.0.0

loaded via a namespace (and not attached):
 [1] generics_0.1.4     lattice_0.22-5     stringi_1.8.7      hms_1.1.3         
 [5] digest_0.6.37      magrittr_2.0.4     evaluate_1.0.5     grid_4.4.2        
 [9] timechange_0.3.0   RColorBrewer_1.1-3 fastmap_1.2.0      Matrix_1.7-1      
[13] jsonlite_2.0.0     backports_1.5.0    mgcv_1.9-3         textshaping_1.0.4 
[17] cli_3.6.5          rlang_1.1.6        crayon_1.5.3       splines_4.4.2     
[21] bit64_4.5.2        withr_3.0.2        yaml_2.3.10        tools_4.4.2       
[25] parallel_4.4.2     tzdb_0.4.0         vctrs_0.6.5        R6_2.6.1          
[29] lifecycle_1.0.4    htmlwidgets_1.6.4  bit_4.5.0          ragg_1.5.0        
[33] pkgconfig_2.0.3    pillar_1.11.1      gtable_0.3.6       glue_1.8.0        
[37] systemfonts_1.3.1  xfun_0.53          tidyselect_1.2.1   rstudioapi_0.17.1 
[41] farver_2.1.2       nlme_3.1-167       htmltools_0.5.8.1  rmarkdown_2.30    
[45] labeling_0.4.3     compiler_4.4.2     S7_0.2.0