one-way, three-level ANOVA (e.g. three groups)
Illustrate tests of "main effect" F-contrast and separate two-sample t-tests (standard, not repeated-measures, ANOVA)
Contents
Data
randn('state', 0); Na = 10; Nb = 10; Nc = 10; % balanced case % Na = 10; Nb = 12; Nc = 11; % unbalanced group sizes a = randn(Na, 1); b = randn(Nb, 1); c = randn(Nc, 1);
ANOVA main effect F-contrast
Y = [a;b;c];
X = [ones(size(a)) zeros(size(a)) zeros(size(a))
zeros(size(b)) ones(size(b)) zeros(size(b))
zeros(size(c)) zeros(size(c)) ones(size(c))];
Cmain = [1 -1 0
0 1 -1]';
[Fmain DFmain Bmain] = spm_ancova(X, eye(length(Y)), Y, Cmain)
ResMS = sum((Y-X*(X'*X\X'*Y)).^2)/DFmain(2)
% equivalent alternative F-contrast
Cmain2 = [1 -1/2 -1/2
-1/2 1 -1/2
-1/2 -1/2 1 ]';
[Fmain DFmain Bmain] = spm_ancova(X, eye(length(Y)), Y, Cmain)
Fmain =
0.1588
DFmain =
2 27
Bmain =
0.0013
0.2310
0.0253
ResMS =
1.0038
Fmain =
0.1588
DFmain =
2 27
Bmain =
0.0013
0.2310
0.0253
Two-sample t-contrasts in ANOVA model
Y = [a;b;c];
X = [ones(size(a)) zeros(size(a)) zeros(size(a))
zeros(size(b)) ones(size(b)) zeros(size(b))
zeros(size(c)) zeros(size(c)) ones(size(c))];
Cab = [1;-1;0];
[Tab DFab Bab] = spm_ancova(X, eye(length(Y)), Y, Cab)
Cac = [1;0;-1];
[Tac DFac Bac] = spm_ancova(X, eye(length(Y)), Y, Cac)
Tab =
-0.5126
DFab =
1.0000 27.0000
Bab =
0.0013
0.2310
0.0253
Tac =
-0.0536
DFac =
1.0000 27.0000
Bac =
0.0013
0.2310
0.0253
Separately modelled two-sample t-tests
Yab = [a;b];
Xab = [ones(size(a)) zeros(size(a))
zeros(size(b)) ones(size(b))];
Cab = [1;-1];
[Tab DFab Bab] = spm_ancova(Xab, eye(length(Yab)), Yab, Cab)
Yac = [a;c];
Xac = [ones(size(a)) zeros(size(a))
zeros(size(c)) ones(size(c))];
Cac = [1;-1];
[Tac DFac Bac] = spm_ancova(Xac, eye(length(Yac)), Yac, Cac)
Tab =
-0.5750
DFab =
1.0000 18.0000
Bab =
0.0013
0.2310
Tac =
-0.0508
DFac =
1.0000 18.0000
Bac =
0.0013
0.0253
See also anova1 and multcompare in MATLAB
[p tab st] = anova1(Y, [ones(Na,1);2*ones(Nb,1);3*ones(Nb,1)]); st mc = multcompare(st); % Note, multcompare uses only the information in the st structure, it % doesn't perform separate two-sample t-tests. Compare e.g. Bmain = st.means' DFmain = st.df ResMS = st.s^2 % this leads me to believe that the ANOVA approach is correct. Though note % that the above didn't touch on the multiple comparison adjustment issue.
st =
gnames: {3x1 cell}
n: [10 10 10]
source: 'anova1'
means: [0.0013 0.2310 0.0253]
df: 27
s: 1.0019
Bmain =
0.0013
0.2310
0.0253
DFmain =
27
ResMS =
1.0038