卡方检验(python代码实现)
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章)

医药统计项目QQ:231469242
分类变量检验方法






卡方分布绘图
如果多个符合正态分布的独立随机变量z1,z2,z3.....zk,
z1+z2+z3+....z_k呈现卡方分布,自由度k.
有几个正态分布相加,就有几个自由度

# -*- coding: utf-8 -*-
# Toby QQ:231469242
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
import seaborn as sns
import math,pylab,matplotlib,numpy
from matplotlib.font_manager import FontProperties #设置中文字体
font=FontProperties(fname=r"c:\windows\fonts\simsun.ttc",size=15) n=10 #绘制自由度为n的卡方分布图,n表示生成卡方数组的个数
def Get_chisquareDatas(n):
#标准正太分布
normalDistribution=stats.norm(0,1)
list_data=[]
for i in range(n):
normal_data=normalDistribution.rvs(30)
chisquare_data=normal_data**2
list_data.append(chisquare_data)
return list_data def Plot_chisquare(n):
list_data=Get_chisquareDatas(n)
sum_data=sum(list_data)
plt.hist(sum_data) Plot_chisquare(2)
Plot_chisquare(3)
Plot_chisquare(10)
官方绘图代码
# -*- coding: utf-8 -*- from scipy.stats import chi2
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(1, 1) df = 20
mean, var, skew, kurt = chi2.stats(df, moments='mvsk') #绘制函数的起始点和终止点
#pdf为概率密度函数
#百分比函数(PPF) :the inverse of the CDF. PPF 函数和连续分布函数CDF相逆,
#比如输入哪一个点,可以得到低于等于20的概率?
#ppf(0.01, df)表示输入哪个点,得到概率低于0.01
initial=chi2.ppf(0.01, df)
end=chi2.ppf(0.99, df)
x = np.linspace(initial,end, 100) #概率密度函数用于绘图
ax.plot(x, chi2.pdf(x, df), 'r-', lw=5, alpha=0.6, label='chi2 pdf')
plt.title("df is %d"%df)
plt.show()
卡方检验代码
可汗学院的问题

# -*- coding: utf-8 -*-
'''
卡方公式(o-e)^2 / e
期望值和收集到数据不能低于5,o(observed)观察到的数据,e(expected)表示期望的数据
(o-e)平方,最后除以期望的数据e
''' import numpy as np
from scipy import stats
from scipy.stats import chisquare
list_observe=[30,14,34,45,57,20]
list_expect=[20,20,30,40,60,30] std=np.std(data,ddof=1)
print(chisquare(f_obs=list_observe, f_exp=list_expect))
p=chisquare(f_obs=list_observe, f_exp=list_expect)[1]
'''
返回NAN,无穷小
''' if p>0.05 or p=="nan":
print"H0 win,there is no difference"
else:
print"H1 win,there is difference"
contigency table联立表

测试数据
第一行:草本药1,草本药2,安慰剂
第二行:生病和非生病
H0:草本药和疾病无关系
H1:草本药和疾病有关系
可汗学院计算出来的卡方值2.53;自由度2,显著性0.1,的关键值4.6
卡方值2.53<关键值4.6, H0成立,两者无关系


python代码与可汗学院算出结果一致,此版本体现算法推导过程。缺点就是要自己计算出期望值列表

# -*- coding: utf-8 -*-
'''
卡方公式(o-e)^2 / e
期望值和收集到数据不能低于5,o(observed)观察到的数据,e(expected)表示期望的数据
(o-e)平方,最后除以期望的数据e
联立表contigency table计算
''' from scipy.stats import chisquare list_observe=[34,38,28,50]
list_expect=[29.76,42.2,32.24,45.77] row=2
colume=2 def Contigency_table(row,colume,list_observe,list_expect):
degreeFreedom=(row-1)*(colume-1)
print(chisquare(f_obs=list_observe, f_exp=list_expect,ddof=degreeFreedom))
p=chisquare(f_obs=list_observe, f_exp=list_expect)[1] if p>0.05 or p=="nan":
print"H0 win,there is no difference"
else:
print"H1 win,there is difference" Contigency_table(row,colume,list_observe,list_expect)
此版本不用算出期望值,更加方便,参考的是2*2联立表,自由度=1,critical value=2.7
# -*- coding: utf-8 -*- #独立性检验test for independence,也是卡方检验chi_square
#前提条件:a,b,c,d 必须大于5 #2.706是判断标准(90概率),值越大,越有关,值越小,越无关
def value_independence(a,b,c,d):
if a>=5 and b>=5 and c>=5 and d>=5:
return ((a+b+c+d)*(a*d-b*c)**2)/float((a+b)*(c+d)*(a+c)*(b+d)) #返回True表示有关
#返回False表示无关
def judge_independence(num_independence):
if num_independence>2.706:
print ("there is relationship")
return True
else:
print("there is no relationship")
return False a=34
b=38
c=28
d=50
chi_square=value_independence(a,b,c,d)
relation=judge_independence(chi_square)
python官网版本,更加方便和科学
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.chi2_contingency.html
import scipy.stats as stats data = np.array([[43,9],
[44,4]])
V, p, dof, expected = stats.chi2_contingency(data)
print(p)



python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)
https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share
卡方检验(python代码实现)的更多相关文章
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- Python 代码风格
1 原则 在开始讨论Python社区所采用的具体标准或是由其他人推荐的建议之前,考虑一些总体原则非常重要. 请记住可读性标准的目标是提升可读性.这些规则存在的目的就是为了帮助人读写代码,而不是相反. ...
- 一行python代码实现树结构
树结构是一种抽象数据类型,在计算机科学领域有着非常广泛的应用.一颗树可以简单的表示为根, 左子树, 右子树. 而左子树和右子树又可以有自己的子树.这似乎是一种比较复杂的数据结构,那么真的能像我们在标题 ...
- [Dynamic Language] 用Sphinx自动生成python代码注释文档
用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...
- 上传自己的Python代码到PyPI
一.需要准备的事情 1.当然是自己的Python代码包了: 2.注册PyPI的一个账号. 二.详细介绍 1.代码包的结构: application \application __init__.py m ...
- 如何在batch脚本中嵌入python代码
老板叫我帮他测一个命令在windows下消耗的时间,因为没有装windows那个啥工具包,没有timeit那个命令,于是想自己写一个,原理很简单: REM timeit.bat echo %TIME% ...
- ROS系统python代码测试之rostest
ROS系统中提供了测试框架,可以实现python/c++代码的单元测试,python和C++通过不同的方式实现, 之后的两篇文档分别详细介绍各自的实现步骤,以及测试结果和覆盖率的获取. ROS系统中p ...
- 让计算机崩溃的python代码,求共同分析
在现在的异常机制处理的比较完善的编码系统里面,让计算机完全崩溃无法操作的代码还是不多的.今天就无意运行到这段python代码,运行完,计算机直接崩溃,任务管理器都无法调用,任何键都用不了,只能强行电源 ...
随机推荐
- 运维LVS-NAT模式理解
一.LVS-NAT模式的工作原理这个是通过网络地址转换的方法来实现调度的.首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个 后端的真实服务器(RS ...
- 使用window10系统搭建完善的Linux开发环境
https://juejin.im/post/5d22e46ee51d45775746b9b1 导读 在使用window系统开发时由于系统环境和线上环境不一致可能导致各种问题,以及部分扩展库只支持li ...
- Redox OS 发布 0.5 版
Redox OS 是一个几乎完全以 Rust 语言编写的通用操作系统及周围生态(例如文件系统.显示服务器及 Rust 版本的 libc).其遵循微内核架构,在一定程度上兼容于 POSIX. 该项目于日 ...
- Qualcomm_Mobile_OpenCL.pdf 翻译-9-OpenCL优化用例的学习
在这一章中,将会用一些例子来展示如何使用之前章节中讨论的技术来进行优化.除了一些小的简单代码片段的展示外,还有两个熟知的图像滤波处理,Epsilon滤波和Sobel滤波,将会使用之前章节中讨论的方法进 ...
- Apache 80跳转443
<VirtualHost *:> ServerName your.domain.com #域名 RewriteEngine on #启用重定向 RewriteCond %{SERVER_P ...
- PAT Basic 1038 统计同成绩学生 (20 分)
本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即学生总人数.随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔.最 ...
- C#实现Base64处理加解密
using System;using System.Text; namespace Common{ /// <summary> /// 实现Base64加密解密 /// ...
- ROPE
#include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> x(a,a + n ...
- web性能优化--算法优化(四)
避免for-in 把数组长度保存在局部变量中 较少迭代次数(Duffs Device) 基于函数的循环比基于循环的迭代消耗性能更多 优化if-else,一般switch比if-else速度快(hash ...
- ZROI 19.08.02 计算几何
1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...
