--- a
+++ b/MATLAB/src/medianStats.m
@@ -0,0 +1,52 @@
+function statsCell = medianStats(data, varargin)
+%MEDIANSTATS calculates median statistics.
+%
+% AUTHOR: Maximilian C. M. Fischer
+% COPYRIGHT (C) 2022-2023 Maximilian C. M. Fischer
+% LICENSE: EUPL v1.2
+%
+
+p = inputParser;
+addRequired(p,'data',@(x) validateattributes(x,{'numeric'},{'ncols', 1}))
+addOptional(p,'fSpec', '% 1.1f',@ischar);
+addParameter(p,'format', 'long',@(x) any(validatestring(x,{'long','short','Q234'})));
+addParameter(p,'test', 'none',@(x) any(validatestring(x,{'none','signrank'})));
+addParameter(p,'alpha', 0.05,@(x) validateattributes(x,{'numeric'},{'scalar', '>=', 0.0001, '<=' 0.1}));
+parse(p,data,varargin{:});
+fSpec = p.Results.fSpec;
+format = p.Results.format;
+test = p.Results.test;
+alpha = p.Results.alpha;
+
+PRCT=prctile(data,[0,25,50,75,100]);
+IQR=iqr(data);
+
+switch test
+    case 'none'
+        P = nan;
+    case 'signrank'
+        if all(isnan(data))
+            P = nan;
+        else
+            P = signrank(data);
+        end
+end
+
+switch format
+    case 'long'
+        statsCell = {[...
+            num2str(PRCT(3),fSpec),... % median
+            ' (' num2str(PRCT(2),fSpec) ' to ' num2str(PRCT(4),fSpec) '', ... % IQR
+            ', ' num2str(PRCT(1),fSpec) ' to ' num2str(PRCT(5),fSpec) ')'] ... % Range
+            };
+    case 'Q234'
+        statsCell = {[num2str(PRCT(3),fSpec), ', ' num2str(PRCT(4),fSpec) ', ' num2str(PRCT(5),fSpec)]};
+    case 'short'
+        statsCell = {[num2str(PRCT(3),fSpec) ' (' num2str(IQR,fSpec) ')']};
+end
+
+if P <= alpha
+    statsCell{end} = [statsCell{end} '*'];
+end
+
+end
\ No newline at end of file