查看: 169|回复: 3

[转载] python 单样本假设检验例子

[复制链接]
论坛徽章:
2
Hadoop研习者初级
日期:2016-09-29 15:17:14Excel徽章
日期:2016-12-08 15:33:15
发表于 2019-9-15 23:02 | 显示全部楼层 |阅读模式

tm 测试

https://www.cnblogs.com/qiuyuyu/p/9630410.htmlpython单样本假设检验实例
假设检验可以建立批判思维,切忌盲目追寻他人的观点。在各个领域都应用广泛,例如犯罪学,科学研究中都会假设某个推理,然后通过一系列结论去证明这个推断是否成立,如果成立则接受假设,若不成立则接受反面推断。
假设检验的四个步骤
一、问题是什么
1.明确问题是什么,根据问题假定两个假设:零假设和备选假设,两个假设是对立的。零假设总是表述为研究没有改变,没有效果,不起作用
2.判断检验类型
  • 单样本检验检验=》检验单个样本的平均值是否等于目标值
  • 相关配对检验=》检验相关或配对观测之差的平均值是否等于目标值
  • 独立双样本检验=》检验两个独立样本的平均值之差是否等于目标值
3.确定抽样分布类型
  • 当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布
  • 样本数量小于30时,抽样分布符合t分布或其他分布
4.确定检验方向
  • 单尾检验
    左尾:若备选假设包含有<,则选左尾检验


file:///C:/Users/%C3%A5%C2%90%C2%95%C3%A7%C2%A7%C2%8B%C3%A7%C2%8E%C2%89/AppData/Local/YNote/data/weixinobU7Vjk2L4LQgBCObN9C2KWBjB2s/ffc53514445548c997334eded83299fa/1a10137e_hd.jpeg
    右尾:若备选假设包含有>,则选右尾检验


file:///C:/Users/%C3%A5%C2%90%C2%95%C3%A7%C2%A7%C2%8B%C3%A7%C2%8E%C2%89/AppData/Local/YNote/data/weixinobU7Vjk2L4LQgBCObN9C2KWBjB2s/cc8d986cb9df428c9e2612897de590d7/cbde30e6_hd.jpeg
  • 双尾检验
    将判断标准一分为二位于抽样分布的两侧,左右侧各占一半判断标准,若假设中包含不等号,则属于双尾检验。


file:///C:/Users/%C3%A5%C2%90%C2%95%C3%A7%C2%A7%C2%8B%C3%A7%C2%8E%C2%89/AppData/Local/YNote/data/weixinobU7Vjk2L4LQgBCObN9C2KWBjB2s/bb59a002706344e8a3869dfc82f53f3c/786998c2_hd.jpeg
二、做出结论标准是什么(证据是什么)
在假设零假设成立时,计算样本平均值的概率:p值
当样本分布符合t分布是计算p值得方法如下


根据t值,查找t表格,得到p值
三、判断标准是什么
设定显著水平α
四、做出结论
当p<=α时,拒绝零假设,接受备选假设
p>α时,接受零假设

实例
环保标准规定汽车的新排放标准:平均值<20ppm,现某汽车公司测试10辆汽车的排放结果如下:15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9 。问题:公司引擎排放是否满足新标准。
一、问题是什么
  1、零假设:公司引擎排放不满足标准,即平均值>=20
  备选假设:公司引擎排放满足标准,即平均值<20
  2、判断检验类型:改例子为单样本检验
  3、确定抽样分布
  1)用python展示统计描述(平均值、标准差)
[url=][/url]
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])sample_mean=dataSer.mean()#样本平均值sample_std=dataSer.std()#样本标准差[url=][/url]

计算得平均值为17.17ppm,标准差为2.98ppm

  2)我们知道当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布,样本数量小于30时,抽样分布符合t分布或其他分布。为了知道这是个样本的分布,我们可以使用python中的displot绘图,画出直方图和拟合曲线。
[url=][/url]
import seaborn as sns#解决画图中中文乱码,解决负号问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#绘图sns.distplot(dataSer)plt.title('数据集分布')plt.show()[url=][/url]

从绘图中可以看出样本数据集近视正态分布,又由于样本数量少于30 ,因此抽样分布符合t分布。自由度df = n-1 = 9

4、确定检验方向:由于备选假设中包含<,则属于左尾假设



回复

使用道具 举报

论坛徽章:
2
Hadoop研习者初级
日期:2016-09-29 15:17:14Excel徽章
日期:2016-12-08 15:33:15
 楼主| 发表于 2019-9-15 23:02 | 显示全部楼层
二、证据是什么:计算p值
两种方法:
1、手动计算
复制代码
#样本大小
n=10
#标准误差=样本标准差/n的开方
se=sample_std/np.sqrt(n)
计算se=0.9428149341201592
#总体平均值:政府发布的标准值
pop_mean=20
#t值
t=(sample_mean-pop_mean)/se
复制代码
得t=-3,即样本均值在总体均值的左侧,距离总体平均值3个标准误差。根据t表格,即可找出p值,这里我们也可以用下面链接中的工具得出p值。

https://www.graphpad.com/quickcalcs/pValue2/




最后得到p值为0.15,但这个工具计算的是双尾检验的p值,根据下图我们可以看出双尾检验的p值为单位检验的2倍,因此这里的p值应为 0.15/2 = 0.075

2、调用python自带方法计算
使用scipy包中的ttest_1samp,计算单独样本t检验。该函数返回的第一个值为t值,第二个值为双尾检验的p值。
复制代码
from scipy import stats
import pandas as pd
dataSer=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
pop_mean=20
t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
p_oneTail = p_twoTail/2
print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
t= -3.001649525885985 p_twoTail= 0.014916414248897527 p_oneTail =  0.0074582071244487635
复制代码
三、判断标准是什么

建立判断标准检验证据是否有效,给定的判断标准即显著水平
α=5%
四、做出结论
当p<=α时,拒绝零假设,接受备选假设
p>α时,接受零假设

由于p=0.00745<0.05,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。
用python代码来判断如下:
左尾判断条件:t<0 and p < alpha
右尾判断条件:t>0 and p < alpha
复制代码
alpha = 0.05
if (t<0 and p_oneTail < alpha):
    print("拒绝零假设,有统计显著,也就是汽车引擎排放满足标准")
else:
    print("接受零假设,没有统计显著,也就是汽车引擎排放不满足标准")
拒绝零假设,有统计显著,也就是汽车引擎排放满足标准
复制代码
全部代码如下:

复制代码
"""
环保标准规定汽车的新排放标准:平均值<20ppm,现某汽车公司测试10辆汽车的排放结果如下:
15.6 16.2 22.5 20.5 16.4 19.4 16.6 17.9 12.7 13.9 。
问题:公司引擎排放是否满足新标准。
"""
#1、零假设:公司引擎排放不满足标准,即平均值>=20
#   备选假设:公司引擎排放满足标准,即平均值<20
#2、判断检验类型:该例子为单样本检验
#3、确定抽样分布
 # 1)用python展示统计描述(平均值、标准差)
import numpy as py
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
dataser=pd.Series([15.6,16.2,22.5,20.5,16.4,19.4,16.6,17.9,12.7,13.9])
sample_mean=dataser.mean()#样本平均值
sample_std=dataser.std()#样本标准差
print(sample_mean,sample_std)#结果为17.169999999999998 2.9814426038413018
   # 2)我们知道当样本数量大于30时,符合中心极限定理,抽样分布呈正态分布,样本数量小于30时,抽样分布符合t分布或其他分布。为了知道这是个样本的分布,我们可以使用python中的displot绘图,画出直方图和拟合曲线。
#解决画图中中文乱码,解决负号问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
sns.distplot(dataser)
plt.title('数据集分布')
plt.show()
from scipy import stats
pop_mean=20#题中平均值
t,p_twoTail=stats.ttest_1samp(dataSer,pop_mean)
p_oneTail = p_twoTail/2
print("t=",t,"p_twoTail=",p_twoTail, "p_oneTail = ", p_oneTail)
#t= -3.001649525885985 p_twoTail= 0.014916414248897527 p_oneTail =  0.0074582071244487635
#由于p=0.00745<0.05,因此拒绝零假设,接受备选假设,即公司引擎排放满足标准。
回复 支持 反对

使用道具 举报

论坛徽章:
2
Hadoop研习者初级
日期:2016-09-29 15:17:14Excel徽章
日期:2016-12-08 15:33:15
 楼主| 发表于 2019-9-16 00:25 | 显示全部楼层
p值的理解是基于小概率事件发生的可能性应该是很小的,在原假设成立的条件下,p值如果大于大于原先设定的水平值,则认为事件是有违小概率发生原理的
回复 支持 反对

使用道具 举报

论坛徽章:
0
发表于 2019-9-16 09:54 | 显示全部楼层
这个好 ,老铁给你点个赞
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-10-18 06:42 , Processed in 0.123424 second(s), 35 queries .

关闭

扫一扫加入
本版微信群