Why mafdr works only for one threshold?

hi! i have an array of p-values and i put him in mafdr() and it works fine. when i try to threshold this array of p-values and put the new array(array with values less than a threshold) in mafdr i get this error
??? Error using ==> mtimes Inner matrix dimensions must agree.
Error in ==> mafdr>storeyFDR at 239 fdr = pi0 * v./r;
Error in ==> mafdr at 190 [fdr, q, pi0_all, pi0, cs, rs] = storeyFDR(p, lambda, bootflag);
the only threshold that works for me is 0.05!!! i use matlab 2010a...whats wrong...?

Answers (2)

The error means that it fails to estimate the a-priori probability with the default value of Lambda [0.01:0.01:0.95].
You should specify a wider range of Lambda to run the command successfully. For example:
mafdr(p,'LAMBDA',[0.0001:0.01:0.95])
Please also note that you should not use fdr on thresholded p-values. By considering only the p values under 0.05 you are not controlling for multiple comparisons anymore and you are biasing your results (in neuroscience they often call this "double-dipping").
My guess is you've accidentally shadowed one of the earlier functions used by mafdr's storeyFDR so that it's calling your function instead of MATLAB's. This is a very common thing and is usually the cause of this type of error. Here are a few candidates, you can run which -all to tell you which one is being called and where the offending file is:
which -all sort
which -all min
which -all size

6 Comments

Thank you for your reply! Im a little bit novice with matlab. So you tell me i must check all the functions which mafdr call inside by running which -all?
I would stop in debug mode and then look at the previous lines:
dbstop if error
This will stop at the offending line. Look at functions a few lines up and which -all them to see which one is being called. If it's not MATLAB's version of the function, that is probably what is throwing the error.
and how i will check if it is MATLAB's version of the function?
which -all functionname
If the path starts with the output from
matlabroot
Then it's part of MATLAB, otherwise it's yours.
i cant find something abnormal... when i run fdr for many times,then randomly it works one time...im so confused!
Contact tech support, they can walk you through it.

Sign in to comment.

Categories

Find more on Genomics and Next Generation Sequencing in Help Center and File Exchange

Asked:

on 9 Sep 2014

Answered:

on 13 Jan 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!