[PYTHON] Mesurer la force de l'association dans un tableau croisé

Coefficient V de Kramer

L'histoire de la réalisation d'un test du chi carré pour tester l'indépendance entre des variables discrètes dans un tableau croisé a été précédemment expliquée.

Plus la valeur du chi carré χ ^ 2 est élevée, plus la relation entre les deux variables est forte. Cependant, la valeur χ ^ 2 dépend de la taille du tableau croisé et du nombre d'observations, et la valeur maximale est également différente. Un autre aspect est qu'il est difficile de comparer des tableaux croisés avec différents nombres de lignes et de colonnes.

Dans le coefficient V de Cramer, χ ^ 2 est converti par la formule suivante, et l'état qui n'a aucun rapport avec aucun tableau croisé est 0. , Dérive une valeur avec l'état entièrement lié comme 1.

\Phi_c = \sqrt{\frac {\chi^2} {N(k-1)}}

Où N est la fréquence totale et k est le plus petit nombre de lignes ou de colonnes dans le tableau croisé.

L'effet du nombre d'observations est corrigé en utilisant la fréquence totale, et l'effet du nombre de matrices est corrigé en prenant le plus petit du nombre de colonnes et du nombre de lignes. De plus, comme l'original est la valeur du chi carré, il prend la racine carrée.

Calculer avec le code

Ici a un code de référence, je vais donc le citer.

import numpy as np

def det2x2(A, v=False):
    if v:  print('compute 2 x 2 det of')
    if v:  print(A)
    assert A.shape == (2,2)
    return A[0][0]*A[1][1] - A[0][1]*A[1][0]

def det3x3(A):
    print('compute 3 x 3 det of')
    print(A)
    assert A.shape == (3,3)
    a,b,c = A[0]
    c1 = a * det2x2(A[1:3,[1,2]])
    c2 = b * det2x2(A[1:3,[0,2]])
    c3 = c * det2x2(A[1:3,[0,1]])
    return c1 - c2 + c3

def solve(A):
    print('solve')
    print(A, '\n')
    assert A.shape == (3,4)
    D = det3x3(A[:,:3])
    print('D = ', D, '\n')
    if D == 0:
        print('no solution')
        return
    Dx = det3x3(A[:,[3,1,2]])
    print('Dx = ', Dx, '\n')
    Dy = det3x3(A[:,[0,3,2]])
    print('Dy = ', Dy, '\n')
    Dz = det3x3(A[:,[0,1,3]])
    print('Dz = ', Dz, '\n')
    return Dx*1.0/D, Dy*1.0/D, Dz*1.0/D

def check(A,x,y,z):
    print('check')
    for i,r in enumerate(A):
        print('row', i, '=', r)
        pL = list()
        for coeff,var in zip(r[:3],(x,y,z)):
            c = str(round(coeff,2))
            v = str(round(var,2))
            pL.append(c + '*' + v)
        print(' + '.join(pL), end=' ')
        print(' =', r[0]*x + r[1]*y + r[2]*z, '\n')

Une fois exécuté, ce sera comme ça.

import numpy as np
import cramer

def run_cramer():
    L = [2, 3, 0, 5,
         1, 1, 1, 3,
         2,-1, 3, 7]
    A = np.array(L)
    A.shape = (3,4)
    result = cramer.solve(A)
    if result:
        x,y,z = result
        print('solution')
        print('x =', x)
        print('y =', y)
        print('z =', z, '\n')
        cramer.check(A,x,y,z)

run_cramer()
# =>
# solve
# [[ 2  3  0  5]
#  [ 1  1  1  3]
#  [ 2 -1  3  7]] 
# 
# compute 3 x 3 det of
# [[ 2  3  0]
#  [ 1  1  1]
#  [ 2 -1  3]]
# D =  5 
# 
# compute 3 x 3 det of
# [[ 5  3  0]
#  [ 3  1  1]
#  [ 7 -1  3]]
# Dx =  14 
# 
# compute 3 x 3 det of
# [[2 5 0]
#  [1 3 1]
#  [2 7 3]]
# Dy =  -1 
# 
# compute 3 x 3 det of
# [[ 2  3  5]
#  [ 1  1  3]
#  [ 2 -1  7]]
# Dz =  2 
# 
# solution
# x = 2.8
# y = -0.2
# z = 0.4 
# 
# check
# row 0 = [2 3 0 5]
# 2*2.8 + 3*-0.2 + 0*0.4  = 5.0 
# 
# row 1 = [1 1 1 3]
# 1*2.8 + 1*-0.2 + 1*0.4  = 3.0 
# 
# row 2 = [ 2 -1  3  7]
# 2*2.8 + -1*-0.2 + 3*0.4  = 7.0 
# 

Il existe également un calculateur en ligne sur ici, comme mentionné dans l'article source.

Recommended Posts

Mesurer la force de l'association dans un tableau croisé
Mesurer l'importance des entités avec un outil de forêt aléatoire
Afficher la force du signal RSSI d'un SSID spécifique (Mac)
L'histoire de l'exportation d'un programme
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
[python] [meta] Le type de python est-il un type?
Un mémo expliquant la spécification de l'axe de l'axe
Obtenez le nom de fichier du répertoire (glob)
L'histoire du traitement A du blackjack (python)
Notez l'achèvement d'une commande chronophage
Afficher la force du signal RSSI d'un SSID spécifique (raspberry pi (linux))
Code Python pour déterminer les signaux mensuels pour les investissements de force relative
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Laisser Python mesurer le score moyen d'une page à l'aide de l'API PageSpeed Insights
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Trouvez le nombre de jours dans un mois
Écrire une note sur la version python de python virtualenv
Calculer la probabilité de valeurs aberrantes sur les moustaches de la boîte
[Python] Une compréhension approximative du module de journalisation
Sortie sous la forme d'un tableau python
L'histoire de la création d'un générateur d'icônes mel
Prise en compte des forces et faiblesses de Python
Un moyen simple de mesurer la vitesse de traitement d'un disque reconnu par Linux
L'histoire du lancement d'un serveur Minecraft depuis Discord
Une histoire qui réduit l'effort de fonctionnement / maintenance
[Python] Un programme qui compte le nombre de vallées
Obtenez le nom de la variable sous forme de chaîne de caractères.
Un mémorandum sur les avertissements dans les résultats de sortie de pylint
Calculer le volume à partir de la structure bidimensionnelle d'un composé
[GoLang] Définissez un espace au début du commentaire
Calculer la somme des valeurs uniques par tabulation croisée des pandas
Un mémo pour comprendre visuellement l'axe des pandas.
Découpez une partie de la chaîne à l'aide d'une tranche Python
Soyez prudent lors de la différenciation des vecteurs propres d'une matrice
Jetez un œil au traitement de LightGBM Tuner
Créez un BOT qui raccourcit l'URL Discord
Prenez des captures d'écran LCD avec Python-LEGO Mindstorms
Prenez note de la liste des utilisations de base de Pandas
Implémentation python de la classe de régression linéaire bayésienne
Points Python du point de vue d'un programmeur en langage C
#Une fonction qui renvoie le code de caractère d'une chaîne de caractères
L'histoire de la création d'un réseau neuronal de génération musicale
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Étapes pour calculer la probabilité d'une distribution normale
Générer cette forme du fond d'une bouteille pour animaux de compagnie
Une histoire sur le changement du nom principal de BlueZ
Tâches au démarrage d'un nouveau projet python
Le problème Zip 4 Gbyte est une histoire du passé
Une histoire qui a analysé la livraison de Nico Nama.
Une réflexion sur la visualisation du champ d'application du modèle de prédiction
Qu'est-ce qu'un moteur de recommandation? Résumé des types
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV
Un mémorandum sur la mise en œuvre des recommandations en Python
[Python] Un programme qui compare les positions des kangourous.
Calculer le produit des matrices avec une expression de caractère?
Note Python: Le mystère de l'attribution d'une variable à une variable
Le sens de soi