spearman.test {pspearman}R Documentation

Spearman's rank correlation test with improved accuracy

Description

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.

Usage

spearman.test(x, y,
         alternative = c("two.sided", "less", "greater"),
         method = "spearman",
         exact = NULL, conf.level = 0.95, ...)

Arguments

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.

Details

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.

Value

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.

Examples

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)

[Package pspearman version 0.1-10 Index]