Skip to content

rank_biserial(paired = TRUE): the confidence interval counts x != mu instead of the nonzero paired differences #716

Closed

Description

@pr0m1th3as

Describe the bug

For paired samples, rank_biserial() computes the estimate from the paired differences (x - y) - mu, but the standard error of its confidence interval takes the number of observations from x alone:

nd <- sum((x - mu) != 0)

(R/rank_diff.R, line 179 on main; the same in 1.0.3 on CRAN). In the paired case x and y are still separate vectors at that point, so nd counts the values of x that differ from mu, not the nonzero differences that the estimate is built on. Whenever the two counts differ, the interval is too narrow or too wide. The one-sample case is not affected, since y is 0 there.

To Reproduce

x holds no zeros, but three of the ten differences are zero:

library(effectsize)
x <- c(5.1, 6.0, 7.2, 4.8, 6.5, 5.9, 7.0, 6.1, 5.5, 6.3)
y <- c(4.9, 6.0, 6.5, 4.8, 6.8, 5.3, 6.1, 6.1, 5.9, 5.0)

rank_biserial(x, y, paired = TRUE)
#> r (rank biserial) |       95% CI
#> --------------------------------
#> 0.64              | [0.06, 0.90]

rank_biserial(x - y)
#> r (rank biserial) |        95% CI
#> ---------------------------------
#> 0.64              | [-0.07, 0.92]

The two calls describe the same data and give the same estimate, 0.642857, but the paired call uses nd = 10 where there are 7 nonzero differences, and its interval excludes zero while the correct one does not.

Expected behavior

The paired call should give the same interval as the one-sample call on the differences, [-0.065116, 0.920343], which is what nd = 7 gives. A possible fix is to count the differences, as .r_rbs() does:

nd <- sum(((x - y) - mu) != 0)

This is separate from #502, which is about how zero differences enter the estimate itself.

Specifications

  • R Version 4.5.0 (2025-04-11)
  • effectsize Version 1.0.3

Activity

  1. mattansb commented on Nov 1, 2026

    @mattansb
    Member

    Thanks @pr0m1th3as - should be fixed in #718

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug 🐜Something isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions