10.3 绘制功效分析图形

结束pwr包的探讨前,我们再学习一个涉及面更广的绘图示例。假设对于相关系数统计显著性的检验,你想计算一系列效应值和功效水平下所需的样本量,此时可用pwr.r.test()函数和for循环来完成任务,参见代码清单10-2。

代码清单10-2 检验各种效应值下的相关性所需的样本量曲线

  1. library(pwr)
  2. r <- seq(.1,.5,.01) # ❶ 生成一系列相关系数和功效值
  3. nr <- length(r)
  4. p <- seq(.4,.9,.1)
  5. np <- length(p)
  6. samsize <- array(numeric(nr*np), dim=c(nr,np)) # ❷ 获取样本大小
  7. for (i in 1:np){
  8. for (j in 1:nr){
  9. result <- pwr.r.test(n = NULL, r = r[j],
  10. sig.level = .05, power = p[i],
  11. alternative = "two.sided")
  12. samsize[j,i] <- ceiling(result$n)
  13. }
  14. }
  15. xrange <- range(r) # ❸ 创建图形
  16. yrange <- round(range(samsize))
  17. colors <- rainbow(length(p))
  18. plot(xrange, yrange, type="n",
  19. xlab="Correlation Coefficient (r)",
  20. ylab="Sample Size (n)" )
  21. for (i in 1:np){ # ❹ 添加功效曲线
  22. lines(r, samsize[,i], type="l", lwd=2, col=colors[i])
  23. }
  24. abline(v=0, h=seq(0,yrange[2],50), lty=2, col="grey89") # ❺ 添加注释
  25. abline(h=0, v=seq(xrange[1],xrange[2],.02), lty=2,
  26. col="gray89")
  27. title("Sample Size Estimation for Correlation Studies\n
  28. Sig=0.05 (Two-tailed)")
  29. legend("topright", title="Power", as.character(p),
  30. fill=colors)

代码清单10-2使用seq函数来生成一系列的效应值r(H1时的相关系数)和功效水平p❶。然后,利用两个for循环来循环读取这些效应值和功效水平,并计算相应所需的样本大小,将其存储在数组samsize中❷。随后,创建图形,设置合适的水平轴和垂直轴以及标签❸。使用曲线形式(lines)而不是点形式(points)来添加功效曲线❹。最后,添加网格和图例,以使图形易于理解❺。结果见图10-3。

10.3 绘制功效分析图形 - 图1

图10-3 在不同功效水平下检测到显著的相关性所需的样本量

从图10-3中可以看到,在40%的置信度下,要检测到0.20的相关性,需要约75的样本量。在90%的置信度下,要检测到相同的相关性,需要大约185个额外的观测(n=260)。做少许改动,这个方法便可以用来对许多统计检验创建样本量和功效的曲线图。

最后,让我们来看一下功效分析可能会用到的其他R函数。