Subscribe Bookmark RSS Feed

Wilcoxon Signed-Rank Test

When I run the Wilcoxon Signed-Rank option in JMP I am getting very different answers from what I am getting in SAS. Is there a way to get the code that is used in each option (SAS and JMP) or the formulas used to figure out why the results are different?

Thanks for the help in advance.
1 ACCEPTED SOLUTION

Accepted Solutions
Duane_Hayes

Staff

Joined:

Mar 5, 2012

Solution

As stated above,

 

Hello again - I've set up below some SAS code to do the analysis as per the description in the earlier references, and then run the same analysis through JMP...


To do the same thing in JMP, download the following note by James Abbey at www.personal.psu.edu/jda188/JMP/Signedrank.doc and follow the instructions there on the DIFF column of your data set.

That is, import either FERTILIZER1.SAS7BDAT or FERTILIZER3.SAS7BDAT from your WILC library into JMP, and analyze the DIFF column using Analyze | Distribution. Copy the DIFF column into the "Y, Columns" placeholder and click OK. Next, click on the second red triangle and select "Test Mean". Put 0 into "Specify Hypothesized Mean", and check the "Wilcoxon Signed Rank" box, then click OK. In the "Test Mean=value" section of the output you should find the test statistic = 74, and the P value of 0.0017 - which is the same answer as the one that SAS produces.

Is that okay?

Duane Hayes
9 REPLIES
It's highly likely that one of them has simply been set up incorrectly, so the best thing to do first would be to get hold of a textbook example and run that data through both your SAS and JMP analyses to find out which one isn't producing the results you'd expect. My personal favourite in terms of easy-to-follow examples is "Nonparametric Statistics for the Behavioural Sciences" by Sidney Siegel, but there are plenty of others.

My second thought would be that maybe either the SAS or the JMP test you're performing isn't actually the signed-rank test for paired samples but the rank sum test for independent samples (sometimes known as the Mann-Whitney U test). The two tests are nonparametric analogues of the paired and unpaired t-tests respectively, and Wilcoxon's name is associated with both of them: details of both can be found in Wikipedia, together with worked examples, at the following links:

http://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test
http://en.wikipedia.org/wiki/Mann-Whitney-Wilcoxon_test
mattf

Community Trekker

Joined:

Jun 23, 2011

Here is an example with sample data from UCLA Stat Academic Tech Services that agrees:

Thank you both for the feedback.

David Q/R I was using a book example which is why I was so surprised to get different answers.

Is there any way to get the source code to work through the problem by hand and see at which step the code may do differently?

Thanks again.
If there's a way to get at the actual source code I've no idea what it might be, I'm afraid - but I've just taken a quick look at the Wilcoxon Test referred to in MattF's post above in both SAS and JMP, and both of them look as if they're running a Mann-Whitney-Wilcoxon test on the difference between data pairs, indicating that you've effectively got to calculate the difference between the pairs yourself before running a one-way comparison on that set of differences. Are you actually doing that?

Below is another reference showing how to perform a Wilcoxon Matched-Pairs Signed-Ranks test in SAS, suggesting that the basic test is not actually one of those supplied as a simple procedure (or why go to the trouble of doing it in this slightly roundabout way?):

http://udel.edu/~mcdonald/statsignedrank.html

If you'd like to post a copy of the code you're running I'll be happy to check to see if I'm right about this.
Thanks so much David. It does look like it will be tricky for me to nail down how SAS actually does their calculating (especially in the JMP world). Below is the code I have used for SAS. I did the calculation two ways, once using proc univariate and once using npar1way.

data fertilizer;
input typea typeb;
diff= typea-typeb;
cards;
211.40000000000001000 186.30000000000001000
204.40000000000001000 205.69999999999999000
202.00000000000000000 184.40000000000001000
201.90000000000001000 203.59999999999999000
202.40000000000001000 180.40000000000001000
202.00000000000000000 202.00000000000000000
202.40000000000001000 181.50000000000000000
207.09999999999999000 186.69999999999999000
203.59999999999999000 205.69999999999999000
216.00000000000000000 189.09999999999999000
208.90000000000001000 183.59999999999999000
208.69999999999999000 188.69999999999999000
213.80000000000001000 188.59999999999999000
201.59999999999999000 204.19999999999999000
201.80000000000001000 181.59999999999999000
200.30000000000001000 208.69999999999999000
201.80000000000001000 181.50000000000000000
201.50000000000000000 208.69999999999999000
212.09999999999999000 186.80000000000001000
203.40000000000001000 182.90000000000001000
;

proc univariate;
var diff;
run;

data fertilizer;
input type $ fert;
cards;
a 211.40000000000001000
b 186.30000000000001000
a 204.40000000000001000
b 205.69999999999999000
a 202.00000000000000000
b 184.40000000000001000
a 201.90000000000001000
b 203.59999999999999000
a 202.40000000000001000
b 180.40000000000001000
a 202.00000000000000000
b 202.00000000000000000
a 202.40000000000001000
b 181.50000000000000000
a 207.09999999999999000
b 186.69999999999999000
a 203.59999999999999000
b 205.69999999999999000
a 216.00000000000000000
b 189.09999999999999000
a 208.90000000000001000
b 183.59999999999999000
a 208.69999999999999000
b 188.69999999999999000
a 213.80000000000001000
b 188.59999999999999000
a 201.59999999999999000
b 204.19999999999999000
a 201.80000000000001000
b 181.59999999999999000
a 200.30000000000001000
b 208.69999999999999000
a 201.80000000000001000
b 181.50000000000000000
a 201.50000000000000000
b 208.69999999999999000
a 212.09999999999999000
b 186.80000000000001000
a 203.40000000000001000
b 182.90000000000001000
;

proc npar1way wilcoxon;
class type;
var fert;
run;
Hello again - I've set up below some SAS code to do the analysis as per the description in the earlier references, and then run the same analysis through JMP...


To do the same thing in JMP, download the following note by James Abbey at www.personal.psu.edu/jda188/JMP/Signedrank.doc and follow the instructions there on the DIFF column of your data set.

That is, import either FERTILIZER1.SAS7BDAT or FERTILIZER3.SAS7BDAT from your WILC library into JMP, and analyze the DIFF column using Analyze | Distribution. Copy the DIFF column into the "Y, Columns" placeholder and click OK. Next, click on the second red triangle and select "Test Mean". Put 0 into "Specify Hypothesized Mean", and check the "Wilcoxon Signed Rank" box, then click OK. In the "Test Mean=value" section of the output you should find the test statistic = 74, and the P value of 0.0017 - which is the same answer as the one that SAS produces.

Is that okay?
mpb

Super User

Joined:

Jun 23, 2011

If the JMP table is arranged so that you have two columns corresponding to the two treatments, each row being a matched pair, then you can also use the Matched Pairs platform to directly get the Wilcoxon Signed Rank test (from the red triangle pull down menu) without calculating the differences. It agrees with the results based on the differences in Distribution.

Michael
Thank you all again for your help. I have been able to get the solutions to match.
Duane_Hayes

Staff

Joined:

Mar 5, 2012

Solution

As stated above,

 

Hello again - I've set up below some SAS code to do the analysis as per the description in the earlier references, and then run the same analysis through JMP...


To do the same thing in JMP, download the following note by James Abbey at www.personal.psu.edu/jda188/JMP/Signedrank.doc and follow the instructions there on the DIFF column of your data set.

That is, import either FERTILIZER1.SAS7BDAT or FERTILIZER3.SAS7BDAT from your WILC library into JMP, and analyze the DIFF column using Analyze | Distribution. Copy the DIFF column into the "Y, Columns" placeholder and click OK. Next, click on the second red triangle and select "Test Mean". Put 0 into "Specify Hypothesized Mean", and check the "Wilcoxon Signed Rank" box, then click OK. In the "Test Mean=value" section of the output you should find the test statistic = 74, and the P value of 0.0017 - which is the same answer as the one that SAS produces.

Is that okay?

Duane Hayes