《R语言实战》自学笔记64-功效分析

没有学过统计,这一章晦涩难懂,学的实在太费事,只好跟着书上的代码跑一遍了。

第10章 功效分析

功效分析(power analysis)是心理统计学术语。在假设检验中,根据影响功效的因素,改变和控制某些变量,以提高功效值,使研究更有效、更科学的过程。
与如下四个因素有关:
(1)显著性水平()。在假设检验中,越小,第二类错误就越容易发生,功效值也就越低。
(2)样本容量(N)。样本容量与在统计检验中标准误差的大小有关。在其他条件一定的情况下,样本容量增加,可使标准误差下降,而使统计功效值提高。
(3)总体效果量()。指对虚无假设的否定程度。在其他条件一定的情况下,若总体效果量增长,功效也就会提高。若包括功效在内的其他条件一定时,总体效果量越大,在一定的显著水平所需样本容量就越小。
(4)功效(1一)(是虚无假设H0为假时,接受它所犯错误的概率)。是功效分析的主体。以上四个因素是相互联系、相互制约的,在进行功效分析时要同时考虑。

功效分析可以帮助在给定置信度的情况下,判断检测到给定效应值时所需的样本量。反过来,它也可以帮助你在给定置信度水平情况下,计算在某样本量内能检测到给定效应值的概率。如果概率低得难以接受,修改或者放弃这个实验将是一个明智的选择。

10.1 假设检验速览

在统计假设检验中,首先要对总体分布参数设定一个假设(零假设H0),然后从总体分布中
抽样,通过样本计算所得的统计量来对总体参数进行推断。假定零假设为真,如果计算获得观测样本的统计量的概率非常小,便可以拒绝原假设,接受它的对立面(称作备择假设或者研究假设H1)。
预先约定的阈值(0.05)称为检验的显著性水平(significance level)。

image.png

在研究过程时,研究者通常关注四个量:样本大小、显著性水平、功效和效应值(见图10-1)。

样本大小指的是实验设计中每种条件/组中观测的数目。
显著性水平(也称为alpha)由I型错误的概率来定义。也可以把它看做是发现效应不发生
的概率。
功效通过1减去II型错误的概率来定义。我们可以把它看做是真实效应发生的概率。
效应值指的是在备择或研究假设下效应的量。效应值的表达式依赖于假设检验中使用的
统计方法。

image.png

四个量(样本大小、显著性水平、功效和效应值)紧密相关,给定其中任意三个量,便可推算第四个量。

10.2 用pwr包做功效分析

image.png

10.2.1 t 检验

Pwr.t.test(n=, d= , sig.level=, power=, type = c("two.sample","one.sample", "paired"), alternative =c("two.sided", "less", "greater"))
n:样本大小。
d:效应值,即标准化的均值之差。


其中 :组1均值;
:组2均值;
:误差方差;

sig.level:显著性水平(默认为0.05);
power:功效水平;
type:检验类型:双样本t检验(two.sample)、单样本t检验(one.sample)或相依样本t检验(paired)。默认为双样本t检验;
alternative:统计检验是双侧检验(two.sided)还是单侧检验(less或greater)。
默认为双侧检验。

library(pwr) # 调用pwr包。
pwr.t.test(d=0.8, sig.level = 0.05, power = 0.9, type = "two.sample", alternative = "two.sided") # 效应值设0.8,希望90%的把握检测到两组的差异,显著性水平设0.05,计算所需的样本量。
## 
##      Two-sample t test power calculation 
## 
##               n = 33.82555
##               d = 0.8
##       sig.level = 0.05
##           power = 0.9
##     alternative = two.sided
## 
## NOTE: n is number in *each* group

每组中需要34个受试者(总共68人),才能保证有90%的把握检测到0.8的效应值,并且最多5%的可能性会误报差异存在。

如果两组中样本大小不同,使用pwr.t2n.test()函数。

library(pwr) # 调用包。
pwr.t2n.test(n1=20, d=0.8, sig.level = 0.05, power = 0.9,  alternative = "two.sided") # 样本1容量为20,效应值设0.8,效应水平设0.9,显著水平设0.05。
## 
##      t test power calculation 
## 
##              n1 = 20
##              n2 = 100.7648
##               d = 0.8
##       sig.level = 0.05
##           power = 0.9
##     alternative = two.sided

给定1组样本量为20,计算得第2组样本量应为101。

10.2.2 方差分析

pwr.anova.test()函数可以对平衡单因素方差分析进行功效分析。格式为:

pwr.anova.test(k = NULL, n = NULL, f = NULL, sig.level =0.05, power = NULL)
其中,k是组的个数,n是各组中的样本大小
对于单因素方差分析,效应值可通过f来衡量:

其中,;

:组i的观测数目;

N:总观测数目;

:组i均值;

:总体均值;

:组内误差方差;

pwr.anova.test(k=5,f=.25,sig.level=.05,power=.8) # k=5表示5组观测值,效应值设0.25,效应水平0.8,显著水平0.05。
## 
##      Balanced one-way analysis of variance power calculation 
## 
##               k = 5
##               n = 39.1534
##               f = 0.25
##       sig.level = 0.05
##           power = 0.8
## 
## NOTE: n is number in each group

10.2.3 相关性

pwr.r.test(n=, r=, sig.level=, power=, alternative=)

n:观测数目;

r:效应值(通过线性相关系数衡量);

sig.level:显著性水平;

power:功效水平;

"alternative":统计检验是双侧检验("two.sided")还是单侧检验("less"或"greater")。默认为双侧检验。

library(pwr) # 调用pwr包。
pwr.r.test(r = .25, sig.level = 0.05, power = .90,alternative = "greater") # 效应值0.25,功效水平0.9,显著水平0.05。
## 
##      approximate correlation power calculation (arctangh transformation) 
## 
##               n = 133.2803
##               r = 0.25
##       sig.level = 0.05
##           power = 0.9
##     alternative = greater

要研究抑郁与孤独的关系,样本容量为134个,以便在零假设为假的情况下有90%的信心拒绝它。

10.2.4 线性模型

对于线性模型(比如多元回归),pwr.f2.test()函数可以完成相应的功效分析,格式为:

pwr.f2.test(u=, v=, f2=, sig.level=, power=)

其中,u和v分别是分子自由度和分母自由度,f2是效应值。
其中,R2 =多重相关性的总体平方值;
其中,=集合A中变量对总体方差的解释率
=集合A和B中变量对总体方差的解释率;

当要评价一组预测变量对结果的影响程度时,适宜用第一个公式来计算f2;当要评价一组预
测变量对结果的影响超过第二组变量(协变量)多少时,适宜用第二个公式。

pwr.f2.test(u=3, f2=0.0769, sig.level=0.05, power=0.90) 
## 
##      Multiple regression power calculation 
## 
##               u = 3
##               v = 184.2426
##              f2 = 0.0769
##       sig.level = 0.05
##           power = 0.9

多元回归中,分母的自由度等于N–k–1,N是总观测数,k是预测变量数;本例中,N–7–1=185,即需要样本大小N=185+7+1=193。

10.2.5 比例检验

当比较两个比例时,可使用pwr.2p.test()函数进行功效分析。格式为:

pwr.2p.test(h=, n=, sig.level=, power=)

其中,h是效应值,可用ES.h(p1, p2)函数进行计算,n是各组相同的样本量。

当各组中n不相同时,则使用函数:

pwr.2p2n.test(h=, n1=, n2=, sig.level=, power=)

alternative=选项可以设定检验是双尾检验("two.sided")还是单尾检验("less"或"greater")。默认是双尾检验。

pwr.2p.test(h=ES.h(.65, .6), sig.level=.05, power=.9, alternative="greater")
## 
##      Difference of proportion power calculation for binomial distribution (arcsine transformation) 
## 
##               h = 0.1033347
##               n = 1604.007
##       sig.level = 0.05
##           power = 0.9
##     alternative = greater
## 
## NOTE: same sample sizes

例:假定对某流行药物能缓解60%使用者的症状感到怀疑,一种更贵的新药如果能缓解65%使用者的症状,就会被投放到市场中。

假设想有90%的把握得出新药更有效的结论:power=0.9
希望有95%的把握不会误得结论:显著性水平0.05
只对评价新药是否比标准药物更好感兴趣,因此只需用单边检验:alternative=”greater”
为满足以上要求,在本研究中需要1605个人试用新药,1605个人试用已有药物。

10.2.6 卡方检验

卡方检验常常用来评价两个类别型变量的关系。典型的零假设是变量之间独立,备择假设是不独立。

pwr.chisq.test()函数可以评估卡方检验的功效、效应值和所需的样本大小。格式为:

pwr.chisq.test(w=, N=, df=, sig.level=, power=)

其中,w是效应值,N是总样本大小,df是自由度。
效应值w定义如下:

其中,时第i单元格中的概率;
时第i单元格中的概率;
此处从1到m进行求和,连加号上的m指的是列联表中单元格的数目。

函数ES.w2(P)可以计 算双因素列联表中备择假设的效应值,P是一个假设的双因素概率表。

prob <- matrix(c(.42, .28, .03, .07, .10, .10), byrow=TRUE, nrow=3)
ES.w2(prob)
## [1] 0.1853198
pwr.chisq.test(w=.1853, df=3 , sig.level=.05, power=.9)
## 
##      Chi squared power calculation 
## 
##               w = 0.1853
##               N = 412.7286
##              df = 3
##       sig.level = 0.05
##           power = 0.9
## 
## NOTE: N is the number of observations

10.2.7 在新情况中选择合适的效应值

image.png
es <- seq(.1, .5, .01)
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")
image.png

10.3 绘制功效分析图形

library(pwr)
# 生成一系列相关系数和功效值
r <- seq(.1,.5,.01)
nr <- length(r)
p <- seq(.4,.9,.1)
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)
yrange <- round(range(samsize))
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)
image.png

10.4 其他软件包

表10-4列出了其他与功效分析有关的软件包。

image.png

10.5 小结

本章主要内容是pwr包中函数的使用方法。这些函数可以对常见的统计方法(包括t检验、卡
方检验、比例检验、ANOVA和回归)进行功效和样本量的计算。
典型的功效分析是一个交互性的过程。研究者会通过改变样本量、效应值、预期显著性水平
和预期功效水平这些参数,来观测它们对于其他参数的影响。这些结果对于研究的筹备是非常有意义的。过去研究的信息(特别是效应值)可以帮助你在未来设计更有效和高效的研究。

参考资料:

  1. 《R语言实战》(中文版),人民邮电出版社,2013.
  2. 功效分析-百度,https://baike.baidu.com/item/%E5%8A%9F%E6%95%88%E5%88%86%E6%9E%90

你可能感兴趣的:(《R语言实战》自学笔记64-功效分析)