FDR correction matlab script

40 sec read

The following script is to determine is a channel (or voxel) survives the FDR corrected threshold. Assume you have 48 channels and you already calculated the (uncorrected) p-value of each channel. You put it into an array called p. Now you want to know which channel will survive if you do a FDR correction at q=0.05. You may simply use

fdr0(p, 0.05)

The output is an array of 48 numbers, with 1s in the channel where it survives the FDR threshold.

function y = fdr0(p, q)
% y = fdr0(p, q)
% to calculate whether a pvalue survive FDR corrected q
% p: an array of p values. (e.g. p values for each channel)
% q: desired FDR threshold (typically 0.05)
% y: an array of the same size with p with only two possible values. 0
% means this position (channel) does not survive the threshold, 1 mean it
% survives
% Ref:
% Genovese et al. (2002). Thresholding statistical maps in functional
% neuroimaging using the false discovery rate. Neuroimage, 15:722-786.
% Example:
%   y = fdr0(rand(10,1),0.5);
% Xu Cui
% 2016/3/14

pvalue = p;
y = 0 * p;

[sortedpvalue, sortedposition] = sort(pvalue);
v = length(sortedposition);
for ii=1:v
    if q*ii/v >= sortedpvalue(ii)
        y(sortedposition(ii)) = 1;



Want to receive new post notification? 有新文章通知我

第四十七期fNIRS Journal Club通知2023/12/02, 10am 卢宏亮

Xu Cui
10 sec read

第四十六期fNIRS Journal Club视频 张腾飞

Youtube: https://www.youtube.com/watch?v=L4qc5gCttpc&feature=youtu.be Youku: https://v.youku.com
Xu Cui
14 sec read

第四十六期fNIRS Journal Club通知2023/10/28, 10am 张腾飞

Xu Cui
7 sec read

Leave a Reply

Your email address will not be published. Required fields are marked *