利用python进行假设假设检验

这篇文章通过一个实列来介绍如何利用python来进行假设检验。上一篇文章中,我们介绍了假设检验就是将所要验证的假设分成两个对立的假设,然后验证哪一个假设成立的概率要大一点。这里我将会介绍专业人员验证假设的两种方法:

  1. 第一种方法,利用置信区间。首先模拟统计量的抽样分布,然后对比我们的假设和抽样分布中的情况是否一致。
  2. 第二种方法,模拟零假设。首先我们假设零假设为真,然后依此模拟统计量分布,最后观察得到的数据是否一致。

数据介绍和确立假设

本文利用的数据是一份关于人们喝咖啡的数据,包含每一个人的身高、是否喝咖啡等信息。这里展示了头部的5条数据:
在这里插入图片描述
我们好奇的一个问题是这些喝咖啡人的平均身高是否大于70英寸(1.75米),也就是我们想验证这个总体中的身高均值是否大于70英寸。所以我们可以设立假设有(μ代表身高的平均值):

H0: μ≤70
H1: μ>70

利用置信区间

为了验证关于总体参数的假设,我们需要从总体中抽取样本进行检验。第一个方法是通过构造统计量的抽样分布,查看置信区间,并与假设进行对比。具体过程可以概括为:

  1. 对从总体中抽取出来的样本进行多次自助抽样,得到一个样本集。
  2. 对样本集中,每一次自助抽样的样本,计算其中身高的均值。
  3. 用这些均值构建样本均值的抽样分布。
  4. 根据特定的置信水平,从抽样分布中,为总体均值确定置信区间。

具体代码实现过程如下:

  1. 先导入相应的包
import pandas as pd
import numpy ad np
import matplotlib.pyplot as plt
%matplotlib inline
  1. 导入数据
df=pd.read_csv('coffee_dataset.csv')
  1. 从数据中随机抽取150个样本
np.random.seed(42) #设置种子
sample_df=df.sample(150)
  1. 对样本重复进行10000次自助抽样,并计算每个样本的身高均值
means=[]    #存储每一次计算得到的均值
for _ in range(10000):
    bootsample=sample_df.sample(150,replace=True)  #replace=True时为自助抽样,也就是有放回的抽样
    means.append(bootsample.height.mean())
  1. 根据抽样分布,以95%的置信度,确定总体均值满足的置信区间
low,high=np.percentile(means,2.5),np.percentile(means,97.5)

low和high分别代表置信区间的下限和上限

  1. 可视化置信区间
plt.hist(means)
plt.axvline(x=low,color='r',linewidth=2)
plt.axvline(x=high,color='r',linewidth=2)

结果为:
在这里插入图片描述
可以看到,抽样分布大致为正太分布。为什么会服从正太分布呢?因为根据中心极限定理,在样本量趋于无限的时候,样本均值服从正态分布。上面的图像是在进行10000次自助抽样时候的状态,随着抽样次数的增加,图像会越来越趋近正太分布。
另外,95%的置信度下,置信区间的范围大致为67-68.25之间。因此我i们看到,抽样分布95%以上的值都小于70,所以我们应该接受零假设,也就是认为总体的平均身高小于70英寸。

模拟零假设

上一部分我们采用置信区间,判断样本计算的统计量值是否在置信区间里面,以此来判断是否接受原假设。这里我们采用另外一种方式来判断是否接受原假设。我们知道当样本容量足够大时,样本均值服从均值为总体均值,方差为样本均值方差的正态分布。那么我们就可以,模拟零假设成立下的统计量的抽样本分布,并根据这个分布计算P值,以此来判断是否接受零假设。关于P值,可以参看我的另一篇文章《一文详解假设检验、两类错误和p值》。下面我介绍具体的实现方法:
同样首先导入相应的包和数据:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
df=pd.read_csv('coffee_dataset.csv')

接着从数据中抽取150个样本,这是把原数据当成总体,而对总体进行抽样的过程:

np.random.seed(42)
sample_df=df.sample(150)

对样本进行10000次自助抽样,并计算均值:

means=[]    #存储每一次计算得到的均值
for _ in range(10000):
    bootsample=sample_df.sample(150,replace=True)  #replace=True时为自助抽样,也就是有放回的抽样
    means.append(bootsample.height.mean())

计算样本统计量的方差,并在假设零假设成立下,模拟正态的抽样分布:

null_vals=np.random.normal(70,np.std(means),10000)

可视化图形:

plt.hist(null_vals)

在这里插入图片描述
计算抽样得到的样本均值:

sample_mean=sample_df.height.mean()

计算p值,p值其实就是基于备择假设,比样本统计量更极端值的比例:

(null_vals>sample_mean).mean()

在这里插入图片描述

在该例的假设中,H1的假设为:

H1: μ>70

所以在基于H1的假设下,更偏向极端值的就是抽样分布中大于样本计算出来的统计量值的比例。这就是p值,值越大我们越不能拒绝零假设。上面计算的值为1,所以我们无法拒绝原假设。这个结果也和上部分利用置信区间得到的结论一样。这里我们给出通过模拟零假设进行假设检验的一般过程:

  1. 计算实际从数据的抽样中,得到的统计量的数值
  2. 模拟零假设中得出的统计量数值
  3. 对比统计量和零假设中的数值
  4. 根据备择假设,计算P值
  • 9
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
进行假设检验分析时,可以使用Python进行操作。但是需要注意的是,使用Python进行假设检验可能效率不够高,建议使用专门的统计软件如SPSS进行分析。 假设检验是对总体参数提出一个假设,并利用样本信息来验证这个假设是否成立。在假设检验中,通常会设置两个假设,一个是原假设(H0),也称为零假设,一般是统计者想要拒绝的假设。另一个是备择假设(H1),是统计者想要接受的假设。 在假设检验中,存在两种错误。一种是弃真错误,也称为第一类错误或α错误,指的是原假设是真实的,但通过样本估计总体参数时却拒绝了原假设。弃真错误的概率通常表示为α,取值越小,犯弃真错误的概率越小。另一种是取伪错误,也称为第二类错误或β错误,指的是原假设实际上是不真实的,但通过样本估计总体参数时却承认了原假设。取伪错误的概率表示为β。 综上所述,可以使用Python进行假设检验分析,但为了提高效率,推荐使用专门的统计软件如SPSS进行分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [利用python进行假设检验](https://blog.csdn.net/qq_45626019/article/details/107997683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值