Source code for nispace.stats.effectsize

import numpy as np
from numba import njit


[docs]def cohen(a, b): a = np.array(a) b = np.array(b) # Number of elements in each column na = a.shape[0] nb = b.shape[0] dof = na + nb - 2 # Calculate the pooled standard deviation for each column pooled_std = np.sqrt(((na - 1) * np.var(a, ddof=1, axis=0) + (nb - 1) * np.var(b, ddof=1, axis=0)) / dof) # Calculate Cohen's d for each column d = (np.mean(a, axis=0) - np.mean(b, axis=0)) / pooled_std return d
[docs]def cohen_nan(a, b): a = np.array(a) b = np.array(b) # Number of elements in each column na = np.sum(~np.isnan(a), axis=0) nb = np.sum(~np.isnan(b), axis=0) dof = na + nb - 2 # Calculate the pooled standard deviation for each column pooled_std = np.sqrt(((na - 1) * np.nanvar(a, ddof=1, axis=0) + (nb - 1) * np.nanvar(b, ddof=1, axis=0)) / dof) # Calculate Cohen's d for each column d = (np.nanmean(a, axis=0) - np.nanmean(b, axis=0)) / pooled_std return d
[docs]def cohen_paired(a, b): a = np.array(a) b = np.array(b) if a.shape != b.shape: raise ValueError("Arrays 'a' and 'b' must have the same shape.") # Calculate the difference between pairs for each column diff = a - b # Calculate Cohen's d for each column d = np.mean(diff, axis=0) / np.std(diff, ddof=1, axis=0) return d
[docs]def cohen_paired_nan(a, b): a = np.array(a) b = np.array(b) if a.shape != b.shape: raise ValueError("Arrays 'a' and 'b' must have the same shape.") # Calculate the difference between pairs for each column diff = a - b # Calculate Cohen's d for each column d = np.nanmean(diff, axis=0) / np.nanstd(diff, ddof=1, axis=0) return d
[docs]def hedges(a, b): a = np.array(a) b = np.array(b) # Calculate Cohen's d for each column d = cohen(a, b) # Calculate the correction factor for Hedges' g for each column na = a.shape[0] nb = b.shape[0] dof = na + nb - 2 correction = 1 - (3 / (4 * dof - 1)) # Calculate Hedges' g for each column g = d * correction return g
[docs]def hedges_nan(a, b): a = np.array(a) b = np.array(b) # Calculate Cohen's d for each column d = cohen_nan(a, b) # Calculate the correction factor for Hedges' g for each column na = np.sum(~np.isnan(a), axis=0) nb = np.sum(~np.isnan(b), axis=0) dof = na + nb - 2 correction = 1 - (3 / (4 * dof - 1)) # Calculate Hedges' g for each column g = d * correction return g
[docs]def hedges_paired(a, b): a = np.array(a) b = np.array(b) if a.shape != b.shape: raise ValueError("Arrays 'a' and 'b' must have the same shape.") # Calculate Cohen's d for each column d = cohen_paired_nan(a, b) # Calculate the correction factor for Hedges' g for each column n = np.sum(~np.isnan(a), axis=0) correction = 1 - (3 / (4 * n - 1)) # Calculate Hedges' g for each column g = d * correction return g
[docs]def zscore(a, b=None): a = np.array(a) if b is not None: b = np.array(b) z = (a - np.mean(b, axis=0)) / np.std(b, ddof=1, axis=0) else: z = (a - np.mean(a, axis=0)) / np.std(a, ddof=1, axis=0) return z
[docs]def zscore_nan(a, b=None): a = np.array(a) if b is not None: b = np.array(b) z = (a - np.nanmean(b, axis=0)) / np.nanstd(b, ddof=1, axis=0) else: z = (a - np.nanmean(a, axis=0)) / np.nanstd(a, ddof=1, axis=0) return z
[docs]def prc(a, b): a = np.array(a, dtype=float) # Ensure input is a numpy array and convert to float for safe division b = np.array(b, dtype=float) if a.shape != b.shape: raise ValueError("Arrays 'a' and 'b' must have the same shape.") # Calculate percentage change # Use np.where to avoid division by zero p = np.where(a != 0, (b - a) / a * 100, np.nan) return p