热线电话:13121318867

登录
首页大数据时代数据分析师教程《统计学极简入门》第5节 假设检验
数据分析师教程《统计学极简入门》第5节 假设检验
2024-10-05
收藏

5. 假设检验

久经考场的你肯定对于很多概念类题目里问到的 “区别和联系” 不陌生,与之类似,在统计领域要研究的是数据之间的区别和联系 ,也就是差异性分析相关性分析。本节我们重点关注数据的差异性分析

我们知道,比较两个数之间的大小,要么前后两者求差,要么求比。差值大于零说明前者大于后者。比值大于1说明分子大于分母。

那么如何比较两组数据的差异性呢?大道至简,其实和上面原理类似

我们先从简单的看起,先比较一组数和一个给定数的差异,即,单个总体的差异性分析:

单个总体的假设检验

常见的单个总体差异性的假设检验分为3个类型:均值、比例、方差

一个总体均值的假设检验 (指定值和样本均值)

顾名思义,就是检验指定值与样本均值的差异,按是否已知可以分2种情况:

已知的情况: 检验

接下来我们用代码举例实现一下你就明白怎么用了:

例5.1 检验一批厂家生产的红糖是否够标重

监督部门称了50包标重500g的红糖,均值是498.35g,少于所标的500g。对于厂家生产的这批红糖平均起来是否够份量,需要统计检验。

分析过程: 由于厂家声称每袋500g,因此原假设为总体均值等于500g(被怀疑对象总是放在零假设)。而且由于样本均值少于500g(这是怀疑的根据),把备择假设设定为总体均值少于500g (上面这种备选假设为单向不等式的检验称为单侧检验,而备选假设为不等号“”的称为双侧检验,后面会解释)

于是我们有了原假设和备择假设

:

引入相关库、读取数据如下

from scipy import stats
import scipy.stats
import numpy as np
import pandas  as pd
import statsmodels.stats.weightstats

data = [493.01,498.83,494.16,500.39,497.63,499.72,493.41,498.97,501.94,503.45,497.47,494.19,500.99,495.81,499.63,494.91,498.90,502.43,491.34,497.50,505.95,496.56,501.66,492.02,497.68,493.48,505.40,499.21,505.84,499.41,505.65,500.51,489.53,496.55,492.26,498.91,496.65,496.38,497.16,498.91,490.98,499.97,501.21,502.85,494.35,502.96,506.21,497.66,504.66,492.11]

进行z检验:

z, pval = statsmodels.stats.weightstats.ztest(data, value=500,alternative = 'smaller')

# 'two-sided': 样本均值与给定的总体均值不同
# 'larger' :   样本均值小于给定总体均值
# 'smaller' :  样本均值大于给定总体均值
print(z,pval)
# -2.6961912076362085 0.0035068696715304876

结论: 选择显著性水平 0.05 的话,P=0.0035 < 0.05, 故应该拒绝原假设。具体来说就是该结果倾向于支持平均重量小于500g的备则假设。

未知的情况: 检验

例5.2 检验汽车实际排放是否低于其声称的排放标准

汽车厂商声称其发动机排放标准的一个指标平均低于20个单位。在抽查了10台发动机之后,得到下面的排放数据: 17.0 21.7 17.9 22.9 20.7 22.4 17.3 21.8 24.2 25.4 该样本均值为21.13.究竟能否由此认为该指标均值超过20?

分析过程: 由于厂家声称指标平均低于20个单位,因此原假设为总体均值等于20个单位(被怀疑对象总是放在零假设)。而且由于样本均值大于20(这是怀疑的根据),把备择假设设定为总体均值大于20个单位

于是我们有了原假设和备择假设

:

读取数据如下

data = [17.021.717.922.920.722.417.321.824.225.4]

进行t检验如下:

import scipy.stats
t, pval = scipy.stats.ttest_1samp(a = data, popmean=20,alternative = 'greater')
# 说明  
# a  为给定的样本数据
# popmean 为给定的总体均值
# alternative 定义备择假设。以下选项可用(默认为“two-sided”):
# ‘two-sided’:样本均值与给定的总体均值(popmean)不同
# ‘less’:样本均值小于给定总体均值(popmean)
# ‘greater’:样本均值大于给定总体均值(popmean)

print(t, pval)

# '''
# P= 0.004793 < 5%, 拒绝原假设,接受备择假设样本
# '''

结论: 选择显著性水平 0.01 的话,P=0.1243 > 0.05, 故无法拒绝原假设。具体来说就是该结果无法支持指标均值超过20的备则假设。

一个总体比例的假设检验(指定比例和样本比例)

例5.3 检验高尔夫球场女性球员比例是否因促销活动而升高

某高尔夫球场去年打球????????‍的人当中有20%是女性,为了增加女性球员的比例,该球场推出了一项促销活动来吸引更多的女性参加高尔夫运动,在活动实施了1个月后,球场的研究者想通过统计分析研究确定高尔夫球场的女性球员比例是否上升,收集到了400个随机样本,其中有100是女性

分析过程: 由于研究的是女性球员所占的比例是否上升,因此选择上侧检验比较合适,备择假设是比例大于20%

:

方法1:用statsmodels.stats.proportion里面的proportions_ztest函数计算(推荐)

import numpy as np
from statsmodels.stats.proportion import proportions_ztest
count = 100
nobs = 400
p_0 = 0.2
p_bar = count/nobs
p_0 = 0.2
n = 400
# 执行单一样本比例检验 statsmodels.stats.proportion.proportions_ztest
z_statistic, p_value = proportions_ztest(count, nobs, value = p_0,alternative='larger',prop_var = value)
# 注:statsmodels.stats.proportion.proportions_ztest 的函数有几个问题:讲在第八节之后说明,感兴趣的读者请持续关注
# 打印结果
print("z统计量:", z_statistic)
print("p值:", p_value)
#z统计量: 2.4999999999999996
#p值: 0.006209665325776138

方法2 用手动方式计算

count = 100
nobs = 400
p_0 = 0.2

p_bar = count/nobs
p_0 = 0.2
n = 400
def calc_z_score(p_bar, p_0, n):
    z = (p_bar - p_0) / (p_0 * (1 - p_0) / n)**0.5
    return z

z = calc_z_score(p_bar, p_0, n)
p = stats.norm.sf(z)

# 打印结果
print("z统计量:", z)
print("p值:", p)
# z统计量: 2.4999999999999996
# p值: 0.006209665325776138

结论: 选择显著性水平 0.05 的话,P=0.0062 < 0.05, 拒绝原假设。具体来说就是该结果支持特定的促销活动能够提升该球场女性运动员比例的备则假设。

一个总体方差假设检验(指定方差和样本方差

import numpy as np
from scipy import stats

def chi2test(sample_var, sample_num,sigma_square,side, alpha=0.05):
    '''
    参数:
    sample_var--样本方差
    sample_num--样本容量
    sigma_square--H0方差
    返回值:
    pval
    '
''
    chi_square =((sample_num-1)*sample_var)/(sigma_square)
    p_value = None
    if side == 'two-sided':
        p = stats.chi2(df=sample_num-1).cdf(chi_square)
        p_value = 2*np.min([p, 1-p])
    elif side == 'less':
        p_value = stats.chi2(df=sample_num-1).cdf(chi_square)
    elif side == 'greater':
 
最新资讯
更多
客服在线
立即咨询