analysis(matlab): matched-effort comparison (prev _f full vs current 0-3)

Add make_matched_effort.m: pick the current-study day cutoff whose per-animal
cumulative attempts best match the previous (_f) study's full-span total
(~405 attempts/animal -> current days 0-3), then fit the paper LME on both.

Two variation folders (data.csv + analyze.m + result.txt):
  variations/prev_f_full/            b2_f vs a2_f, days 0-9  (24 rats)
  variations/matched_current_d0_3/   Box-B2 vs Box-A2, 0-3   (6 rats)

At matched cumulative effort both show a significant positive stim x day
interaction (prev p=0.008 +0.56/day; current-0-3 p=0.004 +10.2/day) -- the
tDCS acceleration replicates at equal practice, though the count slopes are
not directly comparable across datasets given differing attempts/session.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Experiments DB Dev
2026-07-22 14:39:15 -04:00
parent d9b65a3279
commit 9af33e747e
7 changed files with 634 additions and 0 deletions
@@ -0,0 +1,74 @@
% Variation analysis -- the paper's linear mixed model on the successful-reach
% COUNT, fit on this folder's curated data subset.
%
% model: behavior ~ stim + day + stim:day + (1|rat)
% behavior = successful reaches (count per session)
% stim = 1 for the treatment group(s), 0 for the control group(s)
% day = training day within this window (0 = first analyzed day)
% rat = subject (random intercept)
%
% Self-contained: reads data.csv beside this script and writes result.txt.
% Run headless from this folder with: matlab -batch "analyze"
% (This is a copy of analysis/matlab/variation_analyze.m; see make_variations.m.)
here = fileparts(mfilename('fullpath'));
if isempty(here); here = pwd; end
vname = regexprep(here, '.*[/\\]', ''); % folder name = variation id
D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string');
tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ...
'VariableNames', {'behavior', 'day', 'stim', 'rat'});
m = fitlme(tbl, 'behavior ~ stim + day + stim:day + (1|rat)');
C = m.Coefficients; A = anova(m); ci = coefCI(m);
gi = @(t) find(strcmp(C.Name, t), 1);
ga = @(t) find(strcmp(A.Term, t), 1);
row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%8.3f p=%.4g\n', nm, ...
C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)));
maxT = max(D.day(D.stim == 1)); minT = min(D.day(D.stim == 1));
maxC = max(D.day(D.stim == 0)); minC = min(D.day(D.stim == 0));
if abs(maxT - maxC) > 2
cov = '** WARNING: unequal day coverage -- interaction may be confounded. **';
else
cov = '(equal day coverage over this window)';
end
ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii);
if pI >= 0.05
verdict = 'n.s. -- slopes parallel (no differential learning rate)';
elseif eI > 0
verdict = 'SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates)';
else
verdict = 'SIGNIFICANT negative -- treatment improves SLOWER (groups converge)';
end
bar = repmat('=', 1, 78);
raw = regexprep(evalc('disp(m)'), '</?strong>', '');
s = sprintf('%s\nVARIATION: %s\n%s\n', bar, vname, bar);
s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT)\n')];
s = [s sprintf('day = training day within window (0 = first analyzed day)\n')];
s = [s sprintf('treatment (stim=1): %s\n', strjoin(cellstr(unique(D.group(D.stim == 1))), ', '))];
s = [s sprintf('control (stim=0): %s\n', strjoin(cellstr(unique(D.group(D.stim == 0))), ', '))];
s = [s sprintf('N = %d rats, %d sessions raw day coverage: treat %d..%d, control %d..%d\n', ...
numel(unique(D.subject)), height(D), minT, maxT, minC, maxC)];
s = [s sprintf('%s\n\n%s\nFULL MODEL SUMMARY -- fitlme\n%s\n%s\n', cov, bar, bar, raw)];
s = [s sprintf('%-26s %-13s %-13s %s\n%s\n', 'effect', 't (df)', 'F (df1)', 'p', repmat('-', 1, 66))];
s = [s row('stim x day (interaction)', 'day:stim')];
s = [s row('day (learning)', 'day')];
s = [s row('stim (main, window start)', 'stim')];
s = [s sprintf('interaction 95%% CI: [%+.2f, %+.2f]\n', ci(ii, 1), ci(ii, 2))];
s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.2f)\n', verdict, pI, eI)];
s = [s sprintf('Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')];
fprintf('%s', s);
fid = fopen(fullfile(here, 'result.txt'), 'w');
fprintf(fid, '%s', s);
fclose(fid);
% Machine-readable handoff for the summary table (see make_variations.m).
VARRESULT = struct('name', vname, 'nRats', numel(unique(D.subject)), ...
'nObs', height(D), 'interP', pI, 'interEst', eI, ...
'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ...
'covEqual', abs(maxT - maxC) <= 2);
@@ -0,0 +1,25 @@
subject,group,day,success,total,stim
Banh-mi-1,Electrode-Box-B2,0,13,84,1
Banh-mi-1,Electrode-Box-B2,1,35,86,1
Banh-mi-1,Electrode-Box-B2,2,47,110,1
Banh-mi-1,Electrode-Box-B2,3,65,140,1
Banh-mi-2,Electrode-Box-A2,0,25,97,0
Banh-mi-2,Electrode-Box-A2,1,22,101,0
Banh-mi-2,Electrode-Box-A2,2,22,119,0
Banh-mi-2,Electrode-Box-A2,3,29,118,0
Egg-tart-1,Electrode-Box-B2,0,7,56,1
Egg-tart-1,Electrode-Box-B2,1,16,78,1
Egg-tart-1,Electrode-Box-B2,2,23,103,1
Egg-tart-1,Electrode-Box-B2,3,63,120,1
Egg-tart-2,Electrode-Box-A2,0,9,32,0
Egg-tart-2,Electrode-Box-A2,1,2,38,0
Egg-tart-2,Electrode-Box-A2,2,31,93,0
Egg-tart-2,Electrode-Box-A2,3,44,101,0
Root-beer-1,Electrode-Box-B2,0,11,85,1
Root-beer-1,Electrode-Box-B2,1,18,76,1
Root-beer-1,Electrode-Box-B2,2,40,105,1
Root-beer-1,Electrode-Box-B2,3,55,134,1
Root-beer-2,Electrode-Box-A2,0,22,74,0
Root-beer-2,Electrode-Box-A2,1,31,87,0
Root-beer-2,Electrode-Box-A2,2,49,134,0
Root-beer-2,Electrode-Box-A2,3,31,89,0
1 subject group day success total stim
2 Banh-mi-1 Electrode-Box-B2 0 13 84 1
3 Banh-mi-1 Electrode-Box-B2 1 35 86 1
4 Banh-mi-1 Electrode-Box-B2 2 47 110 1
5 Banh-mi-1 Electrode-Box-B2 3 65 140 1
6 Banh-mi-2 Electrode-Box-A2 0 25 97 0
7 Banh-mi-2 Electrode-Box-A2 1 22 101 0
8 Banh-mi-2 Electrode-Box-A2 2 22 119 0
9 Banh-mi-2 Electrode-Box-A2 3 29 118 0
10 Egg-tart-1 Electrode-Box-B2 0 7 56 1
11 Egg-tart-1 Electrode-Box-B2 1 16 78 1
12 Egg-tart-1 Electrode-Box-B2 2 23 103 1
13 Egg-tart-1 Electrode-Box-B2 3 63 120 1
14 Egg-tart-2 Electrode-Box-A2 0 9 32 0
15 Egg-tart-2 Electrode-Box-A2 1 2 38 0
16 Egg-tart-2 Electrode-Box-A2 2 31 93 0
17 Egg-tart-2 Electrode-Box-A2 3 44 101 0
18 Root-beer-1 Electrode-Box-B2 0 11 85 1
19 Root-beer-1 Electrode-Box-B2 1 18 76 1
20 Root-beer-1 Electrode-Box-B2 2 40 105 1
21 Root-beer-1 Electrode-Box-B2 3 55 134 1
22 Root-beer-2 Electrode-Box-A2 0 22 74 0
23 Root-beer-2 Electrode-Box-A2 1 31 87 0
24 Root-beer-2 Electrode-Box-A2 2 49 134 0
25 Root-beer-2 Electrode-Box-A2 3 31 89 0
@@ -0,0 +1,65 @@
==============================================================================
VARIATION: matched_current_d0_3
==============================================================================
model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT)
day = training day within window (0 = first analyzed day)
treatment (stim=1): Electrode-Box-B2
control (stim=0): Electrode-Box-A2
N = 6 rats, 24 sessions raw day coverage: treat 0..3, control 0..3
(equal day coverage over this window)
==============================================================================
FULL MODEL SUMMARY -- fitlme
==============================================================================
Linear mixed-effects model fit by ML
Model information:
Number of observations 24
Fixed effects coefficients 4
Random effects coefficients 6
Covariance parameters 2
Formula:
behavior ~ 1 + day*stim + (1 | rat)
Model fit statistics:
AIC BIC LogLikelihood Deviance
185.35 192.42 -86.676 173.35
Fixed effects coefficients (95% CIs):
Name Estimate SE tStat DF pValue
{'(Intercept)'} 16.867 4.4554 3.7856 20 0.0011608
{'day' } 6.3667 2.2049 2.8875 20 0.0091051
{'stim' } -8.9667 6.3009 -1.4231 20 0.17013
{'day:stim' } 10.2 3.1182 3.2711 20 0.0038217
Lower Upper
7.5728 26.161
1.7673 10.966
-22.11 4.1769
3.6955 16.705
Random effects covariance parameters (95% CIs):
Group: rat (6 Levels)
Name1 Name2 Type Estimate
{'(Intercept)'} {'(Intercept)'} {'std'} 2.9163
Lower Upper
0.43116 19.725
Group: Error
Name Estimate Lower Upper
{'Res Std'} 8.5397 6.1599 11.839
effect t (df) F (df1) p
------------------------------------------------------------------
stim x day (interaction) t(20)= 3.27 F(1)= 10.700 p=0.003822
day (learning) t(20)= 2.89 F(1)= 8.337 p=0.009105
stim (main, window start) t(20)= -1.42 F(1)= 2.025 p=0.1701
interaction 95% CI: [+3.70, +16.70]
INTERPRETATION: stim x day interaction SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates) (p=0.003822, slope diff=+10.20)
Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008.
@@ -0,0 +1,74 @@
% Variation analysis -- the paper's linear mixed model on the successful-reach
% COUNT, fit on this folder's curated data subset.
%
% model: behavior ~ stim + day + stim:day + (1|rat)
% behavior = successful reaches (count per session)
% stim = 1 for the treatment group(s), 0 for the control group(s)
% day = training day within this window (0 = first analyzed day)
% rat = subject (random intercept)
%
% Self-contained: reads data.csv beside this script and writes result.txt.
% Run headless from this folder with: matlab -batch "analyze"
% (This is a copy of analysis/matlab/variation_analyze.m; see make_variations.m.)
here = fileparts(mfilename('fullpath'));
if isempty(here); here = pwd; end
vname = regexprep(here, '.*[/\\]', ''); % folder name = variation id
D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string');
tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ...
'VariableNames', {'behavior', 'day', 'stim', 'rat'});
m = fitlme(tbl, 'behavior ~ stim + day + stim:day + (1|rat)');
C = m.Coefficients; A = anova(m); ci = coefCI(m);
gi = @(t) find(strcmp(C.Name, t), 1);
ga = @(t) find(strcmp(A.Term, t), 1);
row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%8.3f p=%.4g\n', nm, ...
C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)));
maxT = max(D.day(D.stim == 1)); minT = min(D.day(D.stim == 1));
maxC = max(D.day(D.stim == 0)); minC = min(D.day(D.stim == 0));
if abs(maxT - maxC) > 2
cov = '** WARNING: unequal day coverage -- interaction may be confounded. **';
else
cov = '(equal day coverage over this window)';
end
ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii);
if pI >= 0.05
verdict = 'n.s. -- slopes parallel (no differential learning rate)';
elseif eI > 0
verdict = 'SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates)';
else
verdict = 'SIGNIFICANT negative -- treatment improves SLOWER (groups converge)';
end
bar = repmat('=', 1, 78);
raw = regexprep(evalc('disp(m)'), '</?strong>', '');
s = sprintf('%s\nVARIATION: %s\n%s\n', bar, vname, bar);
s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT)\n')];
s = [s sprintf('day = training day within window (0 = first analyzed day)\n')];
s = [s sprintf('treatment (stim=1): %s\n', strjoin(cellstr(unique(D.group(D.stim == 1))), ', '))];
s = [s sprintf('control (stim=0): %s\n', strjoin(cellstr(unique(D.group(D.stim == 0))), ', '))];
s = [s sprintf('N = %d rats, %d sessions raw day coverage: treat %d..%d, control %d..%d\n', ...
numel(unique(D.subject)), height(D), minT, maxT, minC, maxC)];
s = [s sprintf('%s\n\n%s\nFULL MODEL SUMMARY -- fitlme\n%s\n%s\n', cov, bar, bar, raw)];
s = [s sprintf('%-26s %-13s %-13s %s\n%s\n', 'effect', 't (df)', 'F (df1)', 'p', repmat('-', 1, 66))];
s = [s row('stim x day (interaction)', 'day:stim')];
s = [s row('day (learning)', 'day')];
s = [s row('stim (main, window start)', 'stim')];
s = [s sprintf('interaction 95%% CI: [%+.2f, %+.2f]\n', ci(ii, 1), ci(ii, 2))];
s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.2f)\n', verdict, pI, eI)];
s = [s sprintf('Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')];
fprintf('%s', s);
fid = fopen(fullfile(here, 'result.txt'), 'w');
fprintf(fid, '%s', s);
fclose(fid);
% Machine-readable handoff for the summary table (see make_variations.m).
VARRESULT = struct('name', vname, 'nRats', numel(unique(D.subject)), ...
'nObs', height(D), 'interP', pI, 'interEst', eI, ...
'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ...
'covEqual', abs(maxT - maxC) <= 2);
@@ -0,0 +1,232 @@
subject,group,day,success,total,stim
Afrasyab,a2_f,0,1,13,0
Afrasyab,a2_f,1,8,24,0
Afrasyab,a2_f,2,13,35,0
Afrasyab,a2_f,3,8,29,0
Afrasyab,a2_f,4,21,43,0
Afrasyab,a2_f,5,14,42,0
Afrasyab,a2_f,6,18,46,0
Afrasyab,a2_f,7,21,52,0
Afrasyab,a2_f,8,21,41,0
Afrasyab,a2_f,9,21,55,0
Arash,b2_f,0,9,34,1
Arash,b2_f,1,12,41,1
Arash,b2_f,2,15,43,1
Arash,b2_f,3,18,44,1
Arash,b2_f,4,16,33,1
Arash,b2_f,5,18,47,1
Arash,b2_f,6,13,48,1
Arash,b2_f,7,9,38,1
Arash,b2_f,8,18,43,1
Arash,b2_f,9,15,47,1
Ashkas,a2_f,0,2,30,0
Ashkas,a2_f,1,11,35,0
Ashkas,a2_f,2,10,30,0
Ashkas,a2_f,3,9,33,0
Ashkas,a2_f,4,9,41,0
Ashkas,a2_f,5,10,36,0
Ashkas,a2_f,6,13,46,0
Ashkas,a2_f,7,9,42,0
Ashkas,a2_f,8,6,36,0
Ashkas,a2_f,9,15,48,0
Fariborz,a2_f,0,8,32,0
Fariborz,a2_f,1,10,32,0
Fariborz,a2_f,2,9,34,0
Fariborz,a2_f,3,11,35,0
Fariborz,a2_f,4,13,35,0
Fariborz,a2_f,5,5,38,0
Fariborz,a2_f,6,12,44,0
Garsivaz,b2_f,0,10,34,1
Garsivaz,b2_f,1,12,30,1
Garsivaz,b2_f,2,14,35,1
Garsivaz,b2_f,3,27,56,1
Garsivaz,b2_f,4,22,41,1
Garsivaz,b2_f,5,30,57,1
Garsivaz,b2_f,6,34,52,1
Garsivaz,b2_f,7,25,49,1
Garsivaz,b2_f,8,29,46,1
Garsivaz,b2_f,9,25,44,1
Iraj,b2_f,0,6,29,1
Iraj,b2_f,1,13,37,1
Iraj,b2_f,2,15,32,1
Iraj,b2_f,3,20,49,1
Iraj,b2_f,4,17,47,1
Iraj,b2_f,5,21,47,1
Iraj,b2_f,6,24,49,1
Khosrow,b2_f,0,6,23,1
Khosrow,b2_f,1,7,27,1
Khosrow,b2_f,2,10,27,1
Khosrow,b2_f,3,10,26,1
Khosrow,b2_f,4,14,35,1
Khosrow,b2_f,5,20,41,1
Khosrow,b2_f,6,11,37,1
Khosrow,b2_f,7,13,34,1
Khosrow,b2_f,8,13,30,1
Khosrow,b2_f,9,15,40,1
Kiyanoush,b2_f,0,11,19,1
Kiyanoush,b2_f,1,22,52,1
Kiyanoush,b2_f,2,34,58,1
Kiyanoush,b2_f,3,30,52,1
Kiyanoush,b2_f,4,27,56,1
Kiyanoush,b2_f,5,46,65,1
Kiyanoush,b2_f,6,32,58,1
Kiyanoush,b2_f,7,47,61,1
Kiyanoush,b2_f,8,49,68,1
Kiyanoush,b2_f,9,41,49,1
Manuchehr,b2_f,0,1,22,1
Manuchehr,b2_f,1,8,18,1
Manuchehr,b2_f,2,9,41,1
Manuchehr,b2_f,3,14,47,1
Manuchehr,b2_f,4,25,60,1
Manuchehr,b2_f,5,22,70,1
Manuchehr,b2_f,6,37,74,1
Manuchehr,b2_f,7,40,75,1
Manuchehr,b2_f,8,32,55,1
Manuchehr,b2_f,9,29,69,1
Mehrab,a2_f,0,8,28,0
Mehrab,a2_f,1,13,26,0
Mehrab,a2_f,2,16,45,0
Mehrab,a2_f,3,17,34,0
Mehrab,a2_f,4,21,45,0
Mehrab,a2_f,5,21,55,0
Mehrab,a2_f,6,22,51,0
Mehrab,a2_f,7,21,48,0
Mehrab,a2_f,8,21,48,0
Mehrab,a2_f,9,23,45,0
Merdas,a2_f,0,7,30,0
Merdas,a2_f,1,9,36,0
Merdas,a2_f,2,8,33,0
Merdas,a2_f,3,17,48,0
Merdas,a2_f,4,21,45,0
Merdas,a2_f,5,13,39,0
Merdas,a2_f,6,19,43,0
Merdas,a2_f,7,10,48,0
Merdas,a2_f,8,19,52,0
Merdas,a2_f,9,20,47,0
Nozar,a2_f,0,4,20,0
Nozar,a2_f,1,5,23,0
Nozar,a2_f,2,8,43,0
Nozar,a2_f,3,8,48,0
Nozar,a2_f,4,11,40,0
Nozar,a2_f,5,13,53,0
Nozar,a2_f,6,15,50,0
Nozar,a2_f,7,19,46,0
Nozar,a2_f,8,18,56,0
Nozar,a2_f,9,20,47,0
Pashang,b2_f,0,5,32,1
Pashang,b2_f,1,7,51,1
Pashang,b2_f,2,18,49,1
Pashang,b2_f,3,16,43,1
Pashang,b2_f,4,21,36,1
Pashang,b2_f,5,16,53,1
Pashang,b2_f,6,18,42,1
Pashang,b2_f,7,23,44,1
Pashang,b2_f,8,20,43,1
Pashang,b2_f,9,34,57,1
Pashin,a2_f,0,7,27,0
Pashin,a2_f,1,9,22,0
Pashin,a2_f,2,11,41,0
Pashin,a2_f,3,14,40,0
Pashin,a2_f,4,12,36,0
Pashin,a2_f,5,14,43,0
Pashin,a2_f,6,11,42,0
Pashin,a2_f,7,14,47,0
Pashin,a2_f,8,13,50,0
Pashin,a2_f,9,18,45,0
Rostam,b2_f,0,9,29,1
Rostam,b2_f,1,12,36,1
Rostam,b2_f,2,14,42,1
Rostam,b2_f,3,18,41,1
Rostam,b2_f,4,15,45,1
Rostam,b2_f,5,20,49,1
Rostam,b2_f,6,21,51,1
Rostam,b2_f,7,24,48,1
Rostam,b2_f,8,19,46,1
Rostam,b2_f,9,23,48,1
Salm,a2_f,0,7,28,0
Salm,a2_f,1,10,36,0
Salm,a2_f,2,16,50,0
Salm,a2_f,3,18,49,0
Salm,a2_f,4,21,62,0
Salm,a2_f,5,26,60,0
Salm,a2_f,6,27,53,0
Salm,a2_f,7,32,62,0
Salm,a2_f,8,16,40,0
Salm,a2_f,9,16,43,0
Sam,b2_f,0,8,28,1
Sam,b2_f,1,11,32,1
Sam,b2_f,2,10,26,1
Sam,b2_f,3,11,39,1
Sam,b2_f,4,12,36,1
Sam,b2_f,5,14,34,1
Sam,b2_f,6,15,43,1
Sam,b2_f,7,9,31,1
Sam,b2_f,8,23,51,1
Sam,b2_f,9,19,45,1
Siavash,a2_f,0,10,21,0
Siavash,a2_f,1,3,25,0
Siavash,a2_f,2,7,39,0
Siavash,a2_f,3,13,36,0
Siavash,a2_f,4,12,35,0
Siavash,a2_f,5,18,32,0
Siavash,a2_f,6,18,45,0
Siavash,a2_f,7,22,37,0
Siavash,a2_f,8,18,36,0
Siavash,a2_f,9,17,34,0
Sohrab,b2_f,0,8,23,1
Sohrab,b2_f,1,11,34,1
Sohrab,b2_f,2,15,45,1
Sohrab,b2_f,3,19,47,1
Sohrab,b2_f,4,18,50,1
Sohrab,b2_f,5,18,45,1
Sohrab,b2_f,6,16,45,1
Sohrab,b2_f,7,20,49,1
Sohrab,b2_f,8,14,32,1
Sohrab,b2_f,9,23,43,1
Tahmasb,b2_f,0,7,32,1
Tahmasb,b2_f,1,11,38,1
Tahmasb,b2_f,2,8,37,1
Tahmasb,b2_f,3,7,26,1
Tahmasb,b2_f,4,12,35,1
Tahmasb,b2_f,5,13,39,1
Tahmasb,b2_f,6,11,41,1
Tahmasb,b2_f,7,15,52,1
Tahmasb,b2_f,8,23,61,1
Tahmasb,b2_f,9,22,61,1
Tur,a2_f,0,6,39,0
Tur,a2_f,1,11,36,0
Tur,a2_f,2,9,35,0
Tur,a2_f,3,16,45,0
Tur,a2_f,4,19,52,0
Tur,a2_f,5,14,47,0
Tur,a2_f,6,21,46,0
Tus,b2_f,0,4,32,1
Tus,b2_f,1,9,39,1
Tus,b2_f,2,5,40,1
Tus,b2_f,3,15,42,1
Tus,b2_f,4,21,50,1
Tus,b2_f,5,16,52,1
Tus,b2_f,6,19,59,1
Tus,b2_f,7,28,57,1
Tus,b2_f,8,27,62,1
Tus,b2_f,9,27,60,1
Zal,a2_f,0,5,34,0
Zal,a2_f,1,12,36,0
Zal,a2_f,2,16,37,0
Zal,a2_f,3,18,40,0
Zal,a2_f,4,14,34,0
Zal,a2_f,5,15,41,0
Zal,a2_f,6,16,46,0
Zal,a2_f,7,15,44,0
Zal,a2_f,8,20,46,0
Zal,a2_f,9,18,50,0
Zav,a2_f,0,4,28,0
Zav,a2_f,1,7,37,0
Zav,a2_f,2,7,41,0
Zav,a2_f,3,4,32,0
Zav,a2_f,4,8,37,0
Zav,a2_f,5,4,37,0
Zav,a2_f,6,7,36,0
Zav,a2_f,7,15,56,0
Zav,a2_f,8,19,54,0
Zav,a2_f,9,21,49,0
1 subject group day success total stim
2 Afrasyab a2_f 0 1 13 0
3 Afrasyab a2_f 1 8 24 0
4 Afrasyab a2_f 2 13 35 0
5 Afrasyab a2_f 3 8 29 0
6 Afrasyab a2_f 4 21 43 0
7 Afrasyab a2_f 5 14 42 0
8 Afrasyab a2_f 6 18 46 0
9 Afrasyab a2_f 7 21 52 0
10 Afrasyab a2_f 8 21 41 0
11 Afrasyab a2_f 9 21 55 0
12 Arash b2_f 0 9 34 1
13 Arash b2_f 1 12 41 1
14 Arash b2_f 2 15 43 1
15 Arash b2_f 3 18 44 1
16 Arash b2_f 4 16 33 1
17 Arash b2_f 5 18 47 1
18 Arash b2_f 6 13 48 1
19 Arash b2_f 7 9 38 1
20 Arash b2_f 8 18 43 1
21 Arash b2_f 9 15 47 1
22 Ashkas a2_f 0 2 30 0
23 Ashkas a2_f 1 11 35 0
24 Ashkas a2_f 2 10 30 0
25 Ashkas a2_f 3 9 33 0
26 Ashkas a2_f 4 9 41 0
27 Ashkas a2_f 5 10 36 0
28 Ashkas a2_f 6 13 46 0
29 Ashkas a2_f 7 9 42 0
30 Ashkas a2_f 8 6 36 0
31 Ashkas a2_f 9 15 48 0
32 Fariborz a2_f 0 8 32 0
33 Fariborz a2_f 1 10 32 0
34 Fariborz a2_f 2 9 34 0
35 Fariborz a2_f 3 11 35 0
36 Fariborz a2_f 4 13 35 0
37 Fariborz a2_f 5 5 38 0
38 Fariborz a2_f 6 12 44 0
39 Garsivaz b2_f 0 10 34 1
40 Garsivaz b2_f 1 12 30 1
41 Garsivaz b2_f 2 14 35 1
42 Garsivaz b2_f 3 27 56 1
43 Garsivaz b2_f 4 22 41 1
44 Garsivaz b2_f 5 30 57 1
45 Garsivaz b2_f 6 34 52 1
46 Garsivaz b2_f 7 25 49 1
47 Garsivaz b2_f 8 29 46 1
48 Garsivaz b2_f 9 25 44 1
49 Iraj b2_f 0 6 29 1
50 Iraj b2_f 1 13 37 1
51 Iraj b2_f 2 15 32 1
52 Iraj b2_f 3 20 49 1
53 Iraj b2_f 4 17 47 1
54 Iraj b2_f 5 21 47 1
55 Iraj b2_f 6 24 49 1
56 Khosrow b2_f 0 6 23 1
57 Khosrow b2_f 1 7 27 1
58 Khosrow b2_f 2 10 27 1
59 Khosrow b2_f 3 10 26 1
60 Khosrow b2_f 4 14 35 1
61 Khosrow b2_f 5 20 41 1
62 Khosrow b2_f 6 11 37 1
63 Khosrow b2_f 7 13 34 1
64 Khosrow b2_f 8 13 30 1
65 Khosrow b2_f 9 15 40 1
66 Kiyanoush b2_f 0 11 19 1
67 Kiyanoush b2_f 1 22 52 1
68 Kiyanoush b2_f 2 34 58 1
69 Kiyanoush b2_f 3 30 52 1
70 Kiyanoush b2_f 4 27 56 1
71 Kiyanoush b2_f 5 46 65 1
72 Kiyanoush b2_f 6 32 58 1
73 Kiyanoush b2_f 7 47 61 1
74 Kiyanoush b2_f 8 49 68 1
75 Kiyanoush b2_f 9 41 49 1
76 Manuchehr b2_f 0 1 22 1
77 Manuchehr b2_f 1 8 18 1
78 Manuchehr b2_f 2 9 41 1
79 Manuchehr b2_f 3 14 47 1
80 Manuchehr b2_f 4 25 60 1
81 Manuchehr b2_f 5 22 70 1
82 Manuchehr b2_f 6 37 74 1
83 Manuchehr b2_f 7 40 75 1
84 Manuchehr b2_f 8 32 55 1
85 Manuchehr b2_f 9 29 69 1
86 Mehrab a2_f 0 8 28 0
87 Mehrab a2_f 1 13 26 0
88 Mehrab a2_f 2 16 45 0
89 Mehrab a2_f 3 17 34 0
90 Mehrab a2_f 4 21 45 0
91 Mehrab a2_f 5 21 55 0
92 Mehrab a2_f 6 22 51 0
93 Mehrab a2_f 7 21 48 0
94 Mehrab a2_f 8 21 48 0
95 Mehrab a2_f 9 23 45 0
96 Merdas a2_f 0 7 30 0
97 Merdas a2_f 1 9 36 0
98 Merdas a2_f 2 8 33 0
99 Merdas a2_f 3 17 48 0
100 Merdas a2_f 4 21 45 0
101 Merdas a2_f 5 13 39 0
102 Merdas a2_f 6 19 43 0
103 Merdas a2_f 7 10 48 0
104 Merdas a2_f 8 19 52 0
105 Merdas a2_f 9 20 47 0
106 Nozar a2_f 0 4 20 0
107 Nozar a2_f 1 5 23 0
108 Nozar a2_f 2 8 43 0
109 Nozar a2_f 3 8 48 0
110 Nozar a2_f 4 11 40 0
111 Nozar a2_f 5 13 53 0
112 Nozar a2_f 6 15 50 0
113 Nozar a2_f 7 19 46 0
114 Nozar a2_f 8 18 56 0
115 Nozar a2_f 9 20 47 0
116 Pashang b2_f 0 5 32 1
117 Pashang b2_f 1 7 51 1
118 Pashang b2_f 2 18 49 1
119 Pashang b2_f 3 16 43 1
120 Pashang b2_f 4 21 36 1
121 Pashang b2_f 5 16 53 1
122 Pashang b2_f 6 18 42 1
123 Pashang b2_f 7 23 44 1
124 Pashang b2_f 8 20 43 1
125 Pashang b2_f 9 34 57 1
126 Pashin a2_f 0 7 27 0
127 Pashin a2_f 1 9 22 0
128 Pashin a2_f 2 11 41 0
129 Pashin a2_f 3 14 40 0
130 Pashin a2_f 4 12 36 0
131 Pashin a2_f 5 14 43 0
132 Pashin a2_f 6 11 42 0
133 Pashin a2_f 7 14 47 0
134 Pashin a2_f 8 13 50 0
135 Pashin a2_f 9 18 45 0
136 Rostam b2_f 0 9 29 1
137 Rostam b2_f 1 12 36 1
138 Rostam b2_f 2 14 42 1
139 Rostam b2_f 3 18 41 1
140 Rostam b2_f 4 15 45 1
141 Rostam b2_f 5 20 49 1
142 Rostam b2_f 6 21 51 1
143 Rostam b2_f 7 24 48 1
144 Rostam b2_f 8 19 46 1
145 Rostam b2_f 9 23 48 1
146 Salm a2_f 0 7 28 0
147 Salm a2_f 1 10 36 0
148 Salm a2_f 2 16 50 0
149 Salm a2_f 3 18 49 0
150 Salm a2_f 4 21 62 0
151 Salm a2_f 5 26 60 0
152 Salm a2_f 6 27 53 0
153 Salm a2_f 7 32 62 0
154 Salm a2_f 8 16 40 0
155 Salm a2_f 9 16 43 0
156 Sam b2_f 0 8 28 1
157 Sam b2_f 1 11 32 1
158 Sam b2_f 2 10 26 1
159 Sam b2_f 3 11 39 1
160 Sam b2_f 4 12 36 1
161 Sam b2_f 5 14 34 1
162 Sam b2_f 6 15 43 1
163 Sam b2_f 7 9 31 1
164 Sam b2_f 8 23 51 1
165 Sam b2_f 9 19 45 1
166 Siavash a2_f 0 10 21 0
167 Siavash a2_f 1 3 25 0
168 Siavash a2_f 2 7 39 0
169 Siavash a2_f 3 13 36 0
170 Siavash a2_f 4 12 35 0
171 Siavash a2_f 5 18 32 0
172 Siavash a2_f 6 18 45 0
173 Siavash a2_f 7 22 37 0
174 Siavash a2_f 8 18 36 0
175 Siavash a2_f 9 17 34 0
176 Sohrab b2_f 0 8 23 1
177 Sohrab b2_f 1 11 34 1
178 Sohrab b2_f 2 15 45 1
179 Sohrab b2_f 3 19 47 1
180 Sohrab b2_f 4 18 50 1
181 Sohrab b2_f 5 18 45 1
182 Sohrab b2_f 6 16 45 1
183 Sohrab b2_f 7 20 49 1
184 Sohrab b2_f 8 14 32 1
185 Sohrab b2_f 9 23 43 1
186 Tahmasb b2_f 0 7 32 1
187 Tahmasb b2_f 1 11 38 1
188 Tahmasb b2_f 2 8 37 1
189 Tahmasb b2_f 3 7 26 1
190 Tahmasb b2_f 4 12 35 1
191 Tahmasb b2_f 5 13 39 1
192 Tahmasb b2_f 6 11 41 1
193 Tahmasb b2_f 7 15 52 1
194 Tahmasb b2_f 8 23 61 1
195 Tahmasb b2_f 9 22 61 1
196 Tur a2_f 0 6 39 0
197 Tur a2_f 1 11 36 0
198 Tur a2_f 2 9 35 0
199 Tur a2_f 3 16 45 0
200 Tur a2_f 4 19 52 0
201 Tur a2_f 5 14 47 0
202 Tur a2_f 6 21 46 0
203 Tus b2_f 0 4 32 1
204 Tus b2_f 1 9 39 1
205 Tus b2_f 2 5 40 1
206 Tus b2_f 3 15 42 1
207 Tus b2_f 4 21 50 1
208 Tus b2_f 5 16 52 1
209 Tus b2_f 6 19 59 1
210 Tus b2_f 7 28 57 1
211 Tus b2_f 8 27 62 1
212 Tus b2_f 9 27 60 1
213 Zal a2_f 0 5 34 0
214 Zal a2_f 1 12 36 0
215 Zal a2_f 2 16 37 0
216 Zal a2_f 3 18 40 0
217 Zal a2_f 4 14 34 0
218 Zal a2_f 5 15 41 0
219 Zal a2_f 6 16 46 0
220 Zal a2_f 7 15 44 0
221 Zal a2_f 8 20 46 0
222 Zal a2_f 9 18 50 0
223 Zav a2_f 0 4 28 0
224 Zav a2_f 1 7 37 0
225 Zav a2_f 2 7 41 0
226 Zav a2_f 3 4 32 0
227 Zav a2_f 4 8 37 0
228 Zav a2_f 5 4 37 0
229 Zav a2_f 6 7 36 0
230 Zav a2_f 7 15 56 0
231 Zav a2_f 8 19 54 0
232 Zav a2_f 9 21 49 0
@@ -0,0 +1,65 @@
==============================================================================
VARIATION: prev_f_full
==============================================================================
model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT)
day = training day within window (0 = first analyzed day)
treatment (stim=1): b2_f
control (stim=0): a2_f
N = 24 rats, 231 sessions raw day coverage: treat 0..9, control 0..9
(equal day coverage over this window)
==============================================================================
FULL MODEL SUMMARY -- fitlme
==============================================================================
Linear mixed-effects model fit by ML
Model information:
Number of observations 231
Fixed effects coefficients 4
Random effects coefficients 24
Covariance parameters 2
Formula:
behavior ~ 1 + day*stim + (1 | rat)
Model fit statistics:
AIC BIC LogLikelihood Deviance
1416.2 1436.9 -702.11 1404.2
Fixed effects coefficients (95% CIs):
Name Estimate SE tStat DF pValue
{'(Intercept)'} 7.7376 1.4647 5.2828 227 2.9782e-07
{'day' } 1.3487 0.15094 8.9352 227 1.4298e-16
{'stim' } 1.8961 2.0698 0.9161 227 0.36059
{'day:stim' } 0.56023 0.21043 2.6623 227 0.0083151
Lower Upper
4.8515 10.624
1.0513 1.6461
-2.1823 5.9745
0.14559 0.97488
Random effects covariance parameters (95% CIs):
Group: rat (24 Levels)
Name1 Name2 Type Estimate
{'(Intercept)'} {'(Intercept)'} {'std'} 4.3164
Lower Upper
3.1535 5.9081
Group: Error
Name Estimate Lower Upper
{'Res Std'} 4.4892 4.0771 4.9429
effect t (df) F (df1) p
------------------------------------------------------------------
stim x day (interaction) t(227)= 2.66 F(1)= 7.088 p=0.008315
day (learning) t(227)= 8.94 F(1)= 79.838 p=1.43e-16
stim (main, window start) t(227)= 0.92 F(1)= 0.839 p=0.3606
interaction 95% CI: [+0.15, +0.97]
INTERPRETATION: stim x day interaction SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates) (p=0.008315, slope diff=+0.56)
Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008.