From 3f29a9cd13789e6a012187336bd58cd81629d0f3 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Sat, 25 Sep 2021 20:15:11 +0200 Subject: [PATCH] ranking.jl and rankcorr.jl --- docs/make.jl | 3 ++- docs/src/index.md | 2 +- docs/src/ranking.md | 12 ++++++++++++ src/Statistics.jl | 8 +++++++- src/ranking.jl | 6 +++--- test/rankcorr.jl | 2 +- test/ranking.jl | 2 +- test/runtests.jl | 4 +++- 8 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 docs/src/ranking.md diff --git a/docs/make.jl b/docs/make.jl index 88bd831b..62ca3ab8 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -12,7 +12,8 @@ makedocs( "weights.md", "scalarstats.md", "cov.md", - "robust.md"] + "robust.md", + "ranking.md"] ) deploydocs( diff --git a/docs/src/index.md b/docs/src/index.md index 55080416..ccd94b31 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -10,6 +10,6 @@ Statistics can be weighted, and several weights types are distinguished to apply corrections where necessary. ```@contents -Pages = ["weights.md", "scalarstats.md", "cov.md", "robust.md"] +Pages = ["weights.md", "scalarstats.md", "cov.md", "robust.md", "ranking.jl"] Depth = 2 ``` \ No newline at end of file diff --git a/docs/src/ranking.md b/docs/src/ranking.md new file mode 100644 index 00000000..fafc94bb --- /dev/null +++ b/docs/src/ranking.md @@ -0,0 +1,12 @@ +# Rankings and Rank Correlations + +Various strategies for computing ranks and rank correlations are provided. + +```@docs +ordinalrank +competerank +denserank +tiedrank +corspearman +corkendall +``` diff --git a/src/Statistics.jl b/src/Statistics.jl index 42fc29a7..5b624c45 100644 --- a/src/Statistics.jl +++ b/src/Statistics.jl @@ -32,7 +32,11 @@ export std, stdm, var, varm, mean!, mean, autocov!, autocov, autocor!, autocor, crosscov!, crosscov, crosscor!, crosscor, pacf!, pacf, # robust.jl - trim, trim!, trimvar, winsor, winsor! + trim, trim!, trimvar, winsor, winsor!, + # ranking.jl + ordinalrank, competerank, denserank, tiedrank, + # rankcorr + corkendall, corspearman include("common.jl") include("weights.jl") @@ -44,6 +48,8 @@ include("partialcor.jl") include("toeplitzsolvers.jl") include("signalcorr.jl") include("robust.jl") +include("ranking.jl") +include("rankcorr.jl") ##### mean ##### diff --git a/src/ranking.jl b/src/ranking.jl index 90ed8d39..90e4f7bf 100644 --- a/src/ranking.jl +++ b/src/ranking.jl @@ -182,10 +182,10 @@ for (f, f!, S) in zip([:ordinalrank, :competerank, :denserank, :tiedrank], @eval begin function $f(x::AbstractArray{>: Missing}; lt = isless, rev::Bool = false) inds = findall(!ismissing, x) - isempty(inds) && return missings($S, size(x)) - xv = disallowmissing(view(x, inds)) + isempty(inds) && return Array{Union{$S, Missing}}(missing, size(x)) + xv = convert(Array{Int}, view(x, inds)) sp = sortperm(xv; lt = lt, rev = rev) - rks = missings($S, length(x)) + rks = Vector{Union{$S, Missing}}(missing, length(x)) $(f!)(view(rks, inds), xv, sp) rks end diff --git a/test/rankcorr.jl b/test/rankcorr.jl index e5505c2a..8669ed64 100644 --- a/test/rankcorr.jl +++ b/test/rankcorr.jl @@ -1,4 +1,4 @@ -using StatsBase +using Statistics using Test X = Float64[1 0; 2 1; 3 0; 4 1; 5 10] diff --git a/test/ranking.jl b/test/ranking.jl index 8745f739..c837867f 100644 --- a/test/ranking.jl +++ b/test/ranking.jl @@ -1,4 +1,4 @@ -using StatsBase +using Statistics using Test a = [1.0, 2.0, 2.0, 3.0, 4.0, 4.0, 4.0, 5.0] diff --git a/test/runtests.jl b/test/runtests.jl index ebd9b57d..22f1a9bf 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -894,4 +894,6 @@ include("moments.jl") include("cov.jl") include("partialcor.jl") include("signalcorr.jl") -include("robust.jl") \ No newline at end of file +include("robust.jl") +include("ranking.jl") +include("rankcorr.jl") \ No newline at end of file