pspearman (version 0.1-10)

spearman.test: 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.

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.

concept

  • Spearman correlation coefficient
  • Spearman's rho

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<="" code=""> 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<="" code="">, 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.

Examples

Run this code
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)

Run the code above in your browser using DataCamp Workspace