1function [err, Contr] = ContrVec(order, n, NF, group, dmat, Contr, FL, num_col) 2% 3% [err,] = ContrVec.m () 4% 5%Purpose: 6% 7% Obtain a vector for each contrast so that effect size is calculated in SumsOfSquares.m 8% 9%Input Parameters: 10% 11% 12% 13%Output Parameters: 14% err : 0 No Problem 15% : 1 Problems 16% 17% 18% 19%Key Terms: 20% 21%More Info : 22% 23% 24% 25% 26% Author : Gang Chen 27% Date : Wed Dec 1 10:15:29 EST 2004 28% SSCC/NIMH/ National Institutes of Health, Bethesda MD 20892 29 30 31%Define the function name for easy referencing 32FuncName = 'ContrVec.m'; 33 34%Debug Flag 35DBG = 1; 36 37%initialize return variables 38err = 1; 39 40switch order 41 42case 1, % dmat(:, num_col0+1:num_col0+num_col(1)) is the matrix for 1st order contrasts 43 44 for (i = 1:1:Contr.ord1.tot), 45 Contr.ord1.cnt(i).vec = zeros(1, n); % n = ntot in anovan.m: total number of files, and no. of arrows in dmat 46 Contr.ord1.cnt(i).scalar = 0; 47 for (j = 1:1:Contr.ord1.cnt(i).NT), % for each term in a contrast 48 first = 0; 49 Contr.ord1.cnt(i).code(j).pos = 0; 50 shift = 1; % Grand mean 51 for (k = 1:1:NF), 52 if (Contr.ord1.cnt(i).code(j).str(k) >= 'a' & Contr.ord1.cnt(i).code(j).str(k) <= 'z'), 53 tmpv = 10 + Contr.ord1.cnt(i).code(j).str(k) - 'a'; 54 else tmpv = Contr.ord1.cnt(i).code(j).str(k) - '0'; end % tmpv = level # 55 56 if (tmpv ~= 0), 57 first = first + 1; % the first non-zero index backward! For 1st-roder, it is the only nonzero index. 58 if (first == 1), 59 Contr.ord1.cnt(i).idx1 = k; 60% tmp = FL(k).N_level; 61 elseif (first > 1), 62 fprintf('\nError in contrast coding: more than one non-zero index in 1st order constrasts!\n'); 63 fprintf(2,'Halted: Ctrl+c to exit'); pause; 64 end % if (first == 1) 65 end % if (tmpv ~= 0) 66 end % for (k = 1:1:NF) 67 if (Contr.ord1.cnt(i).idx1 > 1), 68 for (k = 1:1:Contr.ord1.cnt(i).idx1-1), 69 shift = shift + FL(k).N_level; 70 end 71 end 72 if (Contr.ord1.cnt(i).code(j).str(Contr.ord1.cnt(i).idx1) >= 'a' & Contr.ord1.cnt(i).code(j).str(Contr.ord1.cnt(i).idx1) <= 'z'), 73 tmpv = 10 + Contr.ord1.cnt(i).code(j).str(Contr.ord1.cnt(i).idx1) - 'a'; 74 else tmpv = Contr.ord1.cnt(i).code(j).str(Contr.ord1.cnt(i).idx1) - '0'; end 75 76 Contr.ord1.cnt(i).code(j).pos = shift + tmpv; 77 78% tmp = FL(Contr.ord1.cnt(i).idx1).N_level/n; 79% Contr.ord1.cnt(i).scalar = tmp * Contr.ord1.cnt(i).coef*Contr.ord1.cnt(i).coef'; 80% Contr.ord1.cnt(i).vec = Contr.ord1.cnt(i).vec + Contr.ord1.cnt(i).coef(j) * dmat(:, Contr.ord1.cnt(i).code(j).pos)'; 81 82 count=0; % The part should be valid for both balanced and unbalanced designs 83% tmpstr = char (group{Contr.ord1.cnt(i).idx1}); 84 for (ll = 1:1:n) % Should have a more decent way to do this in a matrix fashion instead of a lenthy loop? 85 tmpstr = char (group{Contr.ord1.cnt(i).idx1}(ll)); 86 if strcmp(tmpstr, FL(Contr.ord1.cnt(i).idx1).level(tmpv).expr) 87 count = count + 1; % total number of occurences at tmpv-th level 88 end 89 end 90 Contr.ord1.cnt(i).vec = Contr.ord1.cnt(i).vec + Contr.ord1.cnt(i).coef(j) * dmat(:, Contr.ord1.cnt(i).code(j).pos)'/count; 91 Contr.ord1.cnt(i).scalar = Contr.ord1.cnt(i).scalar + Contr.ord1.cnt(i).coef(j)*Contr.ord1.cnt(i).coef(j)/count; % For variance coef: j-th term in i-th 1st-order contrast. 92 93 end % for (j = 1:1:Contr.ord1.cnt(i).NT) 94% Contr.ord1.cnt(i).vec = Contr.ord1.cnt(i).vec*tmp; % assuming balanced design!!! 95 end %for (i = 1:1:Contr1.tot) 96 97case 2, % dmat(:, num_col0+num_col(1)+1:num_col0+num_col(1)+num_col(2)) is the matrix for 2nd order contrasts 98 99 % when the 1st factor is collapsed 100 % shift1 = (FL(1).N_level*(FL(2).N_level + FL(3).N_level + FL(4).N_level))*(str2num(Contr2.cnt(i).code(1).str(1)) == 0); 101 % when the 2nd factor is collapsed 102 % shift2 = (FL(2).N_level*(FL(3).N_level + FL(4).N_level))*(str2num(Contr2.cnt(i).code(1).str(2)) == 0); 103 % when the 3rd factor is collapsed 104 % shift3 = (FL(3).N_level*FL(4).N_level)*(str2num(Contr2.cnt(i).code(1).str(3)) == 0); 105 % 106 % when the 4th factor is collapsed 107 % shift4 = FL(4).N_level*(str2num(Contr2.cnt(i).code(1).str(4)) == 0); 108 % 109 % Contr2.cnt(i).shift = num_col0 + num_col(1) + 1 + shift1 + shift2 + shift3 + shift4; % position shifting for the two collapsed indices 110 111 shift = 1 + num_col(1); % Grand mean plus factor means 112 for (i = 1:1:Contr.ord2.tot), 113 114 % for the two non-zero indices 115 Contr.ord2.cnt(i).vec = zeros(1, n); % n = ntot in anovan.m: total number of files, and no. of arrows in dmat 116 Contr.ord2.cnt(i).scalar = 0; 117 for (j = 1:1:Contr.ord2.cnt(i).NT), % For each term in this 2nd-order contrast 118 first = 0; 119 Contr.ord2.cnt(i).code(j).pos = 0; 120 for (k = 1:1:NF), 121 if (Contr.ord2.cnt(i).code(j).str(k) >= 'a' & Contr.ord2.cnt(i).code(j).str(k) <= 'z'), 122 tmpv = 10 + Contr.ord2.cnt(i).code(j).str(k) - 'a'; 123 else tmpv = Contr.ord2.cnt(i).code(j).str(k) - '0'; end 124 125 if (tmpv ~= 0), 126 first = first + 1; % the first non-zero index backward! 127 if (first == 1), 128 Contr.ord2.cnt(i).idx1 = k; 129% tmp = FL(k).N_level; 130 elseif (first == 2), Contr.ord2.cnt(i).idx2 = k; end 131 end 132 end %for (k = 1:1:NF) 133 sec_fctr = Contr.ord2.cnt(i).idx2; 134 switch Contr.ord2.cnt(i).idx1 135 case 1, % 2nd-order contrasts: Ax 136% sec_fctr = Contr.ord2.cnt(i).idx2; 137 if (Contr.ord2.cnt(i).code(j).str(1) >= 'a' & Contr.ord2.cnt(i).code(j).str(1) <= 'z'), 138 tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(1) - 'a'; 139 else tmpv1 = Contr.ord2.cnt(i).code(j).str(1) - '0'; end 140 if (Contr.ord2.cnt(i).code(j).str(sec_fctr) >= 'a' & Contr.ord2.cnt(i).code(j).str(sec_fctr) <= 'z'), 141 tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(sec_fctr) - 'a'; 142 else tmpv2 = Contr.ord2.cnt(i).code(j).str(sec_fctr) - '0'; end % tmpv = level # 143 144 Contr.ord2.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(sec_fctr).N_level + tmpv2; 145 if (sec_fctr > 2), 146 for (ll = 2:1:(sec_fctr-1)), % shift over AB, AC, ... 147 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(1).N_level*FL(ll).N_level; 148 end % for (ll = 2:1:(sec_fctr-1)) 149 end % if (sec_fctr > 2) 150 151% switch Contr.ord2.cnt(i).idx2 152% case 2, 153% if (Contr.ord2.cnt(i).code(j).str(1) >= 'a' & Contr.ord2.cnt(i).code(j).str(1) <= 'z'), 154% tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(1) - 'a'; 155% else tmpv1 = Contr.ord2.cnt(i).code(j).str(1) - '0'; end 156% if (Contr.ord2.cnt(i).code(j).str(2) >= 'a' & Contr.ord2.cnt(i).code(j).str(2) <= 'z'), 157% tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(2) - 'a'; 158% else tmpv2 = Contr.ord2.cnt(i).code(j).str(2) - '0'; end % tmpv = level # 159 160% Contr.ord2.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(2).N_level + tmpv2; % AB 161% case 3, 162% if (Contr.ord2.cnt(i).code(j).str(1) >= 'a' & Contr.ord2.cnt(i).code(j).str(1) <= 'z'), 163% tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(1) - 'a'; 164% else tmpv1 = Contr.ord2.cnt(i).code(j).str(1) - '0'; end 165% if (Contr.ord2.cnt(i).code(j).str(3) >= 'a' & Contr.ord2.cnt(i).code(j).str(3) <= 'z'), 166% tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(3) - 'a'; 167% else tmpv2 = Contr.ord2.cnt(i).code(j).str(3) - '0'; end 168 169% Contr.ord2.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level+ ... 170% (tmpv1 - 1) * FL(3).N_level + tmpv2; % AC 171 172% case 4, % AD 173% if (Contr.ord2.cnt(i).code(j).str(1) >= 'a' & Contr.ord2.cnt(i).code(j).str(1) <= 'z'), 174% tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(1) - 'a'; 175% else tmpv1 = Contr.ord2.cnt(i).code(j).str(1) - '0'; end 176% if (Contr.ord2.cnt(i).code(j).str(4) >= 'a' & Contr.ord2.cnt(i).code(j).str(4) <= 'z'), 177% tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(4) - 'a'; 178% else tmpv2 = Contr.ord2.cnt(i).code(j).str(4) - '0'; end 179 180% Contr.ord2.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level+ FL(1).N_level*FL(3).N_level+... 181% (tmpv1 - 1) * FL(4).N_level + tmpv2; % AD 182% end 183 case 2, % 2nd-order contrasts Bx 184% sec_fctr = Contr.ord2.cnt(i).idx2; 185 if (Contr.ord2.cnt(i).code(j).str(2) >= 'a' & Contr.ord2.cnt(i).code(j).str(2) <= 'z') 186 tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(2) - 'a'; 187 else tmpv1 = Contr.ord2.cnt(i).code(j).str(2) - '0'; end 188 if (Contr.ord2.cnt(i).code(j).str(sec_fctr) >= 'a' & Contr.ord2.cnt(i).code(j).str(sec_fctr) <= 'z'), 189 tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(sec_fctr) - 'a'; 190 else tmpv2 = Contr.ord2.cnt(i).code(j).str(sec_fctr) - '0'; end 191 192 Contr.ord2.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(sec_fctr).N_level + tmpv2; 193 for (ll = 2:1:NF), % shift over all those Ax's 194 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(1).N_level*FL(ll).N_level; 195 end 196 197 if (sec_fctr > 3), 198 for (ll = 3:1:(sec_fctr-1)), % shift over Bx's 199 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(2).N_level*FL(ll).N_level; 200 end % for (ll = 3:1:(sec_fctr-1)) 201 end % if (sec_fctr > 3) 202 203% if (Contr.ord2.cnt(i).idx2 == 3), 204% if (Contr.ord2.cnt(i).code(j).str(2) >= 'a' & Contr.ord2.cnt(i).code(j).str(2) <= 'z'), 205% tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(2) - 'a'; 206% else tmpv1 = Contr.ord2.cnt(i).code(j).str(2) - '0'; end 207% if (Contr.ord2.cnt(i).code(j).str(3) >= 'a' & Contr.ord2.cnt(i).code(j).str(3) <= 'z'), 208% tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(3) - 'a'; 209% else tmpv2 = Contr.ord2.cnt(i).code(j).str(3) - '0'; end 210 211% if (NF == 3), Contr.ord2.cnt(i).code(j).pos = shift + FL(1).N_level*(FL(2).N_level + FL(3).N_level) + ... 212% (tmpv1 - 1) * FL(3).N_level + tmpv2; % BC 213% else Contr.ord2.cnt(i).code(j).pos = shift + FL(1).N_level*(FL(2).N_level + FL(3).N_level + FL(4).N_level) + ... 214% (tmpv1 - 1) * FL(3).N_level + tmpv2; % BC 215% end 216% tmp = FL(2).N_level*FL(3).N_level/n; 217% else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end 218 219 case 3, % 2nd-order contrasts Cx 220 if (Contr.ord2.cnt(i).code(j).str(3) >= 'a' & Contr.ord2.cnt(i).code(j).str(3) <= 'z') 221 tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(3) - 'a'; 222 else tmpv1 = Contr.ord2.cnt(i).code(j).str(3) - '0'; end 223 if (Contr.ord2.cnt(i).code(j).str(sec_fctr) >= 'a' & Contr.ord2.cnt(i).code(j).str(sec_fctr) <= 'z'), 224 tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(sec_fctr) - 'a'; 225 else tmpv2 = Contr.ord2.cnt(i).code(j).str(sec_fctr) - '0'; end 226 227 Contr.ord2.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(sec_fctr).N_level + tmpv2; 228 for (ll = 2:1:NF), % shift over all those Ax's 229 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(1).N_level*FL(ll).N_level; 230 end 231 232 for (ll = 3:1:NF), % shift over all those Bx's 233 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(2).N_level*FL(ll).N_level; 234 end 235 236 if (sec_fctr > 4), 237 for (ll = 4:1:(sec_fctr-1)), % shift over Bx's 238 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(3).N_level*FL(ll).N_level; 239 end % for (ll = 4:1:(sec_fctr-1)) 240 end % if (sec_fctr > 4) 241 242 case 4, % 2nd-order contrasts Dx 243 if (Contr.ord2.cnt(i).code(j).str(4) >= 'a' & Contr.ord2.cnt(i).code(j).str(4) <= 'z') 244 tmpv1 = 10 + Contr.ord2.cnt(i).code(j).str(4) - 'a'; 245 else tmpv1 = Contr.ord2.cnt(i).code(j).str(4) - '0'; end 246 if (Contr.ord2.cnt(i).code(j).str(sec_fctr) >= 'a' & Contr.ord2.cnt(i).code(j).str(sec_fctr) <= 'z'), 247 tmpv2 = 10 + Contr.ord2.cnt(i).code(j).str(sec_fctr) - 'a'; 248 else tmpv2 = Contr.ord2.cnt(i).code(j).str(sec_fctr) - '0'; end 249 250 Contr.ord2.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(sec_fctr).N_level + tmpv2; 251 for (ll = 2:1:NF), % shift over all those Ax's 252 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(1).N_level*FL(ll).N_level; 253 end 254 255 for (ll = 3:1:NF), % shift over all those Bx's 256 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(2).N_level*FL(ll).N_level; 257 end 258 259 for (ll = 4:1:NF), % shift over all those Cx's 260 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(3).N_level*FL(ll).N_level; 261 end 262 263 if (sec_fctr > 5), 264 for (ll = 5:1:(sec_fctr-1)), % shift over Bx's 265 Contr.ord2.cnt(i).code(j).pos = Contr.ord2.cnt(i).code(j).pos + FL(4).N_level*FL(ll).N_level; 266 end % for (ll = 5:1:(sec_fctr-1)) 267 end % if (sec_fctr > 5) 268 269 270% fprintf('\nSomething is wrong in the contrast coding!\n'); 271% fprintf(2,'Halted: Ctrl+c to exit'); pause; 272 end %switch Contr.ord2.cnt(i).idx1 273 274 count = 0; 275 for (ll = 1:1:n) 276 tmpstr1 = char (group{Contr.ord2.cnt(i).idx1}(ll)); 277 tmpstr2 = char (group{Contr.ord2.cnt(i).idx2}(ll)); 278 if strcmp(tmpstr1, FL(Contr.ord2.cnt(i).idx1).level(tmpv1).expr) & strcmp(tmpstr2, FL(Contr.ord2.cnt(i).idx2).level(tmpv2).expr) 279 count = count + 1; % total number of occurences at tmpv-th level 280 end 281 end 282 Contr.ord2.cnt(i).vec = Contr.ord2.cnt(i).vec + Contr.ord2.cnt(i).coef(j) * dmat(:, Contr.ord2.cnt(i).code(j).pos)'/count; 283 Contr.ord2.cnt(i).scalar = Contr.ord2.cnt(i).scalar + Contr.ord2.cnt(i).coef(j)*Contr.ord2.cnt(i).coef(j)/count; % For variance coef: j-th term in i-th 1st-order contrast. 284 285% Contr.ord2.cnt(i).scalar = tmp * Contr.ord2.cnt(i).coef*Contr.ord2.cnt(i).coef'; 286% Contr.ord2.cnt(i).vec = Contr.ord2.cnt(i).vec + Contr.ord2.cnt(i).coef(j) * dmat(:, Contr.ord2.cnt(i).code(j).pos)'; 287 end %for (j = 1:1:Contr.ord2.cnt(i).NT), 288% Contr.ord2.cnt(i).vec = Contr.ord2.cnt(i).vec*tmp; % assuming balanced design!!! 289 end %for (i = 1:1:Contr2.tot) 290 291case 3, 292 293 shift = 1 + num_col(1) + num_col(2); % skip grand mean, factor means and 2nd-roder terms 294 for (i = 1:1:Contr.ord3.tot), 295 % for the non-zero indices 296 Contr.ord3.cnt(i).vec = zeros(1, n); % n = ntot in anovan.m: total number of files, and no. of arrows in dmat 297 Contr.ord3.cnt(i).scalar = 0; 298 for (j = 1:1:Contr.ord3.cnt(i).NT), % for each term in a contrast 299 first = 0; 300 Contr.ord3.cnt(i).code(j).pos = 0; 301 302 for (k = 1:1:NF), 303 if (Contr.ord3.cnt(i).code(j).str(k) >= 'a' & Contr.ord3.cnt(i).code(j).str(k) <= 'z'), 304 tmpv = 10 + Contr.ord3.cnt(i).code(j).str(k) - 'a'; 305 else tmpv = Contr.ord3.cnt(i).code(j).str(k) - '0'; end 306 307 if (tmpv ~= 0), 308 first = first + 1; % the first non-zero index backward! 309 % if (first == 1), tmp = str2num(Contr3.cnt(i).code(j).str(k)) - 1; % (level# - 1) for the first collapsed index 310 % elseif (first == 2), Contr3.cnt(i).code(j).shift = Contr3.cnt(i).code(j).shift + tmp * FL(k).N_level str2num(Contr3.cnt(i).code(j).str(k); 311 if (first == 1), 312 Contr.ord3.cnt(i).idx1 = k; 313 %Contr3.cnt(i).code(j).pos = Contr3.cnt(i).shift + str2num(Contr3.cnt(i).code(j).str(k)) - 1; 314% tmp = FL(k).N_level; 315 elseif (first == 2), 316 Contr.ord3.cnt(i).idx2 = k; 317 %Contr3.cnt(i).code(j).pos = Contr3.cnt(i).code(j).pos + (str2num(Contr3.cnt(i).code(j).str(k)) - 1) * tmp; 318 %else fprintf('\nError in contrast coding: more than two non-zero indices!\n'); 319 % fprintf(2,'Halted: Ctrl+c to exit'); pause; 320 end 321 if (first == 3), Contr.ord3.cnt(i).idx3 = k; end 322 end 323 end % for (k = 1:1:NF) 324 switch Contr.ord3.cnt(i).idx1 325 case 1, 326 switch Contr.ord3.cnt(i).idx2 327 case 2, 328 switch Contr.ord3.cnt(i).idx3 329 case 3, % ABC 330 331 if (Contr.ord3.cnt(i).code(j).str(1) >= 'a' & Contr.ord3.cnt(i).code(j).str(1) <= 'z'), 332 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(1) - 'a'; 333 else tmpv1 = Contr.ord3.cnt(i).code(j).str(1) - '0'; end 334 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 335 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 336 else tmpv2 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 337 if (Contr.ord3.cnt(i).code(j).str(3) >= 'a' & Contr.ord3.cnt(i).code(j).str(3) <= 'z'), 338 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(3) - 'a'; 339 else tmpv3 = Contr.ord3.cnt(i).code(j).str(3) - '0'; end 340 341 Contr.ord3.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(2).N_level * FL(3).N_level + ... 342 (tmpv2 - 1) * FL(3).N_level + tmpv3; % ABC 343% tmp = FL(1).N_level*FL(2).N_level*FL(3).N_level/n; 344 345 case 4, % ABD 346 347 if (Contr.ord3.cnt(i).code(j).str(1) >= 'a' & Contr.ord3.cnt(i).code(j).str(1) <= 'z'), 348 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(1) - 'a'; 349 else tmpv1 = Contr.ord3.cnt(i).code(j).str(1) - '0'; end 350 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 351 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 352 else tmpv2 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 353 if (Contr.ord3.cnt(i).code(j).str(4) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 354 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(4) - 'a'; 355 else tmpv3 = Contr.ord3.cnt(i).code(j).str(4) - '0'; end 356 357 % shift the columns for ABC and part of ABD 358 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level + ... 359 (tmpv1 - 1) * FL(2).N_level * FL(4).N_level + (tmpv2 - 1) * FL(4).N_level + tmpv3; % ABD 360% tmp = FL(1).N_level*FL(2).N_level*FL(4).N_level/n; 361 362 case 5, % ABE 363 364 if (Contr.ord3.cnt(i).code(j).str(1) >= 'a' & Contr.ord3.cnt(i).code(j).str(1) <= 'z'), 365 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(1) - 'a'; 366 else tmpv1 = Contr.ord3.cnt(i).code(j).str(1) - '0'; end 367 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 368 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 369 else tmpv2 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 370 if (Contr.ord3.cnt(i).code(j).str(5) >= 'a' & Contr.ord3.cnt(i).code(j).str(5) <= 'z'), 371 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(5) - 'a'; 372 else tmpv3 = Contr.ord3.cnt(i).code(j).str(5) - '0'; end 373 374 % shift the columns for ABC, ABD and part of ABE 375 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level + ... 376 + FL(1).N_level * FL(2).N_level * FL(4).N_level + ... 377 (tmpv1 - 1) * FL(2).N_level * FL(5).N_level + (tmpv2 - 1) * FL(5).N_level + tmpv3; % ABE 378 379 end % switch Contr.ord3.cnt(i).idx3 380 case 3, 381 if (Contr.ord3.cnt(i).idx3 == 4), % ACD 382 if (Contr.ord3.cnt(i).code(j).str(1) >= 'a' & Contr.ord3.cnt(i).code(j).str(1) <= 'z'), 383 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(1) - 'a'; 384 else tmpv1 = Contr.ord3.cnt(i).code(j).str(1) - '0'; end 385 if (Contr.ord3.cnt(i).code(j).str(3) >= 'a' & Contr.ord3.cnt(i).code(j).str(3) <= 'z'), 386 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(3) - 'a'; 387 else tmpv2 = Contr.ord3.cnt(i).code(j).str(3) - '0'; end 388 if (Contr.ord3.cnt(i).code(j).str(4) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 389 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(4) - 'a'; 390 else tmpv3 = Contr.ord3.cnt(i).code(j).str(4) - '0'; end 391 392 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level + FL(1).N_level * FL(2).N_level * FL(4).N_level + ... 393 FL(1).N_level * FL(2).N_level * FL(5).N_level + (tmpv1 - 1) * FL(3).N_level * FL(4).N_level + (tmpv2 - 1) * FL(4).N_level + tmpv3; % ACD 394% tmp = FL(1).N_level*FL(3).N_level*FL(4).N_level/n; 395 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; 396 end 397 case 4, fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; 398 end 399 case 2, 400 switch Contr.ord3.cnt(i).idx2 401 case 3, 402 switch Contr.ord3.cnt(i).idx3 403 404 case 4, % BCD 405 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 406 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 407 else tmpv1 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 408 if (Contr.ord3.cnt(i).code(j).str(3) >= 'a' & Contr.ord3.cnt(i).code(j).str(3) <= 'z'), 409 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(3) - 'a'; 410 else tmpv2 = Contr.ord3.cnt(i).code(j).str(3) - '0'; end 411 if (Contr.ord3.cnt(i).code(j).str(4) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 412 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(4) - 'a'; 413 else tmpv3 = Contr.ord3.cnt(i).code(j).str(4) - '0'; end 414 415 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level*FL(3).N_level + FL(1).N_level*FL(2).N_level*FL(4).N_level + ... 416 FL(1).N_level * FL(2).N_level * FL(5).N_level + FL(1).N_level*FL(3).N_level*FL(4).N_level + FL(1).N_level * FL(3).N_level * FL(5).N_level + ... 417 FL(1).N_level * FL(4).N_level * FL(5).N_level + (tmpv1 - 1) * FL(3).N_level * FL(4).N_level + (tmpv2 - 1)* FL(4).N_level + tmpv3; 418 419 case 5, % BCE 420 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 421 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 422 else tmpv1 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 423 if (Contr.ord3.cnt(i).code(j).str(3) >= 'a' & Contr.ord3.cnt(i).code(j).str(3) <= 'z'), 424 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(3) - 'a'; 425 else tmpv2 = Contr.ord3.cnt(i).code(j).str(3) - '0'; end 426 if (Contr.ord3.cnt(i).code(j).str(5) >= 'a' & Contr.ord3.cnt(i).code(j).str(5) <= 'z'), 427 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(5) - 'a'; 428 else tmpv3 = Contr.ord3.cnt(i).code(j).str(5) - '0'; end 429 430 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level*FL(3).N_level + FL(1).N_level*FL(2).N_level*FL(4).N_level + ... 431 FL(1).N_level*FL(2).N_level*FL(5).N_level + FL(1).N_level*FL(3).N_level*FL(4).N_level + ... 432 FL(1).N_level*FL(3).N_level*FL(5).N_level + FL(1).N_level*FL(4).N_level*FL(5).N_level + FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 433 (tmpv1 - 1) * FL(3).N_level * FL(5).N_level + (tmpv2 - 1)* FL(5).N_level + tmpv3; 434 435 end % switch Contr.ord3.cnt(i).idx3 436 437 case 4, % Do I want BDE here? 438 if (Contr.ord3.cnt(i).idx3 == 5), 439 if (Contr.ord3.cnt(i).code(j).str(2) >= 'a' & Contr.ord3.cnt(i).code(j).str(2) <= 'z'), 440 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(2) - 'a'; 441 else tmpv1 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 442 if (Contr.ord3.cnt(i).code(j).str(4) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 443 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(4) - 'a'; 444 else tmpv2 = Contr.ord3.cnt(i).code(j).str(4) - '0'; end 445 if (Contr.ord3.cnt(i).code(j).str(5) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 446 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(5) - 'a'; 447 else tmpv3 = Contr.ord3.cnt(i).code(j).str(5) - '0'; end 448 449 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level*FL(3).N_level + FL(1).N_level*FL(2).N_level*FL(4).N_level + ... 450 FL(1).N_level*FL(2).N_level*FL(5).N_level + FL(1).N_level*FL(3).N_level*FL(4).N_level + ... 451 FL(1).N_level*FL(3).N_level*FL(5).N_level + FL(1).N_level*FL(4).N_level*FL(5).N_level + ... 452 FL(2).N_level*FL(3).N_level*FL(4).N_level + FL(2).N_level*FL(3).N_level*FL(5).N_level + ... 453 (tmpv1 - 1) * FL(4).N_level * FL(5).N_level + (tmpv2 - 1)* FL(5).N_level + tmpv3; 454 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end 455 456 end % switch Contr.ord3.cnt(i).idx2 457 case 3, % Do I want CDE here? 458 if (Contr.ord3.cnt(i).idx1 == 3 & Contr.ord3.cnt(i).idx2 == 4 & Contr.ord3.cnt(i).idx3 == 5), 459 if (Contr.ord3.cnt(i).code(j).str(3) >= 'a' & Contr.ord3.cnt(i).code(j).str(3) <= 'z'), 460 tmpv1 = 10 + Contr.ord3.cnt(i).code(j).str(3) - 'a'; 461 else tmpv1 = Contr.ord3.cnt(i).code(j).str(2) - '0'; end 462 if (Contr.ord3.cnt(i).code(j).str(4) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 463 tmpv2 = 10 + Contr.ord3.cnt(i).code(j).str(4) - 'a'; 464 else tmpv2 = Contr.ord3.cnt(i).code(j).str(4) - '0'; end 465 if (Contr.ord3.cnt(i).code(j).str(5) >= 'a' & Contr.ord3.cnt(i).code(j).str(4) <= 'z'), 466 tmpv3 = 10 + Contr.ord3.cnt(i).code(j).str(5) - 'a'; 467 else tmpv3 = Contr.ord3.cnt(i).code(j).str(5) - '0'; end 468 469 Contr.ord3.cnt(i).code(j).pos = shift + FL(1).N_level*FL(2).N_level*FL(3).N_level + FL(1).N_level*FL(2).N_level*FL(4).N_level + ... 470 FL(1).N_level*FL(2).N_level*FL(5).N_level + FL(1).N_level*FL(3).N_level*FL(4).N_level + ... 471 FL(1).N_level*FL(3).N_level*FL(5).N_level + FL(1).N_level*FL(4).N_level*FL(5).N_level + ... 472 FL(2).N_level*FL(3).N_level*FL(4).N_level + FL(2).N_level*FL(3).N_level*FL(5).N_level + ... 473 + FL(2).N_level*FL(4).N_level*FL(5).N_level + (tmpv1 - 1) * FL(4).N_level * FL(5).N_level + (tmpv2 - 1)* FL(5).N_level + tmpv3; 474 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end 475 476 case 4, 477 fprintf('\nSomething is wrong in the contrast coding!\n'); 478 fprintf(2,'Halted: Ctrl+c to exit'); pause; 479 end % switch Contr.ord3.cnt(i).idx1 480 481 count = 0; 482 for (ll = 1:1:n) % Should have a more decent way to do this in a matrix fashion instead of a lenthy loop? 483 tmpstr1 = char (group{Contr.ord3.cnt(i).idx1}(ll)); 484 tmpstr2 = char (group{Contr.ord3.cnt(i).idx2}(ll)); 485 tmpstr3 = char (group{Contr.ord3.cnt(i).idx3}(ll)); 486 if strcmp(tmpstr1, FL(Contr.ord3.cnt(i).idx1).level(tmpv1).expr) & strcmp(tmpstr2, FL(Contr.ord3.cnt(i).idx2).level(tmpv2).expr) ... 487 & strcmp(tmpstr3, FL(Contr.ord3.cnt(i).idx3).level(tmpv3).expr) 488 count = count + 1; % total number of occurences at tmpv-th level 489 end 490 end 491 Contr.ord3.cnt(i).vec = Contr.ord3.cnt(i).vec + Contr.ord3.cnt(i).coef(j) * dmat(:, Contr.ord3.cnt(i).code(j).pos)'/count; 492 Contr.ord3.cnt(i).scalar = Contr.ord3.cnt(i).scalar + Contr.ord3.cnt(i).coef(j)*Contr.ord3.cnt(i).coef(j)/count; % For variance coef: j-th term in i-th 3rd-order contrast. 493 494% Contr.ord3.cnt(i).scalar = tmp * Contr.ord3.cnt(i).coef*Contr.ord3.cnt(i).coef'; 495% Contr.ord3.cnt(i).vec = Contr.ord3.cnt(i).vec + Contr.ord3.cnt(i).coef(j) * dmat(:, Contr.ord3.cnt(i).code(j).pos)'; 496 end % for (j = 1:1:Contr.ord3.cnt(i).NT) 497% Contr.ord3.cnt(i).vec = Contr.ord3.cnt(i).vec*tmp; % assuming balanced design!!! 498 end %for (i = 1:1:Contr3.tot) 499 500case 4, 501 502 shift = 1 + num_col(1) + num_col(2) + num_col(3); % skip grand mean, factor means and 2nd-roder terms 503 for (i = 1:1:Contr.ord4.tot), 504 % for the non-zero indices 505 Contr.ord4.cnt(i).vec = zeros(1, n); % n = ntot in anovan.m: total number of input files, and no. of arrows in dmat 506 Contr.ord4.cnt(i).scalar = 0; 507 for (j = 1:1:Contr.ord4.cnt(i).NT), % for each term in a contrast 508 first = 0; 509 Contr.ord4.cnt(i).code(j).pos = 0; 510 511 for (k = 1:1:NF), 512 if (Contr.ord4.cnt(i).code(j).str(k) >= 'a' & Contr.ord4.cnt(i).code(j).str(k) <= 'z'), 513 tmpv = 10 + Contr.ord4.cnt(i).code(j).str(k) - 'a'; 514 else tmpv = Contr.ord4.cnt(i).code(j).str(k) - '0'; end 515 516 if (tmpv ~= 0), 517 first = first + 1; % the first non-zero index 518 % Maybe I should replace all idx with idx() in *.m and Contr.ord4.cnt(i).idx(first) = k when first ~= 0 later? 519 switch first 520 case 1, 521 Contr.ord4.cnt(i).idx1 = k; 522 case 2, 523 Contr.ord4.cnt(i).idx2 = k; 524 case 3, 525 Contr.ord4.cnt(i).idx3 = k; 526 case 4, 527 Contr.ord4.cnt(i).idx4 = k; 528 end 529 end % if (tmpv ~= 0) 530 end % for (k = 1:1:NF) 531 switch Contr.ord4.cnt(i).idx1 532 case 1, 533 switch Contr.ord4.cnt(i).idx2 534 case 2, 535 switch Contr.ord4.cnt(i).idx3 536 case 3, 537 switch Contr.ord4.cnt(i).idx4 538 case 4, % ABCD 539 540 if (Contr.ord4.cnt(i).code(j).str(1) >= 'a' & Contr.ord4.cnt(i).code(j).str(1) <= 'z'), 541 tmpv1 = 10 + Contr.ord4.cnt(i).code(j).str(1) - 'a'; 542 else tmpv1 = Contr.ord4.cnt(i).code(j).str(1) - '0'; end 543 if (Contr.ord4.cnt(i).code(j).str(2) >= 'a' & Contr.ord4.cnt(i).code(j).str(2) <= 'z'), 544 tmpv2 = 10 + Contr.ord4.cnt(i).code(j).str(2) - 'a'; 545 else tmpv2 = Contr.ord4.cnt(i).code(j).str(2) - '0'; end 546 if (Contr.ord4.cnt(i).code(j).str(3) >= 'a' & Contr.ord4.cnt(i).code(j).str(3) <= 'z'), 547 tmpv3 = 10 + Contr.ord4.cnt(i).code(j).str(3) - 'a'; 548 else tmpv3 = Contr.ord4.cnt(i).code(j).str(3) - '0'; end 549 if (Contr.ord4.cnt(i).code(j).str(4) >= 'a' & Contr.ord4.cnt(i).code(j).str(4) <= 'z'), 550 tmpv4 = 10 + Contr.ord4.cnt(i).code(j).str(4) - 'a'; 551 else tmpv4 = Contr.ord4.cnt(i).code(j).str(4) - '0'; end 552 553 Contr.ord4.cnt(i).code(j).pos = shift + (tmpv1 - 1) * FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 554 (tmpv2 - 1) * FL(3).N_level * FL(4).N_level + (tmpv3 - 1) * FL(4).N_level + tmpv4; 555 556 case 5, % ABCE 557 if (Contr.ord4.cnt(i).code(j).str(1) >= 'a' & Contr.ord4.cnt(i).code(j).str(1) <= 'z'), 558 tmpv1 = 10 + Contr.ord4.cnt(i).code(j).str(1) - 'a'; 559 else tmpv1 = Contr.ord4.cnt(i).code(j).str(1) - '0'; end 560 if (Contr.ord4.cnt(i).code(j).str(2) >= 'a' & Contr.ord4.cnt(i).code(j).str(2) <= 'z'), 561 tmpv2 = 10 + Contr.ord4.cnt(i).code(j).str(2) - 'a'; 562 else tmpv2 = Contr.ord4.cnt(i).code(j).str(2) - '0'; end 563 if (Contr.ord4.cnt(i).code(j).str(3) >= 'a' & Contr.ord4.cnt(i).code(j).str(3) <= 'z'), 564 tmpv3 = 10 + Contr.ord4.cnt(i).code(j).str(3) - 'a'; 565 else tmpv3 = Contr.ord4.cnt(i).code(j).str(3) - '0'; end 566 if (Contr.ord4.cnt(i).code(j).str(5) >= 'a' & Contr.ord4.cnt(i).code(j).str(5) <= 'z'), 567 tmpv4 = 10 + Contr.ord4.cnt(i).code(j).str(5) - 'a'; 568 else tmpv4 = Contr.ord4.cnt(i).code(j).str(5) - '0'; end 569 570 Contr.ord4.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 571 (tmpv1 - 1) * FL(2).N_level * FL(3).N_level * FL(5).N_level + (tmpv2 - 1) * FL(3).N_level * FL(5).N_level + ... 572 (tmpv3 - 1) * FL(5).N_level + tmpv4; % ABCD 573 end % switch Contr.ord4.cnt(i).idx4 574 case 4, 575 if (Contr.ord4.cnt(i).idx4 == 5) 576 if (Contr.ord4.cnt(i).code(j).str(1) >= 'a' & Contr.ord4.cnt(i).code(j).str(1) <= 'z'), 577 tmpv1 = 10 + Contr.ord4.cnt(i).code(j).str(1) - 'a'; 578 else tmpv1 = Contr.ord4.cnt(i).code(j).str(1) - '0'; end 579 if (Contr.ord4.cnt(i).code(j).str(2) >= 'a' & Contr.ord4.cnt(i).code(j).str(2) <= 'z'), 580 tmpv2 = 10 + Contr.ord4.cnt(i).code(j).str(2) - 'a'; 581 else tmpv2 = Contr.ord4.cnt(i).code(j).str(2) - '0'; end 582 if (Contr.ord4.cnt(i).code(j).str(4) >= 'a' & Contr.ord4.cnt(i).code(j).str(4) <= 'z'), 583 tmpv3 = 10 + Contr.ord4.cnt(i).code(j).str(4) - 'a'; 584 else tmpv3 = Contr.ord4.cnt(i).code(j).str(4) - '0'; end 585 if (Contr.ord4.cnt(i).code(j).str(5) >= 'a' & Contr.ord4.cnt(i).code(j).str(5) <= 'z'), 586 tmpv4 = 10 + Contr.ord4.cnt(i).code(j).str(5) - 'a'; 587 else tmpv4 = Contr.ord4.cnt(i).code(j).str(5) - '0'; end 588 589 Contr.ord4.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 590 FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(5).N_level + ... 591 (tmpv1 - 1) * FL(2).N_level * FL(4).N_level * FL(5).N_level + (tmpv2 - 1) * FL(4).N_level * FL(5).N_level + ... 592 (tmpv3 - 1) * FL(5).N_level + tmpv4; % ABCD 593 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end % if (Contr.ord4.cnt(i).idx4 == 5) 594 end % switch Contr.ord4.cnt(i).idx3 595 case 3, 596 if (Contr.ord4.cnt(i).idx3 == 4 & Contr.ord4.cnt(i).idx4 == 5), % ACDE 597 if (Contr.ord4.cnt(i).code(j).str(1) >= 'a' & Contr.ord4.cnt(i).code(j).str(1) <= 'z'), 598 tmpv1 = 10 + Contr.ord4.cnt(i).code(j).str(1) - 'a'; 599 else tmpv1 = Contr.ord4.cnt(i).code(j).str(1) - '0'; end 600 if (Contr.ord4.cnt(i).code(j).str(3) >= 'a' & Contr.ord4.cnt(i).code(j).str(3) <= 'z'), 601 tmpv2 = 10 + Contr.ord4.cnt(i).code(j).str(3) - 'a'; 602 else tmpv2 = Contr.ord4.cnt(i).code(j).str(3) - '0'; end 603 if (Contr.ord4.cnt(i).code(j).str(4) >= 'a' & Contr.ord4.cnt(i).code(j).str(4) <= 'z'), 604 tmpv3 = 10 + Contr.ord4.cnt(i).code(j).str(4) - 'a'; 605 else tmpv3 = Contr.ord4.cnt(i).code(j).str(4) - '0'; end 606 if (Contr.ord4.cnt(i).code(j).str(5) >= 'a' & Contr.ord4.cnt(i).code(j).str(5) <= 'z'), 607 tmpv4 = 10 + Contr.ord4.cnt(i).code(j).str(5) - 'a'; 608 else tmpv4 = Contr.ord4.cnt(i).code(j).str(5) - '0'; end 609 610 Contr.ord4.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 611 FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(5).N_level + FL(1).N_level * FL(2).N_level * FL(4).N_level * FL(5).N_level + ... 612 (tmpv1 - 1) * FL(3).N_level * FL(4).N_level * FL(5).N_level + (tmpv2 - 1) * FL(4).N_level * FL(5).N_level + ... 613 (tmpv3 - 1) * FL(5).N_level + tmpv4; % ABCD 614 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end 615 end % switch Contr.ord4.cnt(i).idx2 616 case 2, 617 if (Contr.ord4.cnt(i).idx2 == 3 & Contr.ord4.cnt(i).idx3 == 4 & Contr.ord4.cnt(i).idx4 == 5), % BCDE 618 if (Contr.ord4.cnt(i).code(j).str(2) >= 'a' & Contr.ord4.cnt(i).code(j).str(2) <= 'z'), 619 tmpv1 = 10 + Contr.ord4.cnt(i).code(j).str(2) - 'a'; 620 else tmpv1 = Contr.ord4.cnt(i).code(j).str(2) - '0'; end 621 if (Contr.ord4.cnt(i).code(j).str(3) >= 'a' & Contr.ord4.cnt(i).code(j).str(3) <= 'z'), 622 tmpv2 = 10 + Contr.ord4.cnt(i).code(j).str(3) - 'a'; 623 else tmpv2 = Contr.ord4.cnt(i).code(j).str(3) - '0'; end 624 if (Contr.ord4.cnt(i).code(j).str(4) >= 'a' & Contr.ord4.cnt(i).code(j).str(4) <= 'z'), 625 tmpv3 = 10 + Contr.ord4.cnt(i).code(j).str(4) - 'a'; 626 else tmpv3 = Contr.ord4.cnt(i).code(j).str(4) - '0'; end 627 if (Contr.ord4.cnt(i).code(j).str(5) >= 'a' & Contr.ord4.cnt(i).code(j).str(5) <= 'z'), 628 tmpv4 = 10 + Contr.ord4.cnt(i).code(j).str(5) - 'a'; 629 else tmpv4 = Contr.ord4.cnt(i).code(j).str(5) - '0'; end 630 631 Contr.ord4.cnt(i).code(j).pos = shift + FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(4).N_level + ... 632 FL(1).N_level * FL(2).N_level * FL(3).N_level * FL(5).N_level + FL(1).N_level * FL(2).N_level * FL(4).N_level * FL(5).N_level + ... 633 FL(1).N_level * FL(3).N_level * FL(4).N_level * FL(5).N_level + (tmpv1 - 1) * FL(3).N_level * FL(4).N_level * FL(5).N_level + ... 634 (tmpv2 - 1) * FL(4).N_level * FL(5).N_level + (tmpv3 - 1) * FL(5).N_level + tmpv4; % ABCD 635 else fprintf('\nSomething is wrong in the contrast coding!\n'); fprintf(2,'Halted: Ctrl+c to exit'); pause; end 636 case {3,4,} 637 fprintf('\nSomething is wrong in the contrast coding!\n'); 638 fprintf(2,'Halted: Ctrl+c to exit'); pause; 639 end % switch Contr.ord4.cnt(i).idx1 640 641 count = 0; 642 for (ll = 1:1:n) % Should have a more decent way to do this in a matrix fashion instead of a lenthy loop? 643 tmpstr1 = char (group{Contr.ord4.cnt(i).idx1}(ll)); 644 tmpstr2 = char (group{Contr.ord4.cnt(i).idx2}(ll)); 645 tmpstr3 = char (group{Contr.ord4.cnt(i).idx3}(ll)); 646 tmpstr4 = char (group{Contr.ord4.cnt(i).idx4}(ll)); 647 if strcmp(tmpstr1, FL(Contr.ord4.cnt(i).idx1).level(tmpv1).expr) & strcmp(tmpstr2, FL(Contr.ord4.cnt(i).idx2).level(tmpv2).expr) ... 648 & strcmp(tmpstr3, FL(Contr.ord4.cnt(i).idx3).level(tmpv3).expr) & strcmp(tmpstr4, FL(Contr.ord4.cnt(i).idx4).level(tmpv4).expr) 649 count = count + 1; % total number of occurences at tmpv-th level 650 end 651 end % for (ll = 1:1:n) 652 Contr.ord4.cnt(i).vec = Contr.ord4.cnt(i).vec + Contr.ord4.cnt(i).coef(j) * dmat(:, Contr.ord4.cnt(i).code(j).pos)'/count; 653 Contr.ord4.cnt(i).scalar = Contr.ord4.cnt(i).scalar + Contr.ord4.cnt(i).coef(j)*Contr.ord4.cnt(i).coef(j)/count; % For variance coef: j-th term in i-th 4th-order contrast. 654 end % for (j = 1:1:Contr.ord4.cnt(i).NT) 655 end %for (i = 1:1:Contr4.tot) 656 657end % switch order 658 659err = 0; 660return; 661