How can Cramer’s V be calculated in Python?

Cramer’s V is a statistical measure used to determine the strength of association between two categorical variables. In Python, Cramer’s V can be calculated using the scipy.stats library. First, a contingency table is created, which displays the frequency of each combination of categories for the two variables. Then, the chi-square test is performed on the contingency table to obtain the chi-square statistic. Finally, the chi-square statistic is divided by the product of the number of rows and columns in the contingency table, and the square root of this value is taken to obtain the Cramer’s V value. This process can be easily implemented in Python using the appropriate functions and methods provided in the scipy.stats library.

Calculate Cramer’s V in Python


Cramer’s V is a measure of the strength of association between two .

It ranges from 0 to 1 where:

  • 0 indicates no association between the two variables.
  • 1 indicates a strong association between the two variables.

It is calculated as:

Cramer’s V = √(X2/n) / min(c-1, r-1)

where:

  • X2: The Chi-square statistic
  • n: Total sample size
  • r: Number of rows
  • c: Number of columns

This tutorial provides a couple examples of how to calculate Cramer’s V for a contingency table in Python.

Example 1: Cramer’s V for a 2×2 Table

The following code shows how to calculate Cramer’s V for a 2×2 table:

#load necessary packages and functions
import scipy.statsas statsimport numpy as np

#create 2x2 table
data = np.array([[7,12], [9,8]])

#Chi-squared test statistic, sample size, and minimum of rows and columns
X2 = stats.chi2_contingency(data, correction=False)[0]
n = np.sum(data)
minDim = min(data.shape)-1

#calculate Cramer's V 
V = np.sqrt((X2/n) / minDim)

#display Cramer's V
print(V)

0.1617

Cramer’s V turns out to be 0.1617, which indicates a fairly weak association between the two variables in the table.

Example 2: Cramer’s V for Larger Tables

Note that we can use the CramerV function to calculate Cramer’s V for a table of any size.

The following code shows how to calculate Cramer’s V for a table with 2 rows and 3 columns:

#load necessary packages and functions
import scipy.statsas statsimport numpy as np

#create 2x2 table
data = np.array([[6,9], [8, 5], [12, 9]])

#Chi-squared test statistic, sample size, and minimum of rows and columns
X2 = stats.chi2_contingency(data, correction=False)[0]
n = np.sum(data)
minDim = min(data.shape)-1

#calculate Cramer's V 
V = np.sqrt((X2/n) / minDim)

#display Cramer's V
print(V)

0.1775

Cramer’s V turns out to be 0.1775.

Additional Resources

x