图 | 源网络文 | 5号程序员

数据假设检验是数理统计学中根据一定假设条件由样本推断总体的一种方法。

那我们啥时候会用到假设检验呢?

大多数情况下,我们无法分辨事物的真伪或者某种说法是否正确,这时就需要进行假设,然后对我们的假设进行检验。

比如,我们想知道被告人是不是有罪,就可以通过假设检验进行判断。

基本思路包括4步逻辑:

问题是什么?→证据是什么?→判断标准是什么?作出结论。

首先,我们要明确问题是什么。

问题:检验被告人是否有罪。

根据这个问题,我们可以提出两个互为相反的假设:

零假设:被告人没有罪。

备选假设:被告人有罪。

有了假设,接下来需要明确证据是什么。

根据中心极限定理,足够多合理的样本可以代表总体,所以我们要找到合理的样本数据来做证据。

然后,进一步明确判断标准,绝不能冤枉一个好人,但也不可放过一个坏人。

因为我们定的零假设是:被告人没有罪。所以这里定的标准是,如果被告人没有罪的概率<=5%,那么就直接否定了零假设,也就是被告人没有罪不成立。

这里听着不太顺,被告人没有罪的概率<=5%,其实就是被告人有罪的概率大于95%,所以被告人有很大可能性有罪,因此把零假设否定了。

这里用于做出决策的标准5%,在假设检验里叫做“显著水平”,用符号α(Alpha)表示,是一个概率值。

最后,被告人到底有没有罪呢?

根据样本证据计算出的p值与判断标准α比较下就可以了:

如果p< =α,那么拒绝零假设,也就是备选假设成立;

如果p>α,那么零假设成立。

这就是数据假设检验的基本思路,是我们探索数据的重要部分。

从案例中可以看出,P值是判断的关键。若P值很小,如P<0.05,就可以理解为拒绝零假设犯错误的可能性小于5%,即这个可能性发生的概率很小,可以拒绝。

Python也可以进行假设检验,这里给大家介绍4种简单常用的假设检验:数据正态性检验、独立样本t检验、单因素方差分析相关性检验

01

K-S检验

判断一组数据是否服从正态分布,最有说服力的方法就是使用正态性检验

K-S检验的零假设和备选假设如下:

零假设:样本的总体分布服从某特定分布(可以指定为正态分布);

备选假设:样本的总体分布不服从某特定分布。

下面就用Scipy库中的stats模块进行K-S检验,代码如下:

importnumpy as npimportmatplotlib.pyplot as pltfromscipy import stats%matplotlibinline%configInlineBackend.figure_format = "retina"frommatplotlib.font_manager import FontPropertiesfonts= FontProperties(fname="C:\Windows\Fonts\SimHei.ttf", size=14)np.random.seed(19)x= stats.norm.rvs(size=100)plt.figure()plt.hist(x,bins=20,color="red")plt.xlabel("x")plt.ylabel("frequenry")plt.title("histplot")plt.show()stats.kstest(x,"norm")

在上面的代码中,先使用np.random.seed()指定了生成随机数的种子,再用stats.norm.rvs()生成100个服从正态分布的随机数,然后绘制直方图,最后使用stats.kstest()进行K-S检验。

由图像可看出该组数据符合正态分布的钟形。

从输出的检验结果也可以看出,pvalue=0.9588,说明如果拒绝了零假设就有95%的可能性是犯错的,所以不能拒绝零假设,只能认为该组数据是服从正态分布的。

02

独立样本t检验

正态性检验是对一组数据分布的检验,那如果有两组数据,需要判断两组数据的平均值是否相等怎么办呢?

可以使用stats.ttest_ind()函数来完成!

独立样本t检验的零假设和备选假设如下:

零假设:两独立样本具有相同的均值;

备选假设:两独立样本的均值不同。

下面用数据举例:

np.random.seed(125)x1= stats.norm.rvs(loc=5,scale=10,size=500)x2= stats.norm.rvs(loc=5,scale=10,size=500)plt.figure()plt.hist(x1,bins=20,color="red",alpha=0.5)plt.hist(x2,bins=20,color="blue",alpha=0.5)plt.xlabel("x")plt.ylabel("frequenry")plt.title("histplot")plt.show()stats.ttest_ind(x1,x2)

上面的代码也是先指定随机数种子,然后生成500个均值为5、标准差为10的两组数据x1和x2,最后用stats.ttest_ind()进行独立样本t检验。

从输出结果可以看出,pvalue=0.7602,p值远大于0.05,说明如果拒绝零假设就有76%的可能性犯错,所以只能接受零假设,即两个独立样本具有相同的均值。

03

单因素方差分析

独立样本t检验比较的是两组数据的均值,那如果有好几组数据呢?

面对这种情况,如果想要比较多种因素下各组数据的均值是否有差异,可以使用单因素方差分析,其零假设和备选假设如下:

零假设:各因素的均值相等;

备选假设:各因素的均值不完全相等。

下面我们以鸢尾花数据为例,比较特征sepal_width在3种不同的花下,他们的均值是否相等:

importseaborn as snsimportpandas as pdf= open(r"E:\iris.csv") #每个人文件位置不同Iris= pd.read_csv(f)setosa= Iris["Sepal.Width"][Iris.Species == "setosa"]versicolor= Iris["Sepal.Width"][Iris.Species == "versicolor"]virginica= Iris["Sepal.Width"][Iris.Species == "virginica"]print(stats.levene(setosa,versicolor,virginica))print(stats.f_oneway(setosa,versicolor,virginica))

上面的代码先将鸢尾花数据集中的"Sepal.Width"特征分别分给相应的3种花并定义变量。运行后得到结果如下:

在方差分析之前,首先对3组数据做方差齐性检验(Levene检验),pvalue=0.5555>0.05说明3个数组方差相等,可以进行单因素方差分析。

stats.f_oneway()做单因素方差分析可知pvalue=4.492e-17,远小于0.05,则拒绝零假设,接受备选假设,即3种花的"Sepal.Width"长度不完全相等。

但到这里我们只是知道3种花的"Sepal.Width"长度不完全相等,具体哪些种类不相等我们不知道,这里就可以进行多重比较来获取。

statsmodels.stats.multicomp模块中的pairwise_tukeyhsd()函数就能实现两两变量之间的对比:

fromstatsmodels.stats.multicomp import pairwise_tukeyhsdtukey=pairwise_tukeyhsd(endog=Iris["Sepal.Width"],groups=Iris.Species,alpha=0.05)print(tukey)tukey.plot_simultaneous()

上面输出的结果中,数据表为两两均值比较的结果,最后reject指标都为True,说明3种花两两之间均有差异,并用meandiff列出了差值大小。

第二个图是多重比较中3种花均值所在的位置和置信度为95%的置信区间,由图可知versicolor的平均长度最短,setosa的平均长度最长。

04

相关性检验

变量之间的相关性是衡量数据之间是否存在有线性关系的重要属性,检验数据是否具有线性相关可以使用函数stats.pearsonr()函数。

下面仍然以鸢尾花数据为例,对变量sepal_length和petal_length进行皮尔逊相关性检验。

r,pval= stats.pearsonr(Iris["Sepal.Length"],Iris["Petal.Length"])print("相关系数:",r)print("相关系数显著性检验p-value:",pval)

输出结果如下:

从输出结果可以看出相关系数大小为0.8718,且p-value=1.039e-47远小于0.05,说明线性相关关系成立

除了上面介绍的4种常用假设检验以外,假设检验的内容还有很多,如卡方检验等,这里就不一一介绍了,感兴趣的小伙伴可以自行查阅相关资料。

下一次,我们将说说数据间的关系,简单的使用Python来分析一些常用的距离度量方式。

你确定不关注我一波?!

- END -

python 相关性检验怎么计算p值_机器学习:数据的准备和探索——数据假设检验...相关推荐

  1. python 相关性检验怎么计算p值_相关性分析之Predictive Power Score(PPS)

    常用相关性分析方法 在分析特征间相关性时,常使用的方法是 pandas.DataFrame.corr : DataFrame.corr(self, method='pearson', min_peri ...

  2. python 相关性检验怎么计算p值_不会Python进行时间序列预测?不要紧,大神来教你...

    作者:Leandro Rabelo译者:李洁整理:Lemonbit本文内容较长,较为详细的阐述了进行时间序列预测的步骤,有些内容可能暂时用不到或者看不懂,但不要紧,知道有这么一个概念,后续碰到的时候, ...

  3. python 相关性检验怎么计算p值_收藏 | 大神教你用Python预测未来:一文看懂时间序列...

    (由Python大本营付费下载自视觉中国) 作者 |  Leandro Rabelo 译者 | 李洁 整理 | Lemonbit 出品 | Python数据之道 本文内容较长,较为详细的阐述了进行时间 ...

  4. python 相关性检验怎么计算p值_生信工具 | 相关性热图还能玩出什么花样?

    关于相关性,表示数据之间的相互依赖关系.但需要注意,数据具有相关性不一定意味着具有因果关系. 相关性在组学数据挖掘中应用非常广,如样本的重复检验.基因的共表达分析.微生物群落的共发生网络分析等. 相关 ...

  5. 分计算iv值_机器学习-变量筛选之IV值和WOE

    1.IV值的用途 IV,即信息价值(Information Value),也称信息量. 目前还只是在对LR建模时用到过这两个关键指标,当我们使用决策树时可以通过限制树的深度间接筛选掉一些对于当前任务贡 ...

  6. python利用以下公式求π的值_使用Python计算 π 值

    π是一个无数人追随的真正的神奇数字.我不是很清楚一个永远重复的无理数的迷人之处.在我看来,我乐于计算π,也就是计算π的值.因为π是一个无理数,它 是无限的.这就意味着任何对π的计算都仅仅是个近似值.如 ...

  7. 数据特征分析之 python相关性检验(转载学习)

    数据特征分析技能-- 相关性检验 相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度  一般常用四种方法:  - 画图判断  - pearson(皮尔逊)相关系 ...

  8. python字典修改键所对应值_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  9. python相关性分析后怎样删除特征_震惊!数据分析还能这样做?

    原标题:震惊!数据分析还能这样做? 数据分析概述 数据分析完整工作流程 关于数据分析的大体流程这里以图形的形式展现给大家,就不做过多的讲述. 数据探索与相关性分析 这一部分是直接从数据分析工作流程中的 ...

最新文章

  1. 处理数字_2_计算某列的平均值
  2. step3 . day1 数据结构之线性表顺序表
  3. C语言进阶——全局变量
  4. 上传一个 游戏server架构图
  5. 展示面--存储学习总结于2021年
  6. Spring入门(1)
  7. java 中的集合_JAVA中的集合
  8. CNN(卷积神经网络)
  9. 联网时浏览器跳出MSN中国
  10. Ubuntu录屏及gif制作
  11. 用matlab绘制圆锥曲线,如何用几何画板绘制圆锥曲线?
  12. win10重置网络命令_Win10怎么重置网络 Win10重置网络命令使用方法
  13. linux下木马程序病原体的制作和运行
  14. 关于ST的一些库的说明(附标准库下载地址)
  15. 编写一个c语言 输入abc 输出最大数,C语言 输入abc,求最大数
  16. 关于华为昆仑关键业务服务器
  17. 拓嘉辰丰:怎样把买家秀做好促进转化
  18. w10计算机配置在哪看,win10如何查看电脑配置参数(一招查看电脑配置好坏)
  19. 边听边记-财经郎眼-国企改革 大风已起 151026
  20. ​在沈炜新春致辞中寻找vivo的成功之道

热门文章

  1. bytes[i] 0xf0是怎么运算的
  2. 80、443端口被占用,Pid=4,进程无法杀死,拒绝访问 解决方案
  3. fxp连接服务器显示密码错误,flashfxp连接提示连接失败 ()与列表错误
  4. 世界上第一台电子计算机ENIAC诞辰60周年--(1946.2.15-2006.2.15)
  5. h5监听浏览器返回,关闭浏览器
  6. 10开根号,如何求?
  7. Mybatis注解开发的搭建
  8. solr的optimize()的作用
  9. linux上传下载工具lrzsz
  10. C语言中,截取函数整理