10.3 绘制功效分析图形
结束pwr
包的探讨前,我们再学习一个涉及面更广的绘图示例。假设对于相关系数统计显著性的检验,你想计算一系列效应值和功效水平下所需的样本量,此时可用pwr.r.test()
函数和for
循环来完成任务,参见代码清单10-2。
代码清单10-2 检验各种效应值下的相关性所需的样本量曲线
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)
代码清单10-2使用seq
函数来生成一系列的效应值r
(H1时的相关系数)和功效水平p
❶。然后,利用两个for
循环来循环读取这些效应值和功效水平,并计算相应所需的样本大小,将其存储在数组samsize
中❷。随后,创建图形,设置合适的水平轴和垂直轴以及标签❸。使用曲线形式(lines
)而不是点形式(points
)来添加功效曲线❹。最后,添加网格和图例,以使图形易于理解❺。结果见图10-3。
图10-3 在不同功效水平下检测到显著的相关性所需的样本量
从图10-3中可以看到,在40%的置信度下,要检测到0.20的相关性,需要约75的样本量。在90%的置信度下,要检测到相同的相关性,需要大约185个额外的观测(n=260)。做少许改动,这个方法便可以用来对许多统计检验创建样本量和功效的曲线图。
最后,让我们来看一下功效分析可能会用到的其他R函数。