学习总结
- 在数学上我们不能通过一个特殊的样本证明一个假设成立,但是却可以用其推翻(拒绝)一个命题。因此,假设检验本质上就是在探讨如何通过拒绝原假设 H 0 H_0 H0来接受备择假设 H 1 H_1 H1。
- 基于p值(p值,是在确定的样本观测值下,给出的能拒绝原假设的最小显著性水平)的假设检验基本步骤:
- 确定备择假设 H 1 H_1 H1,备择假设的符号决定了我们使用何种累积概率。
- 明确检验统计量Test statistics的公式,不同假设检验都有其确定的检验统计量,查阅资料找到它!
- 明确检验统计量所服从的分布,这样我们才能计算累积概率。
- 根据备择假设 H 1 H_1 H1与检验统计量Test statistics计算p值。
- 将p值与显著性水平 α \alpha α比较,若 p > α p>\alpha p>α,则不能拒绝原假设;若 p < α p<\alpha p<α,则可以拒绝原假设。
- 将常见的假设检验,按照数据类型、数据特征进行分类,在实际应用中可以直接根据待分析数据的特征以及分析任务选择相应的假设检验:
- 对于一些较为常见且重要的假设检验(如各种t检验),简要学习其原理;
- 对于不常见且原理解释较为困难的检验(如正态性检验),会用就行。
- 不同检验统计量的形式不尽相同,其所服从的分布也不相同,但是假设检验的思路却是有共同之处的:构造检验统计量——输出对应分布的分位点——计算临界值(拒绝域)——做出判断。
- 假设检验大体上可分为两种:参数假设检验与非参数假设检验。
- 若假设是关于总体的一个参数或者参数的集合,则该假设检验就是参数假设检验,Example.1的假设是关于总体均值的,均值是参数,因此这是一个参数假设检验;
- 若假设不能用一个参数集合来表示,则该假设检验就是非参数假设检验,一个典型就是正态性检验。
- 一元数值数据中的组间均值假设检验的内容,学习如何通过样本数据对其所在总体的均值的性质进行检验,并展示如何在python中实现每个检验:正态性检验;比较一组数据的总体均值与一个固定值是否相等的检验;比较两组数据的总体均值之间是否相等的检验;比较两组以上的多组数据的总体均值之间是否相等的检验。
- 在2~4的检验中,又可以分为两种情况。
- 如果数据大致符合正态分布,那么可以使用参数检验-t检验,它比非参数检验更灵敏,但需要满足正态假设;
- 如果数据不是正态分布的,那么可以使用一些非参数检验。
- 判断原假设是否成立的方法:首先设置显著性水平 α \alpha α(一般取值0.01,0.05,0.1)
(1)统计量的比较:由样本数值生成对应的统计量,由显著性水平会生成统计量的边界。如果统计量与显著性水平的边界数值的大小关系与原假设不符合,即可拒绝原假设。如图中统计量落入(-2,2)外侧,则拒绝原假设。
(2)概率的比较。p值是通过统计量得到的边界处,向拒绝域方向延申范围的概率数值。p值越大,说明统计量越不容易落入拒绝域,也就是越容易落入接受域,越支持原假设。当p值小于显著性水平,则拒绝原假设。
- 其中如果显著性性水平,恰好等于第一类错误(弃真)的概率,这个概率认为原假设成立是由随机现象引起的。
- 如果p值大于 α \alpha α,则认为排除了随机现象的影响,样本信息显著反映了总体。
零、基础知识回顾
0.1 数据的分类
- 统计量: 是统计理论中用来对数据进行分析、检验的变量。从样本推断整体性质,我们通常是通过统计量来推断的,比如通过计算100个灯泡的使用寿命平均值推断总体这个工厂生产出灯泡的使用寿命长短。常见的统计量有:样本均值、样本方差、样本矩、样本K阶中心距、样本偏度、样本峰度等;也有为了统计分析需要而构造的统计量,如统计检验的 z z z 统计量、 t t t 统计量、 χ 2 \chi^{2} χ2 统计量、 F F F 统计量等。
- 统计数据的分类(常用做法):
- 分类数据:计算各组的频数或频率,众数和异众比率,进行列联表分析和 χ 2 \chi^{2} χ2检验等;
- 顺序数据:计算中位数和四分位差,计算等级相关系数等;
- 数值型数据(分为离散型变量、连续型变量,前者如产品数,后者如温度):有更多统计方法分析,如计算各种统计量,进行参数估计和检验等。
0.2 数据的图表展示
- 数据的图表展示:
- 品质数据:即分类数据(频数分布图,分为列联表,交叉表;形态上有饼图、直方图、帕累托图、环形图等)和顺序数据(使用累计频率绘制折线图或者频率图)。
- 数值型数据:
- 如果是分组,如等间距分组后计算组内频数,再用直方图or条形图;
- 如果是未分组,如茎叶图or箱线图,箱线图不太熟悉。可以进行多组数据分布特征的比较,其中的一坨就是一组数据最大值、最小值、中位数、两个四分位数5个特征绘制,如下是不同分布的箱线图;
- 如果是时间序列数据,折线图。
- 如果是多变量数据:散点图、气泡图、雷达图等。
【箱线图小栗子】将11名学生的8门课程绘制成箱线图(图选自贾俊平-统计学第6版P59):
0.3 数据的概括性度量
一、假设检验基础知识
学习原因:在学习概率论与统计分析、多元统计分析等课程的时候,总是觉得自己学习了非常多的假设检验,但是却缺乏系统的归纳,导致自己并不清楚对于怎样的数据、怎样的需求来选择对应的假设检验。
(1)假设检验的几个特点:
- 假设检验贯穿着统计分析的所有环节。在数学建模中,我们既能通过假设检验对数据进行探索性的信息挖掘,给予我们选择模型的依据;
- 能在建模完成后,通过特定的假设检验验证模型的有效性。要会根据数据特点、任务需求选择相对应的假设检验。
- 不同于回归分析等这类成体系、结构性强的统计分析任务,每一个领域都有其可使用的假设检验。例如,回归分析中有模型系数的显著性检验,时间序列分析中有单位根检验、白噪声检验等等。
(2)假设检验的两大分类(基于统计模型的假设检验与不基于统计模型的假设检验):
- 前者基于一个已知的统计模型,并为模型的使用“提供服务”,我们前面提到的线性回归模型的系数显著性检验就是一个典型,对于这种假设检验,可以先学习对应的统计模型,再学习里面的假设检验。
- 后者(本次学习的重点)则是“直接从数据出发”,直接检验数据的某些性质,比如正态性检验、双样本t检验、方差分析等等。
1.1 假设检验的原理
(1)假设检验的本质
【栗子】已知:一班的成绩均值 x ˉ = 108.2 \bar{x}=108.2 xˉ=108.2,样本标准差 s = 4 s=4 s=4,人数 n = 25 n=25 n=25,且根据以往的经验,年级的考试成绩呈现正态分布。那么,级长可以认为年级均分不低于110吗?
简单分析:
总体:整个年级的数学成绩
一个样本:一班的数学成绩
已知:该样本的样本均值
x
ˉ
=
108.2
\bar{x}=108.2
xˉ=108.2
级长的需求:能否通过一班这个样本推测出年级这一总体的均值是否达到110。
- 我们需要对“年级总体均分不低于110”这样的命题做出“是”或“否”的回答,这类问题就被称之为假设检验问题。
- 对假设检验问题进行数理上的检验并给予回答,这个过程就是假设检验。
总结:这种根据样本信息与已知信息,对一个描述总体性质的命题进行“是或否”的检验与回答,就是假设检验的本质。即:假设检验验证的不是样本本身的性质,而是样本所在总体的性质。
假设检验大体上可分为两种:参数假设检验与非参数假设检验。
- 若假设是关于总体的一个参数或者参数的集合,则该假设检验就是参数假设检验,Example.1的假设是关于总体均值的,均值是参数,因此这是一个参数假设检验;
- 若假设不能用一个参数集合来表示,则该假设检验就是非参数假设检验,一个典型就是正态性检验。
1.2 假设检验的推导
(1)假设的建立
栗子1:某年级学生的数学成绩 X X X服从正态分布 X ∼ N ( μ , σ 2 ) X\sim N\left( \mu ,\sigma ^2 \right) X∼N(μ,σ2),抽取一班学生成绩做样本,已知样本均值 x ˉ = 108.2 \bar{x}=108.2 xˉ=108.2,样本标准差 s = 4 s=4 s=4,一班人数 n = 25 n=25 n=25,能否认为总体均值 μ > 110 \mu > 110 μ>110?
命题“总体均值
μ
>
110
\mu > 110
μ>110”是否正确涉及如下两个假设问题:
H
0
:
μ
⩽
110
↔
H
1
:
μ
>
110
H_0:\mu \leqslant 110\leftrightarrow H_1:\mu >110\,
H0:μ⩽110↔H1:μ>110
H
0
H_0
H0被称为原假设,
H
1
H_1
H1被称为备择假设,两个假设必须为互斥关系,因为只有这样,拒绝假设
H
0
H_0
H0才等价于接受假设
H
1
H_1
H1。
- 命题成立的探讨就转化为了拒绝原假设 H 0 H_0 H0的探讨,而不是把注意力放在接受备择假设上,这是因为在数学上我们不能通过一个特殊的样本证明一个假设成立,但是却可以用其推翻(拒绝)一个命题。因此,假设检验本质上就是在探讨如何通过拒绝原假设 H 0 H_0 H0来接受备择假设 H 1 H_1 H1。
- 所以在Example.1,我们很难直接证明命题 μ > 110 \mu > 110 μ>110是成立的,但是却可以通过证明假设 μ ⩽ 110 \mu \leqslant 110 μ⩽110错误间接地验证 μ > 110 \mu > 110 μ>110的成立性。在实际的假设检验中,我们通常将我们想要验证的命题作为备择假设 H 1 H_1 H1,通过检验原假设 H 0 H_0 H0是否被拒绝来判断是否接受 H 1 H_1 H1。
(2)单参数检验的三种类型与原假设的注意事项
尽管我们通常将想要验证的命题作为备择假设
H
1
H_1
H1,但这并不是一个“准则”——有一些假设检验的原/备择假设的设置是固定的,如在检验某个样本所在的总体是否服从某个特定的分布时(如正态性检验),我们通常会如下设置两个假设
H
0
:
样本所在总体服从某分布
↔
H
1
:
样本所在总体不服从某分布
H_0:\text{样本所在总体服从某分布}\leftrightarrow H_1:\,\text{样本所在总体不服从某分布}
H0:样本所在总体服从某分布↔H1:样本所在总体不服从某分布
又例如,在最常见的单参数检验中,“=”只会出现在原假设
H
0
H_0
H0中,而不会出现在备择假设
H
1
H_1
H1中,即我们不会做诸如
H
0
:
μ
≠
110
↔
H
1
:
μ
=
110
H_0:\mu \ne 110\leftrightarrow H_1:\mu =110\,
H0:μ=110↔H1:μ=110
的假设。
最常见的三种单参数检验问题,以均值检验为例:
H
0
:
μ
⩽
μ
0
↔
H
1
:
μ
>
μ
0
H
0
:
μ
⩾
μ
0
↔
H
1
:
μ
<
μ
0
H
0
:
μ
=
μ
0
↔
H
1
:
μ
≠
μ
0
H_0:\mu \leqslant \mu _0\leftrightarrow H_1:\mu >\mu _0 \\ H_0:\mu \geqslant \mu _0\leftrightarrow H_1:\mu <\mu _0 \\ H_0:\mu =\mu _0\leftrightarrow H_1:\mu \ne \mu _0\,
H0:μ⩽μ0↔H1:μ>μ0H0:μ⩾μ0↔H1:μ<μ0H0:μ=μ0↔H1:μ=μ0
其中,前面两种检验被称为单边检验,第三种检验为双边检验。以上三个问题的原假设还有另一种更常见的表达方式:
H
0
:
μ
=
μ
0
↔
H
1
:
μ
>
μ
0
H
0
:
μ
=
μ
0
↔
H
1
:
μ
<
μ
0
H
0
:
μ
=
μ
0
↔
H
1
:
μ
≠
μ
0
H_0:\mu = \mu _0\leftrightarrow H_1:\mu >\mu _0 \\ H_0:\mu = \mu _0\leftrightarrow H_1:\mu <\mu _0 \\ H_0:\mu =\mu _0\leftrightarrow H_1:\mu \ne \mu _0\,
H0:μ=μ0↔H1:μ>μ0H0:μ=μ0↔H1:μ<μ0H0:μ=μ0↔H1:μ=μ0
问:为什么原假设全都设置为“=”号呢?
答:我们以第一个检验问题为例:如果我们接受了
H
1
H_1
H1,意味着
μ
\mu
μ因为显著地大于
μ
0
\mu_0
μ0而拒绝等于
μ
0
\mu_0
μ0的假设,而如果连等于
μ
0
\mu_0
μ0的假设都接受不了,小于
μ
0
\mu_0
μ0就更不用提了。因此,尽管这种写法两者并不互斥,但其在结果上与前面的写法是等效的。
在往后的参数检验中,将统一将原假设的符号设置为“=”,区分不同检验问题只需看备择假设 H 1 H_1 H1即可。
(3)临界值、拒绝域、显著性水平
- 判断原假设是否成立的方法:首先设置显著性水平 α \alpha α(一般取值0.01,0.05,0.1)
(1)统计量的比较:由样本数值生成对应的统计量,由显著性水平会生成统计量的边界。如果统计量与显著性水平的边界数值的大小关系与原假设不符合,即可拒绝原假设。如图中统计量落入(-2,2)外侧,则拒绝原假设。
(2)概率的比较。p值是通过统计量得到的边界处,向拒绝域方向延申范围的概率数值。p值越大,说明统计量越不容易落入拒绝域,也就是越容易落入接受域,越支持原假设。当p值小于显著性水平,则拒绝原假设。
- 其中如果显著性性水平,恰好等于第一类错误(弃真)的概率,这个概率认为原假设成立是由随机现象引起的。
- 如果p值大于 α \alpha α,则认为排除了随机现象的影响,样本信息显著反映了总体。
在Example.1中,因为样本均值 x ˉ \bar{x} xˉ是总体均值 μ \mu μ的无偏估计,那么如果拒绝原假设,即实际有 μ > 110 \mu > 110 μ>110,那么 x ˉ \bar{x} xˉ有很大可能性大于110,这意味着如果实际样本计算出来的 x ˉ \bar{x} xˉ远远大于110,那么原假设有很大可能不成立。为了给出一个拒绝原假设的标准,我们设立一个临界值 C C C,若实际样本计算出来的 x ˉ \bar{x} xˉ满足 x ˉ − 110 > C \bar{x}-110>C xˉ−110>C,我们就拒绝原假设。其中, x ˉ − 110 > C \bar{x}-110>C xˉ−110>C也叫拒绝域:
{
x
ˉ
:
x
ˉ
>
110
+
C
}
\left\{ \bar{x}\,\,: \bar{x}>110+C \right\}
{xˉ:xˉ>110+C}
一旦样本计算的结果落入拒绝域,我们就拒绝原假设;否则,则不能拒绝原假设。不同假设检验的拒绝域不尽相同,但核心的逻辑是完全相同的。
1)用概率确定临界值C
接下来的问题是,我们如何确定临界值 C C C呢?用概率去确定。
由于抽样具有随机性,因此凭借样本的信息去判断总体的性质总是会有犯错的概率——即不论我们是否拒绝原假设 H 0 H_0 H0,我们都有概率犯以下两类错误的其中一种:
- 第一类错误:原假设 H 0 H_0 H0为真,但是数据却落入了拒绝域(因此做出拒绝 H 0 H_0 H0的判断)。犯第一类错误的概率被称为拒真概率 α \alpha α
- 第二类错误:原假设 H 0 H_0 H0为假,但是数据却没有落入拒绝域(因此做出接受 H 0 H_0 H0的判断)。犯第二类错误的概率被称为受伪概率 β \beta β
两种犯错概率相互对立,彼此“矛盾”。在样本量给定的条件下,如果我们想通过对假设检验规则的调整以降低某一类错误概率,必然会导致另一类错误概率的上升。这意味着我们不可能控制它们使其同时保持在一个较低的水准,基于此,我们只能采取折中方案——通常的做法是只限制犯第一类错误的概率 α \alpha α。
2)临界值的确定问题
第一类错误:原假设是正确的,却拒绝了原假设。
第二类错误:原假设是错误的,却没有拒绝原假设。
再回到临界值的确定问题。在定夺临界值的时候,我们要保证发生第一类错误的概率 α \alpha α需要在一个给定的、较小的水平(通常取 α = 0.05 / 0.1 \alpha=0.05/0.1 α=0.05/0.1),此时 α \alpha α又被称为显著性水平。
确定临界值
C
C
C的标准是:原假设
H
0
H_0
H0为真,但是数据却落入拒绝域的概率应当恰好为给定的
α
\alpha
α。在Example.1中,这个概率可以写为:
P
H
0
i
s
t
r
u
e
(
x
ˉ
−
μ
0
>
C
)
=
P
(
x
ˉ
−
110
>
C
)
=
α
P_{H_0\,\,is\,\,true}\left( \bar{x}-\mu _0>C \right) =P\left( \bar{x}-110>C \right) =\alpha
PH0istrue(xˉ−μ0>C)=P(xˉ−110>C)=α
(4)用分布处理概率——构造检验统计量
处理 P ( x ˉ − 110 > C ) P\left( \bar{x}-110>C \right) P(xˉ−110>C),该形式像我们在概统学习中接触的分布的“分位数”,接下来就是要将其构造成某个分布的分位数形式,这样就可以计算出临界值 C C C了。
注意:在本例中110实际上是
μ
\mu
μ在原假设
H
0
H_0
H0正确下的值,而
E
(
x
ˉ
)
=
μ
E\left( \bar{x} \right) =\mu
E(xˉ)=μ,因此概率实际为:
P
(
x
ˉ
−
E
(
x
ˉ
)
>
C
)
,
E
(
x
ˉ
)
=
μ
0
=
110
P\left( \bar{x}-E\left( \bar{x} \right) >C \right) \,\,, E\left( \bar{x} \right) =\mu _0=110
P(xˉ−E(xˉ)>C),E(xˉ)=μ0=110
由于
x
ˉ
\bar{x}
xˉ服从正态分布,且在Example.1中
s
s
s已知,我们便可以构造t统计量了:
P
(
x
ˉ
−
E
(
x
ˉ
)
>
C
)
=
P
(
x
ˉ
−
E
(
x
ˉ
)
s
>
C
s
)
=
α
,
x
ˉ
−
E
(
x
ˉ
)
s
∼
t
n
−
1
\,\,P\left( \bar{x}-E\left( \bar{x} \right) >C \right) =P\left( \frac{\bar{x}-E\left( \bar{x} \right)}{s}>\frac{C}{s} \right) =\alpha \,\,,\frac{\bar{x}-E\left( \bar{x} \right)}{s}\sim t_{n-1}
P(xˉ−E(xˉ)>C)=P(sxˉ−E(xˉ)>sC)=α,sxˉ−E(xˉ)∼tn−1
这意味着,
C
s
\dfrac{C}{s}
sC恰好就是
t
n
−
1
(
1
−
α
)
t_{n-1}\left( 1-\alpha \right)
tn−1(1−α)分位点,而对于一个确定的分布而言,分位点是已知的,因此
C
C
C就被求解出来了
C
=
s
⋅
t
n
−
1
(
1
−
α
)
C=s\cdot t_{n-1}\left( 1-\alpha \right)
C=s⋅tn−1(1−α)
我们将其代入到上述式子中即有
P
(
x
ˉ
−
E
(
x
ˉ
)
s
>
C
s
)
=
P
(
x
ˉ
−
μ
0
s
>
s
⋅
t
n
−
1
(
1
−
α
)
s
)
=
P
(
x
ˉ
>
μ
0
+
s
⋅
t
n
−
1
(
1
−
α
)
)
=
α
P\left( \frac{\bar{x}-E\left( \bar{x} \right)}{s}>\frac{C}{s} \right) =P\left( \frac{\bar{x}-\mu _0}{s}>\frac{s\cdot t_{n-1}\left( 1-\alpha \right)}{s} \right) =P\left( \bar{x}>\mu _0+s\cdot t_{n-1}\left( 1-\alpha \right) \right) =\alpha
P(sxˉ−E(xˉ)>sC)=P(sxˉ−μ0>ss⋅tn−1(1−α))=P(xˉ>μ0+s⋅tn−1(1−α))=α
即:只要
x
ˉ
>
110
+
s
⋅
t
n
−
1
(
1
−
α
)
\bar{x}>110+s\cdot t_{n-1}\left( 1-\alpha \right)
xˉ>110+s⋅tn−1(1−α),我们就可以在显著性水平
α
\alpha
α下拒绝原假设。
- 在上面的过程,我们用已知的统计量构造了一个服从某个特定分布的统计量,帮助我们进行概率的计算,而这个构造出来的统计量,就是检验统计量。
- 不同检验统计量的形式不尽相同,其所服从的分布也不相同,但是假设检验的思路却是有共同之处的:构造检验统计量——输出对应分布的分位点——计算临界值(拒绝域)——做出判断。
在上述例子中,检验统计量为
t
=
x
ˉ
−
μ
0
s
t=\dfrac{\bar{x}-\mu _0}{s}
t=sxˉ−μ0
对应t分布的分位点为
t
n
−
1
(
1
−
α
)
t_{n-1}\left( 1-\alpha \right)
tn−1(1−α)
拒绝域为
x
ˉ
>
110
+
s
⋅
t
n
−
1
(
1
−
α
)
\bar{x}>110+s\cdot t_{n-1}\left( 1-\alpha \right)
xˉ>110+s⋅tn−1(1−α)
python手动实现上述假设检验过程:
## 加载包
import numpy as np
import pandas as pd
from scipy.stats import t
n=25
x_bar=108.2
s=4
mu=110
# 计算检验统计量
tvalue=(x_bar-mu)/s
print('t值为:{}'.format(tvalue))
# 输出分位点
'''
ppf:单侧左分位点
isf:单侧右分位点
interval:双侧分位点
'''
T_isf=t.isf(0.05,n-1) #由于备择假设是大于号,因此应当选用单侧右分位点,0.05为显著性水平a,n-1为自由度
# 如果备择假设是小于号,则应选用单侧左分位点ppf,里面的参数设置不变,依次为显著性水平a与分布自由度
print('分位点为:{}'.format(T_isf))
# 拒绝域
Deny_domain=110+s*T_isf
print('拒绝域的临界点为:{}'.format(Deny_domain))
# 判断
print('样本均值是否位于拒绝域:{}'.format(x_bar>Deny_domain))
print('因此,不能拒绝原假设,不能认为总体均值大于110.')
#t值为:-1.7999999999999972
#分位点为:1.7108820799094282
#拒绝域的临界点为:116.84352831963771
#样本均值是否位于拒绝域:False
#因此,不能拒绝原假设,不能认为总体均值大于110.
当然,拒绝域还可以直接用检验统计量与对应的分布分位点表示
t
>
t
n
−
1
(
1
−
α
)
t>t_{n-1}\left( 1-\alpha \right)
t>tn−1(1−α)
这样更方便,也更普适,因为不用再花时间计算临界值
C
C
C。三种假设检验的拒绝域(以正态分布为例)如下图所示
可以看到,三种假设的分位点分别对应右侧分位点、左侧分位点、双侧分位点。在实际应用中我们便可以根据备择假设 H 1 H_1 H1的符号,选择对应分位点构造拒绝域。
# 直接用检验统计量与分布分位点判断
print('检验统计量是否位于拒绝域:{}'.format(tvalue>T_isf))
# 检验统计量是否位于拒绝域:False
假设利用Example.1中的数据进行双边检验
H
0
:
μ
=
110
↔
H
1
:
μ
≠
110
H_0:\mu =110\leftrightarrow H_1:\mu \ne 110\,
H0:μ=110↔H1:μ=110
则拒绝域为
∣
t
∣
>
∣
t
n
−
1
(
1
−
α
2
)
∣
\left| t \right|>\left| t_{n-1}\left( 1-\frac{\alpha}{2} \right) \right|
∣t∣>∣
∣tn−1(1−2α)∣
∣
# 进行双边检验
## 计算双侧分位点
T_int=t.interval(1-0.05,n-1) # 对于双侧检验(双侧分位点),分位点参数应该输入1-a,这里是1-0.05=0.95
print('检验统计量t的绝对值:{}'.format(np.abs(tvalue)))
print('双侧分位点:{}'.format(T_int))
print('显然,检验统计量不在拒绝域内,因此无法拒绝原假设')
#检验统计量t的绝对值:1.7999999999999972
#双侧分位点:(-2.0638985616280205, 2.0638985616280205)
#显然,检验统计量不在拒绝域内,因此无法拒绝原假设
1.3 假设检验的基本步骤——基于p值
- 采用拒绝域的方法进行假设检验的个缺点:就是分位点值与显著性水平 α \alpha α是相关的。如果我们要在不同的显著水平下检验,就需要计算不同的分位点再比较,很繁琐。
- p值:只要样本信息与假设确定下来,就可以凭借一个不变的指标来判断是否拒绝原假设。p值是在确定的样本观测值下,给出的能拒绝原假设的最小显著性水平,p值只与样本观测值和我们做的假设检验有关。p值越小越可以拒绝原假设。
p值越小越可以拒绝原假设,例如:如果p值为0.001,比0.01的置信水平还要小,我们认为在0.01的置信水平下我们也可以拒绝原假设;而如果p值为0.025,比0.01的置信水平要大,但小于0.05,则我们认为在0.05的置信水平下我们可以拒绝原假设,但在0.01置信水平下不可以拒绝。
p值的形式与我们做的备择假设 H 1 H_1 H1有关:
- 若 H 1 H_{1} H1的符号为 ≠ \ne =,则: p v a l u e = P ( ∣ X ∣ > ∣ T e s t s t a t i s t i c s ∣ ) pvalue=P\left( \left| X \right|>\left| Test\,\,statistics \right| \right) pvalue=P(∣X∣>∣Teststatistics∣)
- 若 H 1 H_{1} H1的符号为>,则: p v a l u e = P ( X > T e s t s t a t i s t i c s ) pvalue=P\left( X>Test\,\,statistics \right) pvalue=P(X>Teststatistics)
- 若 H 1 H_{1} H1的符号为<,则: p v a l u e = P ( X < T e s t s t a t i s t i c s ) pvalue=P\left( X<Test\,\,statistics \right) pvalue=P(X<Teststatistics)
其中:
- X为服从某个特定分布的变量;
- Test statistics为前面提到的检验统计量。
- p值本质上是一种累积概率,对于符号为>的备择假设,p值则是右侧累积概率;对于符号为<的备择假设,p值则是左侧累积概率;而对于相同的检验统计量Test statistics而言,双边检验的p值为某类单边检验的两倍。
# 利用example.1的数据进行三种假设检验
# 利用p值进行假设检验
'''
sf:右尾累积概率
cdf:左尾累积概率
'''
# 若备择假设为mu>110
pvalue=t.sf(tvalue,n-1)
print('备择假设为mu>110的p值为:{}'.format(pvalue))
# 若备择假设为mu<110
pvalue=t.cdf(tvalue,n-1)
print('备择假设为mu<110的p值为:{}'.format(pvalue))
# 若备择假设为mu不等于110
pvalue=t.cdf(tvalue,n-1)*2 # 之所以是左尾累积概率的两倍,是因为右尾累积概率大于0.5,而p值不可能大于1。
print('备择假设为mu不等于110的p值为:{}'.format(pvalue))
#备择假设为mu>110的p值为:0.9577775745385242
#备择假设为mu<110的p值为:0.042222425461475775
#备择假设为mu不等于110的p值为:0.08444485092295155
注:使用p值进行假设检验在实际应用中更常见,python中进行假设检验的所有包都会输出检验统计量与p值,后续的学习中统一使用p值进行假设检验。
python的scipy.stats
模块含有很多可直接使用的各类假设检验api,但是相比于专门进行统计分析的SPSS与R,python的假设检验功能相对较少。如果某种假设检验python没有其对应的api,就需要手动计算p值了。例如后续有关均值向量的Hotelling T2检验。
【总结】基于p值的假设检验基本步骤:
- 确定备择假设 H 1 H_1 H1,备择假设的符号决定了我们使用何种累积概率。
- 明确检验统计量Test statistics的公式,不同假设检验都有其确定的检验统计量,查阅资料找到它!
- 明确检验统计量所服从的分布,才能计算累积概率。
- 根据备择假设 H 1 H_1 H1与检验统计量Test statistics计算p值。
- 将p值与显著性水平 α \alpha α比较,若 p > α p>\alpha p>α,则不能拒绝原假设;若 p < α p<\alpha p<α,则可以拒绝原假设。
1.4 假设检验的分类
将常见的假设检验,按照数据类型、数据特征进行分类,在实际应用中可以直接根据待分析数据的特征以及分析任务选择相应的假设检验:
- 对于一些较为常见且重要的假设检验(如各种t检验),简要学习原理;
- 对于不常见且原理解释较为困难的检验(如正态性检验),学习如何使用。
二、一元数值数据的假设检验
一元数值数据中的组间均值假设检验的内容,学习如何通过样本数据对其所在总体的均值的性质进行检验,并展示如何在python中实现每个检验。内容:
- 正态性检验
- 比较一组数据的总体均值与一个固定值是否相等的检验
- 比较两组数据的总体均值之间是否相等的检验
- 比较两组以上的多组数据的总体均值之间是否相等的检验
在2~4的检验中,又可以分为两种情况。如果数据大致符合正态分布,那么可以使用参数检验-t检验,它比非参数检验更灵敏,但需要满足正态假设;如果数据不是正态分布的,那么可以使用一些非参数检验。
2.1 正态性检验
由于参数检验比非参数检验更灵敏,因此一旦数据是正态分布的,我们应该使用参数检验,此时对数据进行正态性检验就非常有必要了。三种方法判断数据的正态性:可视化判断-正态分布概率图;Shapiro-Wilk检验;D’Agostino’s K-squared检验
(1)概率图
在统计学中,与许多工具用于视觉评估分布,概率图就是其中之一。
# 生成1000个服从正态分布的数据
data_norm = stats.norm.rvs(loc=10, scale=10, size=1000) # rvs(loc,scale,size):生成服从指定分布的随机数,loc:期望;scale:标准差;size:数据个数
# 生成1000个服从卡方分布的数据
data_chi=stats.chi2.rvs(2,3,size=1000)
# 画出两个概率图
fig=plt.figure(figsize=(12,6))
ax1=fig.add_subplot(1,2,1)
plot1=stats.probplot(data_norm,plot=ax1) # 正态数据
ax2=fig.add_subplot(1,2,2)
plot2=stats.probplot(data_chi,plot=ax2) # 卡方分布数据
对于一个给定的样本数据集,概率图:
- 先将数据 x x x进行从小到大的排序,并计算排序后数据 x x x对应的分布分位数;
- 随后,以分位数为横轴,以有序样本值为纵轴,将数据点绘制在一个二维图中。
- 如果数据大致服从目标分布,则数据点会近似地沿着线 y = x y=x y=x分布,如果数据不服从目标分布,我们将会观察到数据点偏离线 y = x y=x y=x。
(2)两种正态性检验
概率图只能粗略地判断数据是否具有正态性,但这并不精准。为了较为准确地判断样本所在总体是否为正态分布,需要进行严格的正态性检验。
正态性检验的两个假设如下:
H
0
:
样本所在总体服从正态分布
↔
H
1
:
样本所在总体不服从正态分布
H_0:\text{样本所在总体服从正态分布}\leftrightarrow H_1:\,\text{样本所在总体不服从正态分布}
H0:样本所在总体服从正态分布↔H1:样本所在总体不服从正态分布
正态性检验的种类非常多,这里只列举两种最常用、最强大的假设检验——小样本下使用Shapiro-Wilk检验;大样本下使用D’Agostino’s K-squared检验。
1)Shapiro-Wilk检验(小样本正态性检验)
Shapiro–Wilk test是正态性检验最为有效的方法之一,是一种在频率统计中检验正态性的方法,其理论原理较为复杂。
该方法适用小样本的正态性检验问题,因为:该检验在每一个样本值都是唯一时的检验效果最好,而一旦样本过多,难免会存在几个样本值重复的情况,这会使该方法的效用大打折扣。
样本量适用范围:样本量不得小于8,小于50最佳,小于2000效果较好,超过5000后不再适用。
2)D’Agostino’s K-squared test(大样本正态性检验)
D’Agostino’s K-squared test主要通过计算偏度(Skewness)和峰度(Kurtosis)来量化数据分布曲线与标准正态分布曲线之间的差异与不对称性,然后计算这些值与正态分布期望值的之间的不同程度。
该方法是一种常用且强大的正态性检验方法,适用于大样本情况。这是因为分布曲线的偏度和峰度容易受到数据量的影响,数据量越大,偏度与峰度的计算就越准确。
样本量适用范围:样本量不得小于4,除此以外越大越好。
(3)同时使用多种方法判断正态性
实际应用中,由于数据的复杂性,仅使用一种方法判断正态性有可能产生一定的误差,因此我们通常同时使用多种方法进行判断。如果不同方法得出的结论不同,此时就需要仔细观察数据的特征,寻找结果不一致的原因。如:若Shapiro-Wilk test显著(非正态),D’Agostino’s K-squared test不显著(正态),则有可能是因为样本量较大,或者样本中存在重复值现象,如果事实确实如此,那么我们就应该采纳D’Agostino’s K-squared test的结论而非Shapiro-Wilk test的结论。
【代码实践】在python中定义一个函数,将概率图、Shapiro-Wilk test、D’Agostino’s K-squared test结合在一起。
data_small = stats.norm.rvs(0, 1, size=30) # 小样本正态性数据集
data_large = stats.norm.rvs(0, 1, size=6000) # 大样本正态性数据集
# 定义一个正态性检验函数,它可以输出:
## 正态概率图
## 小样本Shapiro-Wilk检验的p值
## 大样本D'Agostino's K-squared检验的p值
from statsmodels.stats.diagnostic import lilliefors
from typing import List
def check_normality(data: np.ndarray, show_flag: bool=True) -> List[float]:
"""
输入参数
----------
data : numpy数组或者pandas.Series
show_flag : 是否显示概率图
Returns
-------
两种检验的p值;概率图
"""
if show_flag:
_ = stats.probplot(data, plot=plt)
plt.show()
pVals = pd.Series(dtype='float64')
# D'Agostino's K-squared test
_, pVals['Omnibus'] = stats.normaltest(data)
# Shapiro-Wilk test
_, pVals['Shapiro-Wilk'] = stats.shapiro(data)
print(f'数据量为{len(data)}的数据集正态性假设检验的结果 : ----------------')
print(pVals)
check_normality(data_small,show_flag=True)
check_normality(data_large,show_flag=False) # 当样本量大于5000,会出现警告
2.2 均值检验
进行一元数值样本的总体均值的检验,每种均值检验都会有相应的参数检验(t检验)与非参数检验可选。
(1)单组样本均值假定的检验
应用场景:检验一个样本所在总体的均值是否和一个参考值相等,这就是单组样本均值假定的检验。
Example.1的检验问题实际上就是这种检验(不过备择假设需要换成 ≠ \ne =).
Example.2 必胜中学里,陈老师班结束了一次英语考试。由于班级人数较多,短时间内很难完成批改与统计,王老师又很想知道此次班级平均分与级长定的班级均分137的目标是否有显著区别,于是他随机抽取了已经改好的10名同学的英语成绩:
136,136,134,136,131,133,142,145,137,140
问:王老师可以认为此次班级平均分与级长定的班级均分137的目标没有显著区别吗?
这就是一个典型的单组样本均值假定的检验,比较的是这个样本(10个同学的英语成绩)所代表的总体均值(班级英语成绩均值)是否与参考值137相等。那么对于这类问题,我们有两种检验可以使用:单样本t检验与wilcoxon检验。
1)单样本t检验(One Sample t-test)
t检验要求总体服从正态分布,即有
x
∼
N
(
μ
,
σ
2
)
x\sim N\left( \mu ,\sigma ^2 \right)
x∼N(μ,σ2)
在Example.2中,这意味着要求王老师班级中每一位同学的英语成绩都服从正态分布。在t检验中,总体的标准差
σ
\sigma
σ是不需要事先知道的,这与概率论与数理统计中的z检验不一样,因此t检验在实际应用中更广泛。
使用p值进行假设检验的基本流程。(按照1.1.3)
单样本t检验的两个假设为:
H
0
:
μ
=
μ
0
↔
H
1
:
μ
≠
μ
0
H_0:\mu =\mu_0\leftrightarrow H_1:\mu \ne \mu_0\,
H0:μ=μ0↔H1:μ=μ0
对应的检验统计量为:
T
e
s
t
s
t
a
t
i
s
t
i
c
s
=
x
ˉ
−
μ
0
s
Test\,\,statistics=\frac{\bar{x}-\mu _0}{s}
Teststatistics=sxˉ−μ0
检验统计量服从的分布为:
T
e
s
t
s
t
a
t
i
s
t
i
c
s
∼
t
n
−
1
Test\,\,statistics\sim t_{n-1}
Teststatistics∼tn−1
其中,
n
n
n为样本量。我们可以根据以上信息计算p值。
2)wilcoxon符号秩和检验
若样本数据非正态,我们应当使用wilcoxon符号秩和检验。该检验是非常经典的非参数检验。
简介非参数检验的原理:
(1)首先什么是“秩”。
设
x
1
,
⋯
,
x
n
x_1,\cdots ,x_n
x1,⋯,xn为来自连续分布的简单随机样本,我们将它们进行从小到大排序,得到有序样本
x
(
1
)
⩽
⋯
⩽
x
(
n
)
x_{\left( 1 \right)}\leqslant \cdots \leqslant x_{\left( n \right)}
x(1)⩽⋯⩽x(n)。观测值
x
i
x_i
xi在有序样本中的序号
r
r
r被称为
x
i
x_i
xi的秩。所以,秩其实就是样本值
x
i
x_i
xi在所有样本中“第几小”的意思。
秩和检验,那肯定得有“秩的和”。设
x
1
,
⋯
,
x
n
x_1,\cdots ,x_n
x1,⋯,xn为样本,对它们做绝对值变换,然后记
R
i
R_i
Ri为
∣
x
i
∣
|x_i|
∣xi∣在
(
∣
x
1
∣
,
⋯
,
∣
x
n
∣
)
\left( |x_1|,\cdots ,|x_n| \right)
(∣x1∣,⋯,∣xn∣)的秩。记
I
(
x
i
>
0
)
=
{
1
,
x
i
>
0
0
,
x
i
≠
0
I\left(x_{i}>0\right)=\left\{\begin{array}{ll} 1, & x_{i}>0 \\ 0, & x_{i} \neq 0 \end{array}\right.
I(xi>0)={1,0,xi>0xi=0
则称
W
+
=
∑
i
=
1
n
R
i
I
(
x
i
>
0
)
W^{+}=\sum_{i=1}^{n} R_{i} I\left(x_{i}>0\right)
W+=i=1∑nRiI(xi>0)
为秩和统计量。
(2)wilcoxon符号秩和检验步骤。
单样本均值比较的wilcoxon符号秩和检验的两个假设依旧为
H
0
:
μ
=
μ
0
↔
H
1
:
μ
≠
μ
0
H_0:\mu =\mu_0\leftrightarrow H_1:\mu \ne \mu_0\,
H0:μ=μ0↔H1:μ=μ0
对于待分析样本
x
1
,
⋯
,
x
n
x_1,\cdots ,x_n
x1,⋯,xn,让所有样本减去对比值
μ
0
\mu_0
μ0,得:
x
1
−
μ
0
,
⋯
,
x
n
−
μ
0
x_1-\mu_0,\cdots ,x_n-\mu_0
x1−μ0,⋯,xn−μ0,计算出它们的秩和统计量
W
+
W^{+}
W+。
(3)检验统计量便可以计算为
T
e
s
t
s
t
a
t
i
s
t
i
c
s
=
W
+
−
n
(
n
+
1
)
4
n
(
n
+
1
)
(
2
n
+
1
)
24
Test\,\,statistics=\frac{W^{+}-\frac{n(n+1)}{4}}{\sqrt{\frac{n(n+1)(2 n+1)}{24}}}
Teststatistics=24n(n+1)(2n+1)W+−4n(n+1)
检验统计量近似服从分布
T
e
s
t
s
t
a
t
i
s
t
i
c
s
→
N
(
0
,
1
)
Test\,\,statistics\rightarrow N\left( 0,1 \right)
Teststatistics→N(0,1)
其中,
n
n
n为样本量。
(4)p值的计算与备择假设 H 1 H_1 H1的符号有关,这一点与t检验相同。
该方法最好在样本量大于25的情况下使用,因为这样检验统计量才近似服从正态分布。Example.2中样本量为10,严格来说并不适合。
# 定义一个单组样本均值检验函数,使它可以同时输出t检验与wilcoxon符号秩和检验的p值
def check_mean(data,checkvalue,confidence=0.05,alternative='two-sided'):
'''
输入参数
----------
data : numpy数组或者pandas.Series
checkvalue : 想要比较的均值
confidence : 显著性水平
alternative : 检验类型,这取决于我们备择假设的符号:two-sided为双侧检验、greater为右侧检验、less为左侧检验
输出
-------
在两种检验下的p值
在显著性水平下是否拒绝原假设
'''
pVal=pd.Series(dtype='float64')
# 正态性数据检验-t检验
_, pVal['t-test'] = stats.ttest_1samp(data, checkvalue,alternative=alternative)
print('t-test------------------------')
if pVal['t-test'] < confidence:
print(('目标值{0:4.2f}在显著性水平{1:}下不等于样本均值(p={2:5.3f}).'.format(checkvalue,confidence,pVal['t-test'])))
else:
print(('目标值{0:4.2f}在显著性水平{1:}下无法拒绝等于样本均值的假设.(p={2:5.3f})'.format(checkvalue,confidence,pVal['t-test'])))
# 非正态性数据检验-wilcoxon检验
_, pVal['wilcoxon'] = stats.wilcoxon(data-checkvalue,alternative=alternative)
print('wilcoxon------------------------')
if pVal['wilcoxon'] < confidence:
print(('目标值{0:4.2f}在显著性水平{1:}下不等于样本均值(p={2:5.3f}).'.format(checkvalue,confidence,pVal['wilcoxon'])))
else:
print(('目标值{0:4.2f}在显著性水平{1:}下无法拒绝等于样本均值的假设.(p={2:5.3f})'.format(checkvalue,confidence,pVal['wilcoxon'])))
return pVal
不论是t检验还是wilcoxon检验,p值都相当大,显然我们无法拒绝原假设,王老师可以认为班级均分为137。
(2)两组样本的均值相等性检验
1)组别间独立
双样本t检验(Two Sample t-test)
Mannwhitneyu秩和检验
2)成对组别
成对t检验
成对wilcoxon符号秩和检验
(3)方差分析(多组样本间的均值相等性检验)
前面学习了单组样本以及两组样本的均值检验,接下来开始学习同时对多组样本的总体进行均值检验。
方差分析(Analysis of variance,ANOVA):对多个总体的均值做比较检验的统计方法。后面重点学习:单因素方差分析的原理与思想,对于多因素方差,学习如何应用。
1)方差分析入门
【方差分析】对多个总体的均值做比较检验的统计方法。单/多因素方差分析中的因素?三个方差分析问题的举例:
- 四种不同商标的同一类型产品的质量指标是否一致。
- 对同样的商品,采取三种不同的销售方式是否会导致显著不同的销售量。
- 五个不同居民区的居民购买力是否存在显著差异。
在这些例子中,商标、销售方式、居民区这些区分不同组别的依据就是因素(也叫因子),通常用大写字母 A , B , C A,B,C A,B,C等表示这些因素,而一个因素所处的不同的状态被称为水平,用 A 1 , A 2 A_1,A_2 A1,A2等表示。在这三个例子中,因素都只有一个,因此它们都是单因素方差分析;若因素有多个,则被称为多因素方差分析。
对于单因素方差分析而言,进行比较的样本个数,本质上就是该因素的水平个数。例如,在举例1.中,我们其实比较的是四个商标不同的产品质量指标样本均值(所在总体的均值),在该例中,因素“商标”的因子水平个数为4。
方差分析的多个总体均值比较是怎么个比较法呢?不是两两之间互相比较,是同时比较它们,写成假设检验的形式有:
H
0
:
μ
1
=
μ
2
=
μ
i
=
⋯
μ
k
↔
H
1
:
μ
i
不全相等
H_0:\mu _1=\mu _2=\mu _i=\cdots \mu _k\leftrightarrow H_1: \mu _i\text{不全相等}
H0:μ1=μ2=μi=⋯μk↔H1:μi不全相等
其中,
k
k
k为样本个数(因子水平个数)。
总体均值不全相等的情形:
2)单因素方差分析
3)双因素方差分析
- 单因素方差分析具备比较多个总体均值的功能,但其实它的本质是探究因素 A A A是否显著。若显著,则意味着这些总体均值的不相等是因为因素 A A A导致的;若不显著,则意味着因素 A A A不能导致他们不相等。
- 如果我们将因素个数提升至两个,则此时方差分析就变为了双因素方差分析。值得注意的是,双因素方差分析不仅仅探究两个因素是否显著,还要探究两个因素的交互项是否显著(类似回归分析)。对于这种多因素的方差分析,借用线性回归模型来解决问题可以事半功倍。
三、小练习
三台车床生产同一种滚珠,我们从中各抽取13、14、16个产品,测得直径分别为:
甲车床:15.0,14.5,15.2,15.5,14.8,15.1,15.2,14.8,13.9,16.0,15.1,14.5,15.2;
乙车床:15.2,15.0,14.8,15.2,15.0,15.0,14.8,15.1,14.8,15.0,13.7,14.1,15.5,15.9;
丙车床:14.6,15.0,14.7,13.9,13.8,15.5,15.5,16.2,16.1,15.3,15.4,15,9,15.2,16.0,14.8,14.9
假设显著性水平为 α = 0.01 \alpha=0.01 α=0.01,问:
-
甲/乙车床生产的滚珠直径是否服从正态分布?
-
甲/乙车床生产的滚珠直径的方差是否存在显著性差异?
-
甲/乙车床生产的滚珠直径是否存在显著性差异?
-
三台车床生产的滚珠直径是否存在显著性差异?在单因素方差分析中,本题的因素是什么?
附:时间安排
Task | 内容 | 时间 |
---|---|---|
Task01 | 假设检验1:方法论与一元数值检验 | 8-13 —— 8-18周四 |
Task02 | 假设检验2:多元数值向量检验 | 8-29 —— 8-20周六 |
Task03 | 假设检验3:分类数据检验 | 8-21 —— 8-22周一 |
Task04 | 应用随机过程与仿真系统 | 8-23 —— 8-25周四 |
Task05 | 金融量化分析与随机模拟 | 8-26 —— 9-28周日 |
Reference
[1] https://github.com/Git-Model/Modeling-Universe/tree/main/Data-Story
[2] datawhale course
[3] 统计学里的数据正态性检验
[4] 卡方分布:https://en.wikipedia.org/wiki/Chi-squared_distribution