Skip to contents

Synthetic upstream outputs

This article represents prepared outputs from gp3tools, gpbiometrics, and gp3sequences. The values are synthetic and shareable. The outcome is an experimentally assigned condition; the workflow does not infer emotion, stress, cognition, health, identity, intent, or another prohibited construct.

bundle <- simulate_gazepoint_research_handoffs(
  n_participants = 18L,
  n_stimuli = 4L,
  seed = 3401L
)
validation <- validate_gazepoint_research_bundle(bundle)
validation
#>  gp3ml research bundle validation: pass
#>                                check status
#>             required_sources_present   pass
#>                    all_handoffs_pass   pass
#>                combined_rows_present   pass
#>             assigned_outcome_present   pass
#>      no_prohibited_inference_columns   pass
#>  participant_generalization_declared   pass
#>                                detail
#>  gp3tools, gpbiometrics, gp3sequences
#>                  3/3 handoffs passed.
#>                     72 combined rows.
#>                    assigned_condition
#>                        None detected.
#>                      new_participants
plot(validation)

Assemble the modelling handoff

combined <- validation$bundle
data <- as_gp3ml_data(combined)

predictors <- c(
  "valid_gaze_prop",
  "fixation_count",
  "mean_fixation_ms",
  "gaze_dispersion",
  "eda_valid_prop",
  "hr_valid_prop",
  "ibi_valid_prop",
  "sequence_length",
  "unique_state_count",
  "transition_rate"
)

Declare task and provenance

task <- declare_gazepoint_task(
  data = data,
  outcome = "assigned_condition",
  purpose = "Discriminate an experimentally assigned condition using predeclared observed non-sensitive Gazepoint-derived predictors",
  task_type = "classification",
  unit_id = "trial_id",
  participant_id = "participant_id",
  stimulus_id = "stimulus_id",
  generalization_target = "new_participants",
  positive = "B",
  observed_outcome = TRUE,
  sensitive_outcome = FALSE
)

manifest <- create_gazepoint_feature_manifest(
  features = predictors,
  scientific_source = c(
    rep("gp3tools prepared gaze/fixation summaries", 4L),
    rep("gpbiometrics prepared signal-quality summaries", 3L),
    rep("gp3sequences prepared sequence summaries", 3L)
  ),
  source_table = c(
    rep("gp3tools handoff", 4L),
    rep("gpbiometrics handoff", 3L),
    rep("gp3sequences handoff", 3L)
  ),
  transformation = "Prepared upstream summary passed through a validated interoperability handoff",
  availability_stage = "during_exposure",
  prediction_time_available = TRUE,
  outcome_derived = FALSE,
  post_outcome = FALSE,
  identifier = FALSE,
  preprocessing_scope = "none",
  fold_local_required = FALSE,
  reviewer_notes = "Synthetic shareable cross-package validation workflow."
)

validate_gazepoint_feature_manifest(manifest)
#> <gazepoint_feature_manifest_validation>
#> Overall status: PASS
#> Features: 10
#> Non-passing checks: 0
#>  status n_checks
#>  pass   110     
#>  review   0     
#>  fail     0

Participant-grouped resampling

folds <- create_gazepoint_group_folds(
  data = data,
  outcome = task$outcome,
  predictors = predictors,
  feature_manifest = manifest,
  generalization_target = task$generalization_target,
  participant_id = task$participant_id,
  trial_id = task$unit_id,
  stimulus_id = task$stimulus_id,
  v = 3L,
  repeats = 1L,
  seed = 3401L
)

validate_gazepoint_group_folds(folds)
#> <gazepoint_group_folds_validation>
#> Overall status: PASS
#> Non-passing checks: 0
#>  status n_checks
#>  pass   10      
#>  review  0      
#>  fail    0
audit_gazepoint_group_folds(folds)
#> <gazepoint_group_folds_audit>
#> Overall status: PASS
#> Audited folds: 3
#> Non-passing checks: 0

Repository-aware evaluation when available

if ("evaluate_gazepoint_group_folds" %in% getNamespaceExports("gp3ml")) {
  evaluation <- evaluate_gazepoint_group_folds(
    folds,
    task,
    predictors,
    "glm",
    seed = 3401L
  )
  validate_gazepoint_resample_evaluation(evaluation)
  summarize_gazepoint_resample_performance(evaluation)
} else {
  diagnostics <- diagnose_gazepoint_group_folds(folds)
  validate_gazepoint_fold_diagnostics(diagnostics)
}
#> <gp3ml_resample_performance_summary>
#>   Aggregation: fold_distribution
#>   Generalization target: new_participants
#>             metric direction n_folds      mean    median         sd      lower
#>           accuracy  maximize       3 0.5694444 0.5833333 0.10485881 0.46458333
#>  balanced_accuracy  maximize       3 0.5972222 0.5937500 0.06777507 0.53437500
#>        sensitivity  maximize       3 0.5763889 0.5625000 0.16710013 0.42395833
#>        specificity  maximize       3 0.6180556 0.6250000 0.30214319 0.32812500
#>          precision  maximize       3 0.6454248 0.7500000 0.25670241 0.37279412
#>             recall  maximize       3 0.5763889 0.5625000 0.16710013 0.42395833
#>                 f1  maximize       3 0.5594709 0.5555556 0.08149914 0.48377778
#>                mcc  maximize       3 0.2088324 0.1767767 0.16242982 0.07041819
#>            roc_auc  maximize       3 0.6493056 0.6562500 0.08355007 0.56718750
#>             pr_auc  maximize       3 0.7052403 0.7887512 0.14604998 0.54920647
#>              brier  minimize       3 0.2899371 0.2474772 0.09244876 0.22740236
#>           log_loss  minimize       3 0.9148567 0.6878170 0.40068648 0.67967828
#>      upper
#>  0.6625000
#>  0.6630208
#>  0.7406250
#>  0.9020833
#>  0.8291667
#>  0.7406250
#>  0.6384921
#>  0.3744940
#>  0.7255208
#>  0.7902897
#>  0.3885627
#>  1.3430188

Any reported predictive metrics are row-level outcomes under a declared participant-grouped assessment design. They are not participant-level psychological measurements and do not support causal or latent-state claims.