I think there's a bug in the code. if I see correctly the sequential nature of the testing will only be reflected if you set the adjusted p-value to the max across the current adjusted p and *all* preceding ones (as e.g. indicated in the respective wiki entry - the original paper has nothing on adjusted p-values afais).
now,in line 112 your algorithm picks the max of a given p-value and its immediate predecessor. this would be fine if it was done in a sequential fashion (each column updated in turn). but the way it stands the results can differ from adjusting to the max between all p-values up to the current one. you can end up with a vector of adjusted p-values that has decreasing p-values and significant results although the first test was non-significant (try e.g. [p,h]=bonf_holm([.01:.001:.02])). so in the current version non-significant values will be flagged as significant. a remedy would be to use a loop (ugly, I know) like:
Thanks! This is a great idea and works like a treat.
To run on a mac (or under linux) the slashes in file paths have to be changed accordingly. If they are replaced by the wildcard 'filesep' it automatically uses the appropriate ones and the function can be used under unix and windows. (The .sps isn't opened automatically under unix but that's just one click)
The function seems to return values equal to two times p(F>empirical F). I suspect this problem was spotted by the author before (given the update on this). But the values returned by the current version of the function still are twice as big as they should be (and thus sometimes >1). Line 161 and 168 read '2*(1-fcdf(F, DF1, DF2))'. The '2*' appears to be a bug.