A Method!

Cohen’s d can be converted to a point-biserial correlation if both groups’ sample sizes and the value of Cohen’s d are known. This require two quantities in addition to d, m and h. \(m = n_1 + n_2 - 2\) and \(h = m/n_1 + m/n_2\). The point-biserial is just

\[\frac{d \sqrt{d^2 + h}}{d^2+h}\]

And converting back is a matter of

\[\frac{r \sqrt{h}}{\sqrt{1-r^2}}\]

Various approximations for equal groups are available, like the ones at https://www.escal.site/. Once Cohen’s d is written in terms of a point-biserial, it can be corrected with the classical reliability correction.

rpb2d <- function(r, n1, n2){
  m = n1 + n2 - 2
  h = m/n1 + m/n2
  d = (r * sqrt(h))/sqrt(1 - r^2)
  return(d)}

d2rpb <- function(d, n1, n2){
  m = n1 + n2 - 2
  h = m/n1 + m/n2
  rpb = (d * sqrt(d^2 + h))/(d^2 + h)
  return(rpb)}

rpb2d(0.5, 100, 100)
## [1] 1.148913
d2rpb(0.5, 100, 100)
## [1] 0.2436851
rpb2d(d2rpb(0.5, 100, 100), 100, 100)
## [1] 0.5
d2rpb(rpb2d(0.5, 100, 100), 100, 100)
## [1] 0.5

If you have a Cohen’s d of 0.75 with a reliability of 0.8, you may want to correct that. You could do

d2rpb(0.75, 50, 50)
## [1] 0.3542429
rpb2d(d2rpb(0.75, 50, 50)/sqrt(0.8), 50, 50)
## [1] 0.8539832

And if you want a function

dCorrected <- function(d, n1, n2, rel){
  m = n1 + n2 - 2
  h = m/n1 + m/n2
  rpb = (d * sqrt(d^2 + h))/(d^2 + h)
  corpb = rpb/sqrt(rel)
  d = (corpb * sqrt(h))/sqrt(1 - corpb^2)
  return(d)}

rpbCorrected <- function(r, n1, n2, rel){
  m = n1 + n2 - 2
  h = m/n1 + m/n2
  corpb = r/sqrt(rel)
  return(corpb)}

dCorrected(0.75, 50, 50, 0.80)
## [1] 0.8539832
rpbCorrected(0.5, 50, 50, 0.80)
## [1] 0.559017
sessionInfo()
## R version 4.1.2 (2021-11-01)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19044)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=English_United States.1252 
## [2] LC_CTYPE=English_United States.1252   
## [3] LC_MONETARY=English_United States.1252
## [4] LC_NUMERIC=C                          
## [5] LC_TIME=English_United States.1252    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] digest_0.6.28   R6_2.5.1        jsonlite_1.7.2  magrittr_2.0.1 
##  [5] evaluate_0.14   rlang_0.4.12    stringi_1.7.5   jquerylib_0.1.4
##  [9] bslib_0.3.1     rmarkdown_2.11  tools_4.1.2     stringr_1.4.0  
## [13] xfun_0.27       yaml_2.2.1      fastmap_1.1.0   compiler_4.1.2 
## [17] htmltools_0.5.2 knitr_1.36      sass_0.4.0