卡方 python_卡方优度检测 (Python 实现) --基于jupyter
卡方獨立性檢驗
import numpy as np
from scipy.stats import chi2_contingency # 列聯表分析
from scipy.stats import chi2 # 卡方分布
(2)參數說明
【輸入】:
參數
描述
alpha
置信度,用來確定臨界值;
data
數據,請使用numpy.array數組;
【輸出】:
參數
描述
CMIN
卡方值,也就是統計量;
p
P值(統計學名詞),與置信度對比,也可進行假設檢驗,P值小于置信度,則拒絕原假設;
freedom
自由度;
re
判斷變量,1表示拒絕原假設,0表示接受原假設;
prediction_value
原數據數組同維度的對應理論預測值(預測結果);
def chi2_independence(alpha, data):
CMIN, p, dof, prediction_value = chi2_contingency(data)
if dof == 0:
print('自由度應該大于等于1')
elif dof == 1:
cv = chi2.isf(alpha * 0.5, dof)
else:
cv = chi2.isf(alpha * 0.5, dof-1)
if CMIN > cv:
re = 1 # 表示拒絕原假設
else:
re = 0 # 表示接受原假設
return CMIN, p, dof, re, prediction_value
# 測試
alpha1 = 0.005 # 置信度,常用0.01,0.05,用于確定拒絕域的臨界值
data1 = np.array([[43, 49,22,114], [8, 2,5,15],[47,44,30,121]])
data2 = np.array([[43, 49,22], [8, 2,5],[47,44,30]]) # # 插入數據(用于測試)
CMIN, p, freedom, re, prediction_value = chi2_independence(alpha1, data2)
print("卡方值:\n",CMIN)
print("P值:\n",p)
print("自由度:\n",freedom)
print("判斷變量:\n",re)
print("原數據數組同維度的理論預測值(預測結果):\n",prediction_value)
1.png
卡方擬合性檢驗?
卡方檢驗能檢驗單個多項分類名義型變量各分類間的實際觀測次數與理論次數之間是否一致的問題,這里的觀測次數是根據樣本數據得多的實計數,理論次數則是根據理論或經驗得到的期望次數。
這一類檢驗稱為擬合性檢驗。 其自由度通常為分類數減去1,理論次數通常根據某種經驗或理論。
總而言之,卡方擬合度檢驗用于判斷不同類型結果的比例分布相對于一個期望分布的擬合程度。
卡方擬合性檢驗適用于變量為類別型變量的情況。
# 導如相關庫
import numpy as np
from scipy.stats import chisquare
from scipy.stats import chi2 # 卡方分布
(1)假設檢驗重要知識
H0: 類別A與B的比例沒有差異;
H1:類別A與B的比例有差異;
若卡方值大于臨界值,拒絕原假設,表示A與B不相互獨立,A與B相關;
函數中re返回為1表示拒絕原假設,0表示接受原假設;
(2)參數說明
【輸入】:
參數
描述
alpha
置信度,用來確定臨界值;
data
數據,使用numpy.array數組;
sp
表示輸入數組的形狀參數,默認為一維;
【輸出】:
參數
描述
chis
卡方值,也就是統計量;
p_value
P值(統計學名詞),與置信度對比,也可進行假設檢驗,P值小于置信度,即可拒絕原假設;
critical_value
拒絕域臨界值;
freedom
自由度;
result
判斷變量,1表示拒絕原假設,0表示接受原假設;
(3)應用場景
要求樣本含量應大于40,且每個格子中的理論頻數最好大于5;
def chi2_fitting(data, alpha, sp=None):
chis,p_value = chisquare(data, axis=sp)
i, freedom = data.shape # freedom為自由度
if freedom == 0:
print('自由度應該大于等于1')
elif freedom == 1:
critical_value = chi2.isf(alpha * 0.5, freedom)
else:
critical_value = chi2.isf(alpha * 0.5, freedom - 1)
if chis > critical_value:
result = 1 # 表示拒絕原假設
else:
result = 0 # 表示接受原假設
return chis, p_value, critical_value, freedom-1, result
# 擬合測試
data1 = np.array([[43, 49,22], [8, 2,5],[47,44,30]]) # 插入數據
alpha1 = 0.05
chis1, p_value1, critical_value, dof, result1 = chi2_fitting(data1, alpha1)
print("卡方值: ",chis1)
print("P值: ",p_value1)
print("拒絕域臨界值:",critical_value)
print("自由度: ",dof)
print("判斷變量(1表示否定原假設,0表示肯定原假設): ",result1)
2.png
導入房價數據集
使用卡方獨立性檢驗和卡方擬合性檢驗進行相關預測。
### 導入數據集
# 讀取房價數據
import pandas as pd
def load_housing_data():
return pd.read_csv('./housing.csv',encoding='gbk')
housing = load_housing_data()
# # 查看前五行數據
housing.head()
housing.describe() ## 數據集描述;
## 居民收入: income
income = housing['median_income']
income
## 房屋價值:house_value
## 房屋年齡:housing_median_age
## 房屋面積 :total_rooms
house_value = housing['median_house_value']
house_value
housing_median_age = housing['housing_median_age']
housing_median_age
total_rooms = housing['total_rooms']
total_rooms
(1) 探究收入與房價的關系
# 數據: 探究收入與房價的關系
data2 = np.array([income,house_value]) # 數據: 探究收入與房價的關系
CMIN, p, freedom, re, prediction_value = chi2_independence(alpha1, data2)
print("卡方值: ",CMIN)
print("P 值: ",p)
print("自由度: ",freedom) #
print("判斷變量(1表示否定原假設,0表示肯定原假設): \n",re)
print("原數據數組同維度的理論預測值(預測結果):\n",prediction_value)
print("------------分隔線----------------")
print("【卡方擬合性檢驗】:")
alpha1 = 0.05
chis1, p_value1, critical_value, dof, result1 = chi2_fitting(data2, alpha1)
print("卡方值: ",chis1)
print("P值: ",p_value1)
print("拒絕域臨界值:",critical_value)
print("自由度: ",dof)
print("判斷變量(1表示否定原假設,0表示肯定原假設): ",result1)
3.png
探究房齡與房價的關系
# 數據: 探究房齡與房價的關系
data2 = np.array([housing_median_age,house_value]) # 數據: 探究收入與房價的關系
CMIN, p, freedom, re, prediction_value = chi2_independence(alpha1, data2)
print("卡方值: ",CMIN)
print("P 值: ",p)
print("自由度: ",freedom) #
print("判斷變量(1表示否定原假設,0表示肯定原假設): \n",re)
print("原數據數組同維度的理論預測值(預測結果):\n",prediction_value)
print("------------分隔線----------------")
print("【卡方擬合性檢驗】:")
alpha1 = 0.05
chis1, p_value1, critical_value, dof, result1 = chi2_fitting(data2, alpha1)
print("卡方值: ",chis1)
print("P值: ",p_value1)
print("拒絕域臨界值:",critical_value)
print("自由度: ",dof)
print("判斷變量(1表示否定原假設,0表示肯定原假設): ",result1)
4.png
探究房屋面積與房價的關系
# 數據: 探究房屋面積與房價的關系
data2 = np.array([total_rooms,house_value]) # 數據: 探究收入與房價的關系
CMIN, p, freedom, re, prediction_value = chi2_independence(alpha1, data2)
print("卡方值: ",CMIN)
print("P 值: ",p)
print("自由度: ",freedom) #
print("判斷變量(1表示否定原假設,0表示肯定原假設): \n",re)
print("原數據數組同維度的理論預測值(預測結果):\n",prediction_value)
print("------------分隔線----------------")
print("【卡方擬合性檢驗】:")
alpha1 = 0.05
chis1, p_value1, critical_value, dof, result1 = chi2_fitting(data2, alpha1)
print("卡方值: ",chis1)
print("P值: ",p_value1)
print("拒絕域臨界值:",critical_value)
print("自由度: ",dof)
print("判斷變量(1表示否定原假設,0表示肯定原假設): ",result1)
5.png
【拓展】
擬合優度檢驗
獨立性檢驗
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的卡方 python_卡方优度检测 (Python 实现) --基于jupyter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python网络爬虫实战 吕文翔_实战P
- 下一篇: js实现下拉框多选_bootstrap基