Validate a new dataset¶
Validation sequence¶
A compact validation scaffold¶
import gpbiometricspy as gp
# Replace `dat` with your standardized research table.
activity = gp.audit_gazepoint_signal_activity(
dat,
signal_cols=["GSR_US", "HR", "IBI", "LPMM"],
group_cols=["participant_id"],
)
resets = gp.audit_gazepoint_time_resets(
dat,
time_col="TIME",
group_cols=["participant_id"],
)
missing = gp.plot_gazepoint_missingness(
dat,
cols=["GSR_US", "HR", "IBI", "LPMM"],
time_col="TIME",
)
Adapt the column names to your export rather than renaming a scientifically different quantity merely to satisfy an example.
What to verify by modality¶
| Modality | Minimum evidence before analysis | Common mistake to avoid |
|---|---|---|
| EDA / GSR | units, range, missingness, flatlines, sampling/timing, decomposition settings | treating conductance changes as direct emotion labels |
| PPG waveform | observed sampling, waveform quality, accepted/rejected peaks, interval construction | computing HRV from a sampled HR series |
| RR / NN / IBI | source identity, units, cleaning status, interval plausibility | silently calling all intervals NN-HRV |
| Pupil | eye/channel identity, validity, missingness/blinks, units, baseline design | interpreting pupil change without luminance/task context |
| Gaze / fixation | coordinate space, validity, timebase, AOI definitions, event detector source | mixing vendor fixations and sample-derived events without provenance |
| TTL / events | edge definition, event identity, duplicates, event coverage, clock relation | assuming event and signal clocks are identical because labels match |
| External streams | clock identity, observed rate, offset/drift evidence, overlap | resampling before documenting original timing evidence |
Design audit before modelling¶
When participant, trial, condition, or item structure matters, inspect it explicitly before fitting a model.
design = gp.audit_gazepoint_experiment_design(
dat,
participant_col="participant_id",
trial_col="MEDIA_ID",
condition_col="interface_complexity",
)
fig = gp.plot_gazepoint_design_coverage(design)
The generated documentation includes a design-coverage example in the Plot gallery.
QC findings are not automatic exclusions¶
Validation can produce warnings, failed checks, dropout flags, invalid samples, missing events, or sparse design cells. Preserve those findings before deciding what they mean for a specific analysis. A local channel problem does not automatically justify participant-wide removal, and a warning label should not silently change the denominator.
Use the QC and exclusion decision ledger to separate four things explicitly: the observed QC evidence, the decision criterion, the reviewed RETAIN / EXCLUDE / REVIEW state, and the before/after denominator consequence. Its checked synthetic example deliberately creates known QC issues and confirms that zero automatic exclusions are applied.
Fail-closed decisions are valid outcomes¶
Validation is not a ritual that every dataset automatically passes. Stop or narrow the analysis when:
- the recorded timebase cannot support the requested event precision;
- source identity is insufficient to distinguish HRV, PRV, sampled HR, or vendor metrics;
- required conditions or events are systematically absent;
- grouping or item structure is too sparse for the intended model;
- preprocessing would require reconstructing information that was never sampled;
- the only way forward is to silently change units, labels, or scientific meaning.
Evidence to retain¶
- original filename/source metadata;
- package and Python versions;
- schema/column map;
- observed timing audit;
- modality-specific QC tables;
- design/event coverage tables;
- generated QC figures;
- explicit warnings and accepted exceptions;
- exclusion-decision ledger with scope and rationale where exclusions are considered or applied;
- analysis-specific before/after denominator audit;
- downstream preprocessing settings.
Next
If the dataset contains multiple clocks or streams, continue with Timebase and alignment. If QC findings require inclusion/exclusion decisions, continue with the QC and exclusion decision ledger. Otherwise choose the appropriate domain example.