查看原文
其他

基于Python的假设检验实现

爬虫俱乐部 Stata and Python数据分析 2023-02-21

本文作者:谭 可,中南财经政法大学统计与数学学院

本文编辑:刘光中

技术总编:孙一博

Stata and Python 数据分析

     由李春涛教授团队成员司海涛薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!


购书链接:


爬虫俱乐部Stata基础课程Stata进阶课程Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~

引言假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。具体做法是:根据问题的需要对所研究的总体作某种假设,记作H0;选取合适的统计量,这个统计量的选取要使得在假设H0成立时,其分布为已知;由实测的样本,计算出统计量的值,并根据预先给定的显著性水平进行检验,作出拒绝或接受假设H0的判断。常用的假设检验方法有u-检验法、t检验法、χ2检验法(卡方检验)、F-检验法等。在生活中,假设检验能帮我们解决很多问题。例如可以判断一个产品质量合不合格,两个总体之间是否有显著差异,以及我们常用的AB测试,其背后的原理就是统计学中的假设检验。下面让我们一起来了解下假设检验及Python中它的实现!
一、假设检验

1、基本思想

假设检验的基本思想是小概率反证法思想。小概率思想是指小概率事件(P<0.01或P<0.05)在一次试验中基本上不会发生。反证法思想是先提出假设(检验假设H0),再用适当的统计方法确定假设成立的可能性大小,如可能性小,则认为假设不成立,若可能性大,则还不能认为不假设成立。

2、基本步骤

(1)根据实际问题提出原假设H0和备择假设H1。(2)选择适当的显著性水平α(通常取α=0.05或α=0.01)以及样本容量n。(3)构造合适的检验统计量,常用的参数统计量有z统计量、t统计量、χ2统计量和F统计量等。(4)根据检验统计量和显著性水平,找出拒绝域。(5)根据样本观测值,计算出检验统计量的观测值。(6)做出判断。若检验统计量的观测值落在拒绝域,则拒绝原假设H0;否则不拒绝原假设H0。


二、假设检验——Python实现

■ Statsmodels是Python中,用于实现统计建模和计量经济学的工具包,主要包括描述统计、统计模型估计和统计推断。

■ Scipy是一个数学、科学和工程计算Python工具包,主要包括统计,优化,整合,线性代数等等与科学计算有关的包。

下面以Python自带的鸢尾花数据集为例,来实现假设检验。

1、导入数据
import pandas as pdimport numpy as npfrom sklearn.datasets import load_iris
# 导入IRIS数据集iris = load_iris()iris = pd.DataFrame(iris.data, columns=['sepal_length', 'sepal_width', 'petal_legth', 'petal_width'])print(iris)输出的鸢尾花属性特征数据如下:

由输出结果可知,样本量为150,为大样本集。2、一个总体均值的z检验

问题:鸢尾花花瓣长度的总体均值是否为4.1?

提出假设:

H0:鸢尾花花瓣平均长度是4.1

H1:鸢尾花花瓣平均长度不是4.1

由于该数据集为大样本,故采用z检验。

import statsmodels.stats.weightstats#进行单样本z检验z, p = statsmodels.stats.weightstats.ztest(iris['petal_legth'], value=4.1)print(z, p)输出:

由输出结果可知,z统计量等于-2.37,p值为0.018,小于显著性水平0.05,故拒绝原假设,即鸢尾花花瓣平均长度不是4.1。

3、一个总体均值的t检验

问题:现取总体中前20个样本的数据记为iris20数据集,探究前20个样本中鸢尾花花瓣长度的总体均值是否为1.4?

提出假设:

H0:鸢尾花花瓣平均长度是1.4

H1:鸢尾花花瓣平均长度不是1.4

由于此时样本量为20,故为小样本,而总体方差未知,故采用t检验。

import scipy.stats
iris20=iris.iloc[:20] #前20个样本t, p = scipy.stats.ttest_1samp(iris20['petal_legth'], popmean=1.4)print(t,p)

输出:

由输出结果可知,t统计量等于1.07,p值为0.297>0.05,接受原假设,即鸢尾花花瓣平均长度为1.4。4、两样本t检验

问题:对于iris20数据集,现将总体分为两类,花瓣宽度小于0.25的为一类,剩下的为另一类,两者的花瓣宽度是否存在差异?

提出假设:

H0: 两种鸢尾花花瓣宽度一样

H1: 两种鸢尾花花瓣宽度不一样

下面使用scipy和statsmodels两种方式来解决该问题。

(1)scipy 方法实现
#两样本t检验 scipy.stats.ttest_ind( a,b:两组数值 equal_var = true #两组方差是否相同,方差不同时给出welch's t检验结果 nan_policy = propagate #缺失值的处理方式 propagate #返回nan raise #是否抛出错误 omit #忽略nan)两样本的t检验需要检验样本的方差齐性检验:
# 常用的方差齐性检验
scipy.stats.bartlett() #bartlett方差齐性检验scipy.stats.levene() #levene方差齐性检验,该结果针对非正态总体也稳健,更常用两样本t检验具体步骤的代码如下:
# 取两个样本iris_1 = iris20[iris20.petal_width >= 0.25]iris_2 = iris20[iris20.petal_width < 0.25]print(np.mean(iris_1['petal_width']))print(np.mean(iris_2['petal_width']))
t1, p1 = scipy.stats.levene(iris_1['petal_width'], iris_2['petal_width']) #方差齐性检验t2, p2 = scipy.stats.ttest_ind(iris_1['petal_width'], iris_2['petal_width']) #两样本t检验
print(t1, p1)print(t2, p2)

由结果可得,样本一的花瓣宽度的均值为0.343,样本二的花瓣宽度的均值为0.177。方差齐性检验结果p值为0.38>0.05,接受原假设,即两个样本方差齐性。两样本t检验中,p值为0.00,小于0.05,拒绝原假设,即两个样本均值存在差异,两种鸢尾花花瓣宽度不一样。(2)statsmodels方法实现

statsmodels也可以实现t检验的所有功能。

# 两样本的statsmodels实现
d1 = statsmodels.stats.weightstats.DescrStatsW(iris_1['petal_width'])d2 = statsmodels.stats.weightstats.DescrStatsW(iris_2['petal_width'])comp = statsmodels.stats.weightstats.CompareMeans(d1, d2)print(comp.ttest_ind())  # 输出结果为(统计量 p值 自由度)

由结果可知,得到的统计量、p值都与scipy实现结果一致。
读完本文,是不是基本掌握了利用Python实现常用的假设检验呢?大家也可以自己尝试着解决更多的假设检验问题。今天给大家分享的这篇文章到这里就结束了,希望对大家有所帮助!(END)重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。




对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!



往期推文推荐      Stata与MySQL交互--基础操作    

       Jupyter Notebook中的魔术命令     《Stata正则表达式》由中国金融出版社出版发行          匿名函数lambda到底怎么用?

Stata绘图系列—NBER Working paper仿图

       Camelot:从PDF中提取表格数据      Stata之计算财务指标——融资约束

      列表生成式|让你的代码更简洁

Stata绘图系列——玩转绘图通用选项之坐标轴

       玩转地图的好帮手--pyecharts

       爬虫俱乐部又又又输送了一位研究助理!!!      【数据分析】一文教你玩转DataFrame

 震惊,爬虫俱乐部竟是这样运营答疑群的?!

【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新

带你玩转Stata编码一言不合就teamviewer

【基础篇】循环语句的continue与break

        教你用Stata爬取全国疫情风险地区数据,原来这么简单!【数据结构】集合的使用方法      Stata爬取七普人口数据     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可

以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存