Files
Experiments DB Dev 77b631bcac feat(matlab): mergeNaive grouping (control=A2+Naive, tDCS=B2+Right) + GLM/power
Adds cfg.mergeNaive and scenario/paper/phase/power support. This pooled grouping
is the closest replication of the paper's full pattern: paper LME interaction
F(1)=7.30, p=0.008 (paper 7.12/0.008), stim main n.s. (p=0.21 = equal on Day 1),
strong day effect; the overall tDCS advantage is significant at the cluster-honest
per-animal level (rate p=0.003) and well powered. Adds a grouping test. Suite 38/38.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 12:50:35 -04:00

65 lines
2.7 KiB
Matlab

function cfg = tdcs_config()
%TDCS_CONFIG Curated group map and merge maps for the tDCS reaching study.
% CFG = TDCS_CONFIG() returns a struct with:
% .groups containers.Map, subject name (char) -> curated group name
% (char), for the 12 curated animals only. All other
% animals present in the raw export are not in this map
% and must be dropped by callers.
% .ref reference group used to code the GLME group factor,
% 'Electrode-Box-B2'.
% .mergeA2 containers.Map collapsing the two UNKNOWN conditions
% toward the weaker anchor: Electrode-Box-A ->
% Electrode-Box-A2, Right-Electrode -> Electrode-Box-B2.
% .mergeB2 containers.Map collapsing both UNKNOWN conditions onto
% the stronger anchor: Electrode-Box-A -> Electrode-Box-B2,
% Right-Electrode -> Electrode-Box-B2.
% .anchorLow 'Electrode-Box-A2', the weaker of the two known anchors.
% .anchorHigh 'Electrode-Box-B2', the stronger known anchor (== ref).
% .unknowns cell array of the two ungrouped conditions that get
% classified against the two anchors: {'Electrode-Box-A',
% 'Right-Electrode'}.
%
% See docs/superpowers/plans/2026-07-20-matlab-tdcs-analysis.md (Global
% Constraints) for the source of these values.
% Curated 12-animal group map (by animal name).
subjectGroup = {
'Vu-vuong', 'Naive'
'Khoai-lang-2', 'Naive'
'Khoai-tay-2', 'Naive'
'OM-2', 'Naive'
'Khoai-tay-1', 'Electrode-Box-A'
'Banh-mi-2', 'Electrode-Box-A2'
'Egg-tart-2', 'Electrode-Box-A2'
'Root-beer-2', 'Electrode-Box-A2'
'Banh-mi-1', 'Electrode-Box-B2'
'Egg-tart-1', 'Electrode-Box-B2'
'Root-beer-1', 'Electrode-Box-B2'
'Khoai-lang-1', 'Right-Electrode'
};
cfg = struct();
cfg.groups = containers.Map(subjectGroup(:, 1), subjectGroup(:, 2));
cfg.ref = 'Electrode-Box-B2';
cfg.anchorLow = 'Electrode-Box-A2';
cfg.anchorHigh = 'Electrode-Box-B2';
cfg.unknowns = {'Electrode-Box-A', 'Right-Electrode'};
cfg.mergeA2 = containers.Map( ...
{'Electrode-Box-A', 'Right-Electrode'}, ...
{'Electrode-Box-A2', 'Electrode-Box-B2'});
cfg.mergeB2 = containers.Map( ...
{'Electrode-Box-A', 'Right-Electrode'}, ...
{'Electrode-Box-B2', 'Electrode-Box-B2'});
% mergeNaive: pool Naive into the Box-A2 (control) side and Right-Electrode
% into the Box-B2 (tDCS) side. Control = Box-A2 + Naive (n=7), tDCS = Box-B2 +
% Right-Electrode (n=4); Electrode-Box-A is left unchanged.
cfg.mergeNaive = containers.Map( ...
{'Naive', 'Right-Electrode'}, ...
{'Electrode-Box-A2', 'Electrode-Box-B2'});
end