Skip to content

Instantly share code, notes, and snippets.

@g-leech
Last active April 5, 2023 17:30
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save g-leech/80a8b5917ae1fb8baf57c8805c72eee9 to your computer and use it in GitHub Desktop.
Save g-leech/80a8b5917ae1fb8baf57c8805c72eee9 to your computer and use it in GitHub Desktop.
import math
import scipy.stats as st
# assumes bivariate normal, dichotomised groups
def dichotomy_r_to_d(r) :
d = 2*r / (math.sqrt(1 - r**2))
return d
# Equation 9
# https://sci-hub.tw/10.1037/1082-989X.11.4.386
def r_to_d(r, n1, n2) :
N = n1 + n2
p1 = n1 / N
p2 = n2 / N
d = r / math.sqrt( (1 - r**2) * p1*p2 )
return d
# r.Lakens = CohenDs / sqrt(CohenDs^2 + (N^2 - 2*N)/(n1*n2)
def cohens_d(experimentalMean, controlMean, \
experimentalSd, controlSd, \
experimentalN, controlN, \
correctForBias=True) :
sd = pooled_sd(experimentalSd, controlSd)
d = (experimentalMean - controlMean) / sd
if correctForBias :
N = experimentalN + controlN
correction = ( (N - 3)/(N - 2.25) ) \
* math.sqrt( (N-2)/N )
d = d * correction
return d
def pooled_sd(sd1, sd2) :
sumSquaredSigma = sd1**2 + sd2**2
return math.sqrt(sumSquaredSigma/2)
# assuming normality as usual
def approx_ci_to_z(lo_ci, hi_ci, alpha=0.05) :
z = st.norm.ppf(1 - alpha/2)
# midpoint
estimate = (lo_ci + hi_ci)/2
stderr = (hi_ci - lo_ci) / (2 * z)
return estimate / stderr
# Correction from Lakens
# https://www.frontiersin.org/articles/10.3389/fpsyg.2013.00863/full
def hedges_g(experimentalMean, controlMean, \
experimentalSd, controlSd, \
experimentalN, controlN) :
dof = experimentalN + controlN
approxCorrection = 1 - ( 3 / (4*dof - 9) )
d = cohens_d(experimentalMean, controlMean, \
experimentalSd, controlSd, \
correctForBias=True)
return d * approxCorrection
# https://www.meta-analysis.com/downloads/Meta-analysis%20Converting%20among%20effect%20sizes.pdf
def odds_ratio_to_d(or_):
correction = 0.551328895421756
return math.log(or_) * correction
# Elderly priming
doyen = { "primed_mean" : 6.27, \
"primed_sd" : 2.15,\
"primed_n" : 60,\
"control_mean" : 6.39,\
"control_sd" : 1.11,\
"control_n" : 60,
}
cohens_d(doyen["primed_mean"], doyen["control_mean"], \
doyen["primed_sd"], doyen["control_sd"], \
doyen["primed_n"], doyen["control_n"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment