As the instigator/inventor/implementor of the ETAC approach, I have to say that I've never tested the accuracy of the tests for the false positive rate (FPR) for covariate estimates. It occurred to me to do so, and I even wrote scripts for that purpose. But didn't carry those tests out.
What Anderson Winkler makes intuitive sense to me, but I never got that far in my implementation.
Personally speaking, I was very burned out when I got ETAC to the state it is in now. The whole clustering FPR subject is highly correlated in my mind with very unpleasant events. And now that I'm retired, I don't plan to revisit it in any substantial fashion. I'm sorry if that leaves you hanging, but that's the way it is.
The way the residuals are calculated for the case when there are covariates:
0) Before the analysis of a given voxel, the regression matrix for the covariate analysis is set up (for each of -setA and -setB) -- call this matrix "X" -- and pseudo-inverted -- that is, matrix X has a column of all 1s (the "mean") and then columns for all the covariates --
3dttest++.c function
TT_matrix_setup.
1) In the analysis function
regress_toz, the pseudo-inverse of X is applied to the values extracted from that voxel from each input dataset (in the corresponding -setA or -setB, of course) -- this computes the (estimated) values of the covariates ("slopes").
2) To get the residuals, the matrix X is multiplied back into the covariate estimates, giving the "fitted data vector", which is then subtracted from the real data vector. Thus, the residuals are as "residual as they come" -- they are what is left after ALL effects in the model are projected out.
I hope this helps, at least to reduce the confusion somewhat.
** Bob Cox