#第10章 功效分析
#1 t检验的功效分析#pwr.t.test(n=,d=,sig.level=,power=,type=, alternative=)
#n是样本大小 d为效应值(μ1-μ2)/δ 即为标准化的均值之差 sig.level表示显著水平
#power为功效水平 type是检验类型(two.sample one.sample paired)
#alternative值统计检验(two.sided less greater)# 案例1
# 假定根据过去的经验知道反应时间有1.25s的标准偏差,并认定反应时间1s的差值是巨大的差异,
#则这个研究中设定要检验的效应值为d=1/1.25=0.8 假定我们希望90%的把握检测到它,由于随机变异的存在,
#我们也希望有95%的把握不会误报差异显著,这时候需要多少受试者呢?
library(pwr)
pwr::pwr.t.test(d=0.8,sig.level=0.05,power=0.9,type="two.sample",alternative="two.sided")
#每个组需要34人 即共需要68人#案例2
#假定在比较这两种情况是,我们想检测到总体均值0.5个标准偏差的差异,且误报差异限制在1%,
#我们只能安排40人接受试验,那么该研究中我们能检测到这么大总体均值差异的概率是多少呢?
pwr::pwr.t.test(n=20,d=0.5,sig.level=0.01,type="two.sample",alternative="two.sided")
#每组受试者20人,我们将1-0.14=0.86的可能性错过我们要寻找的效应值,只有0.14的把握检测到它
#需要慎重考虑要投入该研究中的时间和精力#当两组样本大小不同时,使用以下函数
#pwr.t2n.test(n1=,n2=,d=,sig.level=,power=,alternative=)
pwr::pwr.t2n.test(n1=135,n2=125,d=0.8,sig.level=0.01,alternative="two.sided")#方差分析的功效分析
#pwr.anova.test(k=,n=,f=,sig.level=,power=)
#k是组的个数 n是各组中的样本大小 f是效应值
#满足以下要求需要多少样本量
pwr::pwr.anova.test(k=5,f=0.25,sig.level=0.05,power=0.8)
#总样本大小为5*39#相关性的功效分析
#pwr.r.test(n=,r=,sig.level=,power=,alternative)
#n是观测数目 r是效应值
#研究抑郁与孤独的关系,零假设为H0:ρ≤0.25 满足以下要求需要多少样本量
pwr::pwr.r.test(r=0.25,sig.level=0.05,power=0.9,alternative="greater")
#样本大小为134,以便在零假设为假的情况下有90%的信心拒绝它#线性模型的功效分析
#pwr.f2.test(u=,v=,f2=,sig.level=,power=)
#uv分别是分子和分母自由度 f2是效应值
#领导风格(4个变量)对员工满意度的影响是否超过薪酬和工作小费(共3个变量)对员工满意度
#假设薪酬和工作小费能够解释30%的员工满意度的方差,领导风格解释35%的方差,设置显著水平0.05,
#在90%的置信度情况下,需要多少受试者
#f2=(0.35-0.3)/(1-0.35)=0.0769 u=7-3-1
pwr::pwr.f2.test(u=3,f2=0.0769,sig.level=0.05,power=0.9)
#样本大小为134,以便在零假设为假的情况下有90%的信心拒绝它
#分母自由度=N-k-1,所以最终需要185+1+7=193人#比例检验的功效分析
#pwr.2p.test(h=,n=,sig.level=,power=)
#h是效应值 n是各组相同的样本量
#h的计算可以用公式ES.h(p1,p2)进行
#当各组样本量不相同时 用以下函数
#pwr.2p2n.test(h=,n1=,n2=,sig.level=,power=)
#假设某种流行病药能缓解60%使用者的症状,你对此表示怀疑,因为一种新药如果能缓解65%
#使用者的症状即可投入时长,此时你需要多少受试者才能检测到两种药物存在差异(假设你想有
#90%的把握得出新药更有效的结论,并希望有95%的把握不会误得结论)ES.h(0.65,0.6) #h=0.1033347
pwr.2p.test(h=0.1033347,sig.level=0.05,power=0.9,alternative="greater")
#需要2*1605人#卡方检验的功效分析
#pwr.chisq.test(w=,N=,df=,sig.level=,power=)
#w是效应值 N是样本总量 df是自由度
#w可以用ES.w2(P)计算,P是一个假设的双因素概率表 双因素列联表df=(r-1)(c-1)
#90%的把握得出结论,并希望有95%的把握不会误得结论
prob <- matrix(c(0.42,0.28,0.03,0.07,0.1,0.1),byrow=TRUE,nrow = 3)
ES.w2(prob)
pwr.chisq.test(w=0.1853198,df=2,sig.level=0.05,power=0.9) #df=(3-1)(2-1)
#需要369个受试者#在新情况中选择合适的效应值
#单因素ANOVA中检测显著效应所需的样本大小
library(pwr)
es <- seq(0.1,0.5,0.01)
nes <- length(es)
samsize <- NULL
for (i in 1:nes) {
result <- pwr.anova.test(k=5,f=es[i],sig.level = 0.05,power = 0.9)
samsize[i] <- ceiling(result$n)
}plot(samsize,es.type="1",lwd=2,col="red",
ylab="effect size",
xlab="sa,ple size (per cell)",
main="one way anova with power=0.9 and alpha=0.05")
#5分组的单因素anova中检测显著效应所需样本大小 各组样本大于200后,再增加样本量效果已经不大了#检验各种效应值下的相关性所需要的样本量曲线
library(pwr)
r<- seq(0.1,0.5,0.01)
nr <- length(r)p <- seq(0.4,0.9,0.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 = 0.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",
ylab="sample size")
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],0.02),lty=2,col="grey89")title("sample size estimation for correlation studies\n sig=0.05 (two.sided)")
legend("topright",title="power",as.character(p),
fill=colors)