本文作者:谭 可,中南财经政法大学统计与数学学院
本文编辑:刘光中
技术总编:孙一博
Stata and Python 数据分析
由李春涛教授和团队成员司海涛、薛原编写的《Stata正则表达式及其在财务数据中的应用》终于和大家见面啦!

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

■ Statsmodels是Python中,用于实现统计建模和计量经济学的工具包,主要包括描述统计、统计模型估计和统计推断。
■ Scipy是一个数学、科学和工程计算Python工具包,主要包括统计,优化,整合,线性代数等等与科学计算有关的包。
下面以Python自带的鸢尾花数据集为例,来实现假设检验。
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)

问题:鸢尾花花瓣长度的总体均值是否为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。
问题:现取总体中前20个样本的数据记为iris20数据集,探究前20个样本中鸢尾花花瓣长度的总体均值是否为1.4?
提出假设:
H0:鸢尾花花瓣平均长度是1.4
H1:鸢尾花花瓣平均长度不是1.4
由于此时样本量为20,故为小样本,而总体方差未知,故采用t检验。
import scipy.statsiris20=iris.iloc[:20] #前20个样本t, p = scipy.stats.ttest_1samp(iris20['petal_legth'], popmean=1.4)print(t,p)
输出:

问题:对于iris20数据集,现将总体分为两类,花瓣宽度小于0.25的为一类,剩下的为另一类,两者的花瓣宽度是否存在差异?
提出假设:
H0: 两种鸢尾花花瓣宽度一样
H1: 两种鸢尾花花瓣宽度不一样
下面使用scipy和statsmodels两种方式来解决该问题。
#两样本t检验scipy.stats.ttest_ind(a,b:两组数值equal_var = true #两组方差是否相同,方差不同时给出welch's t检验结果nan_policy = propagate #缺失值的处理方式propagate #返回nanraise #是否抛出错误omit #忽略nan)
# 常用的方差齐性检验scipy.stats.bartlett() #bartlett方差齐性检验scipy.stats.levene() #levene方差齐性检验,该结果针对非正态总体也稳健,更常用
# 取两个样本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)

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值 自由度)

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


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
Stata绘图系列—NBER Working paper仿图
玩转地图的好帮手--pyecharts
【数据分析-入门】一看就会!Numpy的创建、索引、切片与更新
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可
以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

