最小样本量n的选择

本文探讨了在假设检验中选择最小样本量的重要性,特别是在数据挖掘和数据分析中。通过介绍点击率检验,阐述了确定研究对象、选择检验方法和计算最小样本量的过程。文章以Python的statsmodels包为例,展示了如何计算最小样本量,并指出样本量、显著性水平α、检验功效(1-β)、效应量之间的关系。最后,提出了一个开放性问题关于期望效果变化对样本量的影响。

1 前言

读曼昆的经济学原理的时候,印象最深刻的一句话是:People face trade-offs, the cost of something is what you give up to get it. 简单来说就是事物都有成本,每个选择都面临取舍。这句话在生产环境中尤为合适。当研发新药的时候,当金融机构对策略进行分析的时候,当判断系统某个新功能是否有效的时候,在一切需要假设检验的地方,就会面临检验样本量的选择。样本量太小,则检验的可信度不高,没有说服力;样本量太大,则成本过高,不可取。在这种情况下,如何选择使样本有代表性、使检验有效的最小样本量变得尤其重要。

2 过程介绍

开始之前先回顾一下假设检验的基础概念。类似于反证法,通常我们将想要拒绝的假设(比如实验组与对照组无差异)设为原假设(H0),想要证明的假设(双边:实验组与对照组显著不同;单边:实验组明显优于/劣于对照组)设为备择假设(H1)。实验目的为推翻原假设。

犯第一类错误(拒真)的概率为α,也叫做显著性水平;第二类错误(受伪)的概率为β。则检验功效(power of effect)为1-β,也就是当原假设为假时,正确拒绝原假设的概率。

此外,检验效应量(effect size)是衡量效应大小的指标,可以用来反映具有显著差异的研究结果是否具有实际意义或重要性。它通常是均值的组间差值或标准化差值,比率的组间差值或比值(RR、HR)、OR,或相关系数、回归系数等。由于效应量是事后的概念,而最小样本量选取是事前的概念,因此通常可通过历史数据或预期本次试验结果得出所需要的效应量。

2.1 确定研究对象

在考虑用什么检验方法之前,首先要明确的是我们的研究对象。考虑的思路如下:

  • 比较的是均值还是方差?(影响检验方法的选择);

  • 如果是均值,是绝对值(点击量)还是比率(点击率)?(影响标准差的计算)

  • 是有放回抽样还是无放回抽样?(影响标准差的计算)

  • 独立样本还是不独立?(影响标准差的计算)

  • 方差已知还是未知?(影响分布的选择)

  • 单样本还是两样本?(影响标准差的计算)

  • 单边检验还是双边检验?(影响查表统计量分位数α或α/2的选择)

  • 等等。

考虑到方差的检验可以另开一篇方差分析来讲(包括F检验,ANOVA等),这里我们侧重均值/比率的假设检验。

2.2 确定检验方法

明确好研究对象之后,我们就可以选择合适的检验方法。若对象为均值,多采用Z检验/t检验;若为比率,则可以考虑采用卡方检验。当确定了检验方法,我们可以写出统计量的公式,反推之后即可得到最小样本量n的计算公式。统计量公式繁多,这里不再赘述。均值公式举例如下图。注意,如为双边检验,则将α改成α/2即可。

均值的检验方式选择

2.3 点击率检验举例

在生产环境中AB test经常被提到,比如当前用户在app上看到的是A型广告,我们想知道如果换成B型广告,点击率是否会优于A。考虑到点击或不点击服从(0,1)离散Bernoulli分布,这个问题其实是一个比率的两样本卡方检验,也是一个二乘二列联表检验,这里也等同于z检验。假设当前A型广告点击率为30%,我们希望B型广告能提升10%的点击率至30%*1.1=33%。当两组样本的样本量和方差相似时,可用Cohen’s d 来计算标准均差从而衡量效应量。带入最小样本量n的计算公式中可得每组的n为1881,因此总样本量为3762。计算由下一节中代码实现。

2.4 代码实现

最小样本量计算的代码实现有很多种方式,常用的如Python中的statsmodels包。

from statsmodels.stats.power import GofChisquarePower
from statsmodels.stats.power import zt_ind_solve_power
from statsmodels.stats.proportion import proportion_effectsize as es
#卡方检验
#设定显著性水平为0.05,检验功效为0.8,效应量为标准均差计算方式,对照组和实验组的(预期)比率分别为30%和33%,实验组和对照组数量相等,双边检验。
GofChisquarePower().solve_power(effect_size=es(prop1=0.33, prop2=0.30, method= 'normal'), alpha=0.05, power=0.8,n_bins=2)
#z检验
#设定显著性水平为0.05,检验功效为0.8,效应量为标准均差计算方式,对照组和实验组的(预期)比率分别为30%和33%,实验组和对照组数量相等,双边检验。
zt_ind_solve_power(effect_size=es(prop1=0.33, prop2=0.30, method= 'normal'), alpha=0.05, power=0.8, ratio=1.0, alternative="two-sided")

结果如下。

最小样本量计算结果

注意此处为过剩近似,且卡方检验显示的最小样本量为每组样本量,z检验显示的最小样本量为试验的总样本量。可知每组最小样本量为1881,总样本量为3762。

此外:常用α为0.05,常用β为0.2。从中我们也可以看出偏好。人们倾向于严格控制拒真的概率,为此宁愿付出接受错误原假设的代价。

3 小结

假设检验方法千千万,但万变不离其宗。只要明确了研究对象,接下来的步骤就顺理成章非常顺滑。样本大小、显著性水平α、检验功效(1-β)、效应量,给定其中任意三个量,我们就可以推算出第四个量。网络上也有很多现成的AB test计算器,例如Evan's Awesome A/B Tools[1],可供大家参考。

最后留一个开放性问题。还是刚刚的例子,当期待B型广告的点击率提升得更多时,需要的最小样本量是增多还是减少呢?

参考资料

[1]

Evan's Awesome A/B Tools: https://www.evanmiller.org/ab-testing/sample-size.html

### 影响因素 - **显著性水平(α)**:也称为第一类错误率,是指在原假设为真的情况下拒绝原假设的概率。常见的显著性水平为0.05,即有5%的概率会错误地拒绝原假设。显著性水平越低,所需的最小样本量越大[^1]。 - **统计功效(1 - β)**:β为第二类错误率,是指在原假设为假的情况下接受原假设的概率。统计功效反映了实验能够检测到真实差异的能力,常见的统计功效要求为0.8或0.9。统计功效越高,所需的最小样本量越大[^1]。 - **效应量**:表示A组和B组之间差异的大小。效应量越大,说明两组之间的差异越明显,所需的最小样本量就越小。效应量的计算方法因实验指标的不同而有所差异,例如对于均值差异,可以使用Cohen's d来衡量[^1]。 - **方差**:数据的离散程度。方差越大,说明数据越分散,为了准确检测出两组之间的差异,就需要更大的样本量。 ### 计算方法 - **均值差异检验**:当实验指标为均值时,可使用以下公式计算最小样本量: $$n = \frac{(Z_{1 - \frac{\alpha}{2}}+Z_{1 - \beta})^2\times2\sigma^2}{\delta^2}$$ 其中,$n$为每组所需的样本量,$Z_{1 - \frac{\alpha}{2}}$是对应显著性水平$\alpha$的双侧Z值,$Z_{1 - \beta}$是对应统计功效$1 - \beta$的Z值,$\sigma^2$是总体方差,$\delta$是预期的效应量(两组均值之差)。 - **比例差异检验**:当实验指标为比例时,计算公式为: $$n=\frac{(Z_{1 - \frac{\alpha}{2}}\sqrt{2p(1 - p)}+Z_{1 - \beta}\sqrt{p_1(1 - p_1)+p_2(1 - p_2)})^2}{(p_1 - p_2)^2}$$ 这里,$p_1$和$p_2$分别是A组和B组的预期比例,$p=\frac{p_1 + p_2}{2}$。 在Python中,可以使用`statsmodels`库来计算最小样本量,以下是一个简单的示例代码: ```python import statsmodels.stats.api as sms # 设定参数 alpha = 0.05 power = 0.8 effect_size = 0.2 # 计算最小样本量 sample_size = sms.NormalIndPower().solve_power(effect_size=effect_size, power=power, alpha=alpha) print(f"每组所需的最小样本量: {sample_size}") ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值