# Libraries

library(tidyr)
library(dplyr)
library(ggplot2)
library(lubridate)
library(plotly)
library(table1)
library(REDCapR)
library(stringr)
library(gt)
library(glue)
library(tibble)

knitr::opts_chunk$set(message = FALSE, warning = FALSE)

# Functions: everything in R/ is sourced here

for (f in list.files("R", pattern = "\\.R$", full.names = TRUE)) source(f)

This R Markdown document is designed for data wrangling, visualization, and analysis across various SPIN studies. It provides a framework for examining study metrics tailored to specific SPIN studies as outlined be low. You can execute the entire document sequentially to prepare and analyze variables across these studies.

For clarity and visual appeal, code chunks are hidden, and only key results and plots are displayed. For detailed insights into the methodology or specific code implementations, please contact Hassan Abdulrasul ().

Recruitment

SPINR

SPASD

Study Progress

SPINR

MRI Progress

Group Participants with complete MRI Participants needed for target MRI scans required Recruitment target Target met (%)
ASD 41 9 18 50 82%
Control 36 4 8 40 90%
SSD 21 9 18 30 70%
TOTAL
22 44 120
Notes. Participants with complete MRI = tx2 MRIs completed. MRI scans required assumes 2 scans per needed participant.

MRI Completeness

Overall

MRI sequence completeness
Number of MRI scans = 136
Run Collected Not collected Partial % Collected
T1 136 0 0 100.0
Rest (run 1) 134 1 1 98.5
Rest (run 2) 114 22 0 83.8
EA (run 1) 135 1 0 99.3
EA (run 2) 134 1 1 98.5
EA (run 3) 133 3 0 97.8
Imitate/Observe (run 1) 123 13 0 90.4
Imitate/Observe (run 2) 125 11 0 91.9
DWI 128 8 0 94.1

Group

MRI sequence completeness — ASD
Number of MRI scans = 42
Run Collected Not collected Partial % Collected
T1 45 0 0 100.0
Rest (run 1) 45 0 0 100.0
Rest (run 2) 34 11 0 75.6
EA (run 1) 45 0 0 100.0
EA (run 2) 45 0 0 100.0
EA (run 3) 45 0 0 100.0
Imitate/Observe (run 1) 42 3 0 93.3
Imitate/Observe (run 2) 42 3 0 93.3
DWI 42 3 0 93.3
MRI sequence completeness — Control
Number of MRI scans = 42
Run Collected Not collected Partial % Collected
T1 52 0 0 100.0
Rest (run 1) 51 0 1 98.1
Rest (run 2) 51 1 0 98.1
EA (run 1) 52 0 0 100.0
EA (run 2) 52 0 0 100.0
EA (run 3) 51 1 0 98.1
Imitate/Observe (run 1) 52 0 0 100.0
Imitate/Observe (run 2) 52 0 0 100.0
DWI 52 0 0 100.0
MRI sequence completeness — SSD
Number of MRI scans = 27
Run Collected Not collected Partial % Collected
T1 39 0 0 100.0
Rest (run 1) 38 1 0 97.4
Rest (run 2) 29 10 0 74.4
EA (run 1) 38 1 0 97.4
EA (run 2) 37 1 1 94.9
EA (run 3) 37 2 0 94.9
Imitate/Observe (run 1) 29 10 0 74.4
Imitate/Observe (run 2) 31 8 0 79.5
DWI 34 5 0 87.2

Assessment Completion Status SPINR

plot to see the completion status between SPINR and SPASD

SPASD Tx2

plot_spinr_completion(SPINR_assessment_df, "SPASD", forms, "SPIN-R : Assessment Completion Status (SPASD Group)")

SPINS Tx2

plot_spinr_completion(SPINR_assessment_df, "SPINS", forms, "SPIN-R : Assessment Completion Status (SPINS Group)")

Control (SPASD/SPINS Tx2)

plot_spinr_completion(SPINR_assessment_df, "Control", forms, "SPIN-R : Assessment Completion Status (Control Group)")

SSD (Tx1)

plot_spinr_completion(SPINR_assessment_df, "SSD w T1", forms, "SPIN-R : Assessment Completion Status (SSD w Tx1)")

SSD (Tx2)

plot_spinr_completion(SPINR_assessment_df, "SSD w T1 (tx2)", forms, "SPIN-R : Assessment Completion Status (SSD w Tx2)")

Control (Tx1)

plot_spinr_completion(SPINR_assessment_df, "Control w T1", forms, "SPIN-R : Assessment Completion Status (Control w Tx1)")

Control (Tx2)

plot_spinr_completion(SPINR_assessment_df, "Control w T1 (tx2)", forms, "SPIN-R : Assessment Completion Status (Control w Tx2)")

ASD (Tx1)

plot_spinr_completion(SPINR_assessment_df, "ASD w T1", forms, "SPIN-R : Assessment Completion Status (ASD w Tx1)")

ASD (Tx2)

plot_spinr_completion(SPINR_assessment_df, "ASD w T1 (tx2)", forms, "SPIN-R : Assessment Completion Status (ASD w Tx2)")

SPASD (Controls)

plot_spasd_completion(SPASD_assessment_df, "Control", forms_spasd,
                      title  = "SPASD : Assessment Completion Status (Control Group)",
                      width  = 1100)

SPASD (Case)

plot_spasd_completion(SPASD_assessment_df, "ASD", forms_spasd,
                      title  = "SPASD : Assessment Completion Status (ASD Group)",
                      height = 1300)

Structured Clinical Interview for DSM Disorders (SCID)

Bars show the number of participants in each group with each SCID-5 diagnosis. A participant with several diagnoses is counted once for each.

Current: the disorder meets symptomatic diagnostic criteria within the time window the SCID-5 specifies for it. That is the past month for most disorders, and up to the past 2 years for some (e.g. persistent depressive disorder, cyclothymic disorder). In SPIN-R this is the disorder’s “Meets Symptomatic Dx. Crit” rating; in SPASD it is the past-period rating recorded for each diagnosis.

Lifetime: the disorder has ever met diagnostic criteria. In SPIN-R this is a lifetime prevalence rating of “Threshold” (disorders with no lifetime rating use their current rating). In SPASD it is any diagnosis recorded as meeting threshold criteria.

No diagnosis: no clinical disorder recorded. No current / lifetime diagnosis: at least one disorder recorded, but none meeting that tab’s definition. SPIN-R tabs are split by timepoint (tx1 = baseline, tx2 = follow-up); participants without a SCID at that timepoint are not shown.

SPINR SCID (Current)

tx1

SPINR_scid_current %>% filter(timepoint == 1) %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPIN-R Current SCID Diagnoses by Group (tx1)")

tx2

SPINR_scid_current %>% filter(timepoint == 2) %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPIN-R Current SCID Diagnoses by Group (tx2)")

SPASD SCID (Current)

SPASD_scid_current %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPASD Current SCID Diagnoses by Group")

SPINR SCID (Lifetime)

tx1

SPINR_scid_lifetime %>% filter(timepoint == 1) %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPIN-R Lifetime SCID Diagnoses by Group (tx1)")

tx2

SPINR_scid_lifetime %>% filter(timepoint == 2) %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPIN-R Lifetime SCID Diagnoses by Group (tx2)")

SPASD SCID (Lifetime)

SPASD_scid_lifetime %>% count_scid_diagnoses() %>%
  plot_scid_diagnoses("SPASD Lifetime SCID Diagnoses by Group")

Descriptive Statistics

SPINR

Everyone enrolled in SPIN-R, one row per participant, at their first SPIN-R visit. Scores by visit are in the Longitudinal Cohort section.

table1_by_group(SPINR_sample, c(
  origin                  = "Origin",
  visits                  = "Visits completed",
  demo_age_study_entry    = "Age at SPIN-R entry (years)",
  sex                     = "Sex",
  race                    = "Race",
  demo_highest_grade_self = "Education (years)"
))
ASD
(N=44)
Control
(N=45)
SSD
(N=34)
Overall
(N=123)
Origin
Rolled over from SPASD 39 (89 %) 19 (42 %) 0 (0 %) 58 (47 %)
Rolled over from SPINS 0 (0 %) 9 (20 %) 9 (26 %) 18 (15 %)
New SPIN-R recruit 5 (11 %) 17 (38 %) 24 (71 %) 46 (37 %)
Rolled over (baseline not found) 0 (0 %) 0 (0 %) 1 (3 %) 1 (1 %)
Visits completed
Baseline + follow-up 43 (98 %) 41 (91 %) 21 (62 %) 105 (85 %)
Baseline only 1 (2 %) 4 (9 %) 12 (35 %) 17 (14 %)
Follow-up only 0 (0 %) 0 (0 %) 1 (3 %) 1 (1 %)
Age at SPIN-R entry (years)
Mean (SD) 25 (± 5.4) 27 (± 5.6) 27 (± 5.0) 26 (± 5.4)
Median [Min, Max] 24 [16, 36] 28 [18, 39] 26 [17, 39] 26 [16, 39]
Missing 0 (0%) 1 (2.2%) 0 (0%) 1 (0.8%)
Sex
Female 21 (48 %) 19 (42 %) 13 (38 %) 53 (43 %)
Male 23 (52 %) 25 (56 %) 21 (62 %) 69 (56 %)
Intersex 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Prefer not to Answer 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Missing 0 (0%) 1 (2.2%) 0 (0%) 1 (0.8%)
Race
Asian - East 5 (11 %) 15 (33 %) 4 (12 %) 24 (20 %)
Asian - South Asia 5 (11 %) 10 (22 %) 2 (6 %) 17 (14 %)
Asian - South East 3 (7 %) 1 (2 %) 3 (9 %) 7 (6 %)
Black - African American 1 (2 %) 1 (2 %) 2 (6 %) 4 (3 %)
Black - Caribbean 1 (2 %) 1 (2 %) 4 (12 %) 6 (5 %)
Latin American 6 (14 %) 1 (2 %) 1 (3 %) 8 (7 %)
Middle Eastern 1 (2 %) 2 (4 %) 3 (9 %) 6 (5 %)
South Asian - Caribbean 1 (2 %) 0 (0 %) 0 (0 %) 1 (1 %)
White - European 6 (14 %) 5 (11 %) 6 (18 %) 17 (14 %)
White - North American 15 (34 %) 4 (9 %) 6 (18 %) 25 (20 %)
Black - African 0 (0 %) 4 (9 %) 3 (9 %) 7 (6 %)
Missing 0 (0%) 1 (2.2%) 0 (0%) 1 (0.8%)
Education (years)
Mean (SD) 14 (± 2.0) 17 (± 2.0) 15 (± 1.9) 15 (± 2.4)
Median [Min, Max] 14 [10, 19] 16 [13, 20] 15 [11, 20] 15 [10, 20]
Missing 0 (0%) 1 (2.2%) 0 (0%) 1 (0.8%)

SPASD

table1_by_group(SPASD_demo, c(
  demo_age_study_entry    = "Age (years)",
  sex                     = "Sex",
  race                    = "Race",
  demo_highest_grade_self = "Education (years)",
  iq_range                = "IQ Range",
  np_composite_tscore     = "MATRICS"
))
ASD
(N=116)
Control
(N=43)
Overall
(N=159)
Age (years)
Mean (SD) 21 (± 4.3) 26 (± 5.0) 22 (± 4.9)
Median [Min, Max] 20 [15, 35] 26 [17, 35] 21 [15, 35]
Missing 0 (0%) 1 (2.3%) 1 (0.6%)
Sex
Female 49 (42 %) 18 (42 %) 67 (42 %)
Male 67 (58 %) 24 (56 %) 91 (57 %)
Intersex 0 (0 %) 0 (0 %) 0 (0 %)
Missing 0 (0%) 1 (2.3%) 1 (0.6%)
Race
Asian 16 (14 %) 19 (44 %) 35 (22 %)
Black or African American 4 (3 %) 7 (16 %) 11 (7 %)
More than one race 9 (8 %) 2 (5 %) 11 (7 %)
Not Specified 0 (0 %) 1 (2 %) 1 (1 %)
Other 6 (5 %) 1 (2 %) 7 (4 %)
White 81 (70 %) 13 (30 %) 94 (59 %)
Education (years)
Mean (SD) 13 (± 2.2) 16 (± 2.1) 14 (± 2.5)
Median [Min, Max] 12 [9.0, 20] 16 [11, 20] 13 [9.0, 20]
Missing 0 (0%) 1 (2.3%) 1 (0.6%)
IQ Range
70-84 2 (2 %) 1 (2 %) 3 (2 %)
85-99 15 (13 %) 5 (12 %) 20 (13 %)
100-114 36 (31 %) 11 (26 %) 47 (30 %)
115-129 41 (35 %) 17 (40 %) 58 (36 %)
130-144 19 (16 %) 6 (14 %) 25 (16 %)
145-160 1 (1 %) 0 (0 %) 1 (1 %)
Missing 2 (1.7%) 3 (7.0%) 5 (3.1%)
MATRICS
Mean (SD) 41 (± 11) 51 (± 10) 43 (± 12)
Median [Min, Max] 42 [-3.0, 59] 53 [16, 75] 44 [-3.0, 75]
Missing 7 (6.0%) 5 (11.6%) 12 (7.5%)

Distributions

SPINR (AGE)

plot_group_histogram(SPINR_demo_unique, "demo_age_study_entry", c("ASD", "SSD", "Control"),
                     xbins   = list(start = 15, end = 36, size = 1),
                     title   = "Age Distribution by Group (SPINR)",
                     x_title = "Age (years)")

SPASD (AGE)

plot_group_histogram(SPASD_demo, "demo_age_study_entry", c("ASD", "Control"),
                     xbins   = list(start = 15, end = 36, size = 1),
                     title   = "Age Distribution by Group (SPASD)",
                     x_title = "Age (years)")

SPASD (IQ)

plot_group_histogram(SPASD_demo, "iq", c("ASD", "Control"),
                     xbins   = list(start = 70, end = 150, size = 10),
                     title   = "IQ Distribution by Group (SPASD)",
                     x_title = "Estimated IQ")

Social cognition

Score plots show the SPIN-R longitudinal cohort (see Longitudinal Cohort), one point per participant: Baseline is each participant’s first visit (in SPASD, SPINS or SPIN-R) and Follow-up their SPIN-R follow-up. The two tabs are different samples, so differences between them are not change over time; paired change is in Longitudinal Plots MATRICS. Hover over a point to see which study the score came from.

Reading Mind Through the Eyes Test (RMET)

The Reading the Mind in the Eyes Test (RMET) is a widely used measure of social cognition, specifically targeting the ability to infer mental states, an important aspect of Theory of Mind.

How It Works: Participants are shown 36 photographs of the eye region of faces. For each photograph, they must choose the word that best describes what the person in the photograph is thinking or feeling. Four options are provided for each photograph, such as “worried,” “playful,” “jealous,” or “relaxed.”

What It Measures: RMET evaluates subtle social sensitivity and the capacity to read nonverbal social cues.

Scoring:

Higher Scores: Indicate greater social awareness and better ability to interpret others’ mental states. Lower Scores: Suggest challenges in social sensitivity, often observed in conditions like autism spectrum disorder or social anxiety.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), c(rmet_total = "RMET Total"),
                   "Distribution of RMET Scores Across Groups (Baseline)")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), c(rmet_total = "RMET Total"),
                   "Distribution of RMET Scores Across Groups (Follow-up)")

Interpersonal reactivity Index (IRI)

The Interpersonal Reactivity Index (IRI) is a multidimensional measure of empathy. It assesses both emotional and cognitive aspects of empathy, capturing how individuals understand and respond to the emotions and experiences of others.

Subscales of the IRI The IRI comprises four subscales, each targeting a distinct aspect of empathy:

Perspective Taking (PT): Reflects the cognitive aspect of empathy. Measures the ability to adopt another person’s point of view. Example: “I sometimes try to understand my friends better by imagining how things look from their perspective.”

Empathic Concern (EC): Reflects the emotional aspect of empathy. Measures feelings of compassion and concern for others. Example: “I often have tender, concerned feelings for people less fortunate than me.”

Personal Distress (PD): Measures self-oriented feelings of discomfort or anxiety in response to others’ distress. Example: “Being in a tense emotional situation scares me.”

Fantasy (FS): Assesses the tendency to imaginatively identify with fictional characters in books, movies, or stories. Example: “After watching a movie, I feel as though I am one of the characters.” Scoring and Interpretation

Higher Scores: On PT and EC: Indicate greater cognitive and emotional empathy, respectively. On FS: Suggest a strong imaginative capacity and engagement with fictional scenarios. On PD: May indicate susceptibility to personal emotional distress in challenging situations.

Lower Scores: On PT and EC: Suggest difficulty in understanding or feeling for others. On FS: Indicates less imaginative identification with fictional contexts. On PD: Suggest resilience to personal emotional distress in tense situations.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), iri_measures,
                   "Distribution of IRI Scores Across Groups (Baseline)", x_title = "IRI Subscale")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), iri_measures,
                   "Distribution of IRI Scores Across Groups (Follow-up)", x_title = "IRI Subscale")

The Awareness of Social Inference Test-Revised (TASIT-R)

The Awareness of Social Inference Test-Revised (TASIT-R) is a standardized assessment designed to evaluate social cognition, specifically focusing on the ability to recognize and interpret social cues in real-world scenarios. It is widely used to study social perception, inference, and pragmatic communication.

Structure of TASIT-R TASIT-R is divided into three main sections, each assessing a different aspect of social cognition:

Emotion Evaluation: Participants watch brief video clips of actors portraying various basic emotions (e.g., happiness, sadness, anger, fear) through tone, facial expressions, and body language. Measures the ability to accurately identify emotions in social contexts.

Social Inference (Minimal): Involves understanding implied meanings and subtle cues in simple, straightforward social scenarios. Measures the ability to infer others’ intentions and emotions based on situational context without relying on complex reasoning.

Social Inference (Enriched): Participants interpret more complex scenarios involving sarcasm, lies, or double meanings. Requires higher-order reasoning, such as distinguishing between literal and implied meanings or recognizing deception. Scoring and Interpretation

Higher Scores: Reflect greater accuracy in recognizing emotions, understanding social cues, and interpreting complex social scenarios.

Lower Scores: Indicate difficulties in social inference, emotion recognition, and pragmatic understanding, often seen in individuals with social communication deficits, traumatic brain injury, or neurodevelopmental disorders.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), spinr_tasit_totals,
                   "Distribution of TASIT Scores Across Groups (Baseline)", x_title = "TASIT Assessment", boxpoints = FALSE, tickangle = 45)

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), spinr_tasit_totals,
                   "Distribution of TASIT Scores Across Groups (Follow-up)", x_title = "TASIT Assessment", boxpoints = FALSE, tickangle = 45)

Penn Emotion Recognition Task-40 (ER-40)

The Penn Emotion Recognition Task-40 (ER-40) is a standardized test designed to assess the ability to recognize and identify basic emotions from facial expressions. It is commonly used in research and clinical settings to evaluate emotional perception, a key component of social cognition.

Structure of the ER-40

Stimuli: The task includes 40 grayscale photographs of faces, each displaying one of five basic emotions:

Happy Sad Angry Fearful Neutral

Procedure: Participants are presented with each photograph and asked to select the emotion that best matches the facial expression from the provided options. Scoring and Interpretation

Accuracy: Higher scores reflect a better ability to correctly identify emotional expressions. Lower scores may indicate challenges in emotion recognition, often linked to conditions affecting social cognition, such as autism spectrum disorder, schizophrenia, or traumatic brain injury.

Emotion-Specific Patterns: Some individuals may struggle more with recognizing specific emotions (e.g., fear or anger), offering insights into specific deficits in emotional processing.

Response Time: Refers to the amount of time it takes for participants to make a decision and select an emotion label for each facial expression.

Baseline (columns)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), spinr_er40_emotions,
                   "Distribution of ER-40 Scores Across Groups (Baseline)", x_title = "ER-40 Subscale")

Follow-up (columns)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), spinr_er40_emotions,
                   "Distribution of ER-40 Scores Across Groups (Follow-up)", x_title = "ER-40 Subscale")

Baseline (Correct Responses)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), c(er40_cr = "Correct Responses"),
                   "ER-40 Correct Responses Across Groups (Baseline)", x_title = "ER-40 Subscale")

Follow-up (Correct Responses)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), c(er40_cr = "Correct Responses"),
                   "ER-40 Correct Responses Across Groups (Follow-up)", x_title = "ER-40 Subscale")

Baseline (Response time)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), c(er40_crt = "Response time"),
                   "ER-40 Response Time Across Groups (Baseline)", x_title = "ER-40 Subscale")

Follow-up (Response time)

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), c(er40_crt = "Response time"),
                   "ER-40 Response Time Across Groups (Follow-up)", x_title = "ER-40 Subscale")

Neuropsych Domain Distributions (MATRICS)

The MATRICS Consensus Cognitive Battery is a standardized tool used to evaluate cognitive functioning across multiple domains, specifically designed for use in psychiatric and neurological research. It provides T-scores for each cognitive domain, which are standardized scores used to compare an individual’s performance to a normative reference group.

50: Average performance. Above 50: Better-than-average performance. Below 50: Worse-than-average performance.

As above, Baseline and Follow-up show the SPIN-R longitudinal cohort at each visit, one point per participant.

Attention/Vigilance Domain

Evaluates sustained attention and ability to maintain focus over time. Tasks may include continuous performance tests.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_att_vigilance"],
                   "Attention/Vigilance Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_att_vigilance"],
                   "Attention/Vigilance Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Working Memory Domain

Measures the ability to temporarily store and manipulate information. Includes verbal and visual working memory tasks.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_work_mem"],
                   "Working Memory Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_work_mem"],
                   "Working Memory Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Verbal Learning Domain

Assesses learning and recall of verbal information. Tasks often involve memorizing and recalling word list

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_verbal_learning"],
                   "Verbal Learning Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_verbal_learning"],
                   "Verbal Learning Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Visual Learning Domain

Focuses on the ability to learn and recall visual patterns or images.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_visual_learning"],
                   "Visual Learning Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_visual_learning"],
                   "Visual Learning Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Reasoning/PS Domain

Measures higher-order cognitive abilities, including abstract reasoning and decision-making.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_reasoning_ps"],
                   "Reasoning/PS Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_reasoning_ps"],
                   "Reasoning/PS Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Social Cognition Domain

Evaluates understanding and interpretation of social cues. Tasks often involve identifying emotions or social intentions.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_social_cog"],
                   "Social Cognition Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_social_cog"],
                   "Social Cognition Domain Scores Across Groups (Follow-up)", x_title = "Groups")

Processing Speed Domain

Measures rapid information processing and reaction time. Associated with tasks like symbol coding or category fluency.

Baseline

plot_group_boxplot(filter(SPINR_cohort, timepoint == 1), np_domains["np_domain_tscore_process_speed"],
                   "Processing Speed Domain Scores Across Groups (Baseline)", x_title = "Groups")

Follow-up

plot_group_boxplot(filter(SPINR_cohort, timepoint == 2), np_domains["np_domain_tscore_process_speed"],
                   "Processing Speed Domain Scores Across Groups (Follow-up)", x_title = "Groups")

MRI metrics

T1-weighted (T1w) Structural MRI

CNR (Contrast-to-Noise Ratio): Reflects GM/WM contrast.
Higher is better; typical range: 1.5–2.5.

SNR (Signal-to-Noise Ratio): Overall image clarity relative to background noise.
Typical range: 25–40.

INU Median (Bias Field Inhomogeneity): Measures intensity non-uniformity; closer to 1 is ideal.
Typical range: 0.95–1.1.

CJV (Coefficient of Joint Variation): GM/WM intensity overlap; lower is better.
Typical range: 0.5–0.9.


BOLD fMRI

FD Mean (Framewise Displacement): Average head motion per volume.
<0.2 mm is ideal; 0.1–0.3 mm is typical.

FD Num: Number of volumes with FD > 0.2 mm.
Lower is better; <20 common.

tSNR (Temporal SNR): Stability of voxel signal across time.
Higher is better; typical range: 50–100.

DVARS (Standardized): Change in signal between volumes; higher = more motion.
Values near 1 are typical.


T1w Image

BOLD (Rest)

Longitudinal Cohort

Everyone enrolled in SPIN-R, at their actual baseline and follow-up visits. Participants rolled over from SPASD or SPINS had their baseline in that study and their follow-up in SPIN-R; participants newly recruited to SPIN-R had both visits in SPIN-R. The follow-up table shows who is available for longitudinal analyses. Race is collapsed into the SPASD / SPINS categories so the studies can be combined; age is age at the visit.

Baseline

table1_by_group(filter(SPINR_cohort, timepoint == 1), c(
  origin              = "Origin",
  age                 = "Age at visit (years)",
  sex                 = "Sex",
  race                = "Race",
  education           = "Education (years)",
  np_composite_tscore = "MATRICS composite"
))
ASD
(N=44)
Control
(N=45)
SSD
(N=33)
Overall
(N=122)
Origin
Rolled over from SPASD 39 (89 %) 19 (42 %) 0 (0 %) 58 (48 %)
Rolled over from SPINS 0 (0 %) 9 (20 %) 9 (27 %) 18 (15 %)
New SPIN-R recruit 5 (11 %) 17 (38 %) 24 (73 %) 46 (38 %)
Rolled over (baseline not found) 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Age at visit (years)
Mean (SD) 23 (± 5.4) 26 (± 5.2) 26 (± 4.9) 25 (± 5.4)
Median [Min, Max] 22 [16, 36] 26 [18, 37] 25 [17, 35] 24 [16, 37]
Sex
Female 21 (48 %) 19 (42 %) 13 (39 %) 53 (43 %)
Male 23 (52 %) 26 (58 %) 20 (61 %) 69 (57 %)
Intersex 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Prefer not to Answer 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Race
Asian 10 (23 %) 25 (56 %) 9 (27 %) 44 (36 %)
Black or African American 1 (2 %) 5 (11 %) 9 (27 %) 15 (12 %)
More than one race 6 (14 %) 2 (4 %) 2 (6 %) 10 (8 %)
Other 4 (9 %) 1 (2 %) 2 (6 %) 7 (6 %)
White 23 (52 %) 12 (27 %) 11 (33 %) 46 (38 %)
Education (years)
Mean (SD) 13 (± 2.3) 16 (± 2.1) 14 (± 1.9) 15 (± 2.4)
Median [Min, Max] 12 [10, 19] 16 [12, 20] 14 [10, 20] 15 [10, 20]
MATRICS composite
Mean (SD) 40 (± 14) 52 (± 9.2) 39 (± 11) 45 (± 13)
Median [Min, Max] 42 [-3.0, 59] 53 [33, 75] 42 [18, 55] 47 [-3.0, 75]
Missing 4 (9.1%) 3 (6.7%) 9 (27.3%) 16 (13.1%)

Follow-up

table1_by_group(filter(SPINR_cohort, timepoint == 2), c(
  origin                     = "Origin",
  age                        = "Age at visit (years)",
  sex                        = "Sex",
  race                       = "Race",
  education                  = "Education (years)",
  np_composite_tscore        = "MATRICS composite",
  time_since_baseline_years  = "Time since baseline (years)",
  time_since_baseline_months = "Time since baseline (months)",
  time_since_baseline_days   = "Time since baseline (days)"
))
ASD
(N=43)
Control
(N=41)
SSD
(N=22)
Overall
(N=106)
Origin
Rolled over from SPASD 39 (91 %) 19 (46 %) 0 (0 %) 58 (55 %)
Rolled over from SPINS 0 (0 %) 9 (22 %) 9 (41 %) 18 (17 %)
New SPIN-R recruit 4 (9 %) 13 (32 %) 12 (55 %) 29 (27 %)
Rolled over (baseline not found) 0 (0 %) 0 (0 %) 1 (5 %) 1 (1 %)
Age at visit (years)
Mean (SD) 25 (± 5.0) 29 (± 5.6) 27 (± 5.1) 27 (± 5.4)
Median [Min, Max] 24 [18, 36] 30 [20, 39] 26 [17, 40] 26 [17, 40]
Missing 4 (9.3%) 12 (29.3%) 2 (9.1%) 18 (17.0%)
Sex
Female 20 (47 %) 16 (39 %) 7 (32 %) 43 (41 %)
Male 23 (53 %) 25 (61 %) 15 (68 %) 63 (59 %)
Intersex 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Prefer not to Answer 0 (0 %) 0 (0 %) 0 (0 %) 0 (0 %)
Race
Asian 9 (21 %) 12 (29 %) 5 (23 %) 26 (25 %)
Black or African American 1 (2 %) 4 (10 %) 4 (18 %) 9 (8 %)
More than one race 6 (14 %) 2 (5 %) 2 (9 %) 10 (9 %)
Not Specified 4 (9 %) 14 (34 %) 3 (14 %) 21 (20 %)
Other 4 (9 %) 1 (2 %) 1 (5 %) 6 (6 %)
White 19 (44 %) 8 (20 %) 7 (32 %) 34 (32 %)
Education (years)
Mean (SD) 14 (± 2.1) 17 (± 2.0) 15 (± 1.9) 15 (± 2.4)
Median [Min, Max] 14 [10, 19] 16 [13, 20] 15 [11, 20] 15 [10, 20]
MATRICS composite
Mean (SD) 47 (± 9.9) 59 (± 9.2) 43 (± 10) 50 (± 12)
Median [Min, Max] 48 [25, 65] 58 [41, 77] 44 [22, 61] 50 [22, 77]
Missing 5 (11.6%) 15 (36.6%) 8 (36.4%) 28 (26.4%)
Time since baseline (years)
Mean (SD) 2.1 (± 1.2) 2.1 (± 1.8) 2.9 (± 2.1) 2.3 (± 1.7)
Median [Min, Max] 1.8 [0.51, 5.4] 1.2 [0.51, 6.5] 2.9 [0.58, 6.2] 1.7 [0.51, 6.5]
Missing 6 (14.0%) 15 (36.6%) 5 (22.7%) 26 (24.5%)
Time since baseline (months)
Mean (SD) 25 (± 15) 25 (± 21) 35 (± 25) 27 (± 20)
Median [Min, Max] 22 [6.1, 65] 14 [6.1, 77] 35 [7.0, 75] 20 [6.1, 77]
Missing 6 (14.0%) 15 (36.6%) 5 (22.7%) 26 (24.5%)
Time since baseline (days)
Mean (SD) 760 (± 450) 750 (± 650) 1100 (± 770) 820 (± 600)
Median [Min, Max] 660 [190, 2000] 440 [190, 2400] 1100 [210, 2300] 620 [190, 2400]
Missing 6 (14.0%) 15 (36.6%) 5 (22.7%) 26 (24.5%)

Time Between Visits

plot_time_between_visits(SPINR_cohort)

Longitudinal Plots MATRICS

Participants with MATRICS (processing speed and attention/vigilance) at both baseline and follow-up, including new SPIN-R recruits who have completed their follow-up.

Processing Speed Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_process_speed",
                       title = "<b>Processing Speed Domain T-Scores Over Time</b>")$plot

Attention/Vigilance Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_att_vigilance",
                       title = "<b>Attention/Vigilance Domain T-Scores Over Time</b>")$plot

Work Memory Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_work_mem",
                       title = "<b>Working Memory Domain T-Scores Over Time</b>")$plot

Verbal Learning Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_verbal_learning",
                       title = "<b>Verbal Learning Domain T-Scores Over Time</b>")$plot

Visual Learning Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_visual_learning",
                       title = "<b>Visual Learning Domain T-Scores Over Time</b>")$plot

Reasoning/Problem Solving Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_reasoning_ps",
                       title = "<b>Reasoning/Problem Solving Domain T-Scores Over Time</b>")$plot

Social Cognition Domain T-Scores Over Time

make_longitudinal_plot(SPINR_longitudinal, "np_domain_tscore_social_cog",
                       title = "<b>Social Cognition Domain T-Scores Over Time</b>")$plot