文章目录
假设检验和P值那些事
记得大学时候学习概率论与数理统计的时候,学习过假设检验,但我不记得课本上有提到过P值。后来翻阅了一些资料,大概弄明白了它们之间的关系,本文旨在以浅显易懂的语言描述严密的数学知识。
假设检验
在《Head First Statistics》一书中,作者给假设检验的定义是“Hypothesis tests give you a way of using samples to test whether or not statistical claims are likely to be true”。其实定义不重要,重要的是我们需要知道假设检验能做什么:以概率统计的视角判别一个统计假说是否成立。
下面举一个烂大街的例子:我有一枚专门用于玩抛硬币猜正反面的游戏的硬币,我需要判断这枚硬币是否是正常的(抛硬币游戏中出现正反面的概率相等)。所以我做了一个假说:该枚硬币是正常的,即抛硬币游戏中出现正面的概率为0.5。
那我现在需要做实验去验证我说的对不对。我抛了20次,正面朝上11次,背面朝上9次(设正面朝上记为1,反面朝上记为0)。基于这个实验结果,我应该做怎样的判断呢?
根据假设检验的一般步骤:
- 建立假设
- 寻找检验统计量
- 确定显著性水平和拒绝域
- 做出判断
第一步中我们的原假设(null hypothesis)为该枚硬币是正常的,备择假设(alternate hypothesis)为该硬币不正常。
注:当原假设正确,而由于样本的随机性使得样本观测值落在拒绝域(critical region或rejection region)而拒绝原假设产生的错误称为第一类错误;当原假设错误,而样本观测值落在接受域而接受原假设产生的错误称为第二类错误。
第二步中根据中心极限定理可知随机变量服从正态分布。这里我们的检验统计量选择(这里的服从自由度为的分布),所以我们使用分布来估计投掷的均值(这里为样本均值,为原假设中的均值(期望),为样本标准差,为样本个数)。
注:分布用于根据小样本来估计呈正态分布且方差未知的总体的均值,称为检验。如果总体方差已知(例如在样本数量足够多时),则应该用正态分布来估计总体均值,称为检验。
第三步中显著性水平(significance level,拒绝原假设时概率阈值)我们一般采用0.05(当然,你也可以使用0.1或者其它)。这个0.05的意思是观测值落在拒绝域的概率为0.05,概率为0.05说明这是小概率事件,而在一次测试中发生了小概率事件,所以我们有足够的理由拒绝原假设。
接下来我们应该计算拒绝域了。对于分布求0.025和0.975的分位数分别为-2.093024和2.093024(即的上下界,左右两边各是0.025,合起来就是0.05的拒绝域),我们可以反推出的上下界为0.3111171和0.7888829(这个区间就是接受域)。
注:对于拒绝域来说,有单边和双边情况,我们这里显然是双边的情况。
第四步做出判断,我们实验的结果的均值是0.4380858,我们在0.05的显著性水平下得到的接受域是,实验结果落在接受域,所以我们不能拒绝原假设。这里的不能拒绝指的是我们没有足够的理由推翻原假设,但是这并不代表原假设一定正确。
P值
上面讲了检验假设的一般过程,好像跟P值没什么关系?但是P值其实和检验假设息息相关的。上面的求解过程是通过判断样本观测值是否落在拒绝域而做出判断的,其实我们还可以通过计算P值直接进行判断。
那么什么是值呢?《Head First Statistics》给出的定义是“A p-value is the probability of getting the results in the sample, or something more extreme, in the direction of the critical region.”。我的理解就是P值是在原假设成立的情况下,出现比当前样本观测值更极端(包括当前样本观测值)情况的概率。
其实这样说还是挺抽象的,我们通过计算来进行说明。
我们把检验假设步骤中的第三步修改为:确定显著性水平和计算P值
在我们的实验中
然后我们通过查表可以得到0.4380858对应的上侧分位数为 0.3331321(和-0.4380858对应的下侧分位数相同),因为我们的实验中是双边情况,所以
在确定了显著性水平的情况下(),如果计算出的,说明观察值不合理,也就是样本均值离假设均值太远了,因此拒绝原假如果计算计算出的,则我们不能拒绝原假设。
注:设连续型随机变量的分布函数为,密度函数为,对于任意,假如满足条件
则称为分布的分位数,或称为下侧分位数。假如满足
则称为分布的分位数。
通俗地理解分位数就是对应某个概率面积的横坐标,如果是左侧面积(概率)叫下侧分位数,如果是右侧面积(概率)叫上侧分位数。
R中的实践
好的,下面我们来看如何在R中重复上面的实验:
产生一个随机的模拟序列(二项分布,生成0和1)
flips <- rbinom(20, 1, 0.4)
结果如下:1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1
使用R内置的检验函数如下:
t.test (flips, mu=0.5)
输出结果如下:
如果需要我们手动计算上面这些值,我们是否可以计算出来呢?计算的过程就是上面讲解假设减压和P值的过程。
首先值的计算很简单,使用公式即可,代码如下,结果为0.4380858
(mean(flips) - 0.5) / (sd(flips) / sqrt(length(flips)))
指代的是自由度
接下来我们计算P值,通过计算-0.4380858的下侧分位数再乘以2可得,代码如下,结果为0.6662642
pt(-0.4380858, 19) * 2
在来看我们的置信区间,其实这里就是我们所要求的接受域
左侧计算代码:qt(0.025, 19) * (sd(flips) / sqrt(20)) + 0.55
结果为:0.3111171
右侧计算代码:qt(0.975, 19) * (sd(flips) / sqrt(20)) + 0.55
结果为:0.7888829
参考文献
[1] 茆诗松. 概率论与数理统计 (第二版)[M]. 2000.
[2] Griffiths D. Head first statistics[M]. Oreilly Vlg Gmbh & Co, 2009.