MATLAB Answers

When using the "ranksum" function, how can I differentiate bewteen the two options of getting a low p-value?

24 views (last 30 days)
Michal
Michal on 6 Aug 2012
Commented: S Saperstein on 8 Apr 2014
Say I have two vectors- A and B. If I get a low p-value, I would like to check whether this low p-value stands for high median of B compared to A, instead of just different medians (that is, either the median of B is higher than the median of A, or vise versa).
For example:
A=[120 10 201 20 30 12 30 10 2 2 3 5 1]
B=[140 400 120 2000 30 40 2000 1000 1000]
I get a p-value of 7.2251e-004.
But if
B=[1 0 0 0 0 0 0 0 0 0 0 0 0]
I also get a low p-value (6.4360e-006).
I would like to get only low p-values when B median is higher then A median. Since I have many calculations, I need it to be automatically in the code, instead of checking every pair of vectors. Do you have any idea how to do that?
Thanks, Michal

  0 Comments

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 6 Aug 2012
Both ‘one-sided’ (that one median is greater than or less than the other) and ‘two-sided’ (that the medians are different) options are possible. See Item #4 under Assumptions and formal statement of hypotheses in the Wikipedia article on the Mann–Whitney U. There is also an excellent discussion of this on page 3 of The Wilcoxon Rank-Sum Test.
According the the documentation, ranksum returns the two-sided p-value, so make the appropriate calculation to get the one-sided p-value.

  4 Comments

Show 1 older comment
Star Strider
Star Strider on 7 Aug 2012
My pleasure!
When I experimented with this a bit, I discovered that the z-statistic (z-value) — the first ‘stats’ field — may be the answer. When A > B, the z-statistic is (+)ve, and when A < B, the z-statistic is (-)ve.
According to the documentation, ‘ranksum’ only computes the z-value for large samples, so if your samples aren't large enough, I suggest simply comparing the medians.
S Saperstein
S Saperstein on 8 Apr 2014
For people still using matlab version 2012a and older, this solution won't work. If the length of vector y is smaller than the length of vector x, then ranksum calculates based on y rather than x and your z-score will be flipped. You'll need to correct based on the relative lengths of x and y, as well as on the zscore, or just use ranksum.m from matlab version 2012b and later.

Sign in to comment.

More Answers (1)

the cyclist
the cyclist on 6 Aug 2012
Edited: the cyclist on 6 Aug 2012
Use the 'tail' option. A careful read of
>> help ranksum
will explain how.
(In the first draft of my answer, I pointed to "doc ranksum" rather than "help ranksum", but it seems that that documentation doesn't list the 'tail' option. Weird.)

  4 Comments

Show 1 older comment

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!