""" Pythonでは累乗計算では ** または pow を用います。 """
""" Pythonでは配列の要素ごとの演算は numpy を用います。 """
""" Pythonでは検定には scipy.stats が便利です。 """
# https://ryamada.hatenadiary.jp/entry/20150101/1419899280
import numpy as np
import scipy.stats
def HWE_test(o1, o2, o3):
n = o1 + o2 + o3
p = (2*o1 + o2)/(2*n)
ob = np.array([o1,o2,o3])
ex = np.array([n*p**2, 2*n*p*(1-p), n*(1-p)**2])
X = np.sum((ob-ex)**2/ex)
p_value = 1 - scipy.stats.chi2.cdf(X, 1)
print(p_value)
HWE_test(50, 120, 30)
0.002701152959209474
import numpy as np
import scipy.stats
# https://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.stats.chi2_contingency.html
def Association_test(n10, n11, n12, n20, n21, n22):
case = np.array([2*n10+n11,n11+2*n12])
ctrl = np.array([2*n20+n21,n21+2*n22])
matrix = np.array([case, ctrl])
result = scipy.stats.chi2_contingency(matrix, correction=False)
print(result)
Association_test(50, 120, 30, 60, 150, 90)
(9.603841536614647, 0.0019417073371168674, 1, array([[196., 204.], [294., 306.]]))
import numpy as np
import scipy.stats
# https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.fisher_exact.html
def Association_test_fisher(n10, n11, n12, n20, n21, n22):
case = np.array([2*n10+n11, n11+2*n12])
ctrl = np.array([2*n20+n21, n21+2*n22])
matrix = np.array([case, ctrl])
result = scipy.stats.fisher_exact(matrix)
print(result)
Association_test_fisher(50, 120, 30, 60, 150, 90)
(1.4938271604938271, 0.0023904276302564188)