python 假设检验

目录

一、为什么要使用假设性检验?

二、假设检验基础原理与使用条件

三、怎么使用?

3.1 假设检验的步骤

1、H0(零假设)和H1(备择假设)

2、计算P值

3、确认显著性水平

3.2 常见的统计量

四、假设检验中存在的两类错误&需要注意的问题

3.1 假设检验中的两类错误

3.2 假设检验中需要注意的问题

六、案例(t检验)

6.1 单样本t检验

6.1.1 scipy 方法实现

6.1.2 statsmodels 方法实现

6.2 两样本t检验

6.2.1 scipy 方法实现

6.2.2 statsmodels 方法实现

6.3 配对t检验


一、为什么要使用假设性检验?

假设检验是一个工具,能够穿越复杂的现象,得到一个靠谱的结论。

比如去医院检查身体,医生会先假设这个人没有病,然后通过一系列检查,看看能不能找到患者的症状。

二、假设检验基础原理与使用条件

1、概率分布是假设检验的基础:对于很多复杂的随机事件,需要把随机事件的概率分布图拿出来,并根据在图中位置确定P值的大小。只有这样,才能和显著性水平比较,才能判断H0能不能被推翻。假设检验是基于概率的反证法,而要用概率的反证法,就要用到概率分布。

2、假设检验的原理:是如果能够证明一个结论发生的概率特别小,我们就可以推翻这个结论,接受和它相反的结论,这个推论的过程就叫“假设检验”。

3、适用条件:

        1)独立性:各观察值间相互独立,不能相互影响

        2)正态性:理论上要求样本取自正态总体

        3)方差齐性:两样本所对应的总体方差相等

三、怎么使用?

3.1 假设检验的步骤

1、H0(零假设)和H1(备择假设)

这是一对假设,只要互相对立就行,一般情况H0是会被拒绝的假设。

2、计算P值

就是在H0这个假设下,当前现象以及更加极端现象出现的概率。如果P值特别大,我们就不能推翻H0这个假设,更不能去相信H1;而如果P值特别小,就可以认为H0几乎不可能发生,转而去相信H1。

p值得计算中,有单侧和双侧两种

双侧检验:不知道样本所在总体和假定总体的相应指标谁高谁低。得到拒绝结论更困难,因此相应的结果也更稳妥。

单侧检验:在专业上可知所在总体的相应指标不可能更高/更低于假定总体值。

3、确认显著性水平

就是是否推翻H0的边界,一般使用5%,即只要P值小于5%,就推翻H0,相信H1;如果P值大于5%,就没有办法推翻H0。

3.2 常见的统计量

1、z统计量:

2、t 统计量

3、卡方统计量

4、F统计量

四、假设检验中存在的两类错误&需要注意的问题

3.1 假设检验中的两类错误

第一类错误:指在原假设成立的情况下错误低拒绝了原假设;

第二类错误:和第一类错误相反,指没有成功拒绝不成立的原假设。

在假设检验中,如何平衡两类错误。在假设检验的过程中,通常会预先设定犯第一类错误的上限,也就是定义显著性水平 \alpha,1-\alpha 被称为置信度 \alpha一般设定为5%。在显著性水平固定的情况下,认为设定,需要减少第二类错误\beta发生的概率,1-\beta 对应与规避第二类错误的概率,用power表示,也称为检验效能,power 的大小可以通过增加样本量来提高,通常需要power达到80%或者更好的水平。

3.2 假设检验中需要注意的问题

1、忽略小概率事件,假设检验要用个别推导全部,就一定会忽略一些极端的小概率情况,但是小概率事件,不代表一定不会发生。

2、系统性偏差。因为P值可以影响我们最终的结论,而选择不同的样本就会得到不同的P值。只要不断改变样本,就能不断改变P值,最终总能找到一个非常小的P值,也就能推翻原假设,得到一个自己想要的结论。【例子:著名的邮件骗局】

3、显著性水平设置不好会导致错误。显著性水平是约定俗称的,不同的领域,需要选择不同的标准。

4、用错分布导致错误结论。

六、案例(t检验)

6.1 单样本t检验

实例:ccss项目基期的信心数据被设定为100,但这是全部城市的平均水平,请考察基期时广州信心指数均值是否和基准值有差异。

可以使用的方式:scipy、statsmodels 。

6.1.1 scipy 方法实现

import pandas as pd 
ccss = pd.read_excel("CCSS_sample.xlsx", sheet_name = 'CCSS')

数据样式:

 使用scipy.stat包可以实现各种常见的检验方法,但并未配备详细选项,例如不能指定检验的单双侧。

#scipy 中相关参数
scipy.stats.ttest_1samp(
        a:类list格式的样本数值
        popmean:H0所对应的总体均数
)
ccss.query("s0 == '广州' & time == '2022704'") #数据查询
ccss.query("s0 == '广州' & time == '2022704'").index1.describe #数据描述
ccss.query("s0 == '广州' & time == '2022704'").index1.hist #数据直方图

直方图用于展示数据的形态,以上图形大致符合正态分布。

# t检验

from scipy import stats as ss #导入对应的包
ss.ttest_1samp(ccss.query("s0 == '广州' & time == '200704'").index1, 100) #t检验 
#输出结果 Ttest_1sampResult(statistic=-1.3625667518512996, pvalue=0.17611075148299993)
#statistic:统计量值,pvalue:p值 

6.1.2 statsmodels 方法实现

该方法中数据为DescrStatsW,DescrStatsW类中的confint_mean可以计算可信区间,ttest_mean则可直接实现单样本t检验。

# statsmodels中tconfint_mean相关参数

#计算均值的可信区间
DescrStatsW.tconfint_mean(
        alpha = 0.05 #显著性水平
        alternative = 'two-sided' #选择是双侧检验还是还是单侧检验
)

#进行单样本t检验
DescrStatsW.ttest_mean(
        value = 0 #H0所对应的总体均数
         alternative = 'two-sided' | 'larger' | 'smaller'
)
# 使用得第二种方法 statsmodels 这种方法可以计算可信区间,也可以实现单样本的t检验

from statsmodels.stats import weightstats as ws 

test_samp_data = ccss.query("s0 == '广州' & time == 200704").index1  #样本数据

des = ws.DescrStatsW(test_samp_data) #使用该检验数据必须是DescrStatsW类 
des.tconfint_mean() #计算可信区间,默认95% 对应的参数 alpha = 0.05 alternative = 'two-sided'
#输出结果 (93.03590418536487, 101.29354984884586)

des.ttest_mean(100) #默认是双侧
#输出结果 (-1.3625667518512996, 0.17611075148299993, 99.0) 分别为t值、p值、自由度

des.ttest_mean(100,'smaller') #单侧检验
#输出结果 (-1.3625667518512996, 0.08805537574149996, 99.0) t值和双侧检验相同,p值是双侧检验的一半 

6.2 两样本t检验

案例:研究不同婚姻状况的信心指数均值可能存在差异。

两样本的t检验需要检验样本的方差齐性检验。

同样可以使用scipy和statsmodels两种方式 。

6.2.1 scipy 方法实现

#进行两样本t检验

scipy.stats.ttest_ind(
        a,b:类数据格式的两组数值
        equal_var = true #两组方差是否齐同,方差不齐时给出welch's t检验结果
        nan_policy = propagate #缺失值的处理方式
                propagate #返回nan
                raise #是否抛出错误
                omit #忽略nan
)

方差齐性检验

#常用的方差齐性检验
scipy.stats.bartlett() #bartlett 方差齐性检验
scipy.stats.levene() #levene 方差齐性检验,该结果针对非正泰总体稳健,相对更加常用


#案例中使用
ss.levene(ccss.index1[ccss.s7 == "未婚"],ccss.index1[ccss.s7 == '已婚'])
#输出结果 LeveneResult(statistic=0.6178737960192996, pvalue=0.43200314605212653)
# H0是两个样本具有一样的方差,p值大于0.05接受原假设    即两个样本方差齐

进行样本t检验

#进行样本t检验

ss.ttest_ind(ccss.index1[ccss.s7 == "未婚"],ccss.index1[ccss.s7 == "已婚"])
#输出结果 Ttest_indResult(statistic=2.405261376009453, pvalue=0.016320721789339597)
#Ho两个样本均值一致不具有差异性  p值小于0.05拒绝原假设,即两个样本均值存在差异


#如果在上面的方差检验中,方差不是齐性的,则需要在t检验中进行参数设置

ss.ttest_ind(ccss.index1[ccss.s7 == '未婚'],ccss.index1[ccss.s7 == '已婚'],equal_var= False)

6.2.2 statsmodels 方法实现

statsmodels可以实现t检验的所有功能,但是无法完成方差齐性检验。

statsmodels.stats.weightstats.CompareMeans(d1, d2)
# d1, d2均为DescrStatsW对象,如果只有d1为DescrStatsW对象,也可以使用d1.get_compare(other)直接转换


CompareMeans.ttest_ind(
    alternative = 'two-sided' : 'larger' | 'smaller'
    usevar='pooled' : 'pooled' or 'unequal',方差是否齐同
    value = 0 : H0假设所对应的均数差值
)



#两样本的statsmodels实现
d1 = ws.DescrStatsW(ccss.index1[ccss.s7 == '未婚'])
d2 = ws.DescrStatsW(ccss.index[ccss.s7 == '已婚'])
comp = ws.CompareMeans(d1,d2)
comp.ttest_ind()
#输出结果 (-26.42469575169767, 3.1575849989673495e-120, 1131.0) 统计量 p值 自由度

6.3 配对t检验

案例:为保证数据质量,接受过ccss访问的受访家庭半年内不会在进行访问,单半年后会进行抽样回访。现通过回访采集了88个有效样本,希望比较这些样本的信心值是否发生变化。

进行配对p检验时需要使用相关分析进行相关性检验。

ccss_p = pd.read_excel("CCSS_sample.xlsx", sheet_name = 'CCSS_pair') #导入数据

ccss_p.loc[:, ['index1', 'index1n']].describe()
ss.pearsonr(ccss_p.index1, ccss_p.index1n) #相关性检验
ss.ttest_1samp(ccss_p.index1 - ccss_p.index1n, 0) #检验

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340