亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 scipy 進行卡方計算

使用 scipy 進行卡方計算

喵喔喔 2022-10-05 16:26:03
我嘗試使用 scipy 進行卡方檢驗,如下所示import numpy as npimport scipyvals = np.array([[70, 20], [50, 60]])x2, p, dof, expected = scipy.stats.chi2_contingency(vals)print('x2 = {:.5f}'.format(x2))print('p-value = {}'.format(p))print(expected)a = scipy.stats.chisquare(f_obs= vals,   # Array of observed counts                f_exp= expected)我有x2 = 20.22306p 值 = 6.8917007718498866e-06[[54。36.] [66. 44.]]但是,這個結果與我的實現不同。def Chi2_test(vals, k=1):    r, c = vals.shape    a_sum = vals.sum(axis=0)    b_sum = vals.sum(axis=1)    S = vals.sum()    Pa= a_sum / S    Pb = b_sum / S    Pa = np.tile(Pa, c).reshape(r, c)    Pb = np.repeat(Pb, c).reshape(r, c)    Pab = Pa * Pb    E = Pab * S    x2 = np.sum(((vals - E) ** 2) / E)    # chi square -> p value    # Gamma function    def Gamma(x):        if x == 1:            return 1        elif x == 0.5:            return np.sqrt(np.pi)        else:            return (x - 1) * Gamma(x - 1)    # chi square       def Chi2(x, k):        return (x ** (k / 2 - 1)) * (np.exp(- x / 2)) / ((2 ** (k / 2)) * Gamma(k / 2))    p_value = integrate.quad(lambda x: Chi2(x, k=k), x2, np.inf)[0]    return x2, p_valuevals = np.array([[70, 20],                 [50, 60]])x2, p_value = Chi2_test(vals)print('x2 :', x2)print('p-value :', p_value)x2:21.548821548821547p值:3.449345362777984e-06我不知道怎么了。
查看完整描述

1 回答

?
幕布斯6054654

TA貢獻1876條經驗 獲得超7個贊

沒有什么是錯的!您看到的差異是因為scipy.stats.chi2_contingency當輸入數組為 2x2 時應用了“連續性校正”。您可以通過傳入參數來禁用此更正correction=False。有了這個,輸出匹配你的計算:


In [12]: vals = np.array([[70, 20], [50, 60]])


In [13]: x2, p, dof, expected = scipy.stats.chi2_contingency(vals, correction=False)


In [14]: x2

Out[14]: 21.54882154882155


In [15]: p

Out[15]: 3.449345750127958e-06


查看完整回答
反對 回復 2022-10-05
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號