[PYTHON] Messen Sie die Assoziationsstärke in einer Kreuztabelle

Kramers V-Koeffizient

Die Geschichte eines Chi-Quadrat-Tests zum Testen der Unabhängigkeit zwischen diskreten Variablen in einer Kreuztabelle zuvor erläutert.

Je größer der Chi-Quadrat-Wert χ ^ 2 ist, desto stärker ist die Beziehung zwischen den beiden Variablen. Der Wert χ ^ 2 hängt jedoch von der Größe der Kreuztabelle und der Anzahl der Fälle ab, und der Maximalwert ist ebenfalls unterschiedlich. Ein weiterer Aspekt ist, dass es schwierig ist, Kreuztabellen mit unterschiedlicher Anzahl von Zeilen und Spalten zu vergleichen.

In Cramers V-Koeffizient wird χ ^ 2 durch die folgende Formel konvertiert, und der Zustand, der mit keiner Kreuztabellentabelle völlig unabhängig ist, ist 0. , Leitet einen Wert mit dem vollständig verwandten Status 1 ab.

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

Dabei ist N die Gesamthäufigkeit und k die kleinere Anzahl von Zeilen oder Spalten in der Kreuztabellen-Tabelle.

Der Effekt der Anzahl der Fälle wird unter Verwendung der Gesamthäufigkeit korrigiert, und der Effekt der Anzahl der Matrizen wird korrigiert, indem der kleinere Wert aus der Anzahl der Spalten und der Anzahl der Zeilen genommen wird. Da das Original der Chi-Quadrat-Wert ist, wird auch die Quadratwurzel verwendet.

Berechnen Sie mit Code

Hier hat einen Referenzcode, daher werde ich ihn zitieren.

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')

Wenn es ausgeführt wird, wird es so sein.

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 
# 

Es gibt auch einen Online-Rechner unter hier, wie im Quellartikel erwähnt.

Recommended Posts

Messen Sie die Assoziationsstärke in einer Kreuztabelle
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Anzeige der Signalstärke RSSI einer bestimmten SSID (Mac)
Die Geschichte des Exportierens eines Programms
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
[Python] [Meta] Ist der Python-Typ ein Typ?
Ein Memo, das die Achsenspezifikation der Achse erklärt
Holen Sie sich den Dateinamen des Verzeichnisses (glob)
Die Geschichte der Verarbeitung A von Blackjack (Python)
Beachten Sie den Abschluss eines zeitaufwändigen Befehls
Anzeige der Signalstärke RSSI einer bestimmten SSID (Himbeer-Pi (Linux))
Python-Code zur Bestimmung der monatlichen Signale für Investitionen mit relativer Stärke
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Lassen Sie Python die durchschnittliche Punktzahl einer Seite mithilfe der PageSpeed Insights-API messen
Holen Sie sich den Aufrufer einer Funktion in Python
Kopieren Sie die Liste in Python
Finden Sie die Anzahl der Tage in einem Monat
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ausgabe in Form eines Python-Arrays
Die Geschichte eines Mel-Icon-Generators
Berücksichtigung der Stärken und Schwächen von Python
Eine einfache Möglichkeit, die Verarbeitungsgeschwindigkeit einer von Linux erkannten Festplatte zu messen
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
[Python] Ein Programm, das die Anzahl der Täler zählt
Ruft den Variablennamen der Variablen als Zeichenfolge ab.
Ein Memorandum über Warnungen in Pylint-Ausgabeergebnissen
Berechnen Sie das Volumen aus der zweidimensionalen Struktur einer Verbindung
[GoLang] Setzen Sie am Anfang des Kommentars ein Leerzeichen
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Seien Sie vorsichtig, wenn Sie die Eigenvektoren einer Matrix unterscheiden
Werfen Sie einen Blick auf die Verarbeitung von LightGBM Tuner
Erstellen Sie einen BOT, der die Discord-URL verkürzt
Machen Sie LCD-Screenshots mit Python-LEGO Mindstorms
Notieren Sie sich die Liste der grundlegenden Verwendungszwecke von Pandas
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Python zeigt aus der Perspektive eines C-Sprachprogrammierers
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Visualisieren Sie das charakteristische Vokabular eines Dokuments mit D3.js.
Schritte zur Berechnung der Wahrscheinlichkeit einer Normalverteilung
Erzeugen Sie diese Form des Bodens einer Haustierflasche
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Aufgaben zu Beginn eines neuen Python-Projekts
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Eine Überlegung zur Visualisierung des Anwendungsbereichs des Vorhersagemodells
Was ist ein empfohlener Motor? Zusammenfassung der Typen
Geben Sie das Ausgabeergebnis von sklearn.metrics.classification_report als CSV-Datei aus
Ein Memorandum über die Umsetzung von Empfehlungen in Python
[Python] Ein Programm, das die Positionen von Kängurus vergleicht.
Berechnen Sie das Produkt von Matrizen mit einem Zeichenausdruck?
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Die Bedeutung des Selbst