R语言系列第四期(番外篇):样本容量和把握度计算

2019-05-23 23:28:10 浏览数 (3)

在做任何课题之前,我们都需要计算推荐的样本容量,不然不论是研究生开题还是答辩,总有人要问你你的样本容量是多大这样的问题,所有我们这里简单给大家说说如何计算简单检验的样本容量和把握度。

专业角度来讲,当样本容量相对于检验的差异过小时,统计检验将无法甄别出其中的真实差异。因此,在设计试验时,试验设计者必须收集足够多的样本数据,以能保证我们有充分的理由甄别出一个特定大小的差异。R中提供了基于单样本t检验和两样本t检验比较均值以及比较两样本比例的样本容量的计算方法。所以我们这里只介绍关于上述方法的把握度和样本量的计算,另外,如果你对这部分的内容不感兴趣,可以放心跳过,因为这个章节是一个独立的部分,不会对后续的学习造成任何影响。

首先我们来说一下把握度,把握度(power)又叫功效,功效是指拒绝错误原假设的可能性大小,而II类错误(概率为β)的定义是:原假设是错误的,但检验接受了它,因此把握度又通常可以表示为1-β

犯第II类错误的概率(β)由样本量大小以及要检测的差异的性质所决定,因此其实样本量和把握度也是有联系的。

A

两样本问题

下面的案例取自Altman(1991)。该案例研究了饮食中摄入牛奶对身高的影响。在当前的案例中,令两组研究对象分别摄入不同的饮食,并分别测量两组对象的身高。而我们想知道:当把握度为90%、双边检验的显著性水平(α)为0.01时,多大的样本量才能保证当样本对应分布的标准差为2cm时,检验到的两个总体的差异为0.5cm?我们可以通过如下的代码来实现:

> 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

#Tips:这里,delta表示真实差异,sd表示真实标准差。这里最后的note也提醒我们样本量代表的是每组样本的样本量。容易看到的是计算得到的样本容量不是一个整数。所以我们得取整478。在数据原文献里,是通过诺模图(一种绘图技术,在最后一个系列绘图相关内容我们会为大家重点介绍)的方法计算,从诺模图上读取数据时难度较大,难以精确。

运行下面的R程序,可以计算出每组样本量为450时,试验对应的检验把握度的大小:

> power.t.test(n=450,delta=0.5,sig.level=0.01,sd=2)

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

#Tips:上述计算的过程其实是给定5个变量(power, sig.level, delta, sd, n)中的任意4个值,则函数自动计算出未知的那个。(当然函数默认情况下会有sd=1,sig.level=0.05,如果需要计算它们,要把它们的值设定为NULL。)

除此之外,这个函数还有两个可选参数:alternative和type。其中,前者用来指定单边检验,后者用来指定单样本检验。alternative的例子:

> power.t.test(delta=0.5,sd=2,sig.level=0.01,power=0.9,alt="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

B

单样本及配对样本检验

在power.t.test()函数中设定参数type=“one.sample”,可以用来对单样本进行检验。同理,设定type=”paired”可以用来进行配对检验。

在研究配对数据时,通常在表述上会遇到一个陷阱:人们通常把个体间的方差认为是对“相同样本重复测量得到的方差”,对样本进行多次测量,并计算出个样本间的标准差即可。然而,当我们指定power.t.test()函数的sd参数时,需要将前面得到的标准差乘以根号2(

)才行。

比如现已知不同样本之间的标准差为10,显著水平为5%,把握度为85%,用下面的代码可以计算出配对检delta为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

C

比例的比较

计算比例比较试验所需要的样本数量和其他指标,可以使用power.prop.test()。该函数的计算过程使用了正态近似,因此,当对应表格中的理论频数小于5时,结果可能不可靠。

但是power.prop.test()函数与power.t.test()函数有所差别,是使用两组总体假定的概率P1和P2来代替delta和sd参数。

下面的例子同样是取自Altman。试验中,两组总体中,一组使用含尼古丁的口香糖,另一组没有。试验观测的是一个戒烟与否的二分类结果。

给定P1=0.15,P2=0.30。当显著水平为0.05时,用下面代码可以得到把握度为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

参考资料: 1.《R语言统计入门(第二版)》 人民邮电出版社 Peter Dalgaard著 2.《R语言初学者指南》 人民邮电出版社 Brian Dennis著

0 人点赞