Source code for tab_right.drift.cramer_v
"""Compute Cramér’s V statistic for categorical-categorical association."""
import pandas as pd
import scipy.stats
[docs]
def cramer_v(
x: pd.Series,
y: pd.Series,
) -> float:
"""Compute Cramér’s V statistic for categorical-categorical association.
Parameters
----------
x : pd.Series
First categorical variable.
y : pd.Series
Second categorical variable.
Returns
-------
float
Cramér’s V value in [0, 1].
"""
confusion_matrix = pd.crosstab(x, y)
chi2 = scipy.stats.chi2_contingency(confusion_matrix)[0]
n = confusion_matrix.sum().sum()
phi2 = chi2 / n
r, k = confusion_matrix.shape
# Use pandas operations for sqrt
return phi2**0.5 / min(k - 1, r - 1) ** 0.5 if min(k - 1, r - 1) > 0 else 0.0