功效分析是在实验设计筹备阶段进行的分析手段。一般用于求达到目标显著性水平与功效(把握),求所需样本量;或者给定样本量,实验有多大的把握做出判断。
0、基础四要素
- 样本大小:每组的观测数目;
-
显著性水平:总体样本数据结论实际上是符合H0的,但是仍拒绝它,接受H1假设的概率,医学上称为误诊(假阳性)。即称为Ⅰ类错误,越小越好,一般定为p=0.05。
一般零假设(H0)是没有差异,备择假设(H1)为有差异。实验目的是去推翻它,证明存在差异。
- 功效(power):等于1-Ⅱ类错误的概率。就是正确检测到差异的概率(H0真实为假,且成功拒绝),越大越好,也称为把握度。
一般一类错误与二类错误的值是相互制约的。例如提高诊断,一类错误p值减低(误诊减少);同时二类错误值增高(漏诊增多)。
- 校应值:为备择或研究假设下效应的量,计算表达式依赖于假设检验使用的方法,最难规定。比如t检验中即为组均值差异。(若没有过往经验做参考,可以参考p232探索合适的效应值)
(1)关系:显著性水平越大(拒绝原假设更容易,如上图垂线左移),样本量越大→功效就会增加。
(2)目的:维持一个可接受的显著性水平,尽量使用较少的样本,然后最大化统计检验的功效。或者反之求样本数。
下面介绍的集中实验设计的功效分析均基于常用的pwr包,需要提前下载安装并加载好。这里以t检验、方差分次以及相关性的功效分析为例:
1、t 检验功效分析
pwr.t.test(n= ,d= , sig.level= ,power= , type= , alternative= )
- n为样本大小;
- d为效应值=理想均值差/标准差;
- sig.level 表示显著性水平(误诊/假阳性的概率);
- power 表功效水平(检测到差异的概率);
- type 指检验类型:双样本t检验("two.sample")[默认]、单样本t检验("one.sample")、相依样本t检验("paired")
- alternative 指统计检验是双侧检验("two.sided")[默认]、单侧检验("less"或"greater")
示例:玩手机驾车反应时间与不玩手机驾车的反应时间是否存在差异?
(1)我们希望有95%的把握不会误报差异显著,90%的把握检测到差异,需要多少多少样本?[根据经验已知标准差为1.25,且一般认为均差为1即为较大差异,所以d=1/1.25=0.8]
library(pwr)
pwr.t.test(d=.8, sig.level=.05,power=.9, type="two.sample",
alternative="two.sided")
#结果表明每组需要34,共68个样本
(2)希望检测到总体均值0.5个标准偏差的差异(d=0.5),误报差异几率限制在1%内(sig.level=0.01),并且样本只有40人(n=20),name检测到大总体均值差异的概率是多少?
pwr.t.test(n=20, d=.5, sig.level=.01, type="two.sample",
alternative="two.sided")
#结果表明,只有14%的把握断言差值为0.625(0.5=0.625/1.25),提示设计需要慎重考虑。
2、方差分析(多组差异分析)功效分析
pwr.anova.test(k= ,n= ,f= ,sig.level= ,power= )
- k是组的个数,n是各组的样本大小,效应值用f值衡量
-
其它参数同前。
例1、现对5个组做单因素方差分析,要达到0.8的功效,效应值为0.25,并且显著性水平为0.05,计算各组需要的样本大小?
library(pwr)
pwr.anova.test(k=5,f=.25,sig.level=.05,power=.8)
例2、绘制单因素方差分析中样本量与效应值函数关系图(一般样本量越大能够检测到的效应值就越小或者说精确)
library(pwr)
es <- seq(.1, .5, .01) #设定0.1-0.5的50个系列效应值
nes <- length(es)
samsize <- NULL
for (i in 1:nes){
result <- pwr.anova.test(k=5, f=es[i], sig.level=.05, power=.9) #返回相应的样本量
samsize[i] <- ceiling(result$n) #记录对应的样本量
}
plot(samsize, es, type="l", lwd=2, col="red", 绘制样本量与效应值的关系
ylab="Effect Size",
xlab="Sample Size (per cell)",
main="One Way ANOVA with Power=.90 and Alpha=.05")
3、相关性功效分析
pwr.r.test(n= ,r= , sig.level= , power= , alternative= )
- r是效应值(通过线性相关系数衡量);
- 其它参数同前。
例1、研究抑郁与孤独的相关性。H0:p≤0.25; H1﹥0.25。设定显著性水平为0.05;而且若H0是错误的,想有90%的信心拒绝H0(发现)所需要的样本量为?
pwr.r.test(r=.25, sig.level=.05, power=.90, alternative="greater")
例2、绘制计算一系列效应值(相关性)和功效水平下的所需的样本量关系图
library(pwr)
r <- seq(.1,.5,.01) #生成系列相关系数值r
nr <- length(r)
p <- seq(.4,.9,.1) #生成系列功效值p
np <- length(p)
samsize <- array(numeric(nr*np), dim=c(nr,np)) #储存数组
for (i in 1:np){
for (j in 1:nr){
result <- pwr.r.test(n = NULL, r = r[j],
sig.level = .05, power = p[i],
alternative = "two.sided")
samsize[j,i] <- ceiling(result$n) #返回对应样本量
}
}
xrange <- range(r) #x轴为相关系数
yrange <- round(range(samsize)) #y轴为功效值
colors <- rainbow(length(p)) #彩虹系列颜色
plot(xrange, yrange, type="n",
xlab="Correlation Coefficient (r)",
ylab="Sample Size (n)" ) #搭框架
for (i in 1:np){ #添加功效曲线
lines(r, samsize[,i], type="l", lwd=2, col=colors[i])
}
abline(v=0, h=seq(0,yrange[2],50), lty=2, col="grey89") #添加网格线
abline(h=0, v=seq(xrange[1],xrange[2],.02), lty=2, col="gray89")
title("Sample Size Estimation for Correlation Studies\n
Sig=0.05 (Two-tailed)")
legend("topright", title="Power", as.character(p),
fill=colors) #添加图例
#如图,例如可以看出在40%的置信度(功效)下要检测到0.20的相关性,需要约75个样本量
此外还有线性模型、比例检验,卡方检验的功效分析,就不做过多介绍了。当对待研究的效应值不清楚时,下图可提供一些参考。
功效分析内容还有线性模型、比例检验等未叙述,详见p229。参考教材为《R语言实战(第2版)》