From fd40b6fb549e671966e7d1224b307f02aa08c50e Mon Sep 17 00:00:00 2001 From: Experiments DB Dev Date: Fri, 24 Jul 2026 02:32:53 -0400 Subject: [PATCH] analysis(matlab): rate + count outputs, variation batch 5 Co-Authored-By: Claude Opus 4.8 --- .../matlab/variations/unmerge_d0_13/analyze.m | 102 +++++++++++------- .../unmerge_d0_13/learning_curve.png | Bin 44800 -> 44800 bytes .../unmerge_d0_13/learning_curve_rate.png | Bin 0 -> 41574 bytes .../unmerge_d0_13/logpower_result.txt | 11 +- .../unmerge_d0_13/logpower_result_rate.txt | 35 ++++++ .../variations/unmerge_d0_13/logpowersim.m | 77 +++++++------ .../variations/unmerge_d0_13/plotcurve.m | 50 +++++---- .../variations/unmerge_d0_13/power_result.txt | 13 ++- .../unmerge_d0_13/power_result_rate.txt | 28 +++++ .../variations/unmerge_d0_13/powersim.m | 69 ++++++------ .../variations/unmerge_d0_13/result.txt | 8 +- .../variations/unmerge_d0_13/result_rate.txt | 68 ++++++++++++ .../matlab/variations/unmerge_d0_5/analyze.m | 102 +++++++++++------- .../unmerge_d0_5/learning_curve.png | Bin 36861 -> 36673 bytes .../unmerge_d0_5/learning_curve_rate.png | Bin 0 -> 37951 bytes .../unmerge_d0_5/logpower_result.txt | 11 +- .../unmerge_d0_5/logpower_result_rate.txt | 35 ++++++ .../variations/unmerge_d0_5/logpowersim.m | 77 +++++++------ .../variations/unmerge_d0_5/plotcurve.m | 50 +++++---- .../variations/unmerge_d0_5/power_result.txt | 13 ++- .../unmerge_d0_5/power_result_rate.txt | 28 +++++ .../matlab/variations/unmerge_d0_5/powersim.m | 69 ++++++------ .../matlab/variations/unmerge_d0_5/result.txt | 8 +- .../variations/unmerge_d0_5/result_rate.txt | 68 ++++++++++++ .../matlab/variations/unmerge_d6_10/analyze.m | 102 +++++++++++------- .../unmerge_d6_10/learning_curve.png | Bin 36420 -> 36490 bytes .../unmerge_d6_10/learning_curve_rate.png | Bin 0 -> 37425 bytes .../unmerge_d6_10/logpower_result.txt | 11 +- .../unmerge_d6_10/logpower_result_rate.txt | 35 ++++++ .../variations/unmerge_d6_10/logpowersim.m | 77 +++++++------ .../variations/unmerge_d6_10/plotcurve.m | 50 +++++---- .../variations/unmerge_d6_10/power_result.txt | 13 ++- .../unmerge_d6_10/power_result_rate.txt | 28 +++++ .../variations/unmerge_d6_10/powersim.m | 69 ++++++------ .../variations/unmerge_d6_10/result.txt | 8 +- .../variations/unmerge_d6_10/result_rate.txt | 68 ++++++++++++ .../matlab/variations/unmerge_d6_13/analyze.m | 102 +++++++++++------- .../unmerge_d6_13/learning_curve.png | Bin 41997 -> 41821 bytes .../unmerge_d6_13/learning_curve_rate.png | Bin 0 -> 40222 bytes .../unmerge_d6_13/logpower_result.txt | 9 +- .../unmerge_d6_13/logpower_result_rate.txt | 35 ++++++ .../variations/unmerge_d6_13/logpowersim.m | 77 +++++++------ .../variations/unmerge_d6_13/plotcurve.m | 50 +++++---- .../variations/unmerge_d6_13/power_result.txt | 13 ++- .../unmerge_d6_13/power_result_rate.txt | 28 +++++ .../variations/unmerge_d6_13/powersim.m | 69 ++++++------ .../variations/unmerge_d6_13/result.txt | 8 +- .../variations/unmerge_d6_13/result_rate.txt | 68 ++++++++++++ 48 files changed, 1247 insertions(+), 595 deletions(-) create mode 100644 analysis/matlab/variations/unmerge_d0_13/learning_curve_rate.png create mode 100644 analysis/matlab/variations/unmerge_d0_13/logpower_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d0_13/power_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d0_13/result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d0_5/learning_curve_rate.png create mode 100644 analysis/matlab/variations/unmerge_d0_5/logpower_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d0_5/power_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d0_5/result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_10/learning_curve_rate.png create mode 100644 analysis/matlab/variations/unmerge_d6_10/logpower_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_10/power_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_10/result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_13/learning_curve_rate.png create mode 100644 analysis/matlab/variations/unmerge_d6_13/logpower_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_13/power_result_rate.txt create mode 100644 analysis/matlab/variations/unmerge_d6_13/result_rate.txt diff --git a/analysis/matlab/variations/unmerge_d0_13/analyze.m b/analysis/matlab/variations/unmerge_d0_13/analyze.m index 82da5ed..0d40402 100644 --- a/analysis/matlab/variations/unmerge_d0_13/analyze.m +++ b/analysis/matlab/variations/unmerge_d0_13/analyze.m @@ -1,30 +1,58 @@ -% Variation analysis -- the paper's linear mixed model on the successful-reach -% COUNT, fit on this folder's curated data subset. +% Variation analysis -- the paper's linear mixed model on this folder's data, +% for BOTH metrics: +% metric = count : behavior = # successes -> result.txt +% metric = rate : behavior = success / attempts -> result_rate.txt +% (rate uses only sessions with attempts > 0) % % 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.) +% stim = 1 treatment / 0 control; day = training day within window (0 = +% first analyzed day); rat = subject (random intercept). +% For the interaction we report residual DF, Satterthwaite DF, and the honest +% per-animal random-slope test. Self-contained: reads data.csv beside this +% script. Run headless with: matlab -batch "analyze" +% (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 +vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ... +Rc = localAnalyze(D, 'count', here, vname); +Rr = localAnalyze(D, 'rate', here, vname); + +% Machine-readable handoff for SUMMARY.csv (count drives it; rate appended). +VARRESULT = struct('name', vname, 'nRats', Rc.nRats, 'nObs', Rc.nObs, ... + 'interP', Rc.interP, 'interEst', Rc.interEst, ... + 'interPsatt', Rc.interPsatt, 'interPrs', Rc.interPrs, ... + 'stimP', Rc.stimP, 'dayP', Rc.dayP, 'covEqual', Rc.covEqual, ... + 'interPrate', Rr.interP, 'interEstRate', Rr.interEst, 'interPrsRate', Rr.interPrs); + +% ------------------------------------------------------------------ helper +function R = localAnalyze(D, metric, here, vname) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); + beh = D.success ./ D.total; + mlabel = 'success RATE (success/attempts)'; suffix = '_rate'; +else + beh = D.success; + mlabel = 'success COUNT'; suffix = ''; +end +R = struct('interP', NaN, 'interEst', NaN, 'interPsatt', NaN, 'interPrs', NaN, ... + 'stimP', NaN, 'dayP', NaN, 'nRats', numel(unique(D.subject)), ... + 'nObs', height(D), 'covEqual', false); +if numel(unique(D.stim)) < 2 || numel(unique(D.day)) < 2 + localWrite(sprintf('VARIATION: %s [metric: %s]\nInsufficient data for this metric.\n', ... + vname, mlabel), here, suffix); + return +end + +tbl = table(beh, 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); -As = anova(m, 'DFMethod', 'satterthwaite'); % Satterthwaite denominator DF +As = anova(m, 'DFMethod', 'satterthwaite'); -% Honest test: refit with a per-animal random SLOPE so the interaction DF -% collapses toward the animal count (guarded -- may not converge in short windows). rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; wst = warning('off', 'all'); try @@ -43,6 +71,7 @@ row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%7.3f p=%.4g p=%.4g (df=%.0f C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)), ... As.pValue(gs(t)), As.DF2(gs(t))); +ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii); 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 @@ -50,20 +79,14 @@ if abs(maxT - maxC) > 2 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 +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)'), '', ''); -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 = sprintf('%s\nVARIATION: %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = %s)\n', mlabel)]; 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))), ', '))]; @@ -74,7 +97,7 @@ s = [s sprintf('%-26s %-18s %-12s %s\n%s\n', 'effect', 't(df) / F(df1)', 'p (res 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('interaction 95%% CI: [%+.4g, %+.4g]\n', ci(ii, 1), ci(ii, 2))]; if rsOk s = [s sprintf('HONEST LME (per-animal random slope, day|rat): interaction F(1,%.1f)=%.2f, p=%.4g\n', rsDf, rsF, rsP)]; else @@ -82,17 +105,18 @@ else end s = [s sprintf([' (Satterthwaite DF ~= residual on this random-intercept model; the random-slope\n' ... ' model above is the honest learning-rate test -- DF collapses toward the animal count.)\n'])]; -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')]; +s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.4g)\n', verdict, pI, eI)]; +s = [s sprintf('Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')]; +localWrite(s, here, suffix); + +R = struct('interP', pI, 'interEst', eI, 'interPsatt', As.pValue(gs('day:stim')), ... + 'interPrs', rsP, 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... + 'nRats', numel(unique(D.subject)), 'nObs', height(D), 'covEqual', abs(maxT - maxC) <= 2); +end + +function localWrite(s, here, suffix) 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, ... - 'interPsatt', As.pValue(gs('day:stim')), 'interPrs', rsP, ... - 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... - 'covEqual', abs(maxT - maxC) <= 2); +fid = fopen(fullfile(here, ['result' suffix '.txt']), 'w'); +fprintf(fid, '%s', s); fclose(fid); +end diff --git a/analysis/matlab/variations/unmerge_d0_13/learning_curve.png b/analysis/matlab/variations/unmerge_d0_13/learning_curve.png index 25f4432b853eb7fb4cdcbc6bb0988bea2fab9487..6f6b35cb3840318121acd637be60483f421dc90e 100644 GIT binary patch delta 32 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:OMBatu%WmY3iuu(Vbl32Pp>BL+ z@C?78?~zcIy%`*vRzuW9o$-M!tJd0FewsLWkh<31?tRVI&x>y^#m#%k zm(9NFFStHZP0`ZUCI)}%J>LeRx%qnqIk{c#)ipIRlB}PwfI$dX zta(;cwBfeiqd3KTJfzC82o+$`rLn4C@PeaA7#lEkxOsUKp>Um;D8x_Zk4kJwHq5L_ zc=b~K+OtUQc=fj|h?Z`7`}z4jS52Au{qs?j^tz*UoTFHUt!-;6{AX>Ro`8?~H9!07 z+O@UhOn-0h81RX50nVFgKSiwzx zm7Z^`Gtr~beuF@?W0$^okr;~7^=YX%6kb6aq?i1r zk32eKyF)hY44bEy*Dqw1YrhsQ+or;bknF<)P{f~TxVkKHqmxHEX;h-M$I!+<8s1w6wHJUv%@0$;@Voq=UPs=k+8d z-{}w8nloKhu2O7W6#)U!UQcg1LDy@jN!aLH-jgRs{unMJ%`v1%kphp6Ha|G`N`Kwy zGwlV-_n+^tW321Cq?7LW~k-xVnAq>H>%BLs+_y3?zxHS#`(zj*N?I(l>7 z1cdD$le=fe1_z7%XQgz7?o05TMT_V0##4t6*Hu;q9uk6gOqvAQVuno>v0~{a1#4%9UhfVnX4`DYWH$&1ScI8`3vbs9eM_OP^D1BjE3dr_rx8jB%IsUv zT}C>!Y#Sox2nv$^$F893Cw^yM9Tf4sR~Ok0!l!F?=gwh3EoDC!)x>EJC$a;?sA&JX z%ki+42P`UKg1Wf4%ZrLvW(X^uZtX8CEky||+bA2l*Y@_A@4sf{^g`c5ZH~-F~iHSHJ&;PMJ$rDYdjT zw(C{DyBy+>L{QbKLl$OcB83KeTS?3RK4YJ9L{vYKR6$}7p07 z&=FoeeJ1PJu5yd9kCrP*r^IB2jENq*cjJ(|XIaAc-`FH7d0!W0xYs9s*VNR6X|IQ5 z5{Z?y9Tp(4<7RmHjh`vRbBi#4ru5!p@{${#H7>rl_teKj8%TjyLSUCjesbu^VYV>( zh`4Lm3;;zS8GSR=*JsHNGdyx++p$1M$1)I>vbPC^2idUmC1zkXQyd(&a&g6? zgn{8J2+B^##6?F}>+M+m8Ob>IM291)o33&R@9&A{Wo50KOeOVJtS`Y)_QcU>G|Z~c zXLc0F&bQv1c`WOS<=uO=wb~!m(vXM4YMJCn1?ny*Z6m&QT(hgI3k!2(bhNO;(fOHa z$`Q2TVRF&K-vgd=L$(0Fn_L3wnY_HbM!W99^ logpower_result.txt +% metric = rate : behavior = success / attempts -> logpower_result_rate.txt % -% The paper's power code models behavior against LOG training day, not raw day: +% The paper's power code models behavior against LOG training day: % behavior ~ stim + log(day) + stim:log(day) + (1|rat). -% Their day is 1-indexed (1..10); our data.csv day is 0-indexed (day 0 = paper -% "Day 1"), so log(day + 1) reproduces their transform exactly. -% -% This script (a) refits that log-day model on data.csv, (b) reports the -% interaction (residual DF, Satterthwaite DF, and the honest per-animal -% random-slope test) and Cohen's f -- the partial-eta^2 effect size of the -% interaction, var(fitted_full) - var(fitted_no_interaction) over var(behavior) -% -- and (c) runs the Monte-Carlo power simulation on the log-day model, -% scoring per-animal (cluster-honest) and LME power across N. -% Writes logpower_result.txt. Run: matlab -batch "logpowersim" +% Their day is 1-indexed; our data.csv day is 0-indexed, so log(day + 1) +% reproduces their transform (our day 0 = paper "Day 1"). For each metric this +% refits that model, reports the interaction (residual / Satterthwaite / honest +% per-animal random-slope DF) and Cohen's f (partial-eta^2 effect size), then +% runs the Monte-Carlo power sim (per-animal cluster-honest + LME power). +% Run: matlab -batch "logpowersim" % (Copy of analysis/matlab/variation_logpower.m; see make_variation_logpower.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' column = log(day+1) -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; -warnState = warning('off', 'all'); -rng(1); +localLogPower(D, 'count', here, vname); +localLogPower(D, 'rate', here, vname); -logday = log(D.day + 1); % 0-indexed day -> their log(1-indexed day) -tbl0 = table(D.success, logday, double(D.stim), categorical(D.subject), ... +% ---------------------------------------------------------------- per metric +function localLogPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; +FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' = log(day+1) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); +logday = log(D.day + 1); +tbl0 = table(beh, logday, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT)\n')]; +s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = %s)\n', mlabel)]; s = [s sprintf('log(day) uses 1-indexed training day (our day 0 = paper "Day 1")\n')]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for this analysis (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for this analysis.\n')]; + localFinish(s, here, suffix); warning(warnState); return end -% ---- fitted model on the real data ---- full = fitlme(tbl0, FORMULA); An = anova(full); Asatt = anova(full, 'DFMethod', 'satterthwaite'); ii = strcmp(An.Term, 'day:stim'); is = strcmp(Asatt.Term, 'day:stim'); @@ -52,7 +54,6 @@ reduced = fitlme(tbl0, 'behavior ~ stim + day + (1|rat)'); eta2part = max((var(fitted(full)) - var(fitted(reduced))) / var(tbl0.behavior), 0); cohenf = sqrt(eta2part / (1 - eta2part)); -% honest per-animal random-slope interaction rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; try mr = fitlme(tbl0, 'behavior ~ stim + day + stim:day + (day|rat)'); @@ -76,19 +77,18 @@ end s = [s sprintf('Cohen''s f (interaction, partial eta^2=%.3f) = %.3f (%s; f: .10 small, .25 medium, .40 large)\n', ... eta2part, cohenf, mag)]; -% ---- power simulation on the log-day ground truth ---- cn = full.CoefficientNames; be = full.fixedEffects; b0 = be(strcmp(cn, '(Intercept)')); bStim = be(strcmp(cn, 'stim')); bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(full); sRat = sqrt(psi{1}); sRes = sqrt(full.MSE); -days = unique(tbl0.day); % the log(day) grid +days = unique(tbl0.day); -s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.2f, ratSD=%.2f, resSD=%.2f) ---\n', ... +s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.4g, ratSD=%.4g, resSD=%.4g) ---\n', ... bInt, sRat, sRes)]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:log(day) = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:log(day) = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -102,19 +102,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end -s = [s sprintf(['\nRead the per-animal column as the honest power; the LME column matches the\n' ... - 'paper''s power code (anova interaction p, observation-level DF) and is optimistic.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead per-animal as the honest power; LME matches the paper''s power code (optimistic).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'logpower_result.txt'), 'w'); +fid = fopen(fullfile(here, ['logpower_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d0_13/plotcurve.m b/analysis/matlab/variations/unmerge_d0_13/plotcurve.m index bfc1386..193a44b 100644 --- a/analysis/matlab/variations/unmerge_d0_13/plotcurve.m +++ b/analysis/matlab/variations/unmerge_d0_13/plotcurve.m @@ -1,11 +1,12 @@ -% Variation learning-curve plot, in the style of the paper: +% Variation learning-curve plots, in the style of the paper: % "Lines indicate mean (and SEM) across animals in the anodal (red) and % control (blue) groups." -% Plots mean +/- SEM successful reaches per training day for the treatment / -% anodal group (stim = 1, red) and the control group (stim = 0, blue), reading -% this folder's data.csv and saving learning_curve.png. The per-group N is read -% from the data (each variation pools different groups), so the legend shows the -% actual counts. Training day is 1-indexed (our day 0 = the paper's "Day 1"). +% Produces TWO figures from this folder's data.csv: +% learning_curve.png # successes (count) per training day +% learning_curve_rate.png success rate (success/attempts) per training day +% anodal / treatment = stim 1 (red); control = stim 0 (blue). Per-group N is +% read from the data. Training day is 1-indexed (our day 0 = paper "Day 1") and +% the x-axis tick labels are drawn vertically. % Run: matlab -batch "plotcurve" % (Copy of analysis/matlab/variation_plot.m; see make_variation_plot.m.) @@ -14,15 +15,20 @@ if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -days = unique(D.day); % 0-indexed -xd = days + 1; % plot as 1-indexed training day (paper axis) - +days = unique(D.day); +xd = days + 1; % plot as 1-indexed training day (paper axis) red = [0.85 0.10 0.10]; blue = [0.10 0.30 0.85]; -[Ma, Sa, na] = localCurve(D, 1, days); % anodal / treatment (stim = 1) -[Mc, Sc, nc] = localCurve(D, 0, days); % control (stim = 0) +localPlot(D, days, xd, 'count', '# successes', ... + fullfile(here, 'learning_curve.png'), vname, red, blue); +localPlot(D, days, xd, 'rate', 'success rate', ... + fullfile(here, 'learning_curve_rate.png'), vname, red, blue); +% ------------------------------------------------------------------ helpers +function localPlot(D, days, xd, metric, ylab, outFile, vname, red, blue) +[Ma, Sa, na] = localCurve(D, 1, days, metric); % anodal / treatment +[Mc, Sc, nc] = localCurve(D, 0, days, metric); % control fig = figure('Visible', 'off', 'Color', 'w', 'Position', [100 100 560 460]); hold on e1 = errorbar(xd, Ma, Sa, '-o', 'Color', red, 'MarkerFaceColor', red, 'LineWidth', 2); @@ -30,26 +36,30 @@ e2 = errorbar(xd, Mc, Sc, '-o', 'Color', blue, 'MarkerFaceColor', blue, 'LineWid hold off legend([e1 e2], {sprintf('anodal, N = %d', na), sprintf('control, N = %d', nc)}, ... 'Location', 'northwest', 'Box', 'off'); -xlabel('training day'); -ylabel('# successes'); +xlabel('training day'); ylabel(ylab); title(vname, 'Interpreter', 'none'); set(gca, 'XTick', xd, 'FontName', 'Arial', 'FontSize', 13, 'LineWidth', 1.5, 'Box', 'off'); - -outFile = fullfile(here, 'learning_curve.png'); +xtickangle(90); % vertical x-axis tick labels exportgraphics(fig, outFile, 'Resolution', 150); close(fig); -fprintf('%s: wrote learning_curve.png (anodal N=%d, control N=%d)\n', vname, na, nc); +fprintf('%s: wrote %s (anodal N=%d, control N=%d)\n', vname, outFile, na, nc); +end -% ------------------------------------------------------------------ helper -function [M, S, n] = localCurve(D, stimVal, days) -%LOCALCURVE Per-day mean and SEM of successes across the animals in a group. +function [M, S, n] = localCurve(D, stimVal, days, metric) +%LOCALCURVE Per-day mean and SEM across the animals in a group, for a metric. subs = unique(D.subject(D.stim == stimVal)); n = numel(subs); X = nan(numel(days), n); for j = 1:n for i = 1:numel(days) r = D.subject == subs(j) & D.day == days(i); - if any(r); X(i, j) = mean(D.success(r)); end + if ~any(r); continue; end + if strcmp(metric, 'rate') + tot = sum(D.total(r)); + if tot > 0; X(i, j) = sum(D.success(r)) / tot; end + else + X(i, j) = mean(D.success(r)); + end end end M = mean(X, 2, 'omitnan'); diff --git a/analysis/matlab/variations/unmerge_d0_13/power_result.txt b/analysis/matlab/variations/unmerge_d0_13/power_result.txt index ee890a5..919f97c 100644 --- a/analysis/matlab/variations/unmerge_d0_13/power_result.txt +++ b/analysis/matlab/variations/unmerge_d0_13/power_result.txt @@ -1,11 +1,11 @@ ============================================================================== -POWER SIMULATION -- unmerge_d0_13 +POWER SIMULATION -- unmerge_d0_13 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + day + stim:day + (1|rat) (success COUNT; day within-window) +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = # successes (count); day within-window) observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 -ground truth: stim:day=+1.55/day, rat SD=0.00, residual SD=14.68, days=14 +ground truth: stim:day=+1.547/day, rat SD=0, residual SD=14.68, days=14 - true stim:day interaction = +1.55 (100% of observed) + true stim:day interaction = +1.547 (100% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.22 | 0.56 <- observed @@ -15,7 +15,7 @@ ground truth: stim:day=+1.55/day, rat SD=0.00, residual SD=14.68, days=14 16 | 0.98 | 0.98 24 | 1.00 | 1.00 - true stim:day interaction = +0.77 (50% of observed) + true stim:day interaction = +0.7733 (50% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.12 | 0.22 <- observed @@ -25,5 +25,4 @@ ground truth: stim:day=+1.55/day, rat SD=0.00, residual SD=14.68, days=14 16 | 0.64 | 0.71 24 | 0.78 | 0.74 -Read the per-animal column as the honest power. At the observed N this study -is typically underpowered; per-animal power reaches ~0.8 only at larger N. +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d0_13/power_result_rate.txt b/analysis/matlab/variations/unmerge_d0_13/power_result_rate.txt new file mode 100644 index 0000000..391aec2 --- /dev/null +++ b/analysis/matlab/variations/unmerge_d0_13/power_result_rate.txt @@ -0,0 +1,28 @@ +============================================================================== +POWER SIMULATION -- unmerge_d0_13 [metric: success RATE] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE; day within-window) +observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 +ground truth: stim:day=+0.01125/day, rat SD=0.03898, residual SD=0.0934, days=14 + + true stim:day interaction = +0.01125 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.28 | 0.66 <- observed + 5 | 0.67 | 0.78 + 8 | 0.92 | 0.94 + 12 | 1.00 | 1.00 + 16 | 1.00 | 1.00 + 24 | 1.00 | 1.00 + + true stim:day interaction = +0.005624 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.15 | 0.25 <- observed + 5 | 0.23 | 0.25 + 8 | 0.48 | 0.52 + 12 | 0.56 | 0.60 + 16 | 0.75 | 0.79 + 24 | 0.87 | 0.83 + +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d0_13/powersim.m b/analysis/matlab/variations/unmerge_d0_13/powersim.m index 554d032..ecd9c6c 100644 --- a/analysis/matlab/variations/unmerge_d0_13/powersim.m +++ b/analysis/matlab/variations/unmerge_d0_13/powersim.m @@ -1,45 +1,49 @@ % Variation power simulation -- Monte-Carlo power for the paper's stim x day -% interaction, using THIS folder's data as the ground truth. +% interaction, using THIS folder's data as the ground truth, for BOTH metrics: +% metric = count : behavior = # successes -> power_result.txt +% metric = rate : behavior = success / attempts -> power_result_rate.txt % % Ground truth: fitlme(behavior ~ stim + day + stim:day + (1|rat)) on data.csv -% (success COUNT; day within-window). Its fixed effects, per-rat intercept SD, -% and residual SD generate NREP synthetic datasets at each rats-per-group N and -% each true-effect multiplier (1 = observed slope, 0.5 = half). Each dataset is -% scored at alpha = 0.05 two ways: -% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest -- the -% honest power, matching the random-slope / per-animal inference) +% (day within-window). Its fixed effects, per-rat intercept SD, and residual SD +% generate NREP synthetic datasets at each rats-per-group N and each true-effect +% multiplier (1 = observed, 0.5 = half). Each is scored at alpha=0.05 by: +% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest power) % LME : the fitlme stim:day p (observation-level DF -- optimistic) -% Writes power_result.txt beside this script. Run: matlab -batch "powersim" +% Writes power_result[_rate].txt. Run: matlab -batch "powersim" % (Copy of analysis/matlab/variation_power.m; see make_variation_power.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); + +localPower(D, 'count', here, vname); +localPower(D, 'rate', here, vname); + +% ---------------------------------------------------------------- per metric +function localPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; - -warnState = warning('off', 'all'); -rng(1); - +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); day0 = min(D.day); -tbl0 = table(D.success, D.day - day0, double(D.stim), categorical(D.subject), ... +tbl0 = table(beh, D.day - day0, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); - nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nPOWER SIMULATION -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: %s (success COUNT; day within-window)\n', FORMULA)]; +s = sprintf('%s\nPOWER SIMULATION -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: %s (behavior = %s; day within-window)\n', FORMULA, mlabel)]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for a power simulation (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for a power simulation.\n')]; + localFinish(s, here, suffix); warning(warnState); return end lme = fitlme(tbl0, FORMULA); @@ -49,14 +53,13 @@ bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(lme); sRat = sqrt(psi{1}); sRes = sqrt(lme.MSE); days = (0:max(tbl0.day))'; -s = [s sprintf('ground truth: stim:day=%+.2f/day, rat SD=%.2f, residual SD=%.2f, days=%d\n', ... +s = [s sprintf('ground truth: stim:day=%+.4g/day, rat SD=%.4g, residual SD=%.4g, days=%d\n', ... bInt, sRat, sRes, numel(days))]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:day interaction = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n', 'N/group')]; %#ok - s = [s sprintf(' %s\n', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:day interaction = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -70,20 +73,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end - -s = [s sprintf(['\nRead the per-animal column as the honest power. At the observed N this study\n' ... - 'is typically underpowered; per-animal power reaches ~0.8 only at larger N.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead the per-animal column as the honest power; LME is optimistic (obs-level DF).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'power_result.txt'), 'w'); +fid = fopen(fullfile(here, ['power_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d0_13/result.txt b/analysis/matlab/variations/unmerge_d0_13/result.txt index 5de1bb3..e3ba5ea 100644 --- a/analysis/matlab/variations/unmerge_d0_13/result.txt +++ b/analysis/matlab/variations/unmerge_d0_13/result.txt @@ -1,5 +1,5 @@ ============================================================================== -VARIATION: unmerge_d0_13 +VARIATION: unmerge_d0_13 [metric: success COUNT] ============================================================================== model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT) day = training day within window (0 = first analyzed day) @@ -60,9 +60,9 @@ effect t(df) / F(df1) p (resid) Satterthwaite: p (df) stim x day (interaction) t(66)= 1.65 F(1)= 2.721 p=0.1038 p=0.1035 (df=70) day (learning) t(66)= 9.09 F(1)= 82.593 p=3.035e-13 p=1.823e-13 (df=70) stim (main, window start) t(66)= 0.95 F(1)= 0.910 p=0.3436 p=0.3434 (df=70) -interaction 95% CI: [-0.33, +3.42] +interaction 95% CI: [-0.3252, +3.419] HONEST LME (per-animal random slope, day|rat): interaction F(1,12.8)=1.64, p=0.2227 (Satterthwaite DF ~= residual on this random-intercept model; the random-slope model above is the honest learning-rate test -- DF collapses toward the animal count.) -INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.1038, slope diff=+1.55) -Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008. +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.1038, slope diff=+1.547) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d0_13/result_rate.txt b/analysis/matlab/variations/unmerge_d0_13/result_rate.txt new file mode 100644 index 0000000..e4a445f --- /dev/null +++ b/analysis/matlab/variations/unmerge_d0_13/result_rate.txt @@ -0,0 +1,68 @@ +============================================================================== +VARIATION: unmerge_d0_13 [metric: success RATE (success/attempts)] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE (success/attempts)) +day = training day within window (0 = first analyzed day) +treatment (stim=1): Electrode-Box-B2 +control (stim=0): Electrode-Box-A2 +N = 6 rats, 70 sessions raw day coverage: treat 0..13, control 0..13 +(equal day coverage over this window) + +============================================================================== +FULL MODEL SUMMARY -- fitlme +============================================================================== + +Linear mixed-effects model fit by ML + +Model information: + Number of observations 70 + 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 + -114.71 -101.22 63.353 -126.71 + +Fixed effects coefficients (95% CIs): + Name Estimate SE tStat DF pValue + {'(Intercept)'} 0.25633 0.036798 6.9659 66 1.8623e-09 + {'day' } 0.032331 0.0047766 6.7686 66 4.1691e-09 + {'stim' } 0.03233 0.051391 0.6291 66 0.53146 + {'day:stim' } 0.011248 0.0061725 1.8223 66 0.07294 + + + Lower Upper + 0.18286 0.3298 + 0.022794 0.041868 + -0.070275 0.13493 + -0.0010756 0.023572 + +Random effects covariance parameters (95% CIs): +Group: rat (6 Levels) + Name1 Name2 Type Estimate + {'(Intercept)'} {'(Intercept)'} {'std'} 0.038979 + + + Lower Upper + 0.016492 0.092125 + +Group: Error + Name Estimate Lower Upper + {'Res Std'} 0.093402 0.07855 0.11106 + + +effect t(df) / F(df1) p (resid) Satterthwaite: p (df) +---------------------------------------------------------------------------- +stim x day (interaction) t(66)= 1.82 F(1)= 3.321 p=0.07294 p=0.07278 (df=68) +day (learning) t(66)= 6.77 F(1)= 45.814 p=4.169e-09 p=3.37e-09 (df=70) +stim (main, window start) t(66)= 0.63 F(1)= 0.396 p=0.5315 p=0.5377 (df=17) +interaction 95% CI: [-0.001076, +0.02357] +HONEST LME (per-animal random slope, day|rat): interaction F(1,41.8)=3.20, p=0.08108 + (Satterthwaite DF ~= residual on this random-intercept model; the random-slope + model above is the honest learning-rate test -- DF collapses toward the animal count.) +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.07294, slope diff=+0.01125) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d0_5/analyze.m b/analysis/matlab/variations/unmerge_d0_5/analyze.m index 82da5ed..0d40402 100644 --- a/analysis/matlab/variations/unmerge_d0_5/analyze.m +++ b/analysis/matlab/variations/unmerge_d0_5/analyze.m @@ -1,30 +1,58 @@ -% Variation analysis -- the paper's linear mixed model on the successful-reach -% COUNT, fit on this folder's curated data subset. +% Variation analysis -- the paper's linear mixed model on this folder's data, +% for BOTH metrics: +% metric = count : behavior = # successes -> result.txt +% metric = rate : behavior = success / attempts -> result_rate.txt +% (rate uses only sessions with attempts > 0) % % 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.) +% stim = 1 treatment / 0 control; day = training day within window (0 = +% first analyzed day); rat = subject (random intercept). +% For the interaction we report residual DF, Satterthwaite DF, and the honest +% per-animal random-slope test. Self-contained: reads data.csv beside this +% script. Run headless with: matlab -batch "analyze" +% (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 +vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ... +Rc = localAnalyze(D, 'count', here, vname); +Rr = localAnalyze(D, 'rate', here, vname); + +% Machine-readable handoff for SUMMARY.csv (count drives it; rate appended). +VARRESULT = struct('name', vname, 'nRats', Rc.nRats, 'nObs', Rc.nObs, ... + 'interP', Rc.interP, 'interEst', Rc.interEst, ... + 'interPsatt', Rc.interPsatt, 'interPrs', Rc.interPrs, ... + 'stimP', Rc.stimP, 'dayP', Rc.dayP, 'covEqual', Rc.covEqual, ... + 'interPrate', Rr.interP, 'interEstRate', Rr.interEst, 'interPrsRate', Rr.interPrs); + +% ------------------------------------------------------------------ helper +function R = localAnalyze(D, metric, here, vname) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); + beh = D.success ./ D.total; + mlabel = 'success RATE (success/attempts)'; suffix = '_rate'; +else + beh = D.success; + mlabel = 'success COUNT'; suffix = ''; +end +R = struct('interP', NaN, 'interEst', NaN, 'interPsatt', NaN, 'interPrs', NaN, ... + 'stimP', NaN, 'dayP', NaN, 'nRats', numel(unique(D.subject)), ... + 'nObs', height(D), 'covEqual', false); +if numel(unique(D.stim)) < 2 || numel(unique(D.day)) < 2 + localWrite(sprintf('VARIATION: %s [metric: %s]\nInsufficient data for this metric.\n', ... + vname, mlabel), here, suffix); + return +end + +tbl = table(beh, 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); -As = anova(m, 'DFMethod', 'satterthwaite'); % Satterthwaite denominator DF +As = anova(m, 'DFMethod', 'satterthwaite'); -% Honest test: refit with a per-animal random SLOPE so the interaction DF -% collapses toward the animal count (guarded -- may not converge in short windows). rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; wst = warning('off', 'all'); try @@ -43,6 +71,7 @@ row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%7.3f p=%.4g p=%.4g (df=%.0f C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)), ... As.pValue(gs(t)), As.DF2(gs(t))); +ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii); 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 @@ -50,20 +79,14 @@ if abs(maxT - maxC) > 2 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 +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)'), '', ''); -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 = sprintf('%s\nVARIATION: %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = %s)\n', mlabel)]; 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))), ', '))]; @@ -74,7 +97,7 @@ s = [s sprintf('%-26s %-18s %-12s %s\n%s\n', 'effect', 't(df) / F(df1)', 'p (res 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('interaction 95%% CI: [%+.4g, %+.4g]\n', ci(ii, 1), ci(ii, 2))]; if rsOk s = [s sprintf('HONEST LME (per-animal random slope, day|rat): interaction F(1,%.1f)=%.2f, p=%.4g\n', rsDf, rsF, rsP)]; else @@ -82,17 +105,18 @@ else end s = [s sprintf([' (Satterthwaite DF ~= residual on this random-intercept model; the random-slope\n' ... ' model above is the honest learning-rate test -- DF collapses toward the animal count.)\n'])]; -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')]; +s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.4g)\n', verdict, pI, eI)]; +s = [s sprintf('Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')]; +localWrite(s, here, suffix); + +R = struct('interP', pI, 'interEst', eI, 'interPsatt', As.pValue(gs('day:stim')), ... + 'interPrs', rsP, 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... + 'nRats', numel(unique(D.subject)), 'nObs', height(D), 'covEqual', abs(maxT - maxC) <= 2); +end + +function localWrite(s, here, suffix) 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, ... - 'interPsatt', As.pValue(gs('day:stim')), 'interPrs', rsP, ... - 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... - 'covEqual', abs(maxT - maxC) <= 2); +fid = fopen(fullfile(here, ['result' suffix '.txt']), 'w'); +fprintf(fid, '%s', s); fclose(fid); +end diff --git a/analysis/matlab/variations/unmerge_d0_5/learning_curve.png b/analysis/matlab/variations/unmerge_d0_5/learning_curve.png index 6ba58964fbbc567e5cd649a372dc317cd1cfc1eb..270abdc0ec0ecdf0e5b4d87e7eafb5deab9a5571 100644 GIT binary patch literal 36673 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 literal 36861 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 Z-~yc-+ZX%4hQeu~baxqP=V;oW{$F{TE~5Yd diff --git a/analysis/matlab/variations/unmerge_d0_5/learning_curve_rate.png b/analysis/matlab/variations/unmerge_d0_5/learning_curve_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..be1356c41c07012a7172f357516a8cce9d098944 GIT binary patch literal 37951 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 ap?CRWjwVZA literal 0 HcmV?d00001 diff --git a/analysis/matlab/variations/unmerge_d0_5/logpower_result.txt b/analysis/matlab/variations/unmerge_d0_5/logpower_result.txt index 701968f..651818e 100644 --- a/analysis/matlab/variations/unmerge_d0_5/logpower_result.txt +++ b/analysis/matlab/variations/unmerge_d0_5/logpower_result.txt @@ -1,7 +1,7 @@ ============================================================================== -LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d0_5 +LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d0_5 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT) +model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = # successes (count)) log(day) uses 1-indexed training day (our day 0 = paper "Day 1") observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 @@ -10,7 +10,7 @@ stim x log(day) interaction: F(1,32)=4.849 p(resid)=0.03498 p(Satt)=0.03414 (d honest per-animal random slope (log-day): F(1,7.2)=3.65 p=0.09636 Cohen's f (interaction, partial eta^2=0.039) = 0.200 (small-medium; f: .10 small, .25 medium, .40 large) ---- power simulation (log-day ground truth: stim:logday=+16.48, ratSD=0.00, resSD=13.58) --- +--- power simulation (log-day ground truth: stim:logday=+16.48, ratSD=0, resSD=13.58) --- true stim:log(day) = +16.48 (100% of observed) N/group | per-animal power | LME power @@ -22,7 +22,7 @@ Cohen's f (interaction, partial eta^2=0.039) = 0.200 (small-medium; f: .10 smal 16 | 1.00 | 1.00 24 | 1.00 | 1.00 - true stim:log(day) = +8.24 (50% of observed) + true stim:log(day) = +8.239 (50% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.09 | 0.24 <- observed @@ -32,5 +32,4 @@ Cohen's f (interaction, partial eta^2=0.039) = 0.200 (small-medium; f: .10 smal 16 | 0.69 | 0.69 24 | 0.90 | 0.92 -Read the per-animal column as the honest power; the LME column matches the -paper's power code (anova interaction p, observation-level DF) and is optimistic. +Read per-animal as the honest power; LME matches the paper's power code (optimistic). diff --git a/analysis/matlab/variations/unmerge_d0_5/logpower_result_rate.txt b/analysis/matlab/variations/unmerge_d0_5/logpower_result_rate.txt new file mode 100644 index 0000000..67caa3c --- /dev/null +++ b/analysis/matlab/variations/unmerge_d0_5/logpower_result_rate.txt @@ -0,0 +1,35 @@ +============================================================================== +LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d0_5 [metric: success RATE] +============================================================================== +model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = success RATE) +log(day) uses 1-indexed training day (our day 0 = paper "Day 1") +observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 + +--- fitted on real data --- +stim x log(day) interaction: F(1,32)=10.951 p(resid)=0.002322 p(Satt)=0.00244 (df=30) + honest per-animal random slope (log-day): F(1,8.5)=8.07 p=0.02043 +Cohen's f (interaction, partial eta^2=0.109) = 0.350 (medium; f: .10 small, .25 medium, .40 large) + +--- power simulation (log-day ground truth: stim:logday=+0.1553, ratSD=0.04445, resSD=0.08516) --- + + true stim:log(day) = +0.1553 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.54 | 0.90 <- observed + 5 | 0.93 | 0.97 + 8 | 1.00 | 1.00 + 12 | 1.00 | 1.00 + 16 | 1.00 | 1.00 + 24 | 1.00 | 1.00 + + true stim:log(day) = +0.07765 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.13 | 0.38 <- observed + 5 | 0.44 | 0.54 + 8 | 0.72 | 0.73 + 12 | 0.81 | 0.88 + 16 | 0.94 | 0.97 + 24 | 1.00 | 1.00 + +Read per-animal as the honest power; LME matches the paper's power code (optimistic). diff --git a/analysis/matlab/variations/unmerge_d0_5/logpowersim.m b/analysis/matlab/variations/unmerge_d0_5/logpowersim.m index e0686ee..5e38720 100644 --- a/analysis/matlab/variations/unmerge_d0_5/logpowersim.m +++ b/analysis/matlab/variations/unmerge_d0_5/logpowersim.m @@ -1,50 +1,52 @@ -% Variation log-day analysis + Cohen's f + power simulation. +% Variation log-day analysis + Cohen's f + power simulation, for BOTH metrics: +% metric = count : behavior = # successes -> logpower_result.txt +% metric = rate : behavior = success / attempts -> logpower_result_rate.txt % -% The paper's power code models behavior against LOG training day, not raw day: +% The paper's power code models behavior against LOG training day: % behavior ~ stim + log(day) + stim:log(day) + (1|rat). -% Their day is 1-indexed (1..10); our data.csv day is 0-indexed (day 0 = paper -% "Day 1"), so log(day + 1) reproduces their transform exactly. -% -% This script (a) refits that log-day model on data.csv, (b) reports the -% interaction (residual DF, Satterthwaite DF, and the honest per-animal -% random-slope test) and Cohen's f -- the partial-eta^2 effect size of the -% interaction, var(fitted_full) - var(fitted_no_interaction) over var(behavior) -% -- and (c) runs the Monte-Carlo power simulation on the log-day model, -% scoring per-animal (cluster-honest) and LME power across N. -% Writes logpower_result.txt. Run: matlab -batch "logpowersim" +% Their day is 1-indexed; our data.csv day is 0-indexed, so log(day + 1) +% reproduces their transform (our day 0 = paper "Day 1"). For each metric this +% refits that model, reports the interaction (residual / Satterthwaite / honest +% per-animal random-slope DF) and Cohen's f (partial-eta^2 effect size), then +% runs the Monte-Carlo power sim (per-animal cluster-honest + LME power). +% Run: matlab -batch "logpowersim" % (Copy of analysis/matlab/variation_logpower.m; see make_variation_logpower.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' column = log(day+1) -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; -warnState = warning('off', 'all'); -rng(1); +localLogPower(D, 'count', here, vname); +localLogPower(D, 'rate', here, vname); -logday = log(D.day + 1); % 0-indexed day -> their log(1-indexed day) -tbl0 = table(D.success, logday, double(D.stim), categorical(D.subject), ... +% ---------------------------------------------------------------- per metric +function localLogPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; +FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' = log(day+1) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); +logday = log(D.day + 1); +tbl0 = table(beh, logday, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT)\n')]; +s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = %s)\n', mlabel)]; s = [s sprintf('log(day) uses 1-indexed training day (our day 0 = paper "Day 1")\n')]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for this analysis (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for this analysis.\n')]; + localFinish(s, here, suffix); warning(warnState); return end -% ---- fitted model on the real data ---- full = fitlme(tbl0, FORMULA); An = anova(full); Asatt = anova(full, 'DFMethod', 'satterthwaite'); ii = strcmp(An.Term, 'day:stim'); is = strcmp(Asatt.Term, 'day:stim'); @@ -52,7 +54,6 @@ reduced = fitlme(tbl0, 'behavior ~ stim + day + (1|rat)'); eta2part = max((var(fitted(full)) - var(fitted(reduced))) / var(tbl0.behavior), 0); cohenf = sqrt(eta2part / (1 - eta2part)); -% honest per-animal random-slope interaction rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; try mr = fitlme(tbl0, 'behavior ~ stim + day + stim:day + (day|rat)'); @@ -76,19 +77,18 @@ end s = [s sprintf('Cohen''s f (interaction, partial eta^2=%.3f) = %.3f (%s; f: .10 small, .25 medium, .40 large)\n', ... eta2part, cohenf, mag)]; -% ---- power simulation on the log-day ground truth ---- cn = full.CoefficientNames; be = full.fixedEffects; b0 = be(strcmp(cn, '(Intercept)')); bStim = be(strcmp(cn, 'stim')); bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(full); sRat = sqrt(psi{1}); sRes = sqrt(full.MSE); -days = unique(tbl0.day); % the log(day) grid +days = unique(tbl0.day); -s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.2f, ratSD=%.2f, resSD=%.2f) ---\n', ... +s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.4g, ratSD=%.4g, resSD=%.4g) ---\n', ... bInt, sRat, sRes)]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:log(day) = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:log(day) = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -102,19 +102,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end -s = [s sprintf(['\nRead the per-animal column as the honest power; the LME column matches the\n' ... - 'paper''s power code (anova interaction p, observation-level DF) and is optimistic.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead per-animal as the honest power; LME matches the paper''s power code (optimistic).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'logpower_result.txt'), 'w'); +fid = fopen(fullfile(here, ['logpower_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d0_5/plotcurve.m b/analysis/matlab/variations/unmerge_d0_5/plotcurve.m index bfc1386..193a44b 100644 --- a/analysis/matlab/variations/unmerge_d0_5/plotcurve.m +++ b/analysis/matlab/variations/unmerge_d0_5/plotcurve.m @@ -1,11 +1,12 @@ -% Variation learning-curve plot, in the style of the paper: +% Variation learning-curve plots, in the style of the paper: % "Lines indicate mean (and SEM) across animals in the anodal (red) and % control (blue) groups." -% Plots mean +/- SEM successful reaches per training day for the treatment / -% anodal group (stim = 1, red) and the control group (stim = 0, blue), reading -% this folder's data.csv and saving learning_curve.png. The per-group N is read -% from the data (each variation pools different groups), so the legend shows the -% actual counts. Training day is 1-indexed (our day 0 = the paper's "Day 1"). +% Produces TWO figures from this folder's data.csv: +% learning_curve.png # successes (count) per training day +% learning_curve_rate.png success rate (success/attempts) per training day +% anodal / treatment = stim 1 (red); control = stim 0 (blue). Per-group N is +% read from the data. Training day is 1-indexed (our day 0 = paper "Day 1") and +% the x-axis tick labels are drawn vertically. % Run: matlab -batch "plotcurve" % (Copy of analysis/matlab/variation_plot.m; see make_variation_plot.m.) @@ -14,15 +15,20 @@ if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -days = unique(D.day); % 0-indexed -xd = days + 1; % plot as 1-indexed training day (paper axis) - +days = unique(D.day); +xd = days + 1; % plot as 1-indexed training day (paper axis) red = [0.85 0.10 0.10]; blue = [0.10 0.30 0.85]; -[Ma, Sa, na] = localCurve(D, 1, days); % anodal / treatment (stim = 1) -[Mc, Sc, nc] = localCurve(D, 0, days); % control (stim = 0) +localPlot(D, days, xd, 'count', '# successes', ... + fullfile(here, 'learning_curve.png'), vname, red, blue); +localPlot(D, days, xd, 'rate', 'success rate', ... + fullfile(here, 'learning_curve_rate.png'), vname, red, blue); +% ------------------------------------------------------------------ helpers +function localPlot(D, days, xd, metric, ylab, outFile, vname, red, blue) +[Ma, Sa, na] = localCurve(D, 1, days, metric); % anodal / treatment +[Mc, Sc, nc] = localCurve(D, 0, days, metric); % control fig = figure('Visible', 'off', 'Color', 'w', 'Position', [100 100 560 460]); hold on e1 = errorbar(xd, Ma, Sa, '-o', 'Color', red, 'MarkerFaceColor', red, 'LineWidth', 2); @@ -30,26 +36,30 @@ e2 = errorbar(xd, Mc, Sc, '-o', 'Color', blue, 'MarkerFaceColor', blue, 'LineWid hold off legend([e1 e2], {sprintf('anodal, N = %d', na), sprintf('control, N = %d', nc)}, ... 'Location', 'northwest', 'Box', 'off'); -xlabel('training day'); -ylabel('# successes'); +xlabel('training day'); ylabel(ylab); title(vname, 'Interpreter', 'none'); set(gca, 'XTick', xd, 'FontName', 'Arial', 'FontSize', 13, 'LineWidth', 1.5, 'Box', 'off'); - -outFile = fullfile(here, 'learning_curve.png'); +xtickangle(90); % vertical x-axis tick labels exportgraphics(fig, outFile, 'Resolution', 150); close(fig); -fprintf('%s: wrote learning_curve.png (anodal N=%d, control N=%d)\n', vname, na, nc); +fprintf('%s: wrote %s (anodal N=%d, control N=%d)\n', vname, outFile, na, nc); +end -% ------------------------------------------------------------------ helper -function [M, S, n] = localCurve(D, stimVal, days) -%LOCALCURVE Per-day mean and SEM of successes across the animals in a group. +function [M, S, n] = localCurve(D, stimVal, days, metric) +%LOCALCURVE Per-day mean and SEM across the animals in a group, for a metric. subs = unique(D.subject(D.stim == stimVal)); n = numel(subs); X = nan(numel(days), n); for j = 1:n for i = 1:numel(days) r = D.subject == subs(j) & D.day == days(i); - if any(r); X(i, j) = mean(D.success(r)); end + if ~any(r); continue; end + if strcmp(metric, 'rate') + tot = sum(D.total(r)); + if tot > 0; X(i, j) = sum(D.success(r)) / tot; end + else + X(i, j) = mean(D.success(r)); + end end end M = mean(X, 2, 'omitnan'); diff --git a/analysis/matlab/variations/unmerge_d0_5/power_result.txt b/analysis/matlab/variations/unmerge_d0_5/power_result.txt index ba0a995..186e2e0 100644 --- a/analysis/matlab/variations/unmerge_d0_5/power_result.txt +++ b/analysis/matlab/variations/unmerge_d0_5/power_result.txt @@ -1,11 +1,11 @@ ============================================================================== -POWER SIMULATION -- unmerge_d0_5 +POWER SIMULATION -- unmerge_d0_5 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + day + stim:day + (1|rat) (success COUNT; day within-window) +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = # successes (count); day within-window) observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 -ground truth: stim:day=+5.36/day, rat SD=4.85, residual SD=10.70, days=6 +ground truth: stim:day=+5.362/day, rat SD=4.853, residual SD=10.7, days=6 - true stim:day interaction = +5.36 (100% of observed) + true stim:day interaction = +5.362 (100% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.35 | 0.73 <- observed @@ -15,7 +15,7 @@ ground truth: stim:day=+5.36/day, rat SD=4.85, residual SD=10.70, days=6 16 | 1.00 | 1.00 24 | 1.00 | 1.00 - true stim:day interaction = +2.68 (50% of observed) + true stim:day interaction = +2.681 (50% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.11 | 0.24 <- observed @@ -25,5 +25,4 @@ ground truth: stim:day=+5.36/day, rat SD=4.85, residual SD=10.70, days=6 16 | 0.79 | 0.81 24 | 0.95 | 0.94 -Read the per-animal column as the honest power. At the observed N this study -is typically underpowered; per-animal power reaches ~0.8 only at larger N. +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d0_5/power_result_rate.txt b/analysis/matlab/variations/unmerge_d0_5/power_result_rate.txt new file mode 100644 index 0000000..0978b4a --- /dev/null +++ b/analysis/matlab/variations/unmerge_d0_5/power_result_rate.txt @@ -0,0 +1,28 @@ +============================================================================== +POWER SIMULATION -- unmerge_d0_5 [metric: success RATE] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE; day within-window) +observed groups: stim n=3, control n=3 nrep=120, alpha=0.05 +ground truth: stim:day=+0.04902/day, rat SD=0.04642, residual SD=0.07858, days=6 + + true stim:day interaction = +0.04902 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.52 | 0.89 <- observed + 5 | 0.92 | 0.97 + 8 | 1.00 | 1.00 + 12 | 1.00 | 1.00 + 16 | 1.00 | 1.00 + 24 | 1.00 | 1.00 + + true stim:day interaction = +0.02451 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.12 | 0.34 <- observed + 5 | 0.40 | 0.48 + 8 | 0.62 | 0.72 + 12 | 0.82 | 0.87 + 16 | 0.94 | 0.95 + 24 | 0.99 | 0.99 + +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d0_5/powersim.m b/analysis/matlab/variations/unmerge_d0_5/powersim.m index 554d032..ecd9c6c 100644 --- a/analysis/matlab/variations/unmerge_d0_5/powersim.m +++ b/analysis/matlab/variations/unmerge_d0_5/powersim.m @@ -1,45 +1,49 @@ % Variation power simulation -- Monte-Carlo power for the paper's stim x day -% interaction, using THIS folder's data as the ground truth. +% interaction, using THIS folder's data as the ground truth, for BOTH metrics: +% metric = count : behavior = # successes -> power_result.txt +% metric = rate : behavior = success / attempts -> power_result_rate.txt % % Ground truth: fitlme(behavior ~ stim + day + stim:day + (1|rat)) on data.csv -% (success COUNT; day within-window). Its fixed effects, per-rat intercept SD, -% and residual SD generate NREP synthetic datasets at each rats-per-group N and -% each true-effect multiplier (1 = observed slope, 0.5 = half). Each dataset is -% scored at alpha = 0.05 two ways: -% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest -- the -% honest power, matching the random-slope / per-animal inference) +% (day within-window). Its fixed effects, per-rat intercept SD, and residual SD +% generate NREP synthetic datasets at each rats-per-group N and each true-effect +% multiplier (1 = observed, 0.5 = half). Each is scored at alpha=0.05 by: +% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest power) % LME : the fitlme stim:day p (observation-level DF -- optimistic) -% Writes power_result.txt beside this script. Run: matlab -batch "powersim" +% Writes power_result[_rate].txt. Run: matlab -batch "powersim" % (Copy of analysis/matlab/variation_power.m; see make_variation_power.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); + +localPower(D, 'count', here, vname); +localPower(D, 'rate', here, vname); + +% ---------------------------------------------------------------- per metric +function localPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; - -warnState = warning('off', 'all'); -rng(1); - +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); day0 = min(D.day); -tbl0 = table(D.success, D.day - day0, double(D.stim), categorical(D.subject), ... +tbl0 = table(beh, D.day - day0, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); - nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nPOWER SIMULATION -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: %s (success COUNT; day within-window)\n', FORMULA)]; +s = sprintf('%s\nPOWER SIMULATION -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: %s (behavior = %s; day within-window)\n', FORMULA, mlabel)]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for a power simulation (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for a power simulation.\n')]; + localFinish(s, here, suffix); warning(warnState); return end lme = fitlme(tbl0, FORMULA); @@ -49,14 +53,13 @@ bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(lme); sRat = sqrt(psi{1}); sRes = sqrt(lme.MSE); days = (0:max(tbl0.day))'; -s = [s sprintf('ground truth: stim:day=%+.2f/day, rat SD=%.2f, residual SD=%.2f, days=%d\n', ... +s = [s sprintf('ground truth: stim:day=%+.4g/day, rat SD=%.4g, residual SD=%.4g, days=%d\n', ... bInt, sRat, sRes, numel(days))]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:day interaction = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n', 'N/group')]; %#ok - s = [s sprintf(' %s\n', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:day interaction = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -70,20 +73,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end - -s = [s sprintf(['\nRead the per-animal column as the honest power. At the observed N this study\n' ... - 'is typically underpowered; per-animal power reaches ~0.8 only at larger N.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead the per-animal column as the honest power; LME is optimistic (obs-level DF).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'power_result.txt'), 'w'); +fid = fopen(fullfile(here, ['power_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d0_5/result.txt b/analysis/matlab/variations/unmerge_d0_5/result.txt index 8224622..aff4159 100644 --- a/analysis/matlab/variations/unmerge_d0_5/result.txt +++ b/analysis/matlab/variations/unmerge_d0_5/result.txt @@ -1,5 +1,5 @@ ============================================================================== -VARIATION: unmerge_d0_5 +VARIATION: unmerge_d0_5 [metric: success COUNT] ============================================================================== model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT) day = training day within window (0 = first analyzed day) @@ -60,9 +60,9 @@ effect t(df) / F(df1) p (resid) Satterthwaite: p (df) stim x day (interaction) t(32)= 2.57 F(1)= 6.588 p=0.01515 p=0.0155 (df=30) day (learning) t(32)= 6.67 F(1)= 44.528 p=1.571e-07 p=2.162e-07 (df=30) stim (main, window start) t(32)= -0.40 F(1)= 0.163 p=0.6888 p=0.6906 (df=19) -interaction 95% CI: [+1.11, +9.62] +interaction 95% CI: [+1.107, +9.617] HONEST LME (per-animal random slope, day|rat): interaction F(1,6.0)=3.02, p=0.1331 (Satterthwaite DF ~= residual on this random-intercept model; the random-slope model above is the honest learning-rate test -- DF collapses toward the animal count.) -INTERPRETATION: stim x day interaction SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates) (p=0.01515, slope diff=+5.36) -Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008. +INTERPRETATION: stim x day interaction SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates) (p=0.01515, slope diff=+5.362) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d0_5/result_rate.txt b/analysis/matlab/variations/unmerge_d0_5/result_rate.txt new file mode 100644 index 0000000..dfc4e73 --- /dev/null +++ b/analysis/matlab/variations/unmerge_d0_5/result_rate.txt @@ -0,0 +1,68 @@ +============================================================================== +VARIATION: unmerge_d0_5 [metric: success RATE (success/attempts)] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE (success/attempts)) +day = training day within window (0 = first analyzed day) +treatment (stim=1): Electrode-Box-B2 +control (stim=0): Electrode-Box-A2 +N = 6 rats, 36 sessions raw day coverage: treat 0..5, control 0..5 +(equal day coverage over this window) + +============================================================================== +FULL MODEL SUMMARY -- fitlme +============================================================================== + +Linear mixed-effects model fit by ML + +Model information: + Number of observations 36 + 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 + -62.201 -52.7 37.1 -74.201 + +Fixed effects coefficients (95% CIs): + Name Estimate SE tStat DF pValue + {'(Intercept)'} 0.2186 0.042385 5.1574 32 1.2572e-05 + {'day' } 0.043366 0.010845 3.9986 32 0.0003516 + {'stim' } -0.053758 0.059942 -0.89683 32 0.37651 + {'day:stim' } 0.049022 0.015337 3.1962 32 0.0031273 + + + Lower Upper + 0.13226 0.30494 + 0.021275 0.065457 + -0.17586 0.06834 + 0.01778 0.080263 + +Random effects covariance parameters (95% CIs): +Group: rat (6 Levels) + Name1 Name2 Type Estimate + {'(Intercept)'} {'(Intercept)'} {'std'} 0.046423 + + + Lower Upper + 0.019948 0.10804 + +Group: Error + Name Estimate Lower Upper + {'Res Std'} 0.078581 0.061014 0.10121 + + +effect t(df) / F(df1) p (resid) Satterthwaite: p (df) +---------------------------------------------------------------------------- +stim x day (interaction) t(32)= 3.20 F(1)= 10.216 p=0.003127 p=0.00327 (df=30) +day (learning) t(32)= 4.00 F(1)= 15.989 p=0.0003516 p=0.0003833 (df=30) +stim (main, window start) t(32)= -0.90 F(1)= 0.804 p=0.3765 p=0.3834 (df=16) +interaction 95% CI: [+0.01778, +0.08026] +HONEST LME (per-animal random slope, day|rat): interaction F(1,7.1)=6.49, p=0.0379 + (Satterthwaite DF ~= residual on this random-intercept model; the random-slope + model above is the honest learning-rate test -- DF collapses toward the animal count.) +INTERPRETATION: stim x day interaction SIGNIFICANT positive -- treatment improves FASTER (benefit accumulates) (p=0.003127, slope diff=+0.04902) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d6_10/analyze.m b/analysis/matlab/variations/unmerge_d6_10/analyze.m index 82da5ed..0d40402 100644 --- a/analysis/matlab/variations/unmerge_d6_10/analyze.m +++ b/analysis/matlab/variations/unmerge_d6_10/analyze.m @@ -1,30 +1,58 @@ -% Variation analysis -- the paper's linear mixed model on the successful-reach -% COUNT, fit on this folder's curated data subset. +% Variation analysis -- the paper's linear mixed model on this folder's data, +% for BOTH metrics: +% metric = count : behavior = # successes -> result.txt +% metric = rate : behavior = success / attempts -> result_rate.txt +% (rate uses only sessions with attempts > 0) % % 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.) +% stim = 1 treatment / 0 control; day = training day within window (0 = +% first analyzed day); rat = subject (random intercept). +% For the interaction we report residual DF, Satterthwaite DF, and the honest +% per-animal random-slope test. Self-contained: reads data.csv beside this +% script. Run headless with: matlab -batch "analyze" +% (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 +vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ... +Rc = localAnalyze(D, 'count', here, vname); +Rr = localAnalyze(D, 'rate', here, vname); + +% Machine-readable handoff for SUMMARY.csv (count drives it; rate appended). +VARRESULT = struct('name', vname, 'nRats', Rc.nRats, 'nObs', Rc.nObs, ... + 'interP', Rc.interP, 'interEst', Rc.interEst, ... + 'interPsatt', Rc.interPsatt, 'interPrs', Rc.interPrs, ... + 'stimP', Rc.stimP, 'dayP', Rc.dayP, 'covEqual', Rc.covEqual, ... + 'interPrate', Rr.interP, 'interEstRate', Rr.interEst, 'interPrsRate', Rr.interPrs); + +% ------------------------------------------------------------------ helper +function R = localAnalyze(D, metric, here, vname) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); + beh = D.success ./ D.total; + mlabel = 'success RATE (success/attempts)'; suffix = '_rate'; +else + beh = D.success; + mlabel = 'success COUNT'; suffix = ''; +end +R = struct('interP', NaN, 'interEst', NaN, 'interPsatt', NaN, 'interPrs', NaN, ... + 'stimP', NaN, 'dayP', NaN, 'nRats', numel(unique(D.subject)), ... + 'nObs', height(D), 'covEqual', false); +if numel(unique(D.stim)) < 2 || numel(unique(D.day)) < 2 + localWrite(sprintf('VARIATION: %s [metric: %s]\nInsufficient data for this metric.\n', ... + vname, mlabel), here, suffix); + return +end + +tbl = table(beh, 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); -As = anova(m, 'DFMethod', 'satterthwaite'); % Satterthwaite denominator DF +As = anova(m, 'DFMethod', 'satterthwaite'); -% Honest test: refit with a per-animal random SLOPE so the interaction DF -% collapses toward the animal count (guarded -- may not converge in short windows). rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; wst = warning('off', 'all'); try @@ -43,6 +71,7 @@ row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%7.3f p=%.4g p=%.4g (df=%.0f C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)), ... As.pValue(gs(t)), As.DF2(gs(t))); +ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii); 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 @@ -50,20 +79,14 @@ if abs(maxT - maxC) > 2 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 +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)'), '', ''); -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 = sprintf('%s\nVARIATION: %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = %s)\n', mlabel)]; 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))), ', '))]; @@ -74,7 +97,7 @@ s = [s sprintf('%-26s %-18s %-12s %s\n%s\n', 'effect', 't(df) / F(df1)', 'p (res 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('interaction 95%% CI: [%+.4g, %+.4g]\n', ci(ii, 1), ci(ii, 2))]; if rsOk s = [s sprintf('HONEST LME (per-animal random slope, day|rat): interaction F(1,%.1f)=%.2f, p=%.4g\n', rsDf, rsF, rsP)]; else @@ -82,17 +105,18 @@ else end s = [s sprintf([' (Satterthwaite DF ~= residual on this random-intercept model; the random-slope\n' ... ' model above is the honest learning-rate test -- DF collapses toward the animal count.)\n'])]; -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')]; +s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.4g)\n', verdict, pI, eI)]; +s = [s sprintf('Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')]; +localWrite(s, here, suffix); + +R = struct('interP', pI, 'interEst', eI, 'interPsatt', As.pValue(gs('day:stim')), ... + 'interPrs', rsP, 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... + 'nRats', numel(unique(D.subject)), 'nObs', height(D), 'covEqual', abs(maxT - maxC) <= 2); +end + +function localWrite(s, here, suffix) 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, ... - 'interPsatt', As.pValue(gs('day:stim')), 'interPrs', rsP, ... - 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... - 'covEqual', abs(maxT - maxC) <= 2); +fid = fopen(fullfile(here, ['result' suffix '.txt']), 'w'); +fprintf(fid, '%s', s); fclose(fid); +end diff --git a/analysis/matlab/variations/unmerge_d6_10/learning_curve.png b/analysis/matlab/variations/unmerge_d6_10/learning_curve.png index c30f023700dda2fb5433c48d28feb564d4abf1eb..ceb59d37bcc7835a78a6d79009ddd374178bd622 100644 GIT binary patch delta 17216 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 Ioxb}20WG|OKmY&$ delta 17737 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%0A;gBfpQ&3Wzl!bXK7mV11FL$g)mT6%ycA>7 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 logpower_result.txt +% metric = rate : behavior = success / attempts -> logpower_result_rate.txt % -% The paper's power code models behavior against LOG training day, not raw day: +% The paper's power code models behavior against LOG training day: % behavior ~ stim + log(day) + stim:log(day) + (1|rat). -% Their day is 1-indexed (1..10); our data.csv day is 0-indexed (day 0 = paper -% "Day 1"), so log(day + 1) reproduces their transform exactly. -% -% This script (a) refits that log-day model on data.csv, (b) reports the -% interaction (residual DF, Satterthwaite DF, and the honest per-animal -% random-slope test) and Cohen's f -- the partial-eta^2 effect size of the -% interaction, var(fitted_full) - var(fitted_no_interaction) over var(behavior) -% -- and (c) runs the Monte-Carlo power simulation on the log-day model, -% scoring per-animal (cluster-honest) and LME power across N. -% Writes logpower_result.txt. Run: matlab -batch "logpowersim" +% Their day is 1-indexed; our data.csv day is 0-indexed, so log(day + 1) +% reproduces their transform (our day 0 = paper "Day 1"). For each metric this +% refits that model, reports the interaction (residual / Satterthwaite / honest +% per-animal random-slope DF) and Cohen's f (partial-eta^2 effect size), then +% runs the Monte-Carlo power sim (per-animal cluster-honest + LME power). +% Run: matlab -batch "logpowersim" % (Copy of analysis/matlab/variation_logpower.m; see make_variation_logpower.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' column = log(day+1) -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; -warnState = warning('off', 'all'); -rng(1); +localLogPower(D, 'count', here, vname); +localLogPower(D, 'rate', here, vname); -logday = log(D.day + 1); % 0-indexed day -> their log(1-indexed day) -tbl0 = table(D.success, logday, double(D.stim), categorical(D.subject), ... +% ---------------------------------------------------------------- per metric +function localLogPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; +FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' = log(day+1) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); +logday = log(D.day + 1); +tbl0 = table(beh, logday, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT)\n')]; +s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = %s)\n', mlabel)]; s = [s sprintf('log(day) uses 1-indexed training day (our day 0 = paper "Day 1")\n')]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for this analysis (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for this analysis.\n')]; + localFinish(s, here, suffix); warning(warnState); return end -% ---- fitted model on the real data ---- full = fitlme(tbl0, FORMULA); An = anova(full); Asatt = anova(full, 'DFMethod', 'satterthwaite'); ii = strcmp(An.Term, 'day:stim'); is = strcmp(Asatt.Term, 'day:stim'); @@ -52,7 +54,6 @@ reduced = fitlme(tbl0, 'behavior ~ stim + day + (1|rat)'); eta2part = max((var(fitted(full)) - var(fitted(reduced))) / var(tbl0.behavior), 0); cohenf = sqrt(eta2part / (1 - eta2part)); -% honest per-animal random-slope interaction rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; try mr = fitlme(tbl0, 'behavior ~ stim + day + stim:day + (day|rat)'); @@ -76,19 +77,18 @@ end s = [s sprintf('Cohen''s f (interaction, partial eta^2=%.3f) = %.3f (%s; f: .10 small, .25 medium, .40 large)\n', ... eta2part, cohenf, mag)]; -% ---- power simulation on the log-day ground truth ---- cn = full.CoefficientNames; be = full.fixedEffects; b0 = be(strcmp(cn, '(Intercept)')); bStim = be(strcmp(cn, 'stim')); bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(full); sRat = sqrt(psi{1}); sRes = sqrt(full.MSE); -days = unique(tbl0.day); % the log(day) grid +days = unique(tbl0.day); -s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.2f, ratSD=%.2f, resSD=%.2f) ---\n', ... +s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.4g, ratSD=%.4g, resSD=%.4g) ---\n', ... bInt, sRat, sRes)]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:log(day) = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:log(day) = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -102,19 +102,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end -s = [s sprintf(['\nRead the per-animal column as the honest power; the LME column matches the\n' ... - 'paper''s power code (anova interaction p, observation-level DF) and is optimistic.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead per-animal as the honest power; LME matches the paper''s power code (optimistic).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'logpower_result.txt'), 'w'); +fid = fopen(fullfile(here, ['logpower_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d6_10/plotcurve.m b/analysis/matlab/variations/unmerge_d6_10/plotcurve.m index bfc1386..193a44b 100644 --- a/analysis/matlab/variations/unmerge_d6_10/plotcurve.m +++ b/analysis/matlab/variations/unmerge_d6_10/plotcurve.m @@ -1,11 +1,12 @@ -% Variation learning-curve plot, in the style of the paper: +% Variation learning-curve plots, in the style of the paper: % "Lines indicate mean (and SEM) across animals in the anodal (red) and % control (blue) groups." -% Plots mean +/- SEM successful reaches per training day for the treatment / -% anodal group (stim = 1, red) and the control group (stim = 0, blue), reading -% this folder's data.csv and saving learning_curve.png. The per-group N is read -% from the data (each variation pools different groups), so the legend shows the -% actual counts. Training day is 1-indexed (our day 0 = the paper's "Day 1"). +% Produces TWO figures from this folder's data.csv: +% learning_curve.png # successes (count) per training day +% learning_curve_rate.png success rate (success/attempts) per training day +% anodal / treatment = stim 1 (red); control = stim 0 (blue). Per-group N is +% read from the data. Training day is 1-indexed (our day 0 = paper "Day 1") and +% the x-axis tick labels are drawn vertically. % Run: matlab -batch "plotcurve" % (Copy of analysis/matlab/variation_plot.m; see make_variation_plot.m.) @@ -14,15 +15,20 @@ if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -days = unique(D.day); % 0-indexed -xd = days + 1; % plot as 1-indexed training day (paper axis) - +days = unique(D.day); +xd = days + 1; % plot as 1-indexed training day (paper axis) red = [0.85 0.10 0.10]; blue = [0.10 0.30 0.85]; -[Ma, Sa, na] = localCurve(D, 1, days); % anodal / treatment (stim = 1) -[Mc, Sc, nc] = localCurve(D, 0, days); % control (stim = 0) +localPlot(D, days, xd, 'count', '# successes', ... + fullfile(here, 'learning_curve.png'), vname, red, blue); +localPlot(D, days, xd, 'rate', 'success rate', ... + fullfile(here, 'learning_curve_rate.png'), vname, red, blue); +% ------------------------------------------------------------------ helpers +function localPlot(D, days, xd, metric, ylab, outFile, vname, red, blue) +[Ma, Sa, na] = localCurve(D, 1, days, metric); % anodal / treatment +[Mc, Sc, nc] = localCurve(D, 0, days, metric); % control fig = figure('Visible', 'off', 'Color', 'w', 'Position', [100 100 560 460]); hold on e1 = errorbar(xd, Ma, Sa, '-o', 'Color', red, 'MarkerFaceColor', red, 'LineWidth', 2); @@ -30,26 +36,30 @@ e2 = errorbar(xd, Mc, Sc, '-o', 'Color', blue, 'MarkerFaceColor', blue, 'LineWid hold off legend([e1 e2], {sprintf('anodal, N = %d', na), sprintf('control, N = %d', nc)}, ... 'Location', 'northwest', 'Box', 'off'); -xlabel('training day'); -ylabel('# successes'); +xlabel('training day'); ylabel(ylab); title(vname, 'Interpreter', 'none'); set(gca, 'XTick', xd, 'FontName', 'Arial', 'FontSize', 13, 'LineWidth', 1.5, 'Box', 'off'); - -outFile = fullfile(here, 'learning_curve.png'); +xtickangle(90); % vertical x-axis tick labels exportgraphics(fig, outFile, 'Resolution', 150); close(fig); -fprintf('%s: wrote learning_curve.png (anodal N=%d, control N=%d)\n', vname, na, nc); +fprintf('%s: wrote %s (anodal N=%d, control N=%d)\n', vname, outFile, na, nc); +end -% ------------------------------------------------------------------ helper -function [M, S, n] = localCurve(D, stimVal, days) -%LOCALCURVE Per-day mean and SEM of successes across the animals in a group. +function [M, S, n] = localCurve(D, stimVal, days, metric) +%LOCALCURVE Per-day mean and SEM across the animals in a group, for a metric. subs = unique(D.subject(D.stim == stimVal)); n = numel(subs); X = nan(numel(days), n); for j = 1:n for i = 1:numel(days) r = D.subject == subs(j) & D.day == days(i); - if any(r); X(i, j) = mean(D.success(r)); end + if ~any(r); continue; end + if strcmp(metric, 'rate') + tot = sum(D.total(r)); + if tot > 0; X(i, j) = sum(D.success(r)) / tot; end + else + X(i, j) = mean(D.success(r)); + end end end M = mean(X, 2, 'omitnan'); diff --git a/analysis/matlab/variations/unmerge_d6_10/power_result.txt b/analysis/matlab/variations/unmerge_d6_10/power_result.txt index f3d18a4..eb55bdd 100644 --- a/analysis/matlab/variations/unmerge_d6_10/power_result.txt +++ b/analysis/matlab/variations/unmerge_d6_10/power_result.txt @@ -1,11 +1,11 @@ ============================================================================== -POWER SIMULATION -- unmerge_d6_10 +POWER SIMULATION -- unmerge_d6_10 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + day + stim:day + (1|rat) (success COUNT; day within-window) +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = # successes (count); day within-window) observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 -ground truth: stim:day=+1.77/day, rat SD=6.11, residual SD=8.63, days=5 +ground truth: stim:day=+1.767/day, rat SD=6.107, residual SD=8.629, days=5 - true stim:day interaction = +1.77 (100% of observed) + true stim:day interaction = +1.767 (100% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.05 | 0.10 <- observed @@ -15,7 +15,7 @@ ground truth: stim:day=+1.77/day, rat SD=6.11, residual SD=8.63, days=5 16 | 0.44 | 0.42 24 | 0.57 | 0.58 - true stim:day interaction = +0.88 (50% of observed) + true stim:day interaction = +0.8833 (50% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.07 | 0.11 <- observed @@ -25,5 +25,4 @@ ground truth: stim:day=+1.77/day, rat SD=6.11, residual SD=8.63, days=5 16 | 0.13 | 0.17 24 | 0.22 | 0.23 -Read the per-animal column as the honest power. At the observed N this study -is typically underpowered; per-animal power reaches ~0.8 only at larger N. +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d6_10/power_result_rate.txt b/analysis/matlab/variations/unmerge_d6_10/power_result_rate.txt new file mode 100644 index 0000000..f441b34 --- /dev/null +++ b/analysis/matlab/variations/unmerge_d6_10/power_result_rate.txt @@ -0,0 +1,28 @@ +============================================================================== +POWER SIMULATION -- unmerge_d6_10 [metric: success RATE] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE; day within-window) +observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 +ground truth: stim:day=+0.002261/day, rat SD=0.03997, residual SD=0.0557, days=5 + + true stim:day interaction = +0.002261 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.03 | 0.04 <- observed + 5 | 0.03 | 0.06 + 8 | 0.05 | 0.05 + 12 | 0.08 | 0.07 + 16 | 0.05 | 0.07 + 24 | 0.06 | 0.06 + + true stim:day interaction = +0.00113 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.03 | 0.08 <- observed + 5 | 0.07 | 0.07 + 8 | 0.05 | 0.04 + 12 | 0.06 | 0.07 + 16 | 0.07 | 0.07 + 24 | 0.06 | 0.04 + +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d6_10/powersim.m b/analysis/matlab/variations/unmerge_d6_10/powersim.m index 554d032..ecd9c6c 100644 --- a/analysis/matlab/variations/unmerge_d6_10/powersim.m +++ b/analysis/matlab/variations/unmerge_d6_10/powersim.m @@ -1,45 +1,49 @@ % Variation power simulation -- Monte-Carlo power for the paper's stim x day -% interaction, using THIS folder's data as the ground truth. +% interaction, using THIS folder's data as the ground truth, for BOTH metrics: +% metric = count : behavior = # successes -> power_result.txt +% metric = rate : behavior = success / attempts -> power_result_rate.txt % % Ground truth: fitlme(behavior ~ stim + day + stim:day + (1|rat)) on data.csv -% (success COUNT; day within-window). Its fixed effects, per-rat intercept SD, -% and residual SD generate NREP synthetic datasets at each rats-per-group N and -% each true-effect multiplier (1 = observed slope, 0.5 = half). Each dataset is -% scored at alpha = 0.05 two ways: -% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest -- the -% honest power, matching the random-slope / per-animal inference) +% (day within-window). Its fixed effects, per-rat intercept SD, and residual SD +% generate NREP synthetic datasets at each rats-per-group N and each true-effect +% multiplier (1 = observed, 0.5 = half). Each is scored at alpha=0.05 by: +% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest power) % LME : the fitlme stim:day p (observation-level DF -- optimistic) -% Writes power_result.txt beside this script. Run: matlab -batch "powersim" +% Writes power_result[_rate].txt. Run: matlab -batch "powersim" % (Copy of analysis/matlab/variation_power.m; see make_variation_power.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); + +localPower(D, 'count', here, vname); +localPower(D, 'rate', here, vname); + +% ---------------------------------------------------------------- per metric +function localPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; - -warnState = warning('off', 'all'); -rng(1); - +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); day0 = min(D.day); -tbl0 = table(D.success, D.day - day0, double(D.stim), categorical(D.subject), ... +tbl0 = table(beh, D.day - day0, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); - nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nPOWER SIMULATION -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: %s (success COUNT; day within-window)\n', FORMULA)]; +s = sprintf('%s\nPOWER SIMULATION -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: %s (behavior = %s; day within-window)\n', FORMULA, mlabel)]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for a power simulation (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for a power simulation.\n')]; + localFinish(s, here, suffix); warning(warnState); return end lme = fitlme(tbl0, FORMULA); @@ -49,14 +53,13 @@ bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(lme); sRat = sqrt(psi{1}); sRes = sqrt(lme.MSE); days = (0:max(tbl0.day))'; -s = [s sprintf('ground truth: stim:day=%+.2f/day, rat SD=%.2f, residual SD=%.2f, days=%d\n', ... +s = [s sprintf('ground truth: stim:day=%+.4g/day, rat SD=%.4g, residual SD=%.4g, days=%d\n', ... bInt, sRat, sRes, numel(days))]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:day interaction = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n', 'N/group')]; %#ok - s = [s sprintf(' %s\n', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:day interaction = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -70,20 +73,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end - -s = [s sprintf(['\nRead the per-animal column as the honest power. At the observed N this study\n' ... - 'is typically underpowered; per-animal power reaches ~0.8 only at larger N.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead the per-animal column as the honest power; LME is optimistic (obs-level DF).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'power_result.txt'), 'w'); +fid = fopen(fullfile(here, ['power_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d6_10/result.txt b/analysis/matlab/variations/unmerge_d6_10/result.txt index 7064129..04a5132 100644 --- a/analysis/matlab/variations/unmerge_d6_10/result.txt +++ b/analysis/matlab/variations/unmerge_d6_10/result.txt @@ -1,5 +1,5 @@ ============================================================================== -VARIATION: unmerge_d6_10 +VARIATION: unmerge_d6_10 [metric: success COUNT] ============================================================================== model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT) day = training day within window (0 = first analyzed day) @@ -60,9 +60,9 @@ effect t(df) / F(df1) p (resid) Satterthwaite: p (df) stim x day (interaction) t(21)= 0.71 F(1)= 0.503 p=0.486 p=0.4864 (df=20) day (learning) t(21)= 1.24 F(1)= 1.547 p=0.2273 p=0.2279 (df=20) stim (main, window start) t(21)= 1.73 F(1)= 3.008 p=0.09752 p=0.1098 (df=11) -interaction 95% CI: [-3.41, +6.95] +interaction 95% CI: [-3.414, +6.947] HONEST LME (per-animal random slope, day|rat): interaction F(1,5.0)=0.40, p=0.5549 (Satterthwaite DF ~= residual on this random-intercept model; the random-slope model above is the honest learning-rate test -- DF collapses toward the animal count.) -INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.486, slope diff=+1.77) -Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008. +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.486, slope diff=+1.767) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d6_10/result_rate.txt b/analysis/matlab/variations/unmerge_d6_10/result_rate.txt new file mode 100644 index 0000000..ef071bd --- /dev/null +++ b/analysis/matlab/variations/unmerge_d6_10/result_rate.txt @@ -0,0 +1,68 @@ +============================================================================== +VARIATION: unmerge_d6_10 [metric: success RATE (success/attempts)] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE (success/attempts)) +day = training day within window (0 = first analyzed day) +treatment (stim=1): Electrode-Box-B2 +control (stim=0): Electrode-Box-A2 +N = 5 rats, 25 sessions raw day coverage: treat 6..10, control 6..10 +(equal day coverage over this window) + +============================================================================== +FULL MODEL SUMMARY -- fitlme +============================================================================== + +Linear mixed-effects model fit by ML + +Model information: + Number of observations 25 + Fixed effects coefficients 4 + Random effects coefficients 5 + Covariance parameters 2 + +Formula: + behavior ~ 1 + day*stim + (1 | rat) + +Model fit statistics: + AIC BIC LogLikelihood Deviance + -55.071 -47.758 33.535 -67.071 + +Fixed effects coefficients (95% CIs): + Name Estimate SE tStat DF pValue + {'(Intercept)'} 0.52619 0.041587 12.653 21 2.7251e-11 + {'day' } 0.0099391 0.012456 0.79797 21 0.43382 + {'stim' } 0.11742 0.053689 2.187 21 0.040203 + {'day:stim' } 0.0022606 0.01608 0.14058 21 0.88954 + + + Lower Upper + 0.4397 0.61267 + -0.015964 0.035842 + 0.0057634 0.22907 + -0.03118 0.035701 + +Random effects covariance parameters (95% CIs): +Group: rat (5 Levels) + Name1 Name2 Type Estimate + {'(Intercept)'} {'(Intercept)'} {'std'} 0.039966 + + + Lower Upper + 0.016761 0.095298 + +Group: Error + Name Estimate Lower Upper + {'Res Std'} 0.055703 0.040859 0.075939 + + +effect t(df) / F(df1) p (resid) Satterthwaite: p (df) +---------------------------------------------------------------------------- +stim x day (interaction) t(21)= 0.14 F(1)= 0.020 p=0.8895 p=0.8896 (df=20) +day (learning) t(21)= 0.80 F(1)= 0.637 p=0.4338 p=0.4343 (df=20) +stim (main, window start) t(21)= 2.19 F(1)= 4.783 p=0.0402 p=0.05066 (df=11) +interaction 95% CI: [-0.03118, +0.0357] +HONEST LME (per-animal random slope, day|rat): interaction F(1,5.0)=0.01, p=0.9219 + (Satterthwaite DF ~= residual on this random-intercept model; the random-slope + model above is the honest learning-rate test -- DF collapses toward the animal count.) +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.8895, slope diff=+0.002261) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d6_13/analyze.m b/analysis/matlab/variations/unmerge_d6_13/analyze.m index 82da5ed..0d40402 100644 --- a/analysis/matlab/variations/unmerge_d6_13/analyze.m +++ b/analysis/matlab/variations/unmerge_d6_13/analyze.m @@ -1,30 +1,58 @@ -% Variation analysis -- the paper's linear mixed model on the successful-reach -% COUNT, fit on this folder's curated data subset. +% Variation analysis -- the paper's linear mixed model on this folder's data, +% for BOTH metrics: +% metric = count : behavior = # successes -> result.txt +% metric = rate : behavior = success / attempts -> result_rate.txt +% (rate uses only sessions with attempts > 0) % % 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.) +% stim = 1 treatment / 0 control; day = training day within window (0 = +% first analyzed day); rat = subject (random intercept). +% For the interaction we report residual DF, Satterthwaite DF, and the honest +% per-animal random-slope test. Self-contained: reads data.csv beside this +% script. Run headless with: matlab -batch "analyze" +% (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 +vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -tbl = table(D.success, D.day - min(D.day), double(D.stim), categorical(D.subject), ... +Rc = localAnalyze(D, 'count', here, vname); +Rr = localAnalyze(D, 'rate', here, vname); + +% Machine-readable handoff for SUMMARY.csv (count drives it; rate appended). +VARRESULT = struct('name', vname, 'nRats', Rc.nRats, 'nObs', Rc.nObs, ... + 'interP', Rc.interP, 'interEst', Rc.interEst, ... + 'interPsatt', Rc.interPsatt, 'interPrs', Rc.interPrs, ... + 'stimP', Rc.stimP, 'dayP', Rc.dayP, 'covEqual', Rc.covEqual, ... + 'interPrate', Rr.interP, 'interEstRate', Rr.interEst, 'interPrsRate', Rr.interPrs); + +% ------------------------------------------------------------------ helper +function R = localAnalyze(D, metric, here, vname) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); + beh = D.success ./ D.total; + mlabel = 'success RATE (success/attempts)'; suffix = '_rate'; +else + beh = D.success; + mlabel = 'success COUNT'; suffix = ''; +end +R = struct('interP', NaN, 'interEst', NaN, 'interPsatt', NaN, 'interPrs', NaN, ... + 'stimP', NaN, 'dayP', NaN, 'nRats', numel(unique(D.subject)), ... + 'nObs', height(D), 'covEqual', false); +if numel(unique(D.stim)) < 2 || numel(unique(D.day)) < 2 + localWrite(sprintf('VARIATION: %s [metric: %s]\nInsufficient data for this metric.\n', ... + vname, mlabel), here, suffix); + return +end + +tbl = table(beh, 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); -As = anova(m, 'DFMethod', 'satterthwaite'); % Satterthwaite denominator DF +As = anova(m, 'DFMethod', 'satterthwaite'); -% Honest test: refit with a per-animal random SLOPE so the interaction DF -% collapses toward the animal count (guarded -- may not converge in short windows). rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; wst = warning('off', 'all'); try @@ -43,6 +71,7 @@ row = @(nm, t) sprintf('%-26s t(%d)=%6.2f F(%d)=%7.3f p=%.4g p=%.4g (df=%.0f C.DF(gi(t)), C.tStat(gi(t)), A.DF1(ga(t)), A.FStat(ga(t)), C.pValue(gi(t)), ... As.pValue(gs(t)), As.DF2(gs(t))); +ii = gi('day:stim'); pI = C.pValue(ii); eI = C.Estimate(ii); 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 @@ -50,20 +79,14 @@ if abs(maxT - maxC) > 2 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 +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)'), '', ''); -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 = sprintf('%s\nVARIATION: %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + day + stim:day + (1|rat) (behavior = %s)\n', mlabel)]; 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))), ', '))]; @@ -74,7 +97,7 @@ s = [s sprintf('%-26s %-18s %-12s %s\n%s\n', 'effect', 't(df) / F(df1)', 'p (res 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('interaction 95%% CI: [%+.4g, %+.4g]\n', ci(ii, 1), ci(ii, 2))]; if rsOk s = [s sprintf('HONEST LME (per-animal random slope, day|rat): interaction F(1,%.1f)=%.2f, p=%.4g\n', rsDf, rsF, rsP)]; else @@ -82,17 +105,18 @@ else end s = [s sprintf([' (Satterthwaite DF ~= residual on this random-intercept model; the random-slope\n' ... ' model above is the honest learning-rate test -- DF collapses toward the animal count.)\n'])]; -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')]; +s = [s sprintf('INTERPRETATION: stim x day interaction %s (p=%.4g, slope diff=%+.4g)\n', verdict, pI, eI)]; +s = [s sprintf('Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008.\n')]; +localWrite(s, here, suffix); + +R = struct('interP', pI, 'interEst', eI, 'interPsatt', As.pValue(gs('day:stim')), ... + 'interPrs', rsP, 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... + 'nRats', numel(unique(D.subject)), 'nObs', height(D), 'covEqual', abs(maxT - maxC) <= 2); +end + +function localWrite(s, here, suffix) 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, ... - 'interPsatt', As.pValue(gs('day:stim')), 'interPrs', rsP, ... - 'stimP', C.pValue(gi('stim')), 'dayP', C.pValue(gi('day')), ... - 'covEqual', abs(maxT - maxC) <= 2); +fid = fopen(fullfile(here, ['result' suffix '.txt']), 'w'); +fprintf(fid, '%s', s); fclose(fid); +end diff --git a/analysis/matlab/variations/unmerge_d6_13/learning_curve.png b/analysis/matlab/variations/unmerge_d6_13/learning_curve.png index d5a8c3beb4b5f88d95b1f8d48f13169c905add8c..74f844dec588da817d7e9767987f780f73aef11a 100644 GIT binary patch literal 41821 zcmeFZcRZK<|33UKC7N0)lqiucA<0On>||w@l9iF{UC}Tawh-APQQ0#MGh`tqiL~wF1t}F0 ziJ}?**-)*=PXvr3DDaKi>cW*fB+|ZJ#DD9Iq8e}%X_L)G1?f#goAz&HJ5g7@wHH4+ zY9p;_bJ_Byjr}!iLz2Q-Rr#}$oQGA74G$|^voY4Nv^KlLdHABmb?!5o9s6-SGjaSm zYr|_cCYBb5RZYwdNheNn$=crHI>CEF@Gvjm>65&t1$Z6bX!Vdthe;Qu&Z;^@jC45a z1oo0wC(NWI1TQ{UQNH|Dx6!R{eN6C=-@%8@J=NAS3DsuHjSj>=?=rtA=h}Vwk}_uw z?U$eXb!5No$=Y!F?5=OhS8qgiG0q9k+0#+(56)}Ts}ryN^K!Vj@8y=${nLFf>TGq{ z)6_X|k0iDjb?F_%Uy{z6YE0uhjrotv%G%oCH%d`rqdh&UZ~v?#HC`jr<5$Ytr@BZU z?1zsXyE*r_|0ZPH5tAcW z{p}~z`E5&=R~~Ng``hbVwsc88`uzFx#Gi6jR@M+hRZT;v8Kbt*3-l8~L7eDK=(_M>k)UTluz? zRj8=*Y+p_I{d@N)w==NKU6hmCLQQ?VI*Fuuy~&*->Eq3>p|=OVF%2$$+9B>T*I{ov z_C~+Nt+y(uVW#5wkq{nzZrvy`SEuFqiH4c(()+EiuLJ}I?cKF&7ag6`((LH+@^Ubj zwv&T{?;+8A^|aOSxQgm(v$l8fHXYGt@89XK?d|LPi^s#3O-xM8&d%!Q+l1kK?b+sD zGz$w0&a)$JS!Nn8E`{o;=3T`r(}Rs29Ua@qdlHqRw(rTMSo*D1obDZj+XJjmKU7AfwN-D4)yJ=`BI@5F+A6m}1_K9*E z-Hj1(|KAK^E)K14bW2ud!)0P`TU$FV^oFo1ylBD-fAnT*P18-uNbYfy6qllfn z+W`g!&XwK!B)8I?G{(nv?%df>&7tuo(Bcd!MRZcggRZ=+Os3dvdf*byn3!m!sv7un z|L(P~y?giW*>hCrMOfGsP0b4eRZkCzR@K!-3E%1a_32@J!Q5DvxOGp(@0aOG0KJ>x8{t^%E-u=>vDJREOgAL z;1v?8tE}898HbA-8Y+bH{`%Wd;3TdqD_fO&`;W!XT&5hI0=v;4S!UwPpY193 zqS?5QigM$|G`%7%p-nJoJn0C`fQgA|xHX-}_Ct_y){ne9{Wy_^1>pfLY1%s&PGy+4 z3-a^x51wzF!Ab?ND#^BPqdOUT>UNAvbwk5sIiovgwZjeeAk+ErU&Y16_#IpJ9T>-h zZS*~S6~D9_-d;a1>>eH-9#TC{QWfv9Bnc>D<9mj`e*KEQ)e&;3-hS|OQ@Vc1wNDQ! zxva^xwYA%+sh@w!`P&%Gqc3JNpxiOewKNd>RL^a}P&NlS2@zthT25C=+*T|) z@|#oCIM~^TO7CyNU3_}5ZDzRDeXMBC<~+Ao6RXloPfyQ1Te~FTl8hbWx`~RBGJbR& zu&;)Axh?y+1KZ77$>po7o3JoiS+Zn4{N`_WHx2fZk&(yq)SW)xkdRjR(`L7biQ>f} zj*fA23yaPeX`iO1rk|}dLav)T&rszJk~WPD%o3EJ$m#=v(Vvf#Db)x zq|H=LSXh|L=-8O})ejzR?~VHV`nYv+$4A=Ut1JyRCZ_8av?M5m8&(Gk7=OFkn4nNv zTH28Ia0erKd8&?ra_cj_zisc&Z|^d1&+aI8bzWJViMRMu{xl?I-}1`J!)^3^0|S~? zJ^HRQYS;{!Ck%rlBQ9f|q9)dhKlAQjk^Gl@8HBCtW2Dv9)ejsvfR)<1V~5cE`_JX& z=`f)D?Ck8$_eM&vF;AMjygWwN>3SHB7ftz7#?^^(Mx40WpPbD?=XbN_g}`Jrwkb`& zq*$-WN%9fw7-mN2(wb$~+B4k$()lkugI@5~Jd7PdjFXE?S4Rh4d%|u+Q%wqX-BpDk|&O zua7H0TF^>UeVf&rx{Zd89Uevf^Z$L4q;7K1& z&s^(X?}(Bd^Y&xn=6`?Ysm#+#Hl=FR)zw*k4ds)3gb0V{fFkic~`HA6d(*>}0l zMY^nvyszWF@=mI%O;AvfL;ZEG!^H12?VQbGrijhfZI#-VMJ!&HOj2;pmF4B_ht9C6 zT^RfRHnwSD3I6|-Q9SrfO-+qPnig@C=fj8RZEU8IMz<8p=bxHs)ejNcOJw9K zPh?M+nW_BXqvOa^4o*%(*{6hs{SJz>G&WwI<6$6u`$A?Vndaj@2WmO07c{A!2L-W= z*}O99sd#QJECp|A&onvGHPlg%LqrJnAX)o1LsQcfn~CmHijK;TeR>XO=YH`Nj^EQ^ zj8RYBw*4yHe4~A6vBN}+i>Sl+)eb66*ns=Wus$Uti_)ik43E>&(iqC?UW#&dl%;;PM$xP zqqOtksi86(-6E$M_U~-w4hB~HB_H)ixfge9XKJPWz1p))W^+|-ZL#gJI<|T9u(D@+ zj%9UgzI*B(LDk30!@DGVdU|Yzng)?|Z^0T241T{5FzZRPR74U%N`!fb7+mcg#&^W* zEAMaC#9a*NtBbN658q9?N~V|ayJ=>Yx-T7@=l56v7|8dpT*s~+#KED?cNrPa(tA%l zEm$md+=y`55N_RDw{B@=-#V~=Kbz9mElf`s#r5*<23=Yuul)J_`;AVX zH6lBLMz!|vE#wQB+TIgKNkNQ&Ybjig=|#+e`HInxgo3BTZr;3!XXS`FXJPTC(~jkL zR6%Zq&8qb`u9WBde_q!fd+O)Dy42<5t~GE%H_X<}&8<|XL!2q!Zj?R5cMFqgbIQ!( zaJqhxlbVxB#v5HeM2nhmp{UcgrdXc@r6_Izi|-kwjg9Yp&Cab;l|%Gz_OwX5ca)Fs zt)z^>)(+wBpFe*d;J+DIWRR<#rUfwPIN9@fdJ+-A=^*@Sb8&S`i+a3DWxWePgN22K zA;ZP9`T8gJFlfriJg`X4k=Z1Y=-4maah%(K87W*F@Zm>}Wml?3`n@i# z3iss;n?;&-OKdw&roaH6v(-6W~jMQ_W>IZOCTcI{K5kA@nX1T zF`t8=@--U`%|oZGB!n{hdU{6MbLzSabaZvM&|gG8WsP!~T#kwDQpQkyd?o zg$ozH6`5I0on?~3Z6IjI4S)VD)iGgqlCC3!G9>tgBn-VLc`-CJbT_NwK)A1tQ*WZvQE(Z0)a$+JPu+Z3lz7 zdbJz(x)KG5{Ju_1#Hw2&S!jBoJtuwHP};)cFFYyEAQYIDOFNt4j6+6-km8Gz7mH`7 zrnC`QzWD6h!6~iiQ0Ap% zRm2LtLWc?D-MP_rAtc;*xsa-{W)96wqysas{fuJQrPHTQRfu>ph&loI$2Md|Ms{ps zbjfg-Fc^&IGvnJU2y}*zM~T=gQawlNt`!-}G_H?<=fQak3I`qfYa`2_95h?zUji_W zm)n;&eiNYW*RNjy{PObhUu$da?Co1ShP3;B|2}cO%r`pv@L+F>S}MR+eWpnx;Oym2 z>-Nr0V&&Lpc4#AjUko^g458@c`0L|Fd;2-0OzZ{1K(txwo40S@PAa8|n6Hk(5evqO z1By4`si~=`o++L8uZa-8EXJIv-%6QOO2uC)Eu`Jr=kE~k_7PpDQPH3vF!S8 z3%v++jSUS92M+?hi6MgE3BG*(T+v}8RQBe~5DH2p&GS-HBV8q{gx_4eSZ|sIq&o2Z z?H|+@dd{O+DoxI(L_`>ct#6==Lq54~U=Wij(23uc`5w5_TeUYYyps_j!4z2F+{5i1 z07+VDin6k>eN<4eU6+-a*7HvoObiXx${1UI{#;H?Fa81SYivA#h*S7Z;a8yh<|`Um;x3b#eNDn9HdkR+4wLfvq5^i3a!aJZEI!M;4K+IPA`l zl=*`k$V;dmq6ExZno~7~o05+(x+uR!$O8C2$-`qg@a+|@%Kn{+nVA`J>GbK-TwFDs zoyEY9vA7rBs}dI3Rh z2Mpoc5yE%k;@K&=fLjsap6e&X#YF&LH6>sE^l*oMp0#0eNIQju0+6;ipu|GFpI;3Y zJZ?Dl{8IwG77L(KY;gUI&n9b^8~EbJOUR4E@k^)vq-nl208zl=R2|B9ot9h2IA($* zam}};tFp54y-}SQK%AeS0$gkBn`oY|a1Ve6+d7TLy(sLw#`vz6$w!=eYtoni!U8Cu z3s*&CKry<~={$B|^$JNj0N|9Uy5Z^pdQQ&Hs1F1ze$Hb(Q8QcTAU~mA%d=s8d$WeF z=<-c(wa<5FdyRj8ethWAAr>c}zcETAW#6|mU7eksU^9U4u3x=+RZ8l!QIzY=8!MG# zC97h1IMiozBW+WOQEm;X;+0iZuyGBPaQ{^KZ@qqaZ2EP|q?(oHPLz)kO03b(cfd0GNlvi4(4Oedq>(>syxU zLix^(1*6mr3u{A^2ja9?W?e6_&B(}T9|J=nDnC?WsND-ur?CfBwX|fz$o`c1ZP~G7 z6~zU07fJc9Z<=_RxVzhNMWOHS4CN5^uuiOs5yly1+$T<`P}RRPtiIP?1uM!nYyCUf zTa7x5(>9Ws)FcmUJ$|e17D?jE2|IGZo?lBSGuN$K*Voq<+f;;QWo4BXs1$UbHFm0fDN4V0uiErgA_t(hHjvqhPlmp{ zIB72_`O$kX2WnHX)n(ZC6tfd}2x=zNR>3n{2a8mqK1xYTZ=|H86*&qfh(uzi2xyAp z)XX@1i zWoKn6C@R)gRPZ{?fn}1UqNk_7E|&9%IRNNy|I`M2>_bzPusf=C_r<|P*rZ;TY0$|W z-OOVOFHnkg71-BxcOdCAc|I3;Vn5c|5&D@}1l4Hk+Ai$JvtwxhC#D&na=P4>MsvD0 zGu^v?A7qYpmZ>d*Hz=_FpI5%*Th#^P(8R=KQqD22=l-T0Ju+B0 zm0PMR00Cfg@XLc|9KJO)SXTue2Sb308>EG}RksI?L2ZO^gS;?tnr-`oN&w-+5KM~7 zU~+}?zkMdr{?jO)cCxrV#4XwcTz4c zEQ-7O{V?ZjdC z@MkhPyC)?&2pm|hLq$hO53&Hj4IB|g|w%2{7hQF zy(WcKbRD}9|2|tKhxTVxb8~5X!SAw-#K+J5&yP3gImCfLsJL9ap0EVcU#K`l1rl+Sj zACOR0Z2~UK)EY(nrQ5qV%d)E&tR?Jh9884bg$tU+E{ZZPulR4hv!p0H*74s133Hb+c!Ku4DE`Rme|tBdsx342oB`95TyGx5dH9MV1?e zhOU#9tYDMAXPdW=|N0~XGEPrPumQlAV49G5hO&grTI30!oHp)&<)6gz`a3z+u4Fe5}Y8^wQE440qmiGp^;%>V5IVZ$j8UW;m0B(B61x#^GQ?* z^Yim??_!{Y;NW1857o%*lw0>l3w;D=a~&_;q?MMfmZ}~pVqaTT<^AMIC(=I5Yj&(_ z46P0Bl7~nxpymPfmk_KbrlyeeLReq<^$ZU?18>AEZP>I)uB7r_oIv!(cK4MT4JIkD zI&vq`-cjEByhK5AE;G^~esM{AIHKwDUxJ7A8pFj91<#qvU%0UUlvOvluVS43?0w3M zekd`i-r5W{03pr|HOrZTa_gz)DPh>X`_2T`4CD*dPDaMnUk@2Ud!m+kLMI?Qlu&OB zhpLMZ{?p$-2Vg7b7cOXykZf;f*O_A(6&o8%Be~Wmk^g(RvaSw$@K!x_rThL4fb-+x zR)}N7!h`@fw;4qRRi`tHi|bSI8CC^?ht`3~+GRvb8q0HC4kBNczf^E7oAn z0Ido8#O8^*lM5qCSP19;ltc5evN9QUB?vl{IV$8%v>oj1?7(&Rj&pftynCmWYxN7P zkR5Op;JMr>WxfH7C=k_?R0i^t)e4g-jwuwVoVf$raa%XvGrRIozaY~U&eaU($ex2P5Xz0 zXuyZ7dVdii_4N7PI(x4>u5tZ=8eFD-3tIWDIa9G%jtQsU;?@e)9V zYGSgQXV?~f7elaYYV1LQp^Rr74x1+>&Pl-FJ4!Zq(!fRmqZ#=OJd284Wn^SjRQyj$ z4qBA%42~=)So-$rTw`OS_{wynwR@*?H1l6%@Ss8r@l~!C_99Ey237)}|{PyZhw$5R05UBNt z;3%+lcpu10AL+F~4-I8Tm;0)#l$2Cgv8%$wPU(!SEI%KgM&pxsSP_@`aj?#)5nzF? zuC99zA)_eoUnp4g@$)-~;t3A{V?3tx@+b1UNgq+L@@pzw8u9;(bWFtr@7mm%ayjt{ z4KqLgWwO#liD6{Ejgan6$s0Fr6fX3IgNU&~gY1l>HL4LD4T5PeFwy?~#ywB3s62V{ z1R-t(y#PS|fuSMO@p3)^4i1ie`$CZ6=LQ>%P{yEiWjJkP3`Qh~k+{393))flbL`vf zk5rztm^vGl6|UVTo|&;X0#~T2sIaoP@5;ALEo^>F6Vqhd3<3*Tg3d3Yo9p-;xdpxL zZAvfC)cbT>p9~r4ELuWrK;?GIX5g95ac<8f-S*7Y6$bvBU(um~-%(IdU{T_G6Q!r7 zrj}5u`TTv4Y6&oMmtP!G3p%NJcB5LVs(TjbNghLf%W3I_vrHGcE*fpJv}_!8XC5^d zy7_fK`W>G0D|20Pb01JH%%V|2c|A$>MMI{^Wv0(adq)J0v9O@{)5y^VRw>=No$llX zAv83R*q%1{eY=1v6?nw5aH0$e_QCdpTHh1y=5y;6YL1Xuz4m@ZR}#Ddzp$_)d3gcs ze?tL>IoUkM03BUr#|(1A(bqb<2VGozM{bSw-OL~7B5NqcXy^kt`GH>XR@o?~p`pR_ z83pUi4`h-T{{As&xor%==4{`-UGh;<5?hA_x?T-t&yT%~|FIV(W82&757~a%xv?}O zkJxuQvhwhNNUsas6^J^peDC@6d>JGHJ4ASFFZcqbF?F!7_=^_}A|ubz4&V=V{=O20 zFQx766}$FaW-M+*2PQBukkM`a6=(pJY8*$Ht&mU-zftW`7M7styI62Upy7q7{&VNf zo%h|(B#@Aph}xoD^3khv535+!!M!`cOkglBy+ImrhLPBLFlJRXHO;Qwcj`o0J&6`J zK~P;BKwkq9_dQBR)P3mKR##QAb2h={;0qt?>u)bk53;PBJqlEh%!s83J~pN>6lvcX zCS<8+Wo3oamOVMh;dGZ+Qnix1{m7w!Gmnm<{{J>#J|V8&mv&aa%ml%BWm)e;$+Z-^Hm(_2nwIRejWM! z#Yd7#NvRI>m7{?(=wz@z1bPOr2Ra7Zq8M=s?I9mDzh8+9=rZ7uw`q{JPyYC~fquvcVAh>@8Y zd|mT<)ByzDT_^e~r2W0GY!?$#`1ny?bb-qg4h*i*6dW8H zC1Cz=YcTs+#QKu)k6S?HW`p8GkJ>*VKyLagqPN$>hdU0O=m8uBK`89D>=1BF0X#k< z9i6GAC6E0b8=I}$w#|%>XJluCOS)lWV}k}P$eC55(q?*xhJyuS!1ug6Mlk=sfPl2L zc7S0Zc7%=|{ft^YKuPSjjg9Y}JH&%Hl(>{Oxd}GdT)FZqC zMF-S6vfQO_eK|{(X{Oz~*A_7Va7=w#0tnSFRw#M#>9VeaAKwDKnl_yH_wV2APJ2)_ zlo_nBtQ8ON!lVo?CIPTMsolXu#h6rvib3^z@UyVz&#j$HxtMSvWxq@AgrbJ+;qtb% zZ;QKk|9*B5e;r_Q52xuL!QUiy%&_8{hc)`4|Mzd2?k1A!3RHYX|NKCbx*xRuK29rP zC_xrvnz4LQQ5_~dcY8@;cYfU46A+|89ui9?%4Oy42(84o8P;PxqCd{Q8J%rS-e@1& zho43#FrzXu+r%MkG~9Bpz%FC*(5Uk5Ke$f`uUG%`)Bicif;RO~*GVUy8Lg{F_4W0U zXTVqnPWwUXf)XBIFdg>SPr;@5_*4T*Rtc8<{!(6E7bV`+(NP4T3HU^R$||~~WEHiG z{7N2yB~YFPFA6Dqc%%AsqrJ_J-;WC;2H$qqQk4`mi+F*hgl~gnP@9$@gN*wPE@J=;k@$hGx|2B zx7xEu(XsZTIsf!f+OtczK^A~ymJg4{bsJt9-d>pOMc%f@B7vyEqrC(%hwlB%A_BN8 z_zpOYB?2@M1;Q)8J9#-b_f&@%dJ0&15RC+I$uxdmP(VO)C^?ov-hC-6lXd<0@uQB8 z4gwUD=YIa1zCJ!afjpl+efpg?={px=m&Wlj;gkCKm&1iC}q$; zKw))$NWH+$oar-`1S_VHhYbN3fb$OJZ>lkA+d@p}Iis+|F?78?ZD| zo+K4PKzYi1J&v@O*E@|ooD8<%M zP+mYo)&d1YUPwp?%B-xcn(As)txo6|gTc+a)pp|e4YMpQclTAElI4c-^8U|{ccVov zNoDfe4t40umoFP$XVd%!jYf|W9CknePLw5tTm)@dK*{Q_Um0)-#HBb3qI9}F`a@vT zriY;T2sC6WM8-4ze<)^t_;0_3b4xygWF%zT4?bDNi0 zuN|+$>y<4x@apDAOqn^G#I}}s%^A7a%;nF^|7bi5RUa2Ib z$~r(t_aY*~rKe)&jvYG|Mp1J&p{ni)!A61p%yV1G*STl#EU*J2lal%0TZDn#WETew zZ~Q-(D306CWg|tRhy@$v?C2P@^a*Lg@Z5_1jD6qN158q2BW8X;71fULke`=F%>?sh z^&IFdDkx-A28m`q=(mqs=bO1Zd7*!XorQsc!IP%!mVx=TYxO9)I)eS(oZ9jV3U;6y zAS${7WfxZ$Yl!NF3l)WqQ(tRpTGRDc5gIf`t|C&eujp#-LgC{@113&-I?r_}n9Hmlgy!6WglrqFpdyI_6TWj8p0kxy8X=1C$rArT>%{dE!6!Yo*yC25h0_ zM6LG&C|oBVU?@ds(td_@bb>X_mD4wKR0i9>xzj&**Ug*c*kkA4>^i;?fck`+Q=XNL z4MFnK7@#LvHFnzn`Ex$>eqe>Cg@s2ui?kPM5!#zJG`SCN(QU{b*+GP|`m)Yza^ayC zD@3z_z_Xnu+FBj+J(U6XayG%YPH$LRDnx-Fuy0Gg2g;K76Y_YVvYb8zk8dJz@X z1(y1XO%&oT?K1s24H=m-=sETtJlFwBnz-`m)4{iX!lKxZxQBZp)kM{Am*Gyf;h*Tc zk6$Y)C?Ct3RPeV{OL{WQ<_lm6Lt%kVA7td=lMZHl;4(7ZvSw?RO^4}0K z#LJv6X&8X)%U_fT?^Hrj7(o_s{yfn#5@%ye8W=-vmY6xW@;G__PwzNiQMvNwW;Ln_ zY~x^-vxCDK@b<4>z54B*$`3n9wdZxVv&+^>qm>NImxvkQW#{Wi+?R^bH&!^MsHgWb zDk_T4*^&`Gr8lRf&kvyodtOEcYvBwy?P&?9aTqYwi;K&xrNt=o{zcXjFBdYv zk0F2d)DhA2;xgZr!O`6P;I~-pL3!7a_&5MogqCnYGa=(| z5>%H^2}Vap<5_<_BY_~TIQ0s@LxOYKvmp+w1)FC@P0c|ei-^+gQ~h;DT*pYHX8MKp zOyZWgOETwHO zJV8gXa1)LX`j9h=BmRpTlf?O$ymqwVk`lehPE4)a)uC+w&W!nABf5Xk;lKFqfB)-$ zuf)FP-IJ(mWY5K_8_CGfHkQ|<-8N1_ zA(G;~s~_IF>I#LJM!H_w<-}UFbhivAG@I@?bY?#)Maa0}dO%_TWz)m0mOv12X|C_$ z|F4aAfbpCE?XK6<)^g`-BlQFxzYK92R}NIb<~2rO01Fx}Qf!qJrnL zipoC_Dj8ktbe%kvc$FaIwN_ue;Vm*k1?u-%q%TOy5Nr~{)3!{`%mke#^qD7-kC zhsc3rAkPR44ISw1-FxT|w>`L?;E!`ilE)Myz60HWU<6@f`90$rctfN|H%M@+#wn12 z1FXhpgUt$T%`UxO>oIv>y+zhT35-iZ8^0f4J9l1^BBNL?1Ge&{K`=uTF@Vn8+#GD0 z8hbM&bO!jkejT*{hi64ql@_E(GzO3`f*lKM0&COO+A0JQ142Dw@>2L^REcH^G|`|}25e`ir%&?pJ7c#1$Nd=Bx|U%F!b_lZD!E#^9*D%iSuvECNlFKSz4jee{X$}>WR7%uLdKfc6d-WpMe;eQ< z&@lYl0B5r&*Mir@2n0kJP-+_F@u2}nbqxzT&ZSb&gfL3VKXotDTZPSiX=y1P(j%(3 z246Pk%}cH6LkV7UoHx$;PO{QlP!Raq)(QFAhAHCFQL5duqbD!Zqf85Xud+nJ75a8%%b?Yh>-&%rLAI2 ze0-OvE{#0-v&&l^7xGj2zB5jeY7=ABW;)ev=m+vQn-&FsWFJ!qDgo$@AMb#LqTc%6 z-cCQ#f+ip#9Lux*(%k{^3N;gyl_oJ~VY;fi`RAVv^;6*1 ze|}x!b&)%9;-l}yjhz7%uKr!fG!RH;VEy4krKZLC7WYT7|3 z=r)CbaZz9XGsckG4jSA9P=)`dCmzDXz_-msH+X0)-I+#ZA-#n27XKJCmLWGk-vaCb zA=i?Vd!Lg7y?!h5X{h3n*VEnXAApSn|(4teC=nvTxOBW<|$MCghvjs3LO3rdfndU zNZB_2 zNJ?|QXt<}>-t6;$PB`qFhGywwoT&7;IfsS@{&bL~Zz*3`6B3Y1ug(jG7RudSW7n27 z9w!vZ{lm0TUHfffd0_1X0+H(*J5Q`N`%T|`RBYyxo(x{Qb>(x%g-5xLxTDsJE=zva z!^O1r*PF*jR1e}hmmgZ5C9Wb-bLsAXPvH46dtauVE!XedDr*Q^@mm3n0|`ZjYgkLw zs461m`kA#$r6kG<{Co2JOJvo9f7aGeIZd_p-y3U|Vo~b!*V-$Jr-U3q_3=1Y=qhna zH4QcYoVCpA!TvhqQ_sP|qM$Qs0b4^&M(SHt-2)bd#e_}<%ee2=YLPY#)t#%udUKMW=Hy`YkxcOOEq%WKb8>~I?KIrZFgnw zk8b?O(medH{V3pEyFS~xgre$4Yo-{>JF3h5&krdRhXRkReaQP`ru_mlVPhY7{d115 z+2B=)Yl%aedHK7FtM9E{&i(3-_PDiA&Wn4Q^B9i~Rb89xUHcu0DRfr-AE$^&iCvSg zNcfdy=6qZ`TwqV)kSY~%Aqj=gnfB6ax7@^ebj({VHHJuaq+Xh04hBfyG2pqrvcMl& zeVCnTV^VXNX_lUkUew3!0hYUHW#-lQuN|Zo6j->0a#-Zhp%x2^?VX+KZ{El|YX}mn z=E0tvah0pm*Y~Thug&-bR;cR1;%@vr<@|Ny9|ea$+OvFKChnv;fR0AFA?H~k2Q{V{ zz-jFF)6yOPRu!|em}AGn+h<-b@wa&^u5Jg5g-o>4JXv6yQY zh!b=@~c{<8QrdY->rOLZ7XCy?eRI%`}#F~);8<$ zS-}(T@29RBt_had9{BHWFEiUkYghg$c0deG7kRh;EX3+{?=R1>KEK_44$JM!+V;-c z)_fOjFdfZRt7kZ_cm4|7dEz#e?}X()kP3Ae+sUEPTK4J{U6vM)mk{-qBaRwcYrj9D zT1)3|eXVzBsCzVRX*bq`pIDzH3;E2_>5rhYIU2 z5D^w$K=ww8Z8SgQx`>9lm9_OdFwW>DK(u~+aVLZWje}pzE^9p4qi~w*ofM;aji*rb zCo3|<6B$pRK1B+(AnSoO{IDvxh81AEK7@@m0ph zVec3DEuy|FC0q|?=Q$R~<%%|`zj9~rSiiMr3`W*qCxFh{tz`C;8+#W z0$x_=rH(F_AVack8C zf>OrwzgN+GL9`R3-Xgb+ig&)h2GRDHfJM)JjrmM6QK5uJp)=vO)ae#ZYUg=qrUDsfAn0Q!Ba@yD-`xkY{pcv#;! z><;?d2cN>2942(#hLRJ}mB4T@Cnu+#WAEM$i!PTbKbjcO-kbf#Eo*tG@sr(j;^yHw3 z8wSpS^C4VUkppOYO<#a>bW_ooNPYzeyLY|LutnaMB1wL0KgRu_ z0MN=bzBaCo4I*YE82zZhq;GvGsLyF8BqXaqQf2q*8$&)=N0Md#l9}UKwVM>AaA`q1 zwjNp>)b>XOKW-RBR9Jg2z_DXuXk24^C(}@Pqd*buSt3d z!^_6xPBehPv@(i1sgAdR0MvKFpv(0#h?XUCxEUbXQ_I6gSkTNu{mt>cw6oI<;ua_wLBsxm{0c$>)5Y8C zNv0dFClsxVmgRp|Qb)8tLPedkOUJpw&p1wkvDLJ)!=tJo2YgFv-sqEun@l+X=R<>R zmt-c+KVYA2(kMgqJTUNv_qBB-(>*v@69eU>y`th1u)-K7s2@8iB-Cn}1xZ`Nf&HXt znZu40NhVugm$<-eF#{725a8oxgy1F{Z*609vgQLw-l)=XbBJiHB3VePJ8&`x@I7f@ zx7@$YF=&qlzT_jgf4K1t2;4aZ4tGCz|Grc~5gF*+U1|^0uM%W(YYCaflWOzkA0_T3 zrE{R9jZkz!qb2!BsMFz7+#d>(DnDJ;BJ{140rrrT;WNFH_$ zMR)ux{#Si)jmh7|r zb0sJz**4xr1j2MDDeTuWm#1>FD#X|aPTaTv(H=TUgmI>-bD`e~sai~3FA~1YBqd4I ztIskFVmI8v-u;_N(J%P+7h~s4bAM0eaHpv|Bc@|43?Bg(5@sw981}>jnb-H%a^&;p zJ85WWpl`s76!IouCt_k^D1}4x?1q|5@Hup@WVh}nDN8>qTo-MOt--j8$XMYWOkf4c z28D-X_{^M1%Fb@qlX^FFcfA(SC_+mz3x*28DUhBA`jjIs6cTT@MwGk+>FLcT`PP%zQ<)Qr=pR1VRlF|xFvV0CI_G#3 z1C+ZK!p^g=X(Z!S(B_b{u(7t@CAkdcS;8S^JYU0F)eD&9G#cncAyL1%!(Dmq*+C+? zIG~M)raOm_Z2T`+astC4_GDDQ21}X+`6p&Js%pG`zrjNVzBoEMiXP7@hD0&3aDfYw z-`$eA1qH))a*B$ylHc3f!rY!E*`OXOy~y)_7EYuu#J2cuZF0}K)uuxA)_v7&u$LHL z3JqoR9B56Cvd95rvzh6o>+F?)r#nf?!h7;-{l~YFWcYbkSALkKOG`@wO%ST4B+#&! z&Zdd^NA?@M1RrAM5o z53Z8ynd-OAy47Y4wge+s)^>J+3#4_Vy?5bt$5aN$_g9N_54*_ui3J`&?@t=8)p(qp zpvnpe`j-ot5Pp~IzFG|62hkRW;}p)EA$i1H=ppCnr_*l{O+#E4vwiJa)hHJboBJ=YZnG~d|=XaM^5WKjV%h0n^yTLAg*WWwJQJ%Lw|tNNt=$ief>8nOTzR*XStbO=$8a zAd;1Q1YR3mPAVpZw-Zn#fYd^+M%fVUjYLAK`q;hfB}I1E_>Y!Mn{sk)jb4QsJNoD3 zYFoilZc^3q>L12EO$U@EGXuk0MmRb*XoXdcH)pHe;m>K&IU!J8b)tYzyW-^VFUuUu z7lsDGSvT#DXy%?33V(6)O88OZmN%P|!|pzaeyq7!(m|+1Tv0?MQkehiR(_+tuZ1t& zM<{A_`1MA4$6uO>way4TjCZ3KCw&8?X134Z;2^V#o?hoiM+(yP`AJF-iTXFIw9mJ2 z=YFs=MA%?%fCd5jitpTIU%s?aQjoSv@wBrytFi-k$`$6`%_8K zvM5x_P+_)bJa|C4)1)~ih#Qkc^Q7udQun!uD_8UwcEmp~5wRUo)z#I#bg3RAmpe^N zO&1|=le#h9T{`3RO_QdIN_fC0F*(vWQ-DVKd(+o?i3thb6>>a9 zH?p*(Zy-e3+S;n8&b%;t^OkY8bQ9yF3s7hjM(~g%c(R0rgTlf*ElE_Abi-W;Q^Z6i zG0AD(-hxmHeCS<)Eky1NTBn|Bizq}$uODs2C~e)~deRxmQfkr$dcT=5vp0D%SB8l4 zWLGh6eHv1xcFJ2AB*pd4prL5#HWf~9S$HWYkNDI)rN`m84npe?#lyxnKmKV4RJ>vS z{?>J(b4QOI`(ZKK_CE2^^icCK1`|~CudgTF+gwRcx)*FmhL&Xpc)rY!KGD$(P!uyi zGBT78;R-YjTe~LO+MbAhCy^E#YrASxBE8n*!8n~MB*x8-xwkeo1qKJJYiP7KH+Mij znmw$ZDgbq8-5m;2t`EFc=GRGg;$1EPiI51r>%FB-ev_Wg2vrY+NT&=wQ;GIbk*ppg zj8Vquepn&Y>Ue`sQqqMx&kK^0j6tpfk*_Rut^VyFTu0JLuBmJb4^6r<8mXcN_s0`I zFEKMUJ><}R7w;2+M2rlXlTP-nFjEP*UIX3K+ww!HNlD+Xzrfq9UQ~DX`TF*Jl=K%O zZQ$}-41ln0nV9aQrpDBW1rqteO>qecZ!k;@s13B{h^&J6Fu3Zto<#P!x0}SvjctjE zVczN3^ZfkDPdUsGGJ;?h1T=bD=I?)BsPh6gZ+}SHVh(ie&!7KVdYAu?Xl4xcT6m_g7t|X0WY>M)tWb#`U#V`rV zQUeHTftCseVtiC{h!MIS7-I&S0K{xX+klwyZ9C_VAsJL1KOg`^a|n~B#GC_WKk%s8 zF1#M|uQ}VD9=MA6)YWeP=G%SUkA-C$3(JcoPC%Kf#&iorQz^Z8(bU#<26-MD3CN?Y zdl#WddxxskefbX~cH{CJXyQ6-8WmnV6)~!1Fubcnytpc6?dv~izPY75wv;6G`No`M z%*x`XDEM_OqM?)e{*BiQdeJUp!+s~jF|Tlx|3xHQfGr}{0Ht7#K23$Txv-0==F$si{lQFBR?IN_v$d$ZBM1z^rRa zI?Q04?%p0MpMZ)R=dnWbFWW8@{%CbOB8w?D#>e@#p zVhN6#a62Om&)+yelJsw!vD^tJKweEPXfn%{XAvjN&25E6d|t@&M3~F=o3P;}dG6m= z-Fb22Mj{|yRBSEja`@v1k%qoqn;{YRh7ur+Ax`7lcQB}en1-p*F0dIip#L*?l|*#_ z!SuzZIhCPNv8CE0u%cQ0M#l{jya+{5mFUCKA1&h|vWj>u5YrPR>DK z9yH#8ZV@!o!rS*F_7X39Vn*dayvz%bV#Lzi)O6SLiVLGR829cqB<`{meO(OU&>H3V zm#o`Bf#4z$OV$?lD}Z@#b|d1RQ7zi zO5#14xWtJ$V;aSiv@eNQ@Gzsr3qr*Hb{*aghTz6=e-!imcmq?!8Ap{VJ>(zeT?Y@2 ze!1GJvnPzrazE(<;|RyoAWM2VSyh2@PUj_x{!b)cHos-pk?(vv2b)tvhMn0*9Rf>d zp$f;#qo90^b48tr&&-UnE30oFnoRGt90+qOjTK}~Ji&kYj+(X0*%+cIau9!jau7D-7v$LxTsi~^6J#>T|ugRyBM01qx zU~rK@ecdin_k|p{eB=64{unicBAmTqBnL2jTE zID!?W+BM6nRPfXg7dCEj@3Lz*2gN5KAVAFaV>9tyIJ|l3HQtJ1nwFjp#TD@aEh)G# z#xs8byKBgPP&gK#;)8BBtn({eA^pnx1ZcG8e%?_+YaXGii#(eH80S*~Gzi2xRV_YN ziR)62*(Ja0aq8R$`iu?@oQU!tUdpUIel!hUxzq8FpAe*^ zhuoKMmxo)RTJ(jq?Wc~r;#Sgnr9r(sA-;O))X1A*m1tdv{22ZpUjBl@4U;S-%e_1p z@O}YmmeFVvX&r#tpD)7qpL{)V;5GU!BPOriF@>i_-G!n=&1oX(>r2rBBq!!~m^sAm zEjW9VqQiegL?Bt`3h}+Q`z2}gt3BfR&av4+`G_-AB;|U|RjgwCqiMWO1+W?w>=O!1 zcb!3YL%jf*-w`1pd%VERE$SF)KHy#IySB}{mjViFXypuV-hBV($})H&;~q=Hix|?> z=6B(UiH${Aw(F0ye@EW-A@}Fgj+;KxL2(MSa@NHejIH@8 zgoo__6fpylb@0iWaI?CXS-M8O)E?gH207l927E?0zN?oiEKjZ@vak!`U z+Od~q79>(3ZUQe?!%Gj|Y}`UiEE*;grz|jH?g06tRF8ehQlvX86{*vj)sCZ|VpqXB zQa=15r^8MgI8#BP1^@s9Tc^R@g4lT9b}LJ3cxb2?0tJ4NU4QWxO#_?EN~Ao3}%$NguwwfN|3tJ@s`1iG~h22YkuT!YTL<6iWh_HjYxH2HGU< zl}YA^J4TF3V;{2d@XXcUAa(C!xC!{J))YmeVjfA^K=M4}w~S#)B@z0LrY0L`G?m0x zY!Cv0>!QF$J9VqF>cs$zIUvIqV!#N~(fft1<1G6(9PS|= zY2MSna9>~R4}DH<^JmLHd{5qKnRifepqVTt6B-tXI6p!Sf00bteQZ1bIuc`5Wx5)R zrSq5gZTRCg<^Q<5v}|b^@0T&!iQ(3#W5*~C{~zsri8q$(|L&_Kln_yw-zX#`Wz3v1 z6p3U`$doyu@X8RSltP50NtB_Ku}mfNkP;$887ec8@pZ1Jy}#@He!sQO`2)^6)?Rz> z@(#~)-}m#mKlk;yuInTH_jAp)Oddo|xZIK}e(`IWoo8_MAHNhL-`D5|8eNjOKIle8 zmNsc3gnXU_{>mN%5In|AJq z+G2=-2ZU_im71RZ69;^P=nD8kl#F|uX!~@MmdG`FJ`eW4v$s2{%#w%MqTi|Qm{37& zQdReOKDzx%?b5?{qZ2M%dejZPNNACNjCIRN5nc^S$;|83y{_e^78Ilwv?oQYGBWQR zi}CS_XJ9#R{< z@$g8ixOp|B1HHS2>qGu?tF5cwxy_Y5f0$4?I=z;%<@!CG=WysF9M+JF&vL@rX&QEB zckbK)4-Y5^cEr+|mG!LVTLS}nFDrbXA3dW_tXb8%n@+X7eB(z}cn%y1bSdu=EIq<7 zhBS`Pe?k@IEVzjVP%U5BYBf?AnF)_h>_8x)b>U2TUY8A8<+n=~#qO!2;@T`Sos}N< z{aC(9;ye~ArZ?r|;rRC2bzZ^XwG7vmaJYxvAK|wHO7Q2lHgE(Zs&ROUoj_Hq75Nqz zLq$bJ_ILeGBl8szk=`4&GjEOIz`6#jO@mk0cecIz9n?#FGRL1qE72JGyL*-Hnob0L ztR}oV0A<5C5!R;075Nd6LR>in`tODDH*H9Efz5T}umpv<9cbPwi>tA(c1sbXplN9ExqalD&+MEp>vO*2=3n&jkE}!jJ?{xj6sUY;xM!{JWC+3Ohp_+D zum#@>STScbxZtqtatApYMD13OJbIs~-4=IrehKh>eB-QIi)Z(wLq?^WkW=TKkrM`o z^Da%tNqZd$%v`n>Nyy!Kx%VRA4`5dZ-ktjM=K=x*0ZK+gX8!ryP(diA~F`sO()U##IxTY ztTkfont9V}ymfvNiUKm>ecBm&^X5j@pD=wvzUIOSm9R?)>zCI$-Q@cZRoZOMq;{Qq zp{;VN=;ggJA^zQ8KXN=I1}9b3$nR$K>2o_Y6*S!kR3mz6QlkmOkv{;;+S=NDel)8V z8WFp{n2r*(PZ%Ghp;mp6-C2Y!y_ z^Ba-(;$cv65EgN+PqJ{NR4$V&BxOW)lzvt!W-DKPU>k*yf8D-4j*}a(AhN-+V-MK< z2;-{Rx3zV32l|88i8tHbZBC5r&pcE4w7&lAGCe>MCG*Yu3U8lcV*U82(p!S}CBJvV z>%XH^`Fy1Ffz+5-I8TDcL=d8`vAM?qKfif+9>&JU`ywpuM;?f^==$+-1EI=SJ_G!l zeDltojE}mhoNYCo9Bnt(t#kJBlxA}wHPueYKkl^p?W22}!KQSAxlv!sU$(@#1tMdOmCeUr8s;yJG{KTdwwE7dSig0bA`69i0m!&#O=rv43S6yAvT2 z9N0@PWq=Y0!y7Wru#cRMa?=fbV{vE`V$7IuikKK>RgXz4*7TDhg_5%CO7_}ayPp3r zVU+I{UBda6F=b__R-R@RIboy1Nd{Hm1zbGemieCO+vc8HfQkS{{lN}}jQ+=7qq(r* z{#|0Xi*{7kee~N%Q`YS2|J%4~{{_?8%o?o2q}wB#%N=i|uO406MF!ddR;JZ6zhhYA zFhkHWbJpE_J2#l^W`4@%M~XZo7DYq5o?YpRM?YNcm9GAD@#E6y*1pakilQ@@8qKTD z>M@6{e}09ZM87l2uBT)d>+^?qGP?CVMjF*=|2#c@@h<82@x)uX$WuFB_-Gq#>Qksr z*kAwgZq!;5EpzL|kU;rI4^O%pXx{0dY7dTRw<u=O~kY>-cX2XxE+|x zOe)hetZPvcSv>cCcd$f#wovdQ!@Ppnjo0c|7n?Yn#7LWCRxr6D@rg0Z!<1n9u^s*6 zEC;7H7}bP@HAGFitTP}5x#B*^_nT^hOum1=+$%rfxgr$Iry!=DSaXV@k>epLDDKz+ zAgnb-%O7!{H1i6yeqVLhzCZN?za!amFV+wHvokPBEni#WF>rXyc1f2bQf}MZJjNry z)z#~2vS*A^=Hu?EKDKfk8b{^~P{SGFNWO_~m+BrK5@~(I^AUw0BR=Ws-+ZG>ZxFCS zT(pQSh0_C}c)>gzy?wcSHOeUT>SH4exepT<7$sS%UW}JfNgw$?>IK&Hpg>&o?aEH^ z;t?s%Yr66z6e2c8HyId;0O=gz`#H< zmaYcA_XXez0_q{kgYYE(p*U$J2p)>s)qrc^v;)?ZDApt|hBvc1RDfdB;F7>*PJ|3! z2YJfbu>qL?^(7oaA$Qz1H(;ZB zxw7w&s2=yG`oji1O=`4%qTW;M5Z;mfU9JX>pwUmb&OmXGPXRZbzM1K(XRW=_bSL>2{v^0D6iv@*Ob=1u--J{_e4FM~!j1=r z^chgRcY3^j`SLf;mhjZtG~b!+@OU*z<%y@*;sz?uTaAgh>4Fs){1HE=Pd|=;NS@G` z2gYyG_~(Un40k@3>{kn^=U5P;KwrzeS@IqVf$)`dUuh(q9$*K(yyv<5L1KNVB|0hC zG{*%v-&Z}Yvvji*#+nmj#p72FL8l6;%5`ozG8vEPFnr?p?K$IwXXrrx+46M6jEzZ( z7;%E=Vq(%kn6?mBIx}XqE3g#$hYQeZ{C5M}nN>gr@uy|Q!O4m7hoL$j0PP_6-gf)$ zdv))%Y4a%(sv){Q_-@SqSHkFYdExL~MH3AuqL3lFef6x{g^@PL-vgg_@rhUPaYYi3 zAG{pegjIWnZ>Zy(#qTdWo51`@*R=7bQwtFYd{i&2JnA^Z5nW21$tHUObb_1!Dg*@K zo-UwAIDo{q!-INJN4)SMU?4*8@AY2b5-@M40m z12YJ$Ct&Jvv9WM`!Xa)~zuPz-2NJzZ26eBd*y6cMV~S(bb4%r5U_f7ivPyYvK8OJi zveVcXu-r(Y0(iz)>K=15jcp%Y+K*`g?y2s*8@f{g0afqa;^K`G(~L)@Khlu+&&b6E zgsTi(W@PQ+`7*D7U+q4D#|nzgpVSlshx-W|NTfb7LBwy?^27m;Wro+i&wAe_MO(i( z@%O9tRVhuU@@P8V_-Xo7MUVeo>tO%LVcoNNBguyPDhMO|FJoi&evwI!p1^Hy<;#{g zKKiqf?a4gtrm6hWf+O7`Mn=TrR&g<7L?Lvio?*>`Q=B;AztMDXqhUEV6i}PkByPih&`op!<8HF2R^RN20l*>_?FAzgQx>NCb zq;pFYo$-y*H-FBalqBxIc*Z$tTmM9Nf}zIaE=os8?)uYy%V$_mp% zz@(q1OBg9VyDm`-75!Y#Dd)EtP5wHeULm?uK6{9(D&xV%66)4gk*B(SzVn}JO0nsX ziQUn_*hH7m@5V$7NiS<{$s3MKOj0#HrE0{d-}M~Xqc?Clts+Bp`%ubK#Y}Yf>Bvgk z=RcH003M8J*KYl}XPj+~*DXV?6Y4YOYEv=|XTj3^W9ay_Y!#j?9lU-q|}0! z0+S1GG{;?RN0z>xFgUg10?6aLl>)w$;vgpCC@g;Nb+^9xnd0vF=x9Uzd*iQ3bICRx zKGmOu)(Qv(Kkc5dZOoEBODp5FeECI%VM2l<1(;1mZGAleoG1OB8HaI`P3arBZ3jAg z)Us6{3$&G5h&k3#I8wgl=E}8zy*S5#^2wui!R4ecOef43E$b*X#a>=Bilo&i)oFPuN!p{A^v}MhhRgbVyrE>R^k4i_qJ$O@!+8I8Q&V@BfPkeqk(?xNaj82`r{Nb8I{tp-=*xP7ON)G z#EQ4-w=$YE2Y%atu+u2Yv|8x%uM#%@#T%or-TQm%g>oJu(a` zqaA;8<#M{>ZWi^kL%VIM`%J`;;t;U^h27tCb1(DI`!${~-^b3`nI&`DR&W#h4+RMo z#kJy1PLUx_XkNH|8{OJ@7fN^1Cyu& zhiUX29SVCf8zbOLt8AWnnWou1+pD5~G*)y|qt1p;y1i!Fw9FY}iv577t^51iGDK-f zDefbCn(Viy3bt>xHJ||OajMODsF0RS>P~I)j~9+leE7vGQLb3(g8yr(p3FQ~_r3Xb zq*4Q^{DX^P7AFPR#IYz^?3Mg!wGeP*UaL-Xl9bY8vzy-KH)l={Bw9j)v#4eEcETA7vqvc zo6Eh28`Y_oWE`lg%6RU^os~%}92K!&kXMM3#BEH;MimdoC_gtb+!`ul#OEohS8?p# zR$I*zna4}1tEqWNwP(Gxjf_b4tN71!@HuR{@!(nT70yoKy>&W@3!J0J3Jeb1t2M|_ zuR62h8n0|(t>e9lj_-1)T$RtyZ$rri1S;%bwnOM^H&S`5NVC_+ON_1|v+keUaa`n& zt$<>eY+L|a$=jsCa7XMc%beu|`YhphyKuEP`#qsn!9E}g4s{4 zJ0bLS*E==e6CNXb_?{&2&&?}f)1l$-+VbXMvCs*6X13o6;b}`>_-}zS-zWS|yT~je zY@%5+#m~2jf(JjLbW~X_<8VR4toQ4$GtDO;XyaoXy*b8lNJRP7W#L^CUcA&)=y1bv(dC)B&zmCa>LnMg zy^e!!mZqc%TA{B+9$f)KVxe5+e^ctXTDG|>r$cnB4%|Ro0lui@?XlFc#}*uSN%rH( z9>G`soyQM4BcI=_+Phm;J;iS>cCaw?&bHXEol)bh1StEuqHxcV9Aats-sDMRqeCX; zb|tLWD~h!%3=fCVcv`y^W<j$}d2)L9Y1xS=6A(Cnm8z0-MZ-2qn zQ26IQ;fA+CCiKj*wI!)(8}r}hyC`CTn7*4lA%CH9wu@fqYie-dOu44f>@IRlz}sv? zzQFU+ckzY1UQ0UJHF-mqZjR|6C|&67YqwX@-$Qff0KVh;K!L^XZ@v!6>tfDwvEoXC zl%^#)resLI?;q@!X^0Z^3a8_!SRJ7>O;4|rQL|jSrq;K!4f8i~HSK~c_t6%fn^9l3UTNPXqM zsa0?>OIh1_fRif_0kL-rcB*X+BaS`MCxwfvT)gW@2!7Y$Y!Z zI(x#D;E_>`}18CwSp zR}Qk4SZm-l?ze5`X3sV;@#Ct4e(kL`Gv7>Ds&wwn*O%A0Ukr1X zcv4%Eu6WS{(x!WUclyk<+H240c6wjW>*cR6bolsIt>8+=h?xd1WsQ@R$~xj@Tf{45 zn$;S={LW#?`u5LKFpa`8$zmz#bIV$6&1Dh)op7)kt2yXcsN0WAVea#HBkmoQ(^%b9V-Pp$^e^Q|9E|OLW^-vNf;)&y>aZ=;j zK77m?jDZpEZ*EhCOt410MCeC*UI9XmRto%0_jRB|A6NO?88u&(#}5-RXR|#UOIWor z^!#K4gU?SEF6hl^-f+)jx$C>!t)F?|=$qnuQ?!4tDb$Tt!G2vIMpE5PpbOVj=@z;f zjj7xZ&Rsexysj@JQXr4zNQX=X%{-UNiEaLGPl%;I#)>n1B~0EZl_=#UJIZCvFV)P3 zZBM|T>rQ}vuGR7`5$Bg*k!OY5esu>ZU6s;};{bp!6HW2hd3h`Z!iGzmMeZyho;p*LQ0e4zB}y)_>*Ubta7RV>ApLVExTe*-f}tf+c8Iygus zHb4Ok2FDDDwWu6(SN&huGYgLANfq3ET&bx*kpSRks28(xR`Ar7`0Xc$&I?hDjf{w6 zE3DNxqj6vq5)=d_z@KP021+vuY9Q4e;Iyz+4n$ptV7&woj+g(HGs6#h7T+yemOT0% zdLbZ3yBtrqetX`>Q6aLZd15kv3X>F2uD-&n4RAL+;-I9}A6Otv8JpFajf{=a@aHRN zu+GqFd+wK!F=pt2y%XFkr--sODo{|pz!C2!d;p1phK0}9foZK(^k$*sH>{t{SdPklO-HmUu2Yl%i>hB$_@XVX^ZnLnbe8g!S@TfQ$bmG&fokd9R-OB{~ zI@D=kXOgT;DOvt&DLYlW6ATH6qjOK!Tp{C_k(d3nTW@ldvMz|_d)kDHRfzMwO$S4H z?Z(q>O#CHRPGofNn+V+8SN3O!`8dc1R^}d+n=%q%bd>Gy(OX6{5Q%|8vE4NDGx((G zbb1L=j|d*Qw|7e5LVD8<2LAPOm&OrRmL44x_V}8uMBhYj92*cxFQFB>x@Tw{l$o7Y z()%*3h7KP-T+2BL(^)5BadD1lSf_%5C$B`b)zPp8pGGM~Fv$JEmXeTj2Ur{!?3aIq zOk8zu_2({LM9G>-vByu@U?&CnZAyShpdSIfuH1 za;b}j9-FvOEEGs%6>gn8@y)Sv*W{1Nuf9zQ;xqR zw-9uj@Lw&DB3-U-Z*{wogdAc%c@@7eO9^XUu%AE@HU#@XIf^8@p(!a5A_R~LiJFXk zu@aE4;;|xU%y{0;e+V~E7k`Mx4A*Xs{U^(>y4HQu>gnrCe#}fN+KYZM^EJ1V9Hq@=`F7^=wFBzrt`b`N$UR0q`fM-WsSXfw86uvmHkHY*p zJUw2z#70;QqwfPsMW{o;Uq3dow!C|G=eJo9LNw5I;tTcuqL8zFQ_7F8$oC(BVSgtk z%)Rx%eoj1+bnp1)iB4u@!aULFmLKa+w9RTcH-xq_pvUdl5m}8Xm*&eTDl*joT6nq` zLG(xa@v?+HLwf$-m$U2Y>S7-&BVp>}axcH>lyP49fKeowyl|%W;RqKCrGFfVW<-wll$@)e= z)DUjt#;1M2KaB9lV!M-11@Uw$faGBh-VAPg4|oZ6mscVYvGNzVe-@v@r0*m<4A z>)tt8IGtO;jcR#QmGbkk>O*_X3=YRh@9{pZa){A)u4M8F52!Uhc=&sGOkyDemZb0~2P*E{ zmj`?{zx%v1NIXvQHdSKRo40;6?lNKRV`Bcz`eedoMKnkGj>y}w9Vx~%>(d@SJ8JYK zb7H~n(fKd~zf}<{Q~4{t`LtPTEN%jetxEQDLhE>F-3JnlY1HDgIVyOJ8&DgWEMFpp zOzW)pm3pp7IHR^%HGO!Kwn^fP!q8P7W%pKDo?8_vYGoAqluqHUFMa5a?*rfgiBL07 zS9N`KaYNO9!2ejANEgSufc=L_ff{pkOSLAY=l@*S#Bryosxhd-cV-9KbK*UiZCsXm z1uhqKm8;C$6kdL7DH=tU(?Ip&vbX(Sm)R#e9>=gpXXZyc8DCqLtYBFZ++2~r{IqP1 z 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 literal 41997 zcmeFZcQn`k|3CaH4WmLCg_2!H8fIofMrIN+D%l}>k4i;_lu=|<$jB;^-LN8LC9<+3 zM0Un?d+PJ~UFUbMbDirt=Q`j2F6aF|N?y+@grjT<2A7)(teV%{0SZR zC%?Kp48sRk*QRVPKUCA^q;H{fYRfe#@J~s4^ERpKOMj#;(+~sYp#%7gaU%#&WTxv-@Q(s?S^OcN5A0+HZ{HpTH zFfvk_|F>`7jEYkyOfj> zQ~N73)yeLX?do4Gg=lGMWtM-RG&D3cFo>r4(Ab#cGWK<4X_i^!%A>qI7mu@>6Sy^} zF7uFN9Tc21Eb}^&RHN)Va#MSYat+3RwZDFG`my%h#=gG3p@w)?X6AGWJw5g^=bugC z2hZ%>xpSLu`0Lky3SGvIyZ+LfOCz<=IA@SZym=q`-qOe=Y5Po7FrErwIaoVvBNRPY z8&x({$?WM+d^q2(i|Ls8>5C4AIpAyC&?Z`bSCg%Rmf5Y^X+}zwRU%sqg{%I(SEWL=&(#(ym)GBSPz6(E!CQH-3+`0-~ z_;g?1&pdT+cg~geqw7b}Um5%`bL)1dT+i9jmoH!964}|=-}CK03UcJYWb;grSzQ3`R ziVgM^EoAi|F3!%v;#}c_qeqVh5chN%`n*Tjy5&CGNj&tqZv!(kGtWFIrcV{1|W zq`+^@cd^8xA#SgzU1zkgjdPUNO`1J>_DD-h%dE^ioaiNHGHj`uZyi{h?;5r;@c(Z*6BD8Xi7Z=DTu<2PT+hQf8ca zBBcL8$Xpw15;o*CAVY3{mTy`e=6rxclm4U$<~cIpy4B;o%1LQkm=PL?;cI!IDN zLPAJLC#1hH{>_#4S8OM5jZ`|cpJMfynXVPA)zV9ERgaTgL?~*ih2gu5cjW127&JCE zQty-0Ow}1{%gQ>J)$KJ|^5T2}-T8P)kDW|R28Tna*t~swT>9Pd>&(K|&e*NHjDm;s zvSs&)imp|ytx@mTVO-#tv}_8CtZQsMA|fIpEp1Hhury<3Z$DWVBg(jZyx(WG^<1F? z@hl2=8B$YIKYjXyGuqO#lbM-MW@52PRq*kF{zFEEx!=_3^<$5_;211^>$- zm;HhzwA+wro?PF9!jc1RStc@mtKMs?D=*YyhDJtq@7Yse*~l)w`PQvlquh?zpvB|+ z_b2$Rt-dy|tEsCq%D(Xa@iB|UsWUIsjY>T8)M7+bqYh=5l&w|rVmEJ(~a`&j9_OsX@30p0k=D{kO}*& zX={-F`|IOvYV5^YvxW>8C#RmienDa3j(w8uh%36fx=HCOm%Ld74~UD4i-_nxZ{+0U z^q%i>b9@i4@cUCITB}X(&va9MM}ndkLJpN+F%1g~|IMy2j#J5riJP`;QE`J`<{4yk zR=uqK`qi~H?QB!pcufQ!ew%I93kfAWJRE@&0g#f7;gF&G^nkKel0Lb^;Uix-W+UmUZqf`54Xv)OZr#Ch|9D2eeUI^|yzj4X zIaQ&os%;Dm41DJ@!;zytG&djP<~GN!Zth9?-Vpov@#4~0RxR_R%N7=@bqYwH=igj8 zlKi8b?vkl#NpZ3BDTKtTdwco^2b2CvP?P9_OLR#s&JTGsz8ZN&?s`qb&c~?o;QiKY@gYXd@-iQgZSXg#b1>&_cqkp{Lsz(>KA0qc)=FU6=+id@f zA8*ljPAz@7Ni{v2aN>sZ$)^Pci)E{`f;U*X1X~$jme<#-?-)TC2@~NwcoWfCp>)-6 zZF23WfU1|LCzJO%bMs{H61%SBH~vx>mwFduCr90Bd+T7Tq0!K0>=i7wBSBt|W2@|&jhnOSe4FDP8xg@}v?_79UBI#%6$IErifj^3L|+#fzu!TYpKoHlf<3JA^$R?S7S;8=f^dbiZtE z^?NntpqY!*p+ko}Igl8%y@Cc(U&J-V^p1?^{dO8K-)So8{`=j+CnDT(nn;L=jdbO` zdUf<|*xiXTYXlV{nKBx?zyJF6jahBvi4!NL`$}l~zU7!E@x8or4G<5$PBaTZ7l;!R%ZcQtl92Yx_xJh5l(v*Jg#{oWyu5b8``w(H3^@fuW&M+hF$9 z0@Hh^=iMl}bXkJlOO?&~t}M)#t!2#D-Z}(;gTT(n(z25D41vdStbpbjVsBR2>QV&X zxx}a~fBX6F0kdHNKxIuY^qta@6?YY*iDy6!qI>@{SqC#73ua~)wM|XGi`2Nl4J&)Vk9r4^g zF_<*+0b%{}Z==1(o$qHMtET0LWESl$Dn1jOYTH$qck=d*@$dPQgyof8sV>{0Oeqma zN18#P*ST1jo`^i#YII-)$y<%?P^|(i$%XZ5IIDIzV%fsqzX+(KG4`cL+}I>&c) zmid+01=M}|)L!J4_1+E9m0njFu#6|(dm6#r4@n4H!S7PuBJiut#7|90=}U>t)v=Ro z@(A`uMn*|v<>m5SOTtXS6RJ0;Got10G6)O|E(5dnSA~vsZ>Oei^U;rtt>4gcfYXt5 zR_}#+?7$e{z|ZCvJ;ff!xVX3^B|94$vOauOQ?=-P>o7eFs~Wr#6&E)#Ia%g3Tu(#` zz3hbEJC3wlcCZ{Usj8~-n`u176s)-P8PN9UMENrtgtF;b;I!*EZX^xF#>cbL(ap@Z znXC=VtS$a}-7q)VV=`KIa%tu#$Jz-F;L)MakF}}P@RT?&Y8ElgZ_GUEPY#&;#qQ|8 z9zwJMI$)CacGuQ^AY^y(;*ksQ{F~^x1FDyJx_XW~IyySrQ?PY*bq&@z>F~BDDnEpa z=fVO?yyokHs6IX5n)aGy>e-M$J`+Zk@&Whl9~n6?spvRRjYJWm)CMfb>izpY5_@7) zrR1Rgdqp5^T;R1u10@mcdpw3?aZSLE;rSlFDA5zJqCbz0nBH6a++E^T_WJ{sV^Mv5 ztON%;I}<7we8t9&|M>B=X!h;r)>aqX@csMuO||e7JFE(RftdQDc=OvEH$DQ|=!~+y zQI9>oi$~qC$TeeTdU^5BzJ2@ZqJ>qJl|6p5YmWe~Ukqg#iCg6mW`sA{pwhyjN4+s`sIT8aK@k>e7NM`F zx3IVvQOHRW-j1M^c9@SZ9fg^ko7V{sZ+r&+5_Jks%=ad@kGRCgTiZ)KXCItG5#;dW z!)EbEKuET5@y%}f2RqWvrX%4DMj=QSxQqenxVB{)m6ViFd9~f!bIjR|y$tAO@z3y} z*u<}2#YlkH{|ZD_Z)NpPD7x(lU^F|{#wzLF+t>HXdvO|ZwmRRrC=@3MsNyw0Vf*`7 zp20XOxovS)*2gC%CJ;&l`vec8LIj$K?bcT%X>R%oC$q&lhXe*L03kL!5q}sNIW#cP zl5sv?`5||nbt^A$LtJu^mfN5fY#rh1_|c<|0GxdVoM!1SrN}v z%PT4dfB*Ps)0Vk{)Us>WuB70_TRZk1_na9)XsvCY@eS5W)gg+9qnE1za9gZhV3>-} z9j;!rY=1R4mQ^Nwshr%#X6)!{Hj+7khLF8Je)xb*yoi|8*Ee0mmsR|Cq6m+IyO$Pg zX1J-RWn_#;3Y-sN5q|~Cg9!nd801-_K1l(9AaDbF%;TA#%{+*Fl9I~^1*M*|)+n1* zlF|SP5$8SUC#0@?JG^w36drho=lzC+TVmb|*~L;yFd*0Qj-)G6B$9GaTeaWX$~=%H zfq3!b>Bempg^q(YsDh@ar*CcB^9p~tzKflM6h!9sY(}zm>11dRBAo}mBdMkU-_0z&!-!{)aXk}vFhvZM@7q7mYbJ{P@CfH1OEih ztIgj+z0a^P%N=;nrO4!7j&*AqLSKoqiA6EWcKh~MN%Ho4q&#PE{nI+sq}>hQTCRJ9}c$82u&z=%5QB(+VB3M8CK5BwbH_JG~ZHIae zlaQrm;UsSuuIujU895?Q82WId|Mh$09P?9C?fLd5Ftr=kuVZ^<{{A|~QKajO(?F3L z6BC1b^uLJrZ5lK9R8vC$8Eg}f8jK?OZ)L?@M*HsK_U`Ug*Z@3@YvnyD!Q69sVG2>{ zuAb=B%*--EE2W(#8A(%x!c~T-T;1K>Q9Ru9Q$=WfBJKpgmRaZ}>v}$WnE?5743DIJ z3cCda1qF{CdkyT#D&hKh!G4oJQ+;>0G$-d}um;F&w%x@ZC=<@|M#RP%!OSW{_A=Ab zP9YiXs@jmCedLXe8Ga*4%`S|NI>8(qPi)LnKYLAa5Wxo>$P*PH&krT3RsqXCp=BfdKNAkD+ zq+{WVh`WNS29(R=qh>0!&51YKuUxsZtvjM}c87g4y!i3R$jGz1KM}}r|2wG!Ri}Af zd8db*+y@l>ScWtTRaD&U=H_N*6l|aCwnwp*oQpp52%k$xNVufR4pxYi;CNKItp=g{ z*wLdz0eYz+0Nlq;IRGoB;+TgIIRdiZyg4*a369NQ<=JvuH3|qgz|Yaq(eZJkUza5$ zijalx-P?AWueYN(Jmj6_YeO`ApcV ziBnp770cf;$<578$#$=ELkS{A_RQ#7np{@42IoLMTIM*Y;*pJ*4gxVK zCSXwG9C;-L- zc=1zHRdxDDmmvTQPfTPwTj4kTt@cDzf6ucafcH_~X6zuNpt0dMBR4m-^$j=GGEcVK9;gYxX6Y{3Sxd+5)8W^tRZ zym*oR3^f+P%T}n1ZzQfTKx2Gs%)2BPA}#G0>TWITFKO35p*|^wpL23L?t1mr!}?7A zi_VU^y2h$g1%>#rX3&>Bf-gT1Bu|(a@oh8Ue&s);!{zflK0ZD@eGJZ{x>PwbVtJ1E zY6DHjAW~IZTZ>-<0mHTO`@wN|AEFnL2EjHV!){{{y9(3+a}}AL-$?SW36eLa6|&Cj zRxP2`c~o6p4X%JsPxk87-zi$pcd$yoY_*nf{q+r%=-an%0ZgfPAKriDh}QcLI2UcD zf#f8u^fP2+lkT3Q`{={>(7RMM|C#vxV_=%n+}>U=U;*q^b8|EO!TraNdk)q_fX@X9 z5gZcI4aN<1K9J~dkeoc6oc!nCoDNIFMPDfmaC4eDboo%bC>K1@G!837dH|CK8{fKR z3$OM>VJ9_Q-NTht{o2lWVh}yX+8T;JpRx0NqCLe?%9^$pwhYBcClP|#~O zAhQA?WEvJch>S#>nf-jMVH=asNS9j=>c0oWGvnWpa8N^(!8xcXDVGMLOpuvDue80; zh=&Qo2hPot2^tm7w4O7G1FFfad z{XA1$AA01-kr+|?(yKq@935Y&Bmr?~p~^{Ck6ps!N43ewfn-Ge(F8aLPusyP@)Bub zaQ2g8w1{m-_Qj8J9z%Odrp)W2DG0F4_jVs_WY7I-HLli?v)@|Y$)2&-D79>ScK<#N zTlrnVQsTT&6vc`=nOEGQN8SM%D|-C+u~1!8lQ#KN-E^{z8;!lj^A4U#PE1M~2O|ZR z5*0H$yWHx#-@kvOuuzHp0$5t}`SZOycMRa>^77@#E}(f6t-xv$rGmG&H_ByWzZDlC zTo4gvBVV4b{GD%0|K0ok2EhI`-E>=Q209c7)0Zw?dSma69Y?io$L{x3rNyI(4 zbPvE13=5UWDS7#7s#ZlbGhnZ}jZOrD@cVQ<@r5c?$Qo!Fxj=xts1&3RO({IP+`MGM zrKByJzKuNL(wWFKDLYg#h0F-<(TM4^lG5(O7vAC2zzF=kMz&Su25*E4dCuie55Vfp z{%SwN#B$_Pd97d>3p2A97$ihnV{%$n*0mqES*`OrxKtzWv50F&g99%vE>@419-oAv zwV9~iU>3Ez2Ug#~fv6rIK72?cm)?rnRVQx$r-lZTT+1-s^p)Nl)aIWbvHA7Bb?66u z9wk_|JpH;snlH-l&hoN1TRFn&{A7>c&!!|G_Fz_-Qu+9+Q+*YnJs6};rMEJzT?6wA zmLpv^1H{IYV;1T`M6hWk3o`8K`tdQCx_NLg7!fpTFAL+5_{z|NL--A0KaLl`f@CYz<)& z9*r{b6$jngzIt&6%l83kglkZdle?p!1}A)Z*^7Gbah*fLmO{}dZfvmC?Rog395@|~ojS8I` znN!bY#Z8>fGY|-H$1cw%=Yh`#e} zii#*Gbe=lrU$|*D{Nu-w%hmVMo6wM1$?cTs-0k7vF*P-%tgLL1@%6(8c0s|=4C)P} zlpH;dELywn;yrY9&VYs2f4;eJSK+;|X=mu z%|-796`k4-~Yb zi&X%hQI66Z>qnik+Z3E z#e>0(jg8G{w505Qp#3&{Ves3^z^7d$nul(?d_uHAHK&Ds2cSgF-eEa%C#UAs$zhZU zKoqDMchS)e3=i{2eKQaOYm8pU>k)CVwK>_@2eh~l2(C0I*CDW=VWd1jBDDx{I{FOe z4J%tKb4x5OJhIE8x3VZf4jQX;U@J#6%eau*d+4#nA>(4p!;e(93t(sI<%BH1$TFQ) zQ9=C|GLgHmuyCDz2iOx)xYH_fThm!f&Ipw}_o+V7Zg*1zvy->B9lTO2XT*5O@PKPp z#D|V6sQ3^I!cZ)sxBv(7vnxV`LsaW7@_Nc=_gBrFFS|Nfe0+kRT%D-=7l+II6< zTZ98l6>LSIwt}pvs3==GNR*k%ETpan51whKCY}Zp9Szp{I4PW>amjfg zMv%1(aza?+FBv+*3H3Nc=})n;axkAe?IWoPiVJ>^cIj=PU{wyVdG08xy1KeF;-zE5 z!*!adSv*RK`SdO1eBWaEyTA zTg^Cevzl;Lzh$g?D&m|mQGDPuZc;G@(4dVB7Hhh19*Y;T@Aiff0JIbp6eJ}j?UnH@ zMpulDjScr#($GK&v#csuGK28J$gg;OWVqcTUciMtKQGS+Nhm7noV9h3L9mJ`GA`~U z;WlBIYpEqGD~oCst!wZfu~AVL78Z0zsbs9nT*hA4kNF ze)7cdSpy63K9B>R{vTO5fo46*smmy5k>7Ug*fA}{!}B6L`>=+F1~YREOdf54nbB4o z0G0;HKlj%ADbczJ0&wV=U+sUeALwtPy72(u0)2v;$t(`+!bQO6fLvhI(%2KfVI1u) ze5PiaqVjyP`xK7vFIt6WW-h>>xB+lf2}(5di4VQqB?)V%(BZai${>O4Z`$I~z5b;V zW%@`lRDJuhF*@`PdOA1!O!zQFNMk*Kd8Tq ze|>}W27>s^PhNadC6q^Ey>Q4;w3EAOtCgyiK6t+JiWce|f9rel>py$Ehn_2x`LzOZ zr?eyg*Ls763=8$Y6jrSk_|PA}qsjlj|IU9(lmC31y8MD-^TcTZ*O2q4nDcjhrPths z&+zi>ETBmBYnC^v;r9&rYag9m5zLnidm-t_5mFDVbiFtysXVi(2=G=EuaWB8a9nC| zVkQJ7d#@kR{J_`u2I}2~QiFDTU-~GD^PXcQu1ouWvlhPVOQOL;(x1t zdJ!~H7$c!_DBcUabLUQApcsM(YIqP0Kfw}czg!{1x%$i7@s9Qg-86GBiu*IEBYWgd zU~sU2t2)riW*zo1)Y5P)(1EPGck6}q@O^)6pmsV0>QZ- z(5A=w7=k)=HU*Ow*Vb+VE!F|2!4=T4OvcV4 zn-zKdNuFTw^Yg<7-M@dI@E60kUp{_(j&c(4(RZ?B9<+I)I6N{lGZVm(QSRP8sgBmx zvno%}I>pbLUubBktNRYex+uqsLb>HC&{{JE^A~8KJZ4T%OBAYdTuB*FA z18@mRlpeqoqIeVLpx=$~&LZwO@bg8y9f)TbpWCl*VUHh+UwB8duown4P00ow zO#ls3uzCFxaf0zi5<8Dj`^;YOIsOHqhp0fX*>m&rp@D%ZXVWj2g@afFW=|gxM>vm+ zjND=mckf=1J^G+> ztU4F)jQ?*6n#kO2xFrSKmhDVBO`>2OVCk9mZ`X|aqw;H2-_`4wM%UjRlBj942seE{ zMHD6|&&S#{h{8lrFbnw4{PJbPV)w?bt`#(50nOjMc|*l`D12iMp)#v`bcBPSpI=;j z5j};txVY)>@t&ipc!U~3aEsvVea1V43mhu;AFSiy=Jo|o<;cP)7e4d7wi+xjAj&=n z>11W!p=#<#(c5=fnPp5~FtIWAM{f z>nMTqA}G^P@DV_~1RaZnWVWz#eoZ@WG@XgK8TMu&1&8(ieACH0j~}m%41{^9s=S9J z=U$KTA;{8zrZ@uhvM-#dn7sNREbNF?QzD?1n1lpErRtLEW@OXHBOGmvZ{9kz%gC?9 zB+D}g-xjpGRLCO%v=6O(Lr}Us3piRLO=3snr?Xxffg-Z91-_{1Jw-; z8lJy%Eg|7RC(okM30fuX-}yU?AeKR=M)&mT({On-2YLqvbY2y1Aj!_kv5Qh5ZVQ=A z?GF|O?2<$+_~8wIiwkIhOY;U{uFeNfgPuXt6Nm?`T1FNY!ELIai-k;?d6649Smp z&RD9d))KS}=>O?nATdFcQgk=Rq4H28Z-gsb#QTUGJN5^W_ET-`!y(j4S$a9_!oqo| zDYJ^FRg}xlb%+ht$MzMu)l82Anj5{ndQo45Yi4c^-H(uY=tzsQ*PVt!wHG>Dpzc6v1bE=gIs%`SZO1U(-2(&MCY%)0e}Wm z;XH_?+k-lDJCEz#7O;CcpYX!#6fgZL0xX1;u0Ca$~L_vrhxlcbjeDOm78X=K=sup$85l^0YLllXiL>F_kc40ivI^t)R z6aYNY@Iv)gGtE}11jc>!g|pTdaI9)ZfJZ4;bdtoTinJ*xiLae<2s7t~IH+AhHwyf^ zsuo@k3Kj{HXg()V0SpRvxWx9G7;tg!UQ=AE*2+tI@uI4-k}x$DMzF=2Dx8iwwrC%v zL9vF?Akmo(Kr2a}{ZuP1aSzx!JSUU|W_v=i-AeA-%_lU8t7;rQX^+MUrdrbqI8kXO zrn0y6Ht^A)!+ej>#kd8WZ5`ye@?G)y%rnu8F8GA6mz8XX3jefxY-MC9fQ zA?HD30;1myS_`=OK`|M$`ayjo

DWy?_4{=oirWS5KLraxKvbO^bxG1<)6KFcg7| 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 N`?U{%+i!p2{{zOp(?0+J diff --git a/analysis/matlab/variations/unmerge_d6_13/learning_curve_rate.png b/analysis/matlab/variations/unmerge_d6_13/learning_curve_rate.png new file mode 100644 index 0000000000000000000000000000000000000000..41f75d7075652268d7c9cfa9989d6c475fb460cd GIT binary patch literal 40222 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 SV6T!$Cy$+0dUfQ&o&OCO@B?Q6 literal 0 HcmV?d00001 diff --git a/analysis/matlab/variations/unmerge_d6_13/logpower_result.txt b/analysis/matlab/variations/unmerge_d6_13/logpower_result.txt index 94b5279..4b4c81c 100644 --- a/analysis/matlab/variations/unmerge_d6_13/logpower_result.txt +++ b/analysis/matlab/variations/unmerge_d6_13/logpower_result.txt @@ -1,7 +1,7 @@ ============================================================================== -LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d6_13 +LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d6_13 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT) +model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = # successes (count)) log(day) uses 1-indexed training day (our day 0 = paper "Day 1") observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 @@ -10,7 +10,7 @@ stim x log(day) interaction: F(1,30)=3.007 p(resid)=0.09315 p(Satt)=0.0931 (df honest per-animal random slope (log-day): F(1,12.8)=2.47 p=0.1406 Cohen's f (interaction, partial eta^2=0.025) = 0.161 (small-medium; f: .10 small, .25 medium, .40 large) ---- power simulation (log-day ground truth: stim:logday=+22.97, ratSD=7.14, resSD=7.81) --- +--- power simulation (log-day ground truth: stim:logday=+22.97, ratSD=7.136, resSD=7.808) --- true stim:log(day) = +22.97 (100% of observed) N/group | per-animal power | LME power @@ -32,5 +32,4 @@ Cohen's f (interaction, partial eta^2=0.025) = 0.161 (small-medium; f: .10 smal 16 | 0.71 | 0.74 24 | 0.90 | 0.93 -Read the per-animal column as the honest power; the LME column matches the -paper's power code (anova interaction p, observation-level DF) and is optimistic. +Read per-animal as the honest power; LME matches the paper's power code (optimistic). diff --git a/analysis/matlab/variations/unmerge_d6_13/logpower_result_rate.txt b/analysis/matlab/variations/unmerge_d6_13/logpower_result_rate.txt new file mode 100644 index 0000000..030d18b --- /dev/null +++ b/analysis/matlab/variations/unmerge_d6_13/logpower_result_rate.txt @@ -0,0 +1,35 @@ +============================================================================== +LOG-DAY MODEL + COHEN'S f + POWER -- unmerge_d6_13 [metric: success RATE] +============================================================================== +model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = success RATE) +log(day) uses 1-indexed training day (our day 0 = paper "Day 1") +observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 + +--- fitted on real data --- +stim x log(day) interaction: F(1,30)=1.838 p(resid)=0.1853 p(Satt)=0.1853 (df=30) + honest per-animal random slope (log-day): F(1,3.6)=0.01 p=0.9233 +Cohen's f (interaction, partial eta^2=0.016) = 0.129 (small-medium; f: .10 small, .25 medium, .40 large) + +--- power simulation (log-day ground truth: stim:logday=+0.1165, ratSD=0.04832, resSD=0.05061) --- + + true stim:log(day) = +0.1165 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.28 | 0.46 <- observed + 5 | 0.58 | 0.70 + 8 | 0.78 | 0.83 + 12 | 0.90 | 0.89 + 16 | 0.99 | 1.00 + 24 | 1.00 | 1.00 + + true stim:log(day) = +0.05823 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.08 | 0.17 <- observed + 5 | 0.18 | 0.27 + 8 | 0.23 | 0.32 + 12 | 0.34 | 0.38 + 16 | 0.47 | 0.51 + 24 | 0.79 | 0.82 + +Read per-animal as the honest power; LME matches the paper's power code (optimistic). diff --git a/analysis/matlab/variations/unmerge_d6_13/logpowersim.m b/analysis/matlab/variations/unmerge_d6_13/logpowersim.m index e0686ee..5e38720 100644 --- a/analysis/matlab/variations/unmerge_d6_13/logpowersim.m +++ b/analysis/matlab/variations/unmerge_d6_13/logpowersim.m @@ -1,50 +1,52 @@ -% Variation log-day analysis + Cohen's f + power simulation. +% Variation log-day analysis + Cohen's f + power simulation, for BOTH metrics: +% metric = count : behavior = # successes -> logpower_result.txt +% metric = rate : behavior = success / attempts -> logpower_result_rate.txt % -% The paper's power code models behavior against LOG training day, not raw day: +% The paper's power code models behavior against LOG training day: % behavior ~ stim + log(day) + stim:log(day) + (1|rat). -% Their day is 1-indexed (1..10); our data.csv day is 0-indexed (day 0 = paper -% "Day 1"), so log(day + 1) reproduces their transform exactly. -% -% This script (a) refits that log-day model on data.csv, (b) reports the -% interaction (residual DF, Satterthwaite DF, and the honest per-animal -% random-slope test) and Cohen's f -- the partial-eta^2 effect size of the -% interaction, var(fitted_full) - var(fitted_no_interaction) over var(behavior) -% -- and (c) runs the Monte-Carlo power simulation on the log-day model, -% scoring per-animal (cluster-honest) and LME power across N. -% Writes logpower_result.txt. Run: matlab -batch "logpowersim" +% Their day is 1-indexed; our data.csv day is 0-indexed, so log(day + 1) +% reproduces their transform (our day 0 = paper "Day 1"). For each metric this +% refits that model, reports the interaction (residual / Satterthwaite / honest +% per-animal random-slope DF) and Cohen's f (partial-eta^2 effect size), then +% runs the Monte-Carlo power sim (per-animal cluster-honest + LME power). +% Run: matlab -batch "logpowersim" % (Copy of analysis/matlab/variation_logpower.m; see make_variation_logpower.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' column = log(day+1) -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; -warnState = warning('off', 'all'); -rng(1); +localLogPower(D, 'count', here, vname); +localLogPower(D, 'rate', here, vname); -logday = log(D.day + 1); % 0-indexed day -> their log(1-indexed day) -tbl0 = table(D.success, logday, double(D.stim), categorical(D.subject), ... +% ---------------------------------------------------------------- per metric +function localLogPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; +FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; % 'day' = log(day+1) +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); +logday = log(D.day + 1); +tbl0 = table(beh, logday, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (success COUNT)\n')]; +s = sprintf('%s\nLOG-DAY MODEL + COHEN''S f + POWER -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: behavior ~ stim + log(day) + stim:log(day) + (1|rat) (behavior = %s)\n', mlabel)]; s = [s sprintf('log(day) uses 1-indexed training day (our day 0 = paper "Day 1")\n')]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for this analysis (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for this analysis.\n')]; + localFinish(s, here, suffix); warning(warnState); return end -% ---- fitted model on the real data ---- full = fitlme(tbl0, FORMULA); An = anova(full); Asatt = anova(full, 'DFMethod', 'satterthwaite'); ii = strcmp(An.Term, 'day:stim'); is = strcmp(Asatt.Term, 'day:stim'); @@ -52,7 +54,6 @@ reduced = fitlme(tbl0, 'behavior ~ stim + day + (1|rat)'); eta2part = max((var(fitted(full)) - var(fitted(reduced))) / var(tbl0.behavior), 0); cohenf = sqrt(eta2part / (1 - eta2part)); -% honest per-animal random-slope interaction rsP = NaN; rsDf = NaN; rsF = NaN; rsOk = false; try mr = fitlme(tbl0, 'behavior ~ stim + day + stim:day + (day|rat)'); @@ -76,19 +77,18 @@ end s = [s sprintf('Cohen''s f (interaction, partial eta^2=%.3f) = %.3f (%s; f: .10 small, .25 medium, .40 large)\n', ... eta2part, cohenf, mag)]; -% ---- power simulation on the log-day ground truth ---- cn = full.CoefficientNames; be = full.fixedEffects; b0 = be(strcmp(cn, '(Intercept)')); bStim = be(strcmp(cn, 'stim')); bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(full); sRat = sqrt(psi{1}); sRes = sqrt(full.MSE); -days = unique(tbl0.day); % the log(day) grid +days = unique(tbl0.day); -s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.2f, ratSD=%.2f, resSD=%.2f) ---\n', ... +s = [s sprintf('\n--- power simulation (log-day ground truth: stim:logday=%+.4g, ratSD=%.4g, resSD=%.4g) ---\n', ... bInt, sRat, sRes)]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:log(day) = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:log(day) = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -102,19 +102,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end -s = [s sprintf(['\nRead the per-animal column as the honest power; the LME column matches the\n' ... - 'paper''s power code (anova interaction p, observation-level DF) and is optimistic.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead per-animal as the honest power; LME matches the paper''s power code (optimistic).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'logpower_result.txt'), 'w'); +fid = fopen(fullfile(here, ['logpower_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d6_13/plotcurve.m b/analysis/matlab/variations/unmerge_d6_13/plotcurve.m index bfc1386..193a44b 100644 --- a/analysis/matlab/variations/unmerge_d6_13/plotcurve.m +++ b/analysis/matlab/variations/unmerge_d6_13/plotcurve.m @@ -1,11 +1,12 @@ -% Variation learning-curve plot, in the style of the paper: +% Variation learning-curve plots, in the style of the paper: % "Lines indicate mean (and SEM) across animals in the anodal (red) and % control (blue) groups." -% Plots mean +/- SEM successful reaches per training day for the treatment / -% anodal group (stim = 1, red) and the control group (stim = 0, blue), reading -% this folder's data.csv and saving learning_curve.png. The per-group N is read -% from the data (each variation pools different groups), so the legend shows the -% actual counts. Training day is 1-indexed (our day 0 = the paper's "Day 1"). +% Produces TWO figures from this folder's data.csv: +% learning_curve.png # successes (count) per training day +% learning_curve_rate.png success rate (success/attempts) per training day +% anodal / treatment = stim 1 (red); control = stim 0 (blue). Per-group N is +% read from the data. Training day is 1-indexed (our day 0 = paper "Day 1") and +% the x-axis tick labels are drawn vertically. % Run: matlab -batch "plotcurve" % (Copy of analysis/matlab/variation_plot.m; see make_variation_plot.m.) @@ -14,15 +15,20 @@ if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); -days = unique(D.day); % 0-indexed -xd = days + 1; % plot as 1-indexed training day (paper axis) - +days = unique(D.day); +xd = days + 1; % plot as 1-indexed training day (paper axis) red = [0.85 0.10 0.10]; blue = [0.10 0.30 0.85]; -[Ma, Sa, na] = localCurve(D, 1, days); % anodal / treatment (stim = 1) -[Mc, Sc, nc] = localCurve(D, 0, days); % control (stim = 0) +localPlot(D, days, xd, 'count', '# successes', ... + fullfile(here, 'learning_curve.png'), vname, red, blue); +localPlot(D, days, xd, 'rate', 'success rate', ... + fullfile(here, 'learning_curve_rate.png'), vname, red, blue); +% ------------------------------------------------------------------ helpers +function localPlot(D, days, xd, metric, ylab, outFile, vname, red, blue) +[Ma, Sa, na] = localCurve(D, 1, days, metric); % anodal / treatment +[Mc, Sc, nc] = localCurve(D, 0, days, metric); % control fig = figure('Visible', 'off', 'Color', 'w', 'Position', [100 100 560 460]); hold on e1 = errorbar(xd, Ma, Sa, '-o', 'Color', red, 'MarkerFaceColor', red, 'LineWidth', 2); @@ -30,26 +36,30 @@ e2 = errorbar(xd, Mc, Sc, '-o', 'Color', blue, 'MarkerFaceColor', blue, 'LineWid hold off legend([e1 e2], {sprintf('anodal, N = %d', na), sprintf('control, N = %d', nc)}, ... 'Location', 'northwest', 'Box', 'off'); -xlabel('training day'); -ylabel('# successes'); +xlabel('training day'); ylabel(ylab); title(vname, 'Interpreter', 'none'); set(gca, 'XTick', xd, 'FontName', 'Arial', 'FontSize', 13, 'LineWidth', 1.5, 'Box', 'off'); - -outFile = fullfile(here, 'learning_curve.png'); +xtickangle(90); % vertical x-axis tick labels exportgraphics(fig, outFile, 'Resolution', 150); close(fig); -fprintf('%s: wrote learning_curve.png (anodal N=%d, control N=%d)\n', vname, na, nc); +fprintf('%s: wrote %s (anodal N=%d, control N=%d)\n', vname, outFile, na, nc); +end -% ------------------------------------------------------------------ helper -function [M, S, n] = localCurve(D, stimVal, days) -%LOCALCURVE Per-day mean and SEM of successes across the animals in a group. +function [M, S, n] = localCurve(D, stimVal, days, metric) +%LOCALCURVE Per-day mean and SEM across the animals in a group, for a metric. subs = unique(D.subject(D.stim == stimVal)); n = numel(subs); X = nan(numel(days), n); for j = 1:n for i = 1:numel(days) r = D.subject == subs(j) & D.day == days(i); - if any(r); X(i, j) = mean(D.success(r)); end + if ~any(r); continue; end + if strcmp(metric, 'rate') + tot = sum(D.total(r)); + if tot > 0; X(i, j) = sum(D.success(r)) / tot; end + else + X(i, j) = mean(D.success(r)); + end end end M = mean(X, 2, 'omitnan'); diff --git a/analysis/matlab/variations/unmerge_d6_13/power_result.txt b/analysis/matlab/variations/unmerge_d6_13/power_result.txt index ed3c599..24baa60 100644 --- a/analysis/matlab/variations/unmerge_d6_13/power_result.txt +++ b/analysis/matlab/variations/unmerge_d6_13/power_result.txt @@ -1,11 +1,11 @@ ============================================================================== -POWER SIMULATION -- unmerge_d6_13 +POWER SIMULATION -- unmerge_d6_13 [metric: # successes (count)] ============================================================================== -model: behavior ~ stim + day + stim:day + (1|rat) (success COUNT; day within-window) +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = # successes (count); day within-window) observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 -ground truth: stim:day=+2.27/day, rat SD=7.12, residual SD=7.73, days=8 +ground truth: stim:day=+2.267/day, rat SD=7.117, residual SD=7.733, days=8 - true stim:day interaction = +2.27 (100% of observed) + true stim:day interaction = +2.267 (100% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.46 | 0.62 <- observed @@ -15,7 +15,7 @@ ground truth: stim:day=+2.27/day, rat SD=7.12, residual SD=7.73, days=8 16 | 1.00 | 1.00 24 | 1.00 | 1.00 - true stim:day interaction = +1.13 (50% of observed) + true stim:day interaction = +1.133 (50% of observed) N/group | per-animal power | LME power ------------------------------------------ 3 | 0.12 | 0.20 <- observed @@ -25,5 +25,4 @@ ground truth: stim:day=+2.27/day, rat SD=7.12, residual SD=7.73, days=8 16 | 0.72 | 0.74 24 | 0.91 | 0.93 -Read the per-animal column as the honest power. At the observed N this study -is typically underpowered; per-animal power reaches ~0.8 only at larger N. +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d6_13/power_result_rate.txt b/analysis/matlab/variations/unmerge_d6_13/power_result_rate.txt new file mode 100644 index 0000000..77d9da5 --- /dev/null +++ b/analysis/matlab/variations/unmerge_d6_13/power_result_rate.txt @@ -0,0 +1,28 @@ +============================================================================== +POWER SIMULATION -- unmerge_d6_13 [metric: success RATE] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE; day within-window) +observed groups: stim n=3, control n=2 nrep=120, alpha=0.05 +ground truth: stim:day=+0.01216/day, rat SD=0.04815, residual SD=0.05028, days=8 + + true stim:day interaction = +0.01216 (100% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.32 | 0.47 <- observed + 5 | 0.63 | 0.76 + 8 | 0.84 | 0.88 + 12 | 0.91 | 0.96 + 16 | 1.00 | 1.00 + 24 | 1.00 | 1.00 + + true stim:day interaction = +0.006078 (50% of observed) + N/group | per-animal power | LME power + ------------------------------------------ + 3 | 0.07 | 0.17 <- observed + 5 | 0.23 | 0.28 + 8 | 0.27 | 0.35 + 12 | 0.39 | 0.40 + 16 | 0.48 | 0.58 + 24 | 0.83 | 0.84 + +Read the per-animal column as the honest power; LME is optimistic (obs-level DF). diff --git a/analysis/matlab/variations/unmerge_d6_13/powersim.m b/analysis/matlab/variations/unmerge_d6_13/powersim.m index 554d032..ecd9c6c 100644 --- a/analysis/matlab/variations/unmerge_d6_13/powersim.m +++ b/analysis/matlab/variations/unmerge_d6_13/powersim.m @@ -1,45 +1,49 @@ % Variation power simulation -- Monte-Carlo power for the paper's stim x day -% interaction, using THIS folder's data as the ground truth. +% interaction, using THIS folder's data as the ground truth, for BOTH metrics: +% metric = count : behavior = # successes -> power_result.txt +% metric = rate : behavior = success / attempts -> power_result_rate.txt % % Ground truth: fitlme(behavior ~ stim + day + stim:day + (1|rat)) on data.csv -% (success COUNT; day within-window). Its fixed effects, per-rat intercept SD, -% and residual SD generate NREP synthetic datasets at each rats-per-group N and -% each true-effect multiplier (1 = observed slope, 0.5 = half). Each dataset is -% scored at alpha = 0.05 two ways: -% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest -- the -% honest power, matching the random-slope / per-animal inference) +% (day within-window). Its fixed effects, per-rat intercept SD, and residual SD +% generate NREP synthetic datasets at each rats-per-group N and each true-effect +% multiplier (1 = observed, 0.5 = half). Each is scored at alpha=0.05 by: +% per-animal : Welch t on per-rat behavior~day slopes (cluster-honest power) % LME : the fitlme stim:day p (observation-level DF -- optimistic) -% Writes power_result.txt beside this script. Run: matlab -batch "powersim" +% Writes power_result[_rate].txt. Run: matlab -batch "powersim" % (Copy of analysis/matlab/variation_power.m; see make_variation_power.m.) here = fileparts(mfilename('fullpath')); if isempty(here); here = pwd; end vname = regexprep(here, '.*[/\\]', ''); - D = readtable(fullfile(here, 'data.csv'), 'TextType', 'string'); + +localPower(D, 'count', here, vname); +localPower(D, 'rate', here, vname); + +% ---------------------------------------------------------------- per metric +function localPower(D, metric, here, vname) +NS = [3 5 8 12 16 24]; EFFMULS = [1 0.5]; NREP = 120; FORMULA = 'behavior ~ stim + day + stim:day + (1|rat)'; -NS = [3 5 8 12 16 24]; -EFFMULS = [1 0.5]; -NREP = 120; - -warnState = warning('off', 'all'); -rng(1); - +if strcmp(metric, 'rate') + D = D(D.total > 0, :); beh = D.success ./ D.total; mlabel = 'success RATE'; suffix = '_rate'; +else + beh = D.success; mlabel = '# successes (count)'; suffix = ''; +end +warnState = warning('off', 'all'); rng(1); day0 = min(D.day); -tbl0 = table(D.success, D.day - day0, double(D.stim), categorical(D.subject), ... +tbl0 = table(beh, D.day - day0, double(D.stim), categorical(D.subject), ... 'VariableNames', {'behavior', 'day', 'stim', 'rat'}); - nStim = numel(unique(D.subject(D.stim == 1))); nCtrl = numel(unique(D.subject(D.stim == 0))); bar = repmat('=', 1, 78); -s = sprintf('%s\nPOWER SIMULATION -- %s\n%s\n', bar, vname, bar); -s = [s sprintf('model: %s (success COUNT; day within-window)\n', FORMULA)]; +s = sprintf('%s\nPOWER SIMULATION -- %s [metric: %s]\n%s\n', bar, vname, mlabel, bar); +s = [s sprintf('model: %s (behavior = %s; day within-window)\n', FORMULA, mlabel)]; s = [s sprintf('observed groups: stim n=%d, control n=%d nrep=%d, alpha=0.05\n', nStim, nCtrl, NREP)]; if nStim < 2 || nCtrl < 2 || numel(unique(tbl0.day)) < 2 - s = [s sprintf('\nInsufficient data for a power simulation (need >=2 animals/group and >=2 days).\n')]; - localFinish(s, here); warning(warnState); return + s = [s sprintf('\nInsufficient data for a power simulation.\n')]; + localFinish(s, here, suffix); warning(warnState); return end lme = fitlme(tbl0, FORMULA); @@ -49,14 +53,13 @@ bDay = be(strcmp(cn, 'day')); bInt = be(strcmp(cn, 'day:stim')); psi = covarianceParameters(lme); sRat = sqrt(psi{1}); sRes = sqrt(lme.MSE); days = (0:max(tbl0.day))'; -s = [s sprintf('ground truth: stim:day=%+.2f/day, rat SD=%.2f, residual SD=%.2f, days=%d\n', ... +s = [s sprintf('ground truth: stim:day=%+.4g/day, rat SD=%.4g, residual SD=%.4g, days=%d\n', ... bInt, sRat, sRes, numel(days))]; for eMul = EFFMULS bI = bInt * eMul; - s = [s sprintf('\n true stim:day interaction = %+.2f (%.0f%% of observed)\n', bI, eMul * 100)]; %#ok - s = [s sprintf(' %-8s | per-animal power | LME power\n', 'N/group')]; %#ok - s = [s sprintf(' %s\n', repmat('-', 1, 42))]; %#ok + s = [s sprintf('\n true stim:day interaction = %+.4g (%.0f%% of observed)\n', bI, eMul * 100)]; + s = [s sprintf(' %-8s | per-animal power | LME power\n %s\n', 'N/group', repmat('-', 1, 42))]; for N = NS sigPA = 0; sigL = 0; for r = 1:NREP @@ -70,20 +73,18 @@ for eMul = EFFMULS end star = ''; if N == nStim || N == nCtrl; star = ' <- observed'; end - s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; %#ok + s = [s sprintf(' %-8d | %5.2f | %5.2f%s\n', N, sigPA / NREP, sigL / NREP, star)]; end end - -s = [s sprintf(['\nRead the per-animal column as the honest power. At the observed N this study\n' ... - 'is typically underpowered; per-animal power reaches ~0.8 only at larger N.\n'])]; - -localFinish(s, here); +s = [s sprintf('\nRead the per-animal column as the honest power; LME is optimistic (obs-level DF).\n')]; +localFinish(s, here, suffix); warning(warnState); +end % ---------------------------------------------------------------- helpers -function localFinish(s, here) +function localFinish(s, here, suffix) fprintf('%s', s); -fid = fopen(fullfile(here, 'power_result.txt'), 'w'); +fid = fopen(fullfile(here, ['power_result' suffix '.txt']), 'w'); fprintf(fid, '%s', s); fclose(fid); end diff --git a/analysis/matlab/variations/unmerge_d6_13/result.txt b/analysis/matlab/variations/unmerge_d6_13/result.txt index 9948e0c..f0c54dc 100644 --- a/analysis/matlab/variations/unmerge_d6_13/result.txt +++ b/analysis/matlab/variations/unmerge_d6_13/result.txt @@ -1,5 +1,5 @@ ============================================================================== -VARIATION: unmerge_d6_13 +VARIATION: unmerge_d6_13 [metric: success COUNT] ============================================================================== model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success COUNT) day = training day within window (0 = first analyzed day) @@ -60,9 +60,9 @@ effect t(df) / F(df1) p (resid) Satterthwaite: p (df) stim x day (interaction) t(30)= 1.71 F(1)= 2.933 p=0.0971 p=0.09701 (df=30) day (learning) t(30)= 1.61 F(1)= 2.598 p=0.1175 p=0.1174 (df=30) stim (main, window start) t(30)= 1.69 F(1)= 2.856 p=0.1014 p=0.1269 (df=9) -interaction 95% CI: [-0.44, +4.97] +interaction 95% CI: [-0.4363, +4.97] HONEST LME (per-animal random slope, day|rat): interaction F(1,13.9)=2.48, p=0.1382 (Satterthwaite DF ~= residual on this random-intercept model; the random-slope model above is the honest learning-rate test -- DF collapses toward the animal count.) -INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.0971, slope diff=+2.27) -Paper (N=24): interaction t(227)=2.68, F(1)=7.12, p=0.008. +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.0971, slope diff=+2.267) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008. diff --git a/analysis/matlab/variations/unmerge_d6_13/result_rate.txt b/analysis/matlab/variations/unmerge_d6_13/result_rate.txt new file mode 100644 index 0000000..68bfd2e --- /dev/null +++ b/analysis/matlab/variations/unmerge_d6_13/result_rate.txt @@ -0,0 +1,68 @@ +============================================================================== +VARIATION: unmerge_d6_13 [metric: success RATE (success/attempts)] +============================================================================== +model: behavior ~ stim + day + stim:day + (1|rat) (behavior = success RATE (success/attempts)) +day = training day within window (0 = first analyzed day) +treatment (stim=1): Electrode-Box-B2 +control (stim=0): Electrode-Box-A2 +N = 5 rats, 34 sessions raw day coverage: treat 6..13, control 6..13 +(equal day coverage over this window) + +============================================================================== +FULL MODEL SUMMARY -- fitlme +============================================================================== + +Linear mixed-effects model fit by ML + +Model information: + Number of observations 34 + Fixed effects coefficients 4 + Random effects coefficients 5 + Covariance parameters 2 + +Formula: + behavior ~ 1 + day*stim + (1 | rat) + +Model fit statistics: + AIC BIC LogLikelihood Deviance + -85.035 -75.877 48.518 -97.035 + +Fixed effects coefficients (95% CIs): + Name Estimate SE tStat DF pValue + {'(Intercept)'} 0.53562 0.0416 12.875 30 9.415e-14 + {'day' } 0.0032833 0.0069042 0.47554 30 0.63784 + {'stim' } 0.10269 0.053584 1.9164 30 0.06488 + {'day:stim' } 0.012156 0.0086128 1.4114 30 0.16841 + + + Lower Upper + 0.45066 0.62058 + -0.010817 0.017384 + -0.0067429 0.21212 + -0.0054334 0.029746 + +Random effects covariance parameters (95% CIs): +Group: rat (5 Levels) + Name1 Name2 Type Estimate + {'(Intercept)'} {'(Intercept)'} {'std'} 0.048154 + + + Lower Upper + 0.023654 0.098032 + +Group: Error + Name Estimate Lower Upper + {'Res Std'} 0.050284 0.038906 0.064989 + + +effect t(df) / F(df1) p (resid) Satterthwaite: p (df) +---------------------------------------------------------------------------- +stim x day (interaction) t(30)= 1.41 F(1)= 1.992 p=0.1684 p=0.1684 (df=30) +day (learning) t(30)= 0.48 F(1)= 0.226 p=0.6378 p=0.6378 (df=30) +stim (main, window start) t(30)= 1.92 F(1)= 3.673 p=0.06488 p=0.09052 (df=8) +interaction 95% CI: [-0.005433, +0.02975] +HONEST LME (per-animal random slope, day|rat): interaction F(1,2.3)=0.03, p=0.8749 + (Satterthwaite DF ~= residual on this random-intercept model; the random-slope + model above is the honest learning-rate test -- DF collapses toward the animal count.) +INTERPRETATION: stim x day interaction n.s. -- slopes parallel (no differential learning rate) (p=0.1684, slope diff=+0.01216) +Paper (N=24, count): interaction t(227)=2.68, F(1)=7.12, p=0.008.