"Tripled t-test" -- three-group within-subjects data
Analysed with Repeated Measures ANOVA and various Mixed/Multilevel models
Contents
- Generate random data, with vague trend
- Repeated measures ANOVA (Fixed subject effects)
- Mixed effects (Equal variances, dependent levels (equal 1-2, 1-3, 2-3)
- Multilevel model (Equal variances, dependent levels (unequal deps)
- Multilevel model (SPM's equal var, dept levels: unequal deps as above)
- Multilevel model (Unequal variances, dependent levels (equal deps))
- Multilevel model (Unequal var, dept levels (unequal deps))
- Multilevel model (SPM's unequal var, dept levels: unequal deps as above)
Generate random data, with vague trend
clear; close all; clc; N = 6; randn('state', 0); time1 = 1+randn(N, 1); time2 = 1.2+randn(N, 1); time3 = 1.5+randn(N, 1); y = [time1 time2 time3]'; plot(y) y = y(:); Ny = length(y);

Repeated measures ANOVA (Fixed subject effects)
X = [kron(eye(N),ones(3,1)) kron(ones(N,1),[0 0;1 0;0 1])]; figure; imagesc(X) c2 = [zeros(N,1);1;0]; [t2 df beta] = spm_ancova(X, eye(Ny), y, c2); beta, df, t2 c3 = [zeros(N,1);0;1]; t3 = spm_ancova(X, eye(Ny), y, c3)
beta = 0.6021 0.7060 0.6514 0.7381 0.4572 1.2046 0.8389 1.2232 df = 1.0000 10.0000 t2 = 1.4007 t3 = 2.0424

Mixed effects (Equal variances, dependent levels (equal 1-2, 1-3, 2-3)
X = [ones(3*N,1) kron(ones(N,1),[0 0;1 0;0 1])]; figure; imagesc(X) c2 = [0;1;0]; Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); Q{1} = eye(Ny); Z = kron(eye(N),ones(3,1)); % design matrix for random subject effects -- % note the similarity to the subject part of X for the fixed model above. Q{2} = Z*Z'; Nq = 2; P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:Nq E = E + C{1}.h(i)*P{1}.C{i}; end figure; imagesc(E); axis equal; axis image; colorbar Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 2.0126 1.4007 2.0424


Multilevel model (Equal variances, dependent levels (unequal deps)
Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); Q{1} = eye(Ny); Q{2} = kron(eye(N), [0 1 0; 1 0 0; 0 0 0]); Q{3} = kron(eye(N), [0 0 0; 0 0 1; 0 1 0]); Q{4} = kron(eye(N), [0 0 1; 0 0 0; 1 0 0]); Nq = 4; P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:Nq E = E + C{1}.h(i)*P{1}.C{i}; end Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 2.0805 1.9849 1.9525
Multilevel model (SPM's equal var, dept levels: unequal deps as above)
Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); SPM.xVi.I = [kron((1:N)',ones(3,1)) kron(ones(N,1), (1:3)')]; SPM.factor.variance = 0; SPM.factor.dept = 1; SPM = spm_get_vc(SPM); for i=1:length(SPM.xVi.Vi) Q{i} = SPM.xVi.Vi{i}; end P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:length(SPM.xVi.Vi) E = E + C{1}.h(i)*P{1}.C{i}; end figure; imagesc(E); axis equal; axis image; colorbar Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 2.0805 1.9849 1.9525

Multilevel model (Unequal variances, dependent levels (equal deps))
Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); Q{1} = kron(eye(N), diag([1 0 0])); Q{2} = kron(eye(N), diag([0 1 0])); Q{3} = kron(eye(N), diag([0 0 1])); covs = 1-eye(3); Q{4} = kron(eye(N), covs); Nq = 2; Nq = 4; P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:Nq E = E + C{1}.h(i)*P{1}.C{i}; end Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 1.4676 1.3344 1.8388
Multilevel model (Unequal var, dept levels (unequal deps))
Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); Q{1} = kron(eye(N), diag([1 0 0])); Q{2} = kron(eye(N), diag([0 1 0])); Q{3} = kron(eye(N), diag([0 0 1])); Q{4} = kron(eye(N), [0 1 0; 1 0 0; 0 0 0]); Q{5} = kron(eye(N), [0 0 0; 0 0 1; 0 1 0]); Q{6} = kron(eye(N), [0 0 1; 0 0 0; 1 0 0]); Nq = 6; P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:Nq E = E + C{1}.h(i)*P{1}.C{i}; end Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 1.7215 2.2910 1.5801
Multilevel model (SPM's unequal var, dept levels: unequal deps as above)
Q = squeeze(num2cell(zeros(Ny,Ny,Ny),[1 2])); SPM.xVi.I = [kron((1:N)',ones(3,1)) kron(ones(N,1), (1:3)')]; SPM.factor.variance = 1; SPM.factor.dept = 1; SPM = spm_get_vc(SPM); for i=1:length(SPM.xVi.Vi) Q{i} = SPM.xVi.Vi{i}; end P{1}.X = X; P{1}.C = Q; P{1}.W = eye(Ny); [t df xX xCon beta V C] = spm_reml_ancova(y, P, c2); E = C{1}.h(1)*P{1}.C{1}; for i=2:length(SPM.xVi.Vi) E = E + C{1}.h(i)*P{1}.C{i}; end figure; imagesc(E); axis equal; axis image; colorbar Bcov = inv(X'*inv(E)*X); beta = Bcov * X'*inv(E)*y Bse = sqrt(diag(Bcov)); t = beta ./ Bse
beta = 0.7266 0.8389 1.2232 t = 1.7215 2.2910 1.5801
