[R] wilcox.test; data type conversion?

Steven McKinney
Fri, 29 Oct 2010 04:24:29 -0000

You can set up the data as

> grade <- ordered(c("MVG", "VG", "VG",
"G", "MVG", "G", "VG", "G",
"VG"), levels = c("G", "VG", "MVG"))
> grade
[1] MVG VG  VG  G   MVG G   VG  G   VG
Levels: G < VG < MVG
> sex <- factor(c( "male", "male", "female",
"male", "female", "male", "female",
"male", "male"), levels = c("male",
"female"))
> sex
[1] male   male   female male   female male   female male   male
Levels: male female
> gradesbysex <- data.frame(grade, sex)
>
> gradesbysex
  grade    sex
1   MVG   male
2    VG   male
3    VG female
4     G   male
5   MVG female
6     G   male
7    VG female
8     G   male
9    VG   male

Now for the Wilcoxon-Mann_Whitney test

> wilcox.test(grade ~ sex, data = gradesbysex)
Error in wilcox.test.default(x = c(3L, 2L, 1L, 1L, 1L, 2L), y = c(2L,  :
  'x' must be numeric

I'm not sure if anyone has written a version that will work on ordered
factor variables,
but you can coerce the ordered factor to its underlying integer representation
with e.g.

> wilcox.test(as.integer(grade) ~ sex, data = gradesbysex)

	Wilcoxon rank sum test with continuity correction

data:  as.integer(grade) by sex
W = 4.5, p-value = 0.2695
alternative hypothesis: true location shift is not equal to 0

Warning message:
In wilcox.test.default(x = c(3L, 2L, 1L, 1L, 1L, 2L), y = c(2L,  :
  cannot compute exact p-value with ties

You can break the ties by jittering the data.  Each jitter will of course
produce different tie breakers.  A few repeats of the test, or a loop and
some summaries of the outcomes, will give you an idea of the
"average" result.

> wilcox.test(jitter(as.integer(grade)) ~ sex, data = gradesbysex)

	Wilcoxon rank sum test

data:  jitter(as.integer(grade)) by sex
W = 4, p-value = 0.2619
alternative hypothesis: true location shift is not equal to 0

> wilcox.test(jitter(as.integer(grade)) ~ sex, data = gradesbysex)

	Wilcoxon rank sum test

data:  jitter(as.integer(grade)) by sex
W = 3, p-value = 0.1667
alternative hypothesis: true location shift is not equal to 0

> wilcox.test(jitter(as.integer(grade)) ~ sex, data = gradesbysex)

	Wilcoxon rank sum test

data:  jitter(as.integer(grade)) by sex
W = 7, p-value = 0.7143
alternative hypothesis: true location shift is not equal to 0

> wilcox.test(jitter(as.integer(grade)) ~ sex, data = gradesbysex)

	Wilcoxon rank sum test

data:  jitter(as.integer(grade)) by sex
W = 6, p-value = 0.5476
alternative hypothesis: true location shift is not equal to 0


I'll let you judge elegance.


As for the barplots, I think all you need to do is specify the row and column
order you'd like.

Try this example

> barplot(VADeaths, beside = TRUE)
> barplot(VADeaths[5:1,c(4, 2, 3, 1)], beside = TRUE)

Substitute your data, use beside=FALSE to stack, etc.

Steven McKinney

________________________________________
From: r-help-bounces at r-project.org [r-help-bounces at r-project.org] On
Behalf Of Par Leijonhufvud [par at hunter-gatherer.org]
Sent: October 28, 2010 8:37 PM
To: rhelp
Subject: [R] wilcox.test; data type conversion?

I'm working on a quick tutorial for my students, and was planning on
using Mann-Whitney U as one of the tests.

I have the following (fake) data

 grade <- c("MVG", "VG", "VG", "G",
"MVG", "G", "VG", "G", "VG")
 sex <- c( "male", "male", "female",
"male", "female", "male", "female",
"male", "male")
 gradesbysex <- data.frame(grade, sex)

The grades is in the Swedish system, where the order is G < VG < MVG

The idea is that they will investigate if they can show a grade
difference by sex (i.e. that the teacher gives better grades to boys or
girls).

Since the wilcox.test needs the order of the grades it wants numeric
vector  for the data. Is there a good and simple (i.e. student
compatible) way to handle this? I could tell them to enter data as
numbers instead, but an elegant way to do this inside R would be
preferable.


On the same theme, is there a way to tell barplot that, when making
stacked barplots, to stack the data in a particular order (default
appears to be alphabetical)?

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.