Upload files to ''
This commit is contained in:
parent
f464823801
commit
c7a26c735f
79
statisitic_functions.py
Normal file
79
statisitic_functions.py
Normal file
@ -0,0 +1,79 @@
|
||||
import numpy as np
|
||||
import matplotlib as mpl
|
||||
|
||||
|
||||
def cohen_d(x, y):
|
||||
"""
|
||||
Calculates the effect size Cohens d' between the two data x and y
|
||||
:param x: data array 1
|
||||
:param y: data array 2
|
||||
:return: float, d value of the effect size
|
||||
"""
|
||||
nx = len(x)
|
||||
ny = len(y)
|
||||
dof = nx + ny - 2
|
||||
d = np.abs((np.mean(x) - np.mean(y)) / (((nx - 1) / dof) * (np.std(x) ** 2) + ((ny - 1) / dof) * (np.std(y) ** 2)))
|
||||
return d
|
||||
|
||||
|
||||
def significance_bar(ax, p, d, x0, x1, y, **kwargs):
|
||||
"""
|
||||
A horizontal bar with asterisks indicating significance level.
|
||||
|
||||
Plot a horizontal bar from x0 to x1 at height y
|
||||
for indicating significance. On top of the bar plot
|
||||
asterisks according to the significance value p are drawn.
|
||||
If p > 0.05 nothing is plotted.
|
||||
p<0.001: '***', p<0.01: '**', p<0.05: '*'.
|
||||
|
||||
Note: call this function AFTER ylim has been set!
|
||||
|
||||
Parameters
|
||||
----------
|
||||
ax: matplotlib axes
|
||||
Axes to which the inset is added.
|
||||
p: float
|
||||
Significance level.
|
||||
x0: float
|
||||
x-coordinate of starting point of significance bar in data units.
|
||||
x1: float
|
||||
x-coordinate of ending point of significance bar in data units.
|
||||
y: float
|
||||
y-coordinate of significance bar in data units.
|
||||
kwargs: key-word arguments
|
||||
Passed on to `ax.text()` used to print the asterisks.
|
||||
"""
|
||||
if d is not None:
|
||||
if d > 0.0:
|
||||
ps = '%.2f' %(d)
|
||||
else:
|
||||
return
|
||||
|
||||
elif p is not None:
|
||||
|
||||
# set label:
|
||||
if p < 0.001:
|
||||
ps = '***'
|
||||
elif p < 0.01:
|
||||
ps = '**'
|
||||
elif p < 0.05:
|
||||
ps = '*'
|
||||
else:
|
||||
return
|
||||
# ax dimensions:
|
||||
pixely = np.abs(np.diff(ax.get_window_extent().get_points()[:, 1]))[0]
|
||||
unity = np.abs(np.diff(ax.get_ylim()))[0]
|
||||
dyu = unity / pixely
|
||||
fs = mpl.rcParams['font.size']
|
||||
if 'fontsize' in kwargs and isinstance(kwargs['fontsize'], (float, int)):
|
||||
fs = kwargs['fontsize']
|
||||
dy = 0.3 * fs * dyu
|
||||
lw = 1.0
|
||||
lh = ax.plot([x0, x0, x1, x1], [y - dy, y, y, y - dy], color='black', lw=lw,
|
||||
solid_capstyle='butt', solid_joinstyle='miter', clip_on=False)
|
||||
# get y position of line in figure pixel coordinates:
|
||||
ly = np.array(lh[0].get_window_extent(ax.get_figure().canvas.get_renderer()))[1, 1]
|
||||
th = ax.text(0.5 * (x0 + x1), y, ps, ha='center', va='bottom', **kwargs)
|
||||
ty = np.array(th.get_window_extent(ax.get_figure().canvas.get_renderer()))[0, 1]
|
||||
dty = ly + 5 * lw - 0.4 * fs - ty
|
||||
th.set_position((0.5 * (x0 + x1), y + dty * dyu))
|
Loading…
Reference in New Issue
Block a user