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.
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