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 : Sélectionner tout - Visualiser dans une fenêtre à part
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