## An alternative to the ranksum function using the NAG toolbox for MATLAB

The MATLAB function **ranksum **is part of MATLAB’s Statistics Toolbox. Like many organizations who use network licensing for MATLAB and its toolboxes, my employer, The University of Manchester, sometimes runs out of licenses for this toolbox which leads to following error message when you attempt to evaluate **ranksum**.

??? License checkout failed. License Manager Error -4 Maximum number of users for Statistics_Toolbox reached. Try again later. To see a list of current users use the lmstat utility or contact your License Administrator.

An alternative to the Statistics Toolbox is the NAG Toolbox for MATLAB for which we have an unlimited number of licenses. Here’s how to replace **ranksum** with the NAG routine **g08ah**.

**Original MATLAB / Statistics Toolbox code**

x = [0.8147;0.9058;0.1270;0.9134;0.6324;0.0975;0.2785;0.5469;0.9575;0.9649]; y= [0.4076;1.220;1.207;0.735;1.0502;0.3918;0.671;1.165;1.0422;1.2094;0.9057;0.285;1.099;1.18;0.928]; p = ranksum(x,y)

The result is p = 0.0375

**Code using the NAG Toolbox for MATLAB**

x = [0.8147;0.9058;0.1270;0.9134;0.6324;0.0975;0.2785;0.5469;0.9575;0.9649]; y = [0.4076;1.220;1.207;0.735;1.0502;0.3918;0.671;1.165;1.0422;1.2094;0.9057;0.285;1.099;1.18;0.928]; tail = 'T'; [u, unor, p, ties, ranks, ifail] = g08ah(x, y, tail);

The value for p is the same as that calculated by **ranksum**: p = 0.0375

NAG’s **g08ah** routine returns a lot more than just the value p but, for this particular example, we can just ignore it all. In fact, if you have MATLAB 2009b or above then you could call **g08ah** like this

tail = 'T'; [~, ~, p, ~, ~, ~] = g08ah(x, y, tail);

Which explicitly indicates that you are not going to use any of the outputs other than p.

People at Manchester are using the NAG toolbox for MATLAB more and more; not only because we have a full site license for it but because it can sometimes be **very fast**. Here’s some more articles on the NAG toolbox you may find useful.

Hi Mike,

A small thing, you don’t need to provide the output arguments after the one that you’re interested in, so:

[~, ~, p] = g08ah(x, y, tail);

would work just as well.

Cheers, Mike.

Hi Mike

Good point.

Cheers,

Mike