6.假设检验——假设性检验的数学公式与SciPy和statsmodels代码实现

1.假设检验介绍

引例:

某饮料厂在自动流水线上罐装饮料。在正常生产情形下,每瓶饮料的容量(单位:ml)X服从正态分布N(500,102)。经过一段时间之后,为了检查机器工作是否正常,抽取了9瓶样品,测得它们的平均值为490ml.试问此时自动流水线的工作是否正常?即问是否可以认为每瓶饮料的容量仍是500ml?假定标准差10ml不变。

假设检验是什么:

  • 假设检验是统计推断的另一种重要的形式
  • 假设检验问题就是研究如何根据样本来检验抽样前所作出的假设
    假设检验的要素
  1. 假设
  • 零假设(H0假设)
    没有任何事情发生
  • 备择假设(H1假设)
    发生了某些事情
  1. 检验
    在假定零假设H0为真的前提下,计算根据当前样本的观测结果拒绝H0的概率,即计算P(拒绝H0|H0为真)
    根据计算得到的P与指定α相比较,做出接受或拒绝H0的决策

2.小概率事件与假设检验基本原理

小概率事件、实际推断原理
把概率接近于0的事件称为小概率事件小概率事件
通常认为,小概率事件在一次试验中不应该发生,这条原则称为实际推断原理

假设检验基本原理
在假定零假设H0为真的前提下,计算根据当前样本的观测结果拒绝H0的概率,即计算P(拒绝H0|H0为真)。按照实际推断原理,如果小概率事件发生了,从而认为原假设有错,因此拒绝H~0
如何判定P(拒绝H0|H0为真)为小概率?
如果P(拒绝H0|H0为真) ≤ α,其中α接近于零(通常取0.05或0.01),则认为这个小概率事件发生了,拒绝H0 这个α被称为显著性水平

3.假设检测的步骤

假设检验的标准步骤:

  • 根据统计推断的目的而提出的对总体特征的假设
    原假设与备择假设

  • 确定检验水准(显著性水平)
    实际上就是确定拒绝 H0 时的所犯的错误的概率。常用的检验水准为 0.05

  • 计算统计量和 P 值
    从 H0 假设的总体中抽出现有样本(及更极端情况)的概率,P 值
    检验统计量的特点:
    该统计量应当服从某种已知分布,从而可以计算出 P 值
    各种检验方法利用的分布及计算原理不同,从而检测统计量也不同

  • 得出推断结论
    按照事先确定的检验水准界定上面得到的 P 值,并按小概率原理认定对 H0 的取舍,作出推断结论
    若 P<=α:
    基于 H0 假设的总体情况出现了小概率事件
    则拒绝 H0,可以认为样本与总体的差别不仅仅是抽样误差造成的,可以存在本质
    上的差别,属于“非偶然的”,因此,可以认为两者的差别有统计学意义

4.单样本Z检验

歌曲的时长服从正态分布X~N(μ,σ2),σ2=1;手机里有25首歌曲,这25首歌曲的平均时长是4.5分钟。
检验歌曲总体的均值是否等于4分钟。
在这里插入图片描述

5.两个独立样本的Z检验(方差未知——单样本t检验)

25岁左右人群的月收入服从正态分布N(μ112),35岁左右人群的月收入服从正态分布N(μ222,),σ12分别为2000和8000;

记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,这40名35岁个体平均收入为25000元。
在这里插入图片描述
在这里插入图片描述

6.两个独立样本的t检验(方差未知且相等——两个独立样本的t检验)

25岁左右人群的月收入服从正态分布N(μ112),35岁左右人群的月收入服从正态分布N(μ222,),σ12相等且未知;

记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,标准差为2500元; 这40名35岁个体平均收入为25000元,标准差为7000元。
在这里插入图片描述
在这里插入图片描述

7.两个总体均值差的检验(方差未知且相等——两个独立样本的t检验)

25岁左右人群的月收入服从正态分布N(μ112),35岁左右人群的月收入服从正态分布N(μ222,),σ12不等且未知;

记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,标准差为2500元; 这40名35岁个体平均收入为25000元,标准差为7000元。
在这里插入图片描述

在这里插入图片描述

8.配对t检验

从所有参加训练的学生中抽取了50人,采集了训练前后的数学成绩;对每一个学生计算数学成绩之差(训练后-训练前)后,得到成绩之差的均值为10,标准差为3;问:训练是否有效提高了数学成绩?
在这里插入图片描述

9.单个总体方差的检验(卡方检验)

25岁左右人群的月收入在3年前服从标准差为2(千元)的正态分布;现在收集了30名25岁个体的月收入,标准差为2.5千元。问能够推断现在25岁人群月收入的波动性与3年前有显著变化吗?
在这里插入图片描述

10.两个总体方差比的检验(F检验)

现收集了30名25岁个体的月收入,标准差为2.5千元;收集了40名35岁个体的月收入,标准差为4.2千元。问能够推断25岁人群月收入的波动性小于35岁人群月收入的波动性吗?
在这里插入图片描述

11.z检验, t检验, 卡方检验, F检验的前提条件

正态总体均值检验的前提条件

  • 组内独立性:样本是通过随机抽样采集的,是随机分配到两个组的
  • 组间独立性:两组互相独立(非配对)
  • 如果是无放回抽样,则样本容量不能超过总体容量10%
    非正态总体均值检验的前提条件:
  • 组内和组间独立性
  • 如果是无放回抽样,则样本容量不能超过总体容量10%
  • 样本容量≥30;总体的分布越偏,需要的样本容量越大
    正态总体方差检验的前提条件:
  • 同总体均值检验的前提条件
    非正态总体方差检验的前提条件:
    即使满足所有总体均值检验的前提条件,也不能使用卡方/F检验;需要使用非参数方法

12.单样本t检验的SciPy实现方式

scipy.stat包中可以实现各种常用的假设检验方法

scipy.stats.ttest_1samp(
    a :list格式的样本数值
    popmean : H0所对应的总体均数
)

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

from scipy import stats as ss
import pandas as pd
import numpy as np
import matplotlib
# 解决绘图的兼容问题
%matplotlib inline
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
ccss = pd.read_excel("CCSS_sample.xlsx",sheet_name='CCSS')
ccss.query("s0 == '广州' & time == 203004").index1.describe()
ccss.query("s0 == '广州' & time == 203004").index1.hist()
ss.ttest_1samp(ccss.query("s0 == '广州' & time== 203004").index1, 100)

13.单样本t检验的statsmodels实现方式

DescrStatsW类中的tconfint_mean可以计算可信区间,ttest_mean则可直接实现单样本t检验

# 计算均数的可信区间
DescrStatsW.tconfint_mean(
    alpha = 0.05
    alternative = 'two-sided'
) # 结果输出:下限、上限
# 进行单样本t检验
DescrStatsW.ttest_mean(
    value = 0 : H0所对应的总体均数
    alternative = 'two-sided' : 'larger' |
'smaller'
) # 结果输出:t值、P值、自由度
from statsmodels.stats import weightstats as ws
import pandas as pd
import numpy as np
import matplotlib
# 解决绘图的兼容问题
%matplotlib inline
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
ccss = pd.read_excel("CCSS_sample.xlsx",sheet_name='CCSS')
des = ws.DescrStatsW(ccss.query("s0 == '广州' & time == 203004").index1)
des.mean
# 计算均数的95%可信度区间
des.tconfint_mean()
# 进行单样本t检验
des.ttest_mean(100)
# 单侧t检验
des.ttest_mean(100, 'smaller')
des.ttest_mean(100, 'larger')

14.两样本t检验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’s方差齐性检验
scipy.stats.levene() : Levene方差齐性检验,该结果针对非正态总体更稳健,相对更常用

例:不同婚姻状况的信心指数均值可能存在差异,现希望进一步用假设检验对此差异进行确认。 只考虑对已婚和未婚的人群进行比较。

from scipy import stats as ss
import pandas as pd
import numpy as np
import matplotlib
# 解决绘图的兼容问题
%matplotlib inline
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
ccss = pd.read_excel("CCSS_sample.xlsx",sheet_name='CCSS')
from scipy import stats as ss
# 分布的对称性考察
ccss.index1.plot.hist()
# 分组描述
ccss.groupby('s7').index1.describe()
# 方差齐性检验
ss.levene(ccss.index1[ccss.s7 == '未婚'],ccss.index1[ccss.s7 == '已婚'])
# 两样本t检验(方差齐性)
ss.ttest_ind(ccss.index1[ccss.s7 == '未婚'],ccss.index1[ccss.s7 == '已婚'])
# 两样本t检验(方差不齐性)
ss.ttest_ind(ccss.index1[ccss.s7 == '未婚'],ccss.index1[ccss.s7 == '已婚'],equal_var = False)

15.两样本t检验statsmodels的实现方式

class
statsmodels.stats.weightstats.CompareMeans(d1,d2)
d1, d2均为DescrStatsW对象
CompareMeans.ttest_ind(
    alternative = 'two-sided' : 'larger' |'smaller'
    usevar='pooled' : 'pooled' or 'unequal',方差是否齐同
    value = 0 : H0假设所对应的均数差值
)
from statsmodels.stats import weightstats as ws
import pandas as pd
import numpy as np
import matplotlib
# 解决绘图的兼容问题
%matplotlib inline
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
ccss = pd.read_excel("CCSS_sample.xlsx",sheet_name='CCSS')
d1 = ws.DescrStatsW(ccss.index1[ccss.s7 == '未婚'])
d2 = ws.DescrStatsW(ccss.index1[ccss.s7 == '已婚'])
comp = ws.CompareMeans(d1, d2)
comp.ttest_ind() # 两组独立样本的t检验(方差齐性)
comp.ttest_ind(usevar='unequal')# 两组独立样本的t检验(方差不齐性)

16.配对t检验的SciPy实现

为保证数据质量,接受过CCSS访问的受访家庭半年内不会再进行访问,但半年之后会进行抽样回访。在 2030年12月,项目组对2030年4月的成功访问家庭进行了回访,共采集了88例有效样本,现希望比较 这些样本的信心值是否发生变化,数据见表单CCSS_pair

scipy.stats.ttest_rel(
    a, b : array_like
    nan_policy : {'propagate', 'raise', 'omit'}
)
from scipy import stats as ss
import pandas as pd
import numpy as np
import matplotlib
# 解决绘图的兼容问题
%matplotlib inline
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 
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)
# 配对t检验
ss.ttest_rel(ccss_p.index1, ccss_p.index1n) 
# 直接求出差值并进行单样本t检验
ss.ttest_1samp(ccss_p.index1 - ccss_p.index1n,0)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值