[R] permutation test on paired samples
Henric (Nilsson) Winell
nilsson.henric at gmail.com
Sun Jul 15 19:36:01 CEST 2012
Holger,
Thanks for providing a reproducible example. However, since your
space key only works sporadically, the below is a little hard to read... ;)
On 2012-07-12 20:26, Holger Taschenberger wrote:
> Hi,
>
> I'm trying to run a permutation test on paired samples.
>
> First I tried the package "exactRankTests":
>
> require("exactRankTests")
> x <- c(1.83,0.50,1.62,2.48,1.68,1.88,1.55,3.06,1.30)
> y <- c(0.878,0.647,0.598,2.05,1.06,1.29,1.06,3.14,1.29)
The relevant output missing here is
> wilcox.test(x,y,paired = TRUE,alternative = "greater")
Wilcoxon signed rank test
data: x and y
V = 40, p-value = 0.01953
alternative hypothesis: true location shift is greater than 0
> perm.test(y,x,paired = TRUE,exact = TRUE,alternative = "greater")
1-sample Permutation Test (scores mapped into 1:m using rounded
scores)
data: y and x
T = 41, p-value = 0.003906
alternative hypothesis: true mu is greater than 0
Firstly, you've interchanged the 'x' and 'y' in the second call.
Secondly, and more important, the output says that "(scores mapped into
1:m using rounded scores)". In this case this can easily be avoided,
and note the interchange of 'x' and 'y' to match your 'wilcox.test'
call, using:
> yy <- 1000 * y
> xx <- 1000 * x
> perm.test(xx, yy, paired = TRUE, exact = TRUE,
+ alternative = "greater")
1-sample Permutation Test
data: xx and yy
T = 4114, p-value = 0.01367
alternative hypothesis: true mu is greater than 0
So, now that we've computed the correct p-value, let's see how to obtain
this using the 'coin' package:
>
> Then I wanted to use the package 'coin':
>
> require("coin")
> x <- c(1.83,0.50,1.62,2.48,1.68,1.88,1.55,3.06,1.30)
> y <- c(0.878,0.647,0.598,2.05,1.06,1.29,1.06,3.14,1.29)
> xydat <- data.frame(y = c(y,x),x = gl(2,length(x)),block =
factor(rep(1:length(x),2)))
The relevant output missing here is
> wilcoxsign_test(y ~ x | block,data = xydat,alternative =
"greater",distribution = exact())
Exact Wilcoxon-Signed-Rank Test
data: y by x (neg, pos)
stratified by block
Z = 2.0732, p-value = 0.01953
alternative hypothesis: true mu is greater than 0
> oneway_test(y ~ x | block,data = xydat,alternative =
"greater",distribution = exact())
Exact 2-Sample Permutation Test
data: y by x (1, 2)
stratified by block
Z = -2.1948, p-value = 0.6982
alternative hypothesis: true mu is greater than 0
Using 'oneway_test' in this way does *not* correspond to a paired test.
The "raw" scores version of the Wilcoxon signed-rank test can be
constructed using
> diff <- x - y
> y <- as.vector(t(cbind(abs(diff) * (diff < 0),
+ abs(diff) * (diff >= 0))))
> x <- factor(rep(c("neg", "pos"), length(diff)),
+ levels = c("pos", "neg"))
> b <- gl(length(diff), 2)
>
> oneway_test(y ~ x | b, alternative = "greater", distr = "exact")
Exact 2-Sample Permutation Test
data: y by x (pos, neg)
stratified by b
Z = 2.1948, p-value = 0.01367
alternative hypothesis: true mu is greater than 0
And, as you can see, this is equal to the 'perm.test' result.
HTH,
Henric
>
> While the results of the Wilcoxon test are the same for both packages
> are the same, those of the permutation test are very different. So,
> obviously I'm doing something wrong here. Can somebody please help?
>
> Thanks a lot,
> Holger
>
> ______________________________________________
> 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.
>
More information about the R-help
mailing list