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
Pour 2/... je ne vois pas du tout comment automatiser tout ça
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)
Merci pour votre aide, je bloque depuis un bon moment
Partager