Note that the survConcordance function, which is equivalent to Kendall's
tau, also is O(n log n) and it does compute a variance. The variance
is about 4/5 of the work.
Using R 2.15.0 on an older Linux box:
> require(survival)
> require(pcaPP)
> tfun <- function(n) {
+ x <- 1:n + runif(n)*n
+ y <- 1:n
+ t1 <- system.time(cor.test(x,y, method="kendall"))
+ t2 <- system.time(cor.fk(x,y))
+ t3 <- system.time(survConcordance(Surv(y) ~ x))
+ rbind("cor.test"=t1, "cor.fk"=t2,
"survConcordance"= t3)
+ }
> tfun(1e2)
user.self sys.self elapsed user.child sys.child
cor.test 0.000 0 0.004 0 0
cor.fk 0.000 0 0.001 0 0
survConcordance 0.004 0 0.006 0 0
> tfun(1e3)
user.self sys.self elapsed user.child sys.child
cor.test 0.024 0 0.026 0 0
cor.fk 0.000 0 0.000 0 0
survConcordance 0.004 0 0.004 0 0
> tfun(1e4)
user.self sys.self elapsed user.child sys.child
cor.test 2.224 0.004 2.227 0 0
cor.fk 0.004 0.000 0.003 0 0
survConcordance 0.028 0.000 0.028 0 0
> tfun(5e4)
user.self sys.self elapsed user.child sys.child
cor.test 55.551 0.008 55.574 0 0
cor.fk 0.016 0.000 0.018 0 0
survConcordance 0.204 0.016 0.221 0 0
I agree with Brian, especially since the Spearman and Kendall results
rarely (ever?) disagree on their main message for n>50. At the very
most, one might add a footnote to the the help page for cor.test
pointing to the faster codes.
Terry T.
Brian R wrote:>> On 12-06-25 2:48 PM, Adler, Avraham wrote:
>>> Hello.
>>>
>>> Has any further action been taken regarding implementing David
>>> Simcha's fast Kendall tau code (now found in the package pcaPP
as
>>> cor.fk) into R-base? It is literally hundreds of times faster,
>>> although I am uncertain as to whether he wrote code for testing the
>>> significance of the parameter. The last mention I have seen of this
>>> was in
>>>
2010<https://stat.ethz.ch/pipermail/r-devel/2010-February/056745.html>.
>> You could check the NEWS file, but I don't remember anything being
done
>> along these lines. If the code is in a CRAN package, there doesn't
seem
>> to be any need to move it to base R.
> In addition, this is something very specialized, and the code in R is
> fast enough for all but the most unusual instances of that specialized
> task. example(cor.fk) shows the R implementation takes well under a
> second for 2000 cases (a far higher value than is usual).
>
[[alternative HTML version deleted]]