赞
踩
引例:
某饮料厂在自动流水线上罐装饮料。在正常生产情形下,每瓶饮料的容量(单位:ml)X服从正态分布N(500,102)。经过一段时间之后,为了检查机器工作是否正常,抽取了9瓶样品,测得它们的平均值为490ml.试问此时自动流水线的工作是否正常?即问是否可以认为每瓶饮料的容量仍是500ml?假定标准差10ml不变。
假设检验是什么:
小概率事件、实际推断原理
把概率接近于0的事件称为小概率事件小概率事件
通常认为,小概率事件在一次试验中不应该发生,这条原则称为实际推断原理
假设检验基本原理
在假定零假设H0为真的前提下,计算根据当前样本的观测结果拒绝H0的概率,即计算P(拒绝H0|H0为真)。按照实际推断原理,如果小概率事件发生了,从而认为原假设有错,因此拒绝H~0
如何判定P(拒绝H0|H0为真)为小概率?
如果P(拒绝H0|H0为真) ≤ α,其中α接近于零(通常取0.05或0.01),则认为这个小概率事件发生了,拒绝H0 这个α被称为显著性水平
假设检验的标准步骤:
根据统计推断的目的而提出的对总体特征的假设
原假设与备择假设
确定检验水准(显著性水平)
实际上就是确定拒绝 H0 时的所犯的错误的概率。常用的检验水准为 0.05
计算统计量和 P 值
从 H0 假设的总体中抽出现有样本(及更极端情况)的概率,P 值
检验统计量的特点:
该统计量应当服从某种已知分布,从而可以计算出 P 值
各种检验方法利用的分布及计算原理不同,从而检测统计量也不同
得出推断结论
按照事先确定的检验水准界定上面得到的 P 值,并按小概率原理认定对 H0 的取舍,作出推断结论
若 P<=α:
基于 H0 假设的总体情况出现了小概率事件
则拒绝 H0,可以认为样本与总体的差别不仅仅是抽样误差造成的,可以存在本质
上的差别,属于“非偶然的”,因此,可以认为两者的差别有统计学意义
歌曲的时长服从正态分布X~N(μ,σ2),σ2=1;手机里有25首歌曲,这25首歌曲的平均时长是4.5分钟。
检验歌曲总体的均值是否等于4分钟。
25岁左右人群的月收入服从正态分布N(μ1,σ12),35岁左右人群的月收入服从正态分布N(μ2,σ22,),σ1,σ2分别为2000和8000;
记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,这40名35岁个体平均收入为25000元。
25岁左右人群的月收入服从正态分布N(μ1,σ12),35岁左右人群的月收入服从正态分布N(μ2,σ22,),σ1,σ2相等且未知;
记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,标准差为2500元; 这40名35岁个体平均收入为25000元,标准差为7000元。
25岁左右人群的月收入服从正态分布N(μ1,σ12),35岁左右人群的月收入服从正态分布N(μ2,σ22,),σ1,σ2不等且未知;
记录了30名25岁和40名35岁个体的月收入。这30名25岁个体平均收入为16000元,标准差为2500元; 这40名35岁个体平均收入为25000元,标准差为7000元。
从所有参加训练的学生中抽取了50人,采集了训练前后的数学成绩;对每一个学生计算数学成绩之差(训练后-训练前)后,得到成绩之差的均值为10,标准差为3;问:训练是否有效提高了数学成绩?
25岁左右人群的月收入在3年前服从标准差为2(千元)的正态分布;现在收集了30名25岁个体的月收入,标准差为2.5千元。问能够推断现在25岁人群月收入的波动性与3年前有显著变化吗?
现收集了30名25岁个体的月收入,标准差为2.5千元;收集了40名35岁个体的月收入,标准差为4.2千元。问能够推断25岁人群月收入的波动性小于35岁人群月收入的波动性吗?
正态总体均值检验的前提条件
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)
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')
# 进行两样本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)
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检验(方差不齐性)
为保证数据质量,接受过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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。