「医学统计学之二」卡方检验之独立性检验:python的scipy实现

liftword10小时前技术文章3

概念:

1 独立性检验:是对两个或两个以上因子彼此之间是否相互独立做检验时,就要用到卡方检验。

2 列联表中变量独立性的卡方检验,采用python中scipy包的
scipy.stats.chi2_contingency来实现,详细讲解该函数的具体使用细节,举例说明。

举例1:

1 表如下,四格表。

2 特点:理论数T<5但T≥1,并且n≥40,用连续性校正的卡方进行检验。

即n数=55+35+4+12=106>40,T最小为4,T<5但T≥1。

3 代码如下:

from scipy.stats import chi2_contingency

data=[[55, 4], [35, 12]]

#def chi2_contingency(observed, correction=True, lambda_=None)
#校正过的卡方,即correction=True
#out=chi2_contingency(data,True)
out=chi2_contingency(data)  # 默认是矫正的
print(out)

'''
#结果
(5.789316123732822, 0.01612386041580374, 1, array([[50.09433962,  8.90566038],
       [39.90566038,  7.09433962]]))
'''

举例2:

1 想知道吃鸡蛋对小儿肺炎发病率有没有影响。

先假设,H0,吃鸡蛋对患肺炎发病率是没有影响的,即吃鸡蛋和患肺炎是独立无关的。

H1假设:吃鸡蛋和患肺炎是非独立有关的。

2 表如下:

3 特点,理论数T≥5并且总样本量n≥40,用Pearson卡方进行检验。属于典型的四格表,其中n总数>40,T最小32>5。

4
scipy.stats.chi2_contingency不需要矫正,即correction=False,需要特别声明。

5 代码如下:

from scipy.stats import chi2_contingency

data=[[45, 94], [32, 85]]
out=chi2_contingency(data,False)  # 不需要矫正
print(out)

'''
# 结果
(0.762324118459322, 0.3826021729944693, 1, array([[41.80859375, 97.19140625],
       [35.19140625, 81.80859375]]))

'''

6 结果分析:

6.1 显然0.76<3.84(查表得到),所以吃鸡蛋和患肺炎是独立不相关的假设不成立。

6.2 即拒绝H1,接受H0,即H0假设成立:吃鸡蛋和患肺炎有关系,非独立的。但也不是说因为吃了鸡蛋就容易得肺炎。因P=0.383>0.05,无显著统计学差异。

举例3:

1 高级版代码,还是四格表独立性的卡方检验。

2 列联表:

2.1 是观测数据按两个或多个(定型变量)分类时所列出的频数的表,又叫交叉分类数据。

2.2 列联表分析的基本问题:考察各属性之间有无关联,即判断两个属性是否独立。

3 四格表

4 性别与色盲是否相关?

那么:原假设,H0,性别与色盲之间是独立无关系的。

H1,性别与色盲之间是非独立有关系的。

5 代码:

import numpy as np
from scipy.stats import chi2_contingency # 列联表分析
from scipy.stats import chi2 # 卡方分布

def chi2_independence(alpha, data):
   # 无需矫正,虽然默认矫正
   chi2_v, p, dof, prediction_v = chi2_contingency(data,False)
   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 chi2_v > cv:
      re = 1 # 表示拒绝原假设
   else:
      re = 0 # 表示接受原假设
   # 卡方值,p,自由度,0=H0=接受原假设,1=H1=拒绝原假设,预测
   return chi2_v, p, dof, re, prediction_v

alpha = 0.01 # 置信度,常用0.01,0.05,用于确定拒绝域的临界值
# 数据
data = np.array([[534, 66], [380, 19]]) 
out= chi2_independence(alpha, data)

print(out)


6 结果:

(11.979219278083217, 0.0005379711835989079, 1, 1, array([[548.94894895, 51.05105105],[365.05105105, 33.94894895]]))

第一个是卡方值chi2_v≈11.9792>3.84(查表得),故拒绝原假设 H0,接受H1假设,认为性别与视觉非独立有关的。

第二个是P值≈0.0005<0.01,有统计学上显著差异。

第三个是自由度1;第四个是1,提示拒绝原假设,接受H1假设。

以上是个人学习心得,仅供参考,欢迎大家批评指正。

赋诗一首:(巩固一下原创性)

卡方检验很复杂,

医学统计头很大,

跟我用python呀,

省钱省力很简单。

相关文章

Python 和 R 数据分析/挖掘工具互查

写在前面在此总结一些在数据分析/挖掘中可能用到的功能,方便大家索引或者从一种语言迁移到另一种。当然,这篇博客还会随时更新(不会另起一篇,为了方便大家索引),请大家如果有需要收藏到书签中。如果大家已经熟...

Python 裸体检测

人脑知道如何区分穿衣服的人、穿比基尼的人和裸体的人。然后我有一个我无法立即回答的问题:一个简单的程序,几行代码就能知道照片是否裸体吗?让我们进入正题……一个可以知道你是否裸体的人工智能?Nudity...

化学方向:EI源刊实验数据写法

推荐期刊:Journal of Analytical Chemistry- 刊号:ISSN 1061-9348,CN 11-2345/O6- 影响因子:2.1(最新版)- 分区:中科院3区,JCR...

想学好Python数据分析,一定要掌握的重要模块之Statsmodels

Statsmodels是Python中一个功能强大且广泛使用的统计建模和经济计量学库。它允许用户构建各种统计模型,执行假设检验,进行预测,并对模型结果进行详细的诊断和可视化。以下是statsmodel...

R数据分析:倾向性评分匹配实例操作

倾向性评分匹配是一种控制混杂的技巧,本文主要写操作,具体原理大家自己摸索哈。propensity score matching (PSM) is a “statistical matching tec...