I’ve been using 3dTproject to run denoising with bandpassing. However, I have noticed that the voxels in the detrended outputs do not quite have a temporal mean of zero, as would be expected of residuals from a linear regression. Is this just due to the accumulation of floating-point error? Or is there something about the mathematics of this process that I am misunderstanding?

A minimal working example (given an input image “input.nii.gz”)

3dTproject -input “input.nii.gz” -prefix “detrended.nii.gz” -ort “design.tsv” -passband 0.009 0.080

3dTstat -mean -prefix “mean_detrended.nii.gz” “detrended.nii.gz”