|
a |
|
b/MATLAB/src/medianStats.m |
|
|
1 |
function statsCell = medianStats(data, varargin) |
|
|
2 |
%MEDIANSTATS calculates median statistics. |
|
|
3 |
% |
|
|
4 |
% AUTHOR: Maximilian C. M. Fischer |
|
|
5 |
% COPYRIGHT (C) 2022-2023 Maximilian C. M. Fischer |
|
|
6 |
% LICENSE: EUPL v1.2 |
|
|
7 |
% |
|
|
8 |
|
|
|
9 |
p = inputParser; |
|
|
10 |
addRequired(p,'data',@(x) validateattributes(x,{'numeric'},{'ncols', 1})) |
|
|
11 |
addOptional(p,'fSpec', '% 1.1f',@ischar); |
|
|
12 |
addParameter(p,'format', 'long',@(x) any(validatestring(x,{'long','short','Q234'}))); |
|
|
13 |
addParameter(p,'test', 'none',@(x) any(validatestring(x,{'none','signrank'}))); |
|
|
14 |
addParameter(p,'alpha', 0.05,@(x) validateattributes(x,{'numeric'},{'scalar', '>=', 0.0001, '<=' 0.1})); |
|
|
15 |
parse(p,data,varargin{:}); |
|
|
16 |
fSpec = p.Results.fSpec; |
|
|
17 |
format = p.Results.format; |
|
|
18 |
test = p.Results.test; |
|
|
19 |
alpha = p.Results.alpha; |
|
|
20 |
|
|
|
21 |
PRCT=prctile(data,[0,25,50,75,100]); |
|
|
22 |
IQR=iqr(data); |
|
|
23 |
|
|
|
24 |
switch test |
|
|
25 |
case 'none' |
|
|
26 |
P = nan; |
|
|
27 |
case 'signrank' |
|
|
28 |
if all(isnan(data)) |
|
|
29 |
P = nan; |
|
|
30 |
else |
|
|
31 |
P = signrank(data); |
|
|
32 |
end |
|
|
33 |
end |
|
|
34 |
|
|
|
35 |
switch format |
|
|
36 |
case 'long' |
|
|
37 |
statsCell = {[... |
|
|
38 |
num2str(PRCT(3),fSpec),... % median |
|
|
39 |
' (' num2str(PRCT(2),fSpec) ' to ' num2str(PRCT(4),fSpec) '', ... % IQR |
|
|
40 |
', ' num2str(PRCT(1),fSpec) ' to ' num2str(PRCT(5),fSpec) ')'] ... % Range |
|
|
41 |
}; |
|
|
42 |
case 'Q234' |
|
|
43 |
statsCell = {[num2str(PRCT(3),fSpec), ', ' num2str(PRCT(4),fSpec) ', ' num2str(PRCT(5),fSpec)]}; |
|
|
44 |
case 'short' |
|
|
45 |
statsCell = {[num2str(PRCT(3),fSpec) ' (' num2str(IQR,fSpec) ')']}; |
|
|
46 |
end |
|
|
47 |
|
|
|
48 |
if P <= alpha |
|
|
49 |
statsCell{end} = [statsCell{end} '*']; |
|
|
50 |
end |
|
|
51 |
|
|
|
52 |
end |