卡方优度检测 (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

【拓展】

拟合优度检验
独立性检验
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容