-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanova_three.m
192 lines (154 loc) · 11.5 KB
/
anova_three.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
function anova_three(m)
m = m(:, 2:end);
visFeedback = [1 1 1 1 2 2 2 2];
cues = [1 1 2 2 1 1 2 2];
direction = [1 2 1 2 1 2 1 2];
occ = logical(repmat([1 1 1 1 0 0 0 0], [size(m, 1), 1]));
vis = logical(abs(occ - 1));
cue = logical(repmat([1 1 0 0 1 1 0 0], [size(m, 1), 1]));
ncue = logical(abs(cue - 1));
lr = logical(repmat([1 0 1 0 1 0 1 0], [size(m, 1) 1]));
rl = logical(abs(lr - 1));
% Variable A, Visual Feedback
[SSa, DFa, ~, SSaxs, DFaxs, ~, Fa, Pa] = main_effect(m, visFeedback, cues, direction);
% Variable B, Cues presence
[SSb, DFb, ~, SSbxs, DFbxs, ~, Fb, Pb] = main_effect(m, cues, visFeedback, direction);
% Variable C, Direction
[SSc, DFc, ~, SScxs, DFcxs, ~, Fc, Pc] = main_effect(m, direction, visFeedback, cues);
% A & B interaction, Visual feedback x Cues presence
[SSaxb, DFaxb, ~, SSaxbxs, DFaxbxs, ~, Faxb, Paxb] = ...
interaction(m, visFeedback, cues, direction);
% A & C interaction, Visual feedback x Direction
[SSaxc, DFaxc, ~, SSaxcxs, DFaxcxs, ~, Faxc, Paxc] = ...
interaction(m, visFeedback, direction, cues);
% B & C interaction, Cues presence x Direction
[SSbxc, DFbxc, ~, SSbxcxs, DFbxcxs, ~, Fbxc, Pbxc] = ...
interaction(m, cues, direction, visFeedback);
% A & B & C interaction
[SSaxbxc, DFaxbxc, ~, SSaxbxcxs, DFaxbxcxs, ~, Faxbxc, Paxbxc] =...
three_way_interaction(m, visFeedback, cues, direction);
% SSt = sum(m(:).^2) - sum(m(:))^2 / (2 * 2 * 2 * size(m,1));
sprintf(strcat('\n\nWithin-subjects Effects', ...
'\n=========================================================================\n', ...
'Source SS df F p', ...
'\n=========================================================================\n', ...
'VisFeedback %5.4f %10i %5.4f %.3f\n', ...
'Error(VisFeedback) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'Cues %5.4f %10i %5.4f %.3f\n', ...
'Error(Cues) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'Direction %5.4f %10i %5.4f %.3f\n', ...
'Error(Direction) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'VisFeedback * Cues %5.4f %10i %5.4f %.3f\n', ...
'Error(VisFeedback * Cues) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'VisFeedback * Direction %5.4f %10i %5.4f %.3f\n', ...
'Error(VisFeedback * Direction) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'Cues * Direction %5.4f %10i %5.4f %.3f\n', ...
'Error(Cues * Direction) %5.4f %10i', ...
'\n-------------------------------------\n', ...
'VisFeedback * Cues * Direction %5.4f %10i %5.4f %.3f\n', ...
'Error(VisFeedback * Cues * Direction) %5.4f %10i', ...
'\n-------------------------------------\n'), ...
SSa, DFa, Fa, Pa,...
SSaxs, DFaxs, ...
SSb, DFb, Fb, Pb, ...
SSbxs, DFbxs, ...
SSc, DFc, Fc, Pc, ...
SScxs, DFcxs, ...
SSaxb, DFaxb, Faxb, Paxb, ...
SSaxbxs, DFaxbxs, ...
SSaxc, DFaxc, Faxc, Paxc, ...
SSaxcxs, DFaxcxs, ...
SSbxc, DFbxc, Fbxc, Pbxc, ...
SSbxcxs, DFbxcxs, ...
SSaxbxc, DFaxbxc, Faxbxc, Paxbxc, ...
SSaxbxcxs, DFaxbxcxs)
end
function [SS, DF, MS, SSe, DFe, MSe, F, P] = main_effect(m, levels1, levels2, levels3)
SS = (sum(sum(m(:, levels1 == 1)))^2 + sum(sum(m(:, levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1));
DF = length(unique(levels1)) - 1;
MS = SS / DF;
SSe = sum(sum(m(:,levels1 == 1), 2).^2 + sum(m(:,levels1 == 2), 2).^2) / (length(unique(levels2)) * length(unique(levels3))) - ...
(sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
sum(sum(m, 2).^2) / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3))) + ...
sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1));
DFe = (length(unique(levels1)) - 1)*(size(m,1) - 1);
MSe = SSe / DFe;
F = MS / MSe;
P = 1 - fcdf(F, DF, DFe);
end
% function [SS, DF, MS, SSe, DFe, MSe, F, P] = main_effect(m, l1, l2)
%
% SS = (sum(m(l1))^2 + sum(m(l2))^2) / (2 * 2 * size(m,1)) - ...
% (sum(m(:))^2) / (2 * 2 * 2 * size(m,1));
% DF = length(unique(levels1)) - 1;
% MS = SS / DF;
%
% SSe = sum(sum(m(:,levels1 == 1), 2).^2 + sum(m(:,levels1 == 2), 2).^2) / (length(unique(levels2)) * length(unique(levels3))) - ...
% (sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
% sum(sum(m, 2).^2) / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3))) + ...
% sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1));
% DFe = (length(unique(levels1)) - 1)*(size(m,1) - 1);
% MSe = SSe / DFe;
%
% F = MS / MSe;
%
% P = 1 - fcdf(F, DF, DFe);
% end
function [SS, DF, MS, SSe, DFe, MSe, F, P] = interaction(m, levels1, levels2, levels3)
SS = (sum(sum(m(:,levels1 == 1 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 1 & levels2 == 2)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 2)))^2) / (length(unique(levels3)) * size(m,1)) - ...
(sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
(sum(sum(m(:,levels2 == 1)))^2 + sum(sum(m(:,levels2 == 2)))^2) / (length(unique(levels1)) * length(unique(levels3)) * size(m,1)) + ...
sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1));
DF = (length(unique(levels1)) - 1)*(length(unique(levels2)) - 1);
MS = SS / DF;
SSe = sum(sum(m(:,levels1 == 1 & levels2 == 1), 2).^2 + sum(m(:,levels1 == 1 & levels2 == 2), 2).^2 + sum(m(:,levels1 == 2 & levels2 == 1), 2).^2 + sum(m(:,levels1 == 2 & levels2 == 2), 2).^2) / length(unique(levels3)) - ...
(sum(sum(m(:,levels1 == 1 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 1 & levels2 == 2)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 2)))^2) / (length(unique(levels3)) * size(m,1)) - ...
sum(sum(m(:,levels1 == 1), 2).^2 + sum(m(:,levels1 == 2), 2).^2) / (length(unique(levels2)) * length(unique(levels3))) - ...
sum(sum(m(:,levels2 == 1), 2).^2 + sum(m(:,levels2 == 2), 2).^2) / (length(unique(levels1)) * length(unique(levels3))) + ...
sum(sum(m, 2).^2) / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3))) + ...
(sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) + ...
(sum(sum(m(:,levels2 == 1)))^2 + sum(sum(m(:,levels2 == 2)))^2) / (length(unique(levels1)) * length(unique(levels3)) * size(m,1)) - ...
sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1));
DFe = (length(unique(levels1)) - 1) * (length(unique(levels2)) - 1) * (size(m,1) - 1);
MSe = SSe / DFe;
F = MS / MSe;
P = 1 - fcdf(F, DF, DFe);
end
function [SS, DF, MS, SSe, DFe, MSe, F, P] = three_way_interaction(m, levels1, levels2, levels3)
SS = sum(sum(m).^2) / size(m,1) - ...
(sum(sum(m(:, levels2 == 1 & levels3 == 1)))^2 + sum(sum(m(:, levels2 == 1 & levels3 == 2)))^2 + sum(sum(m(:, levels2 == 2 & levels3 == 1)))^2 + sum(sum(m(:, levels2 == 2 & levels3 == 2)))^2)/ (length(unique(levels1)) * size(m,1)) - ...
(sum(sum(m(:, levels1 == 1 & levels3 == 1)))^2 + sum(sum(m(:, levels1 == 1 & levels3 == 2)))^2 + sum(sum(m(:, levels1 == 2 & levels3 == 1)))^2 + sum(sum(m(:, levels1 == 2 & levels3 == 2)))^2)/ (length(unique(levels2)) * size(m,1)) - ...
(sum(sum(m(:,levels1 == 1 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 1 & levels2 == 2)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 1)))^2 + sum(sum(m(:,levels1 == 2 & levels2 == 2)))^2) / (length(unique(levels3)) * size(m,1)) + ...
(sum(sum(m(:,levels3 == 1)))^2 + sum(sum(m(:,levels3 == 2)))^2) / (length(unique(levels1)) * length(unique(levels2)) * size(m,1)) + ...
(sum(sum(m(:,levels2 == 1)))^2 + sum(sum(m(:,levels2 == 2)))^2) / (length(unique(levels1)) * length(unique(levels3)) * size(m,1)) + ...
(sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
sum(m(:))^2 / (2 * 2 * 2 * size(m,1));
DF = (length(unique(levels1)) - 1) * (length(unique(levels2)) - 1) * (length(unique(levels3)) - 1);
MS = SS / DF;
SSe = sum(sum(m(:,levels3 == 1), 2).^2 + sum(m(:,levels3 == 2), 2).^2) / (length(unique(levels1)) * length(unique(levels2))) + ...
sum(sum(m(:,levels2 == 1), 2).^2 + sum(m(:,levels2 == 2), 2).^2) / (length(unique(levels1)) * length(unique(levels3))) + ...
sum(sum(m(:,levels1 == 1), 2).^2 + sum(m(:,levels1 == 2), 2).^2) / (length(unique(levels2)) * length(unique(levels3))) + ...
(sum(sum(m(:, levels2 == 1 & levels3 == 1)))^2 + sum(sum(m(:, levels2 == 1 & levels3 == 2)))^2 + sum(sum(m(:, levels2 == 2 & levels3 == 1)))^2 + sum(sum(m(:, levels2 == 2 & levels3 == 2)))^2)/ (length(unique(levels1)) * size(m,1)) + ...
(sum(sum(m(:, levels1 == 1 & levels3 == 1)))^2 + sum(sum(m(:, levels1 == 1 & levels3 == 2)))^2 + sum(sum(m(:, levels1 == 2 & levels3 == 1)))^2 + sum(sum(m(:, levels1 == 2 & levels3 == 2)))^2)/ (length(unique(levels2)) * size(m,1)) + ...
(sum(sum(m(:, levels1 == 1 & levels2 == 1)))^2 + sum(sum(m(:, levels1 == 1 & levels2 == 2)))^2 + sum(sum(m(:, levels1 == 2 & levels2 == 1)))^2 + sum(sum(m(:, levels1 == 2 & levels2 == 2)))^2) / (length(unique(levels3)) * size(m,1)) + ...
sum(m(:).^2) + ...
sum(m(:))^2 / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
(sum(sum(m(:,levels1 == 1)))^2 + sum(sum(m(:,levels1 == 2)))^2) / (length(unique(levels2)) * length(unique(levels3)) * size(m,1)) - ...
(sum(sum(m(:,levels2 == 1)))^2 + sum(sum(m(:,levels2 == 2)))^2) / (length(unique(levels1)) * length(unique(levels3)) * size(m,1)) - ...
(sum(sum(m(:,levels3 == 1)))^2 + sum(sum(m(:,levels3 == 2)))^2) / (length(unique(levels1)) * length(unique(levels2)) * size(m,1)) - ...
sum(sum(m).^2) / size(m,1) - ...
sum(sum(m, 2).^2) / (length(unique(levels1)) * length(unique(levels2)) * length(unique(levels3))) - ...
sum(sum(m(:,levels1 == 1 & levels2 == 1), 2).^2 + sum(m(:,levels1 == 1 & levels2 == 2), 2).^2 + sum(m(:,levels1 == 2 & levels2 == 1), 2).^2 + sum(m(:,levels1 == 2 & levels2 == 2), 2).^2) / length(unique(levels3)) - ...
sum(sum(m(:,levels1 == 1 & levels3 == 1), 2).^2 + sum(m(:,levels1 == 1 & levels3 == 2), 2).^2 + sum(m(:,levels1 == 2 & levels3 == 1), 2).^2 + sum(m(:,levels1 == 2 & levels3 == 2), 2).^2) / length(unique(levels2)) - ...
sum(sum(m(:,levels2 == 1 & levels3 == 1), 2).^2 + sum(m(:,levels2 == 1 & levels3 == 2), 2).^2 + sum(m(:,levels2 == 2 & levels3 == 1), 2).^2 + sum(m(:,levels2 == 2 & levels3 == 2), 2).^2) / length(unique(levels1));
DFe = (length(unique(levels1)) - 1) * (length(unique(levels2)) - 1) * (length(unique(levels3)) - 1) * (size(m,1) - 1);
MSe = SSe / DFe;
F = MS / MSe;
P = 1 - fcdf(F, DF, DFe);
end