R语言统计入门-第九章

第九章 功效与样本容量的计算

9.1 功效计算原则

复习下前面的假设检验的基本原理。 1. 首先定义一个检验统计量; 2. 根据该统计量的值决定是否接受原假设; 在原假设成立的条件下,检验统计量落入拒绝域的概率等于事先给定的显著性水平(α)。基于此,可以构建接受域和拒绝域。 功效是指拒绝错误原假设的可能性大小。

9.1.1 单样本 t 及配对样本 t 检验的功效

考虑下样本均值与给定值进行比较的情形。比如,在一个对比试验中,想用配对样本 t 检验来验证治疗方案A与B的效果差异是否为零。 令真是差异为\(\delta\)。在其他模型设定不变的情形下,即使零假设不成立,也能推出检验统计量服从非中心 t 分布。该分布除了依赖于普通 t 分布具有的自由度参数外,还依赖于一个非中心参数。对于配对 t 检验而言,非中心参数 v\(\delta\)、样本标准差\(\sigma\)和样本容量 n 的函数,具体如下: \[ v=\frac{\delta}{\sigma/\sqrt{n}} \] 也就是真实差异除以样本均值的标准差。 在R中,通过向pt函数添加ncp参数即可得到非中心 t 分布的累计分布图,如下:

#下列语句展示了ncp=3,df=25时的非中心t分布的累计分布图
#图中的垂线表示显著性水平为0.05时双边检验的接受域的上界
curve(pt(x,25,ncp = 3),from = 0,to = 6)
abline(v=qt(.975,25))

#可以看到,分布曲线的大部分落入了拒绝域。
#其中,垂线和垂线围成的区域面积就是检验统计量落入接受域的概率
#用下面的代码计算这个概率
pt(qt(.975,25),25,ncp = 3)
## [1] 0.1779891

可以看到,这个概率约等于0.18,而功效等于1减去这个概率,即为0.82。对于功效而言,其值越接近于1越好。 注意,功效(通常设定为\(\beta\))的取值依赖于\(\delta\)\(\sigma\)\(n\)\(\alpha\)这4个变量。确定其中任意3个变量,便可以通过调整第4个变量的大小来获得给定的功效。也可以通过类似的方式确定某次实验所必需额样本容量:首先确定想要得到的功效(通常令\(\beta=0.80\)\(\beta=0.90\))、显著性水平(通常\(\alpha=0.05\)),以及“最小相关差异”(MIREDIF)或者最小有意义差异(SMD)\(\delta\),这样就得到一个可用来求解样本容量\(n\)的方程。对于n值,要取整。

9.1.2 两样本t检验的功效

计算两样本t检验的功效与单样本的差不多,只是计算参数方法略有不同: \[ v=\frac{\delta}{\sigma\sqrt{1/n_1+1/n_2}} \]

9.1.3 近似方法

为便于手工计算,通常假设标准差已知,从而化简相应的计算公式。此时,可以用对于标准正态分布情况下的检验来代替t检验。这种做法的优势在于,根据这种算法的公式,能够方便地反解出n的大小: \[ n=(\frac{\Phi_{\alpha/2}+\Phi_\beta}{\delta/\sigma})^2 \qquad 单样本 \\ n=2\times(\frac{\Phi_{\alpha/2}+\Phi_\beta}{\delta/\sigma})^2\qquad两样本,每组 \] 其中\(\Phi_x\)代表正态分布的\(x\)分位数。上述公式是针对双边检验的情形,对于单边检验,将\(\alpha\)代替\(\alpha/2\)即可。

9.1.4 比较比例的功效

假设想要比较两类人群的发病率差异,此时,得先确定从两个群体中进行抽样的样本量。也就是说,要像8.2节prop.test和chisq.test.中所讲的那样对两个二项分布进行比较。 假设两个总体的数量相等,则有如下公式: \[ n=[\frac{\Phi_{\alpha/2}\sqrt{2p(1-p)}+\Phi_\beta\sqrt{p_1(1-p_1)+p_2(1-p_2)}}{\left|p_2-p_1\right|}]^2\\ 其中p=(p_1+p_2)/2 \]

9.2 两样本问题

下面案例取自Altman(1991)。该案例研究了饮食中摄入牛奶对身高的影响。在案例中,令两组样本分别摄入不同的饮食,并分别测量两组样本的身高。那么,当功效为90%,双边检验的显著性水平位1%时,多大的样本量才能够保证当样本所对应的分布,其标准差为2 cm时,检验到的两个总体的差异为0.5 cm?

power.t.test(delta = 0.5, sd = 2, sig.level = 0.01, power = 0.9)
## 
##      Two-sample t test power calculation 
## 
##               n = 477.8021
##           delta = 0.5
##              sd = 2
##       sig.level = 0.01
##           power = 0.9
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

其中delta表示真实差异,sd表示真实标准差。容易看到,上述代码计算得出的样本容量结果是分数。自然,需要对其取整到478.在原文献中,通过诺模图的方法计算,得到的结果是450.导致这种结果差异的原因可能在于,从诺模图上读取数据难度较大,难以精确。运行下面的代码,可以计算出每组样本量为450时,试验对应的检验功效的大小。

power.t.test(n = 450, delta = 0.5, sd = 2, sig.level = 0.01)
## 
##      Two-sample t test power calculation 
## 
##               n = 450
##           delta = 0.5
##              sd = 2
##       sig.level = 0.01
##           power = 0.8784433
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

上述计算的过程其实是给定5个变量(power,sig.level,delta,sd和n)中的任意4个值,则函数自动计算出未知的那个。除此之外,该函数还有两个可选参数:alternative和type。其中,前者用来指定单边检验,后者用来指定单样本检验。关于前者的例子如下:

power.t.test(delta = 0.5, sd = 2, sig.level = 0.01, power = 0.9, alternative = "one.sided")
## 
##      Two-sample t test power calculation 
## 
##               n = 417.898
##           delta = 0.5
##              sd = 2
##       sig.level = 0.01
##           power = 0.9
##     alternative = one.sided
## 
## NOTE: n is number in *each* group

9.3 单样本问题及配对样本检验

在power.t.test函数中设定参数type=“one.sample”,可以用来对单样本进行检验。同样,设定type=“paired”可以用来进行配对检验。 在研究配对数据时,通常在表述上回遇到一个陷阱:通常把个体间的方差(intra-individual variation)认为是对“相同样本重复测量得到的方差”。试验中,对样本进行多次测量,并计算出个样本间的标准差即可。然而,当指定power.t.test函数的sd参数时,需要将前面得到的标准差乘以\(\sqrt{2}\)才行。举个例子,现已知不同样本之间的标准差为10,显著性水平位5%,功效为85%,用下面的代码可以计算出配对检验检测差异为10时所需要的样本量:

power.t.test(delta = 10, sd = 10*sqrt(2), power = 0.85, type = "paired")
## 
##      Paired t test power calculation 
## 
##               n = 19.96892
##           delta = 10
##              sd = 14.14214
##       sig.level = 0.05
##           power = 0.85
##     alternative = two.sided
## 
## NOTE: n is number of *pairs*, sd is std.dev. of *differences* within pairs

9.4 比例的比较

计算比例比较试验所需要的样本数量和其他相关指标,可以用power.prop.test。该函数的计算过程使用了正态性近似,因而,当对应表格中的频数小于5时,结果可能不太可靠。 power.prop.test函数的用法与power.t.test类似。只是前者用两组总体假定的概率p1和p2来代替后者的delta和sd参数。目前,没法用该函数指定解决单样本检验的问题。 下面的例子取自Altman(1991)。试验中,两组总体中,一组食用含尼古丁的口香糖,另一组没有。试验观测的是一个戒烟与否的二分结果。 给定p1=0.15,p2=0.30。当显著性水平为5%时,用下面的代码可以得到功效为85%时对应的样本容量:

power.prop.test(power = 0.85, p1 = 0.15, p2 = 0.30)
## 
##      Two-sample comparison of proportions power calculation 
## 
##               n = 137.604
##              p1 = 0.15
##              p2 = 0.3
##       sig.level = 0.05
##           power = 0.85
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

9.5 练习题

  1. ashina试验要求功效为80%,如果真实治疗差异达到15%,人与人之间效果的标准差为20%。请给出合适的抽样样本量。
  2. 在一个具有二元输出结果的对比试验中,功效为90%时,找出能有效证明病人治愈率从60%升高到75%所需要的病人数目。当功效为80%时,又是多大呢。
  3. 绘制参数ncp=3,df=25的非中心t分布的密度曲线,并将其与t+3时的分布曲线进行比较。其中,变量t服从自由度为25的中心t分布。
  4. 在双边检验中,有可能出现其值为真,但统计量却落入拒绝域的情形。R语言中,只有设定参数strict=TRUE时,R才会在计算功效时考虑这种情形。请对此进行讨论。
  5. 经常会计算使得某差异显著所需要的合适样本量n,那么,通过这种方式计算得出的样本量n对应的功效时多少。
Avatar
Dr.二哈
在读苦逼科研狗

研究方向:脂质营养,业余时间自学R。

相关