Calculer et automatiser le V de Cramer sur plusieurs couples de variables
Bonjour !
J'ai une base de données contenant une soixantaine de variables, et je souhaite éliminer les variables trop liées entre elles en testant leur indépendance grâce au V de Cramer. Le test compare les variables 2 à 2 (manuellement, c'est long).
Deux questions :
1/ Comment calculer le V de Cramer sous Python ?
2/ Comment automatiser le calcul de sorte à obtenir un tableau de ce type (bien que je sois preneuse d'une solution alternative) :
Tableau des V de Cramer entre les variables
---|-A-|--B-|--C-|--D-|
A | 1 | 0.8 | 0.6 | 0.3 |
B | 0.8 | 1 | 0.5 | 0.2 |
C | 0.6 | 0.5 | 1 | 0.4 |
D | 0.3 | 0.2 | 0.4 | 1 |
Pour 1/, j'ai ce code pour le moment (construit à partir de deux sources, dont 1 sur un autre forum). A priori, il ne fonctionne pas, car il me donne des résultats supérieurs à 1 alors que le V de cramer devrait se situer entre 0 et 1
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
import scipy.stats as ss
import numpy as np
import pandas as pd
#Création d'un tableau croisé
crosstab = pd.crosstab(variableA, variableB, rownames=['variableA'], colnames=['variableB'])
#Test de cramer
def cramers_stat(crosstab):
chi2 = ss.chi2_contingency(crosstab)[0]
n = crosstab.sum()
return np.sqrt(chi2 / (n*(min(crosstab.shape)-1)))
result = cramers_stat(crosstab)
print(result) |
Pour 2/... je ne vois pas du tout comment automatiser tout ça
Merci pour votre aide, je bloque depuis un bon moment :(