| spearman.test {pspearman} | R Documentation |
This function is a modified copy of the part of the function cor.test(), which evaluates Spearman's rank correlation test. There are two modifications described below, which improve the accuracy of the p-value.
spearman.test(x, y,
alternative = c("two.sided", "less", "greater"),
method = "spearman",
exact = NULL, conf.level = 0.95, ...)
x, y, alternative, exact, conf.level, ... |
have exactly
the same meaning as in cor.test. See the corresponding help page. |
method |
defaults to "spearman" and this should not be changed. |
In cases, where the correlation is positive, AS 89 is called with S+2 instead
of S+1, which is used in cor.test. Since AS 89 assumes an even input,
this increases accuracy.
Function cor.test uses AS 89 only if n <= 1290 and less
accurate approximation using Student's t distribution otherwise.
The code of cor.test contains a comment n*(n^2 - 1) does not overflow
at the line with the test n <= 1290, which possibly tries to explain the reason
for this restriction. However, this comment is probably related to older versions
of the code. Currently, n is used in the C code after conversion to
double and no integer overflow occurs for n > 1290.
Hence, the function spearman.test uses AS 89 in all cases, unless the
user explicitly specifies exact=FALSE.
A list with class "htest" with the same structure as the value
of the function cor.test(method="spearman"). Except of the
p-value, also the contents is identical.
x <- 1:10 y <- c(5:1,6,10:7) out1 <- cor.test(x,y,method="spearman") out2 <- spearman.test(x,y) # out1$p.value = 0.05169460 # out2$p.value = 0.05444507 # the correct p-value in this case is 0.05443067 c(out1$p.value, out2$p.value) out2$p.value <- out1$p.value # except of the p-value, the output is identical identical(out1,out2) # for negative correlation, there is no difference out3 <- cor.test(x,-y,method="spearman") out4 <- spearman.test(x,-y) identical(out3,out4)