概念:假设检验,就是要对总体参数u提出一个假设,然后利用样本信息去验证这个假设是否成立。
假设检验的假设:
(1)假设检验时,会设置两个假设
一个是原假设,也叫零假设,用H0表示。原假设一般是统计者想要拒绝的假设。原假设设置一般为:等于=、大于等于>=、小于等于<=。
另一个是备择假设,用H1表示。备择假设是统计者想要接受的假设,备择假设的设置一般为:不等于!=、大于>、小于<。
(2)为什么把设计者想要拒绝的假设放在原假设呢?
因为原假设如果误判的话,只会犯弃真错误,而犯弃真错误的概率已经被规定的显著性水平所控制了。
接下来了解一下什么是弃真错误、取伪错误
为什么会出现弃真错误、取伪错误呢?
由概念可知,我们是通过样本数据来估计总体参数的假设,但是样本数据是随机的,这样就有可能会产生小概率的弃真错误、取伪错误。
(1)弃真错误:也叫第I类错误或者α错误,它是指原假设是真实的,但是通过样本取估计总体参数假设时,拒绝了原假设。很明显我们拒绝了真实的原假设,所以叫弃真错误。这个错误的概率为α,通常取值为0.0qizhen1,0.05,0.1等,取值越小,犯弃真错误的概率越小
(2)取伪错误:也叫第II类错误或者β错误,它是指原假设实际上时不真实的,但是通过样本取估计总体参数假设时,承认了原假设。很明显我们承认了假的的原假设,所以叫取伪错误。这个错误的概率为β。
(3)检验方式
检验方式分为两种:
(1)双侧检验:所关心的假设问题不具有方向性
(2)单侧检验:左侧检验:希望所考察的数值越大越好;右侧检验:希望所考察的数值越小越好
(4)假设检验的步骤
1、提出原假设和备择假设
2、从所研究总体中抽取一个随机样本
3、构造检验统计量
4、根据显著性水平确定拒绝域临界值
5、计算检验统计量与临界值进行比较
(5)两种假设检验
(1)一个总体的假设检验:在一个总体参数检验中:用到的检验统计量由三个:Z统计量,T统计量(适用于均值与比例);卡方统计量(适用于方差)。
具体适用情况说明:主要考虑样本量\总体标准差
1、大样本(一般以样本数是否大于30来判断),总体标准差已知
z统计量
2、大样本(一般以样本数是否大于30来判断),总体标准差未知
z统计量 用样本标准差代替总体标准差
3、小样本(一般以样本数是否大于30来判断),总体标准差已知
z统计量
4、小样本(一般以样本数是否大于30来判断),总体标准差未知
T统计量 用样本标准差代替总体标准差
补充:总体的假设检验与一个总体假设检验的适用条件类似
建议参考统计学第六版(贾俊平)第六章:假设检验
利用spass软件直接进行分析,python显得效率不够高
接下来,我们用python进行假设检验分析。
数据来源:https://pan.baidu.com/s/1t4SKF6U2yyjT365FaE692A*
数据字段说明:gender:1为男性,2 为女性;Temperature:体温;HeartRate:心率
问题清单:
1、人体体温的总体均值是否为98.6华氏度?
2、人体的温度是否服从正态分布?
3、人体提问中存在的异常数据有哪些?
4、男女体温是否存在异常?
5、体温与心率间的相关性?
import pandas as pd
import numpy as np
from scipy import stats
import statsmodels
test_df=pd.read_csv(r'C:\Users\HEYINGJIE\Desktop\test.csv')
print(test_df.head())
'''
Temperature Gender HeartRate
0 96.3 1 70
1 96.7 1 71
2 96.9 1 74
3 97.0 1 80
4 97.1 1 73
'''
#1、人体体温的总体均值是否为98.6华氏度?
#由于此样本量大于30为大样本,且总体标准差未知,可用z统计量来检测,用样本标准差代替总体标准差
##计算z统计量
mu=96.8#总体均值
temp=test_df["Temperature"]
#样本均值
sample_mean=temp.mean()
#样本标准差
sample_std=np.std(temp,ddof=1)
#样本个数
sample_size=temp.size
#计算z值
z=(sample_mean-mu)/(sample_std/np.sqrt(sample_size))
"""
结果:22.537033076347395
假设显著水平为0.05,采取双侧检验,z(a/2)为±1.96小于22.53....,所以拒绝原假设,及人体体温的均值不是98.6华氏度。
"""
#或者直接使用statsmodels包的statsmodels.stats.weightstats.ztest函数
"""
z=sw.ztest(list(temp),value=98.6