在研究过程中我们通常会面临这样的问题““我的研究到底需要多少个受试者呢?”,“我的实验究竟需要多少样本才有意义呢?”,这类问题都可通过功效分析(power analysis)来解决,它在实验设计中占有重要地位。
功效分析可以帮助在给定置信度
的情况下,判断检测到给定效应值
时所需的样本量
。 反过来, 它也可以帮助你在给定置信度
水平情况下,计算在某样本量内能检测到给定效应值的概率
。对于其原理在这里我们不做更多说明,直接使用R
进行举例:
假设你想评价使用手机对驾驶员反应时间的影响,则零假设为H0:μ1-μ2 = 0,μ1是驾驶员使用手机时的反应时间均值,μ2是驾驶员不使用手机时的反应时间均值 。假如你拒绝该零假设,那就是 μ1 ≠ μ2,即两种条件下反应时间的均值不相等。
现在要设计实验来验证假设,挑选一个由不同个体构成的样本,将他们随机分配到下面两组中:
第一组是:参与者边打手机,边在一个模拟器中应对一系列驾驶挑战;
第二组是:参与者不打手机在一个模拟器中完成 一系列相同的驾驶挑战;
然后评估每个个体的总体反应时间。
根据过去的经验我们知道反应时间的标准差是1.25s,并认定反应时间1 s的差值是巨大的差异。
那么问题来了,我假设打手机对于驾驶员的反应时间是有影响的,并且希望在95%的置信区间(p<0.05)的情况下有80%的把握检测到这种效应,这时我需要多少个样本呢?
在上面的例子中,我们一共涉及四个量:样本大小
、显著性水平
、功效
和效应
。
-
样本大小
指的是实验设计中每种条件/组中观测的数目。也即是上面例子中我们需要确定的量. -
显著性水平
可以把它看做是发现效应不发生的概率(一般是0.05)。 -
功效
可以把它看做是真实效应发生的概率(上面的80%的把握)。 -
效应值
指的是在备择或研究假设下效应的量。效应值的表达式依赖于假设检验中使用的统计方法。
一般来说,我们都希望使用尽可能少的样本,然后最大化检验的功效(省钱嘛)。四个量(样本大小
、显著性水平
、功效
和效应值
)紧密相关,给定其中任意三个量,便可推 算第四个量。
这里我们就需要用到R里的
pwr
包。本例使用t.test来检测显著性,所以使用pwr包里的pwr.t.test
函数进行分析。
pwr.t.test函数的格式:
pwr.t.test(n = NULL, d = NULL, sig.level = 0.05, power = NULL,
type = c("two.sample", "one.sample", "paired"),
alternative = c("two.sided", "less", "greater"))
pwr.t.test
中的每个参数解释如下:
-
n
为样本大小 -
d
为效应值,即标准化的均值之差.
-
sig.level
表示显著性水平(默认为0.05)。 -
power
为功效水平。 -
type
指检验类型:双样本t检验(two.sample) 、单样本t检验(one.sample)或相依样 本t检验(paired) 。默认为双样本t检验。 -
alternative
指统计检验是双侧检验(two.sided)还是单侧检验(less或greater) 。 默认为双侧检验。
结合上面的条件以及参数的含义,我们就明白上面的例子我们需要输入的参数如下: d
=1/1.25=0.8,sig.level
=0.05 (0.05的显著差异),power
=0.8 (80%的把握),type
=two.sample,alternative
=two.sided。
将这些信息输入到pwr.t.test()函数中:
library(pwr)
pwr.t.test(d=0.8,sig.level = 0.05,power = 0.8,type = "two.sample")
结果如下:
结果标明,每组需要26个样本(总共52个),才能保证有80%的把握检测到0.8的效应(p<0.05).
现在再换个问法,假设我们现在经费有限,最多只能有30个样本,那我有多大的把握得到预期0.8的功效呢(p<0.05)?
代码如下:
# 注意这里n=15,输入的是每组的数量。
pwr.t.test(n=15, d=0.8, sig.level = 0.05, type = "two.sample")
结果如下:
也就是说我只有30个样本时想达到预期目标只有56%(功效)的可能性,这时就要考虑还要不要做这个实验了,毕竟得到预期结果的把握有点低。
更多原创精彩视频敬请关注生信杂谈:
网友评论