Skip to content

Commit 5fd9326

Browse files
Increase memory efficiency of ANOVA scripts
1 parent fce5511 commit 5fd9326

File tree

2 files changed

+24
-18
lines changed

2 files changed

+24
-18
lines changed

matlab_tfce_rm_anova1.m

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,23 @@
4141
occimgs(s,i,:) = curimg(implicitmask);
4242
end
4343
end
44+
clear imgs curimg
4445

4546
% calculate means
4647
smeans = mean(occimgs,2);
4748
cmeans = mean(occimgs,1);
4849
gmeans = mean(mean(occimgs));
4950
gmeans_c = repmat(gmeans,[1,levels,1]);
5051
gmeans_s = repmat(gmeans,[nsub,1,1]);
51-
gmeans_t = repmat(gmeans,[nsub,levels,1]);
5252

5353
% calculate SS
5454
SSfac = sum((cmeans-gmeans_c).^2,2)*nsub;
5555
SSsub = sum((smeans-gmeans_s).^2,1)*levels;
56-
SStot = sum(sum((occimgs - gmeans_t).^2));
56+
SStot = NaN([1,1,nvox]);
57+
for v = 1:nvox
58+
diffs = occimgs(:,:,v)-gmeans(v);
59+
SStot(v) = sum(diffs(:).^2);
60+
end
5761
SSw = SStot-SSsub;
5862
SSerr = SSw-SSfac;
5963

@@ -70,23 +74,22 @@
7074

7175
% cycle through permutations
7276
exceedances = zeros(nvox,1);
77+
rbrain = zeros(bsize);
7378
for p = 1:nperm
7479

7580
% permute labels
76-
roccimgs = occimgs;
7781
for s = 1:nsub
7882
relabeling = randsample(levels,levels);
79-
roccimgs(s,relabeling,:) = roccimgs(s,:,:);
83+
occimgs(s,relabeling,:) = occimgs(s,:,:);
8084
end
8185

8286
% calculate permutation statistic
83-
rcmeans = mean(roccimgs,1);
87+
rcmeans = mean(occimgs,1);
8488
rSSfac = sum((rcmeans-gmeans_c).^2,2)*nsub;
8589
rSSerr = SSw-rSSfac;
8690
rMSfac = rSSfac./(levels-1);
8791
rMSerr = rSSerr./((levels-1)*(nsub-1));
8892
rfvals = rMSfac./rMSerr;
89-
rbrain = zeros(bsize);
9093
rbrain(implicitmask) = rfvals;
9194
rbrain = transform(rbrain,H,E,C,dh);
9295
rstats = rbrain(implicitmask);

matlab_tfce_rm_anova2.m

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
end
4646
end
4747
end
48+
clear imgs curimg
4849

4950
% calculate means
5051
smeans = mean(mean(occimgs,2),3);
@@ -60,7 +61,6 @@
6061
gmeans_c2s = repmat(gmeans,[nsub,1,levels(2),1]);
6162
gmeans_cc = repmat(gmeans,[1,levels(1),levels(2),1]);
6263
gmeans_s = repmat(gmeans,[nsub,1,1,1]);
63-
gmeans_t = repmat(gmeans,[nsub,levels(1),levels(2),1]);
6464

6565
% calculate SS
6666
SSfac1 = sum((c1means-gmeans_c1).^2,2)*levels(2)*nsub;
@@ -69,7 +69,11 @@
6969
SSsub = sum((smeans-gmeans_s).^2,1)*levels(1)*levels(2);
7070
SSc1s = sum(sum((c1smeans-gmeans_c1s).^2,2),1)*levels(2);
7171
SSc2s = sum(sum((c2smeans-gmeans_c2s).^2,3),1)*levels(1);
72-
SStot = sum(sum(sum((occimgs - gmeans_t).^2)));
72+
SStot = NaN([1,1,1,nvox]);
73+
for v = 1:nvox
74+
diffs = occimgs(:,:,:,v)-gmeans(v);
75+
SStot(v) = sum(diffs(:).^2);
76+
end
7377
SSerr1 = SSc1s - SSfac1 - SSsub;
7478
SSerr2 = SSc2s - SSfac2 - SSsub;
7579
SSint = SScell - SSfac1 - SSfac2;
@@ -106,22 +110,24 @@
106110
exceedances1 = zeros(nvox,1);
107111
exceedances2 = zeros(nvox,1);
108112
exceedancesi = zeros(nvox,1);
113+
rbrain1 = zeros(bsize);
114+
rbrain2 = zeros(bsize);
115+
rbraini = zeros(bsize);
109116
for p = 1:nperm
110117

111118
% permute labels
112-
roccimgs = occimgs;
113119
for s = 1:nsub
114120
relabeling1 = randsample(levels(1),levels(1));
115121
relabeling2 = randsample(levels(2),levels(2));
116-
roccimgs(s,relabeling1,relabeling2,:) = roccimgs(s,:,:,:);
122+
occimgs(s,relabeling1,relabeling2,:) = occimgs(s,:,:,:);
117123
end
118124

119125
% calculate permuted means
120-
rc1means = mean(mean(roccimgs,1),3);
121-
rc2means = mean(mean(roccimgs,1),2);
122-
rc1smeans = mean(roccimgs,3);
123-
rc2smeans = mean(roccimgs,2);
124-
rccmeans = mean(roccimgs,1);
126+
rc1means = mean(mean(occimgs,1),3);
127+
rc2means = mean(mean(occimgs,1),2);
128+
rc1smeans = mean(occimgs,3);
129+
rc2smeans = mean(occimgs,2);
130+
rccmeans = mean(occimgs,1);
125131

126132
% calculate SS
127133
rSSfac1 = sum((rc1means-gmeans_c1).^2,2)*levels(2)*nsub;
@@ -148,9 +154,6 @@
148154
rfvalsi = rMSint./rMSerr;
149155

150156
% perform TFCE
151-
rbrain1 = zeros(bsize);
152-
rbrain2 = zeros(bsize);
153-
rbraini = zeros(bsize);
154157
rbrain1(implicitmask) = rfvals1;
155158
rbrain2(implicitmask) = rfvals2;
156159
rbraini(implicitmask) = rfvalsi;

0 commit comments

Comments
 (0)