卡方檢驗及python代碼實現

卡方分佈是什麼?

卡方分佈:n個獨立同分布(標準正態分佈N(0,1))變量的平方和服從自由度爲n的卡方分佈。

不同自由度的卡方分佈的概率密度函數圖示python代碼

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

x1 = np.random.normal(0,1,1000000)
x2 = np.random.normal(0,1,1000000)
x3 = np.random.normal(0,1,1000000)
x4 = np.random.normal(0,1,1000000)
x5 = np.random.normal(0,1,1000000)
x6 = np.random.normal(0,1,1000000)

Q1 = x1**2
Q2 = Q1 + x2**2
Q3 = Q2 + x3**2
Q4 = Q3 + x4**2
Q5 = Q4 + x5**2
Q6 = Q5 + x6**2

plt.figure()
sns.distplot(Q1,hist=False,kde_kws={"shade":True},label='n=1')
sns.distplot(Q2,hist=False,kde_kws={"shade":True},label='n=2')
sns.distplot(Q3,hist=False,kde_kws={"shade":True},label='n=3')
sns.distplot(Q4,hist=False,kde_kws={"shade":True},label='n=4')
sns.distplot(Q5,hist=False,kde_kws={"shade":True},label='n=5')
sns.distplot(Q6,hist=False,kde_kws={"shade":True},label='n=6')

plt.xlabel('chisquare')
plt.ylabel('density')

可知自由度n越大,曲線越趨於對稱,當自由度趨於無窮,卡方分佈趨於正態分佈。

卡方檢驗

卡方檢驗是一種假設檢驗方法,用於比較兩個分類變量的關聯性,基本思想是比較理論頻數與實際頻數的吻合程度。例如,在選舉調查中,選民可能按性別(男性或女性)和投票偏好(民主黨,共和黨或獨立團體)進行分類。我們可以使用卡方檢驗來確定獨立性,以確定性別是否與投票偏好相關

變量A(A1,A2),B(B1,B2)獨立性假設
H0:變量A與變量B之間獨立no association,
H1:變量A與變量B之間存在相關性。

在獨立性前提下,P(B1/A1)=P(B1/A2)=P(B1)計算理論頻數,偏差(實際頻數-理論頻數)的平方與理論頻數的加和記作卡方值。
由自由度判斷卡方值大小,自由度=(行數-1)(列數-1)。如果卡方值小,則實際頻數與理論頻數偏差小,檢驗假設H0成立,否則檢驗假設不成立。
當卡方值≥卡方值[α]時,p≤0.05拒絕H0,接受H1;當卡方值<卡方值[α]時,p>0.05,尚沒有理由拒絕H0.

實例

下面是工種與患高血壓人數的列聯表,我們希望知道這個統計結果能否說明患高血壓與工種之間存在某種聯繫。
在這裏插入圖片描述

from scipy.stats import chi2_contingency
table = [[386,895],[65,322]]
chi2,pval,dof,expected = chi2_contingency(table)
print('理論數列聯表如下\n',expected)
print("Null Hypothesis: prevalence rate(B) of diffent job(A) is same,α=0.05")
if pval < 0.05:
	print("Reject the Null Hypothesis. prevalence rate(B) of diffent job(A) is Diffent.")
else:
	print("Accept the Null Hypothesis.")

在這裏插入圖片描述
結論:不同職業的高血壓患病率極顯著意義,工人的高血壓患病率顯著高於農民。

資料:
卡方檢驗
《python科學計算第二版》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章