r - 使用 R pwr 包绘制功率与效果大小的关系
问题描述
我可以使用 pwr 包在 R 中成功创建功率与样本大小的关系图。下面的示例代码。
library(pwr)
library(tidyverse)
plot.out <- pwr.t2n.test(n1=30, n2=30, d=0.5, alternative="two.sided")
#See output in link below
plot(plot.out)
我想创建一个类似的图 - 一个两样本 t 检验,其中效果大小在 y 轴上,功率在 x 轴上,样本大小固定。
有没有办法使用 pwr 和/或 plot 函数来做到这一点?或者我是否必须取消列出 plot.out 对象并以某种方式使用它?
我对 R 中的功率曲线仍然很陌生。在此先感谢您的任何建议。
解决方案
在下面的代码中,功率是在效果大小的循环中计算的d_seq
。然后d
从结果列表中提取幂,创建并绘制一个 data.frame。
library(pwr)
library(ggplot2)
d_seq <- seq(0, 2, by = 0.1)
pwr_list <- lapply(d_seq, function(d){
pwr.t2n.test(n1 = 30, n2 = 30,
d = d,
power = NULL,
sig.level = 0.05,
alternative = "two.sided")
})
pwr <- sapply(pwr_list, '[[', 'power')
dfpwr <- data.frame(power = pwr, effect.size = d_seq)
ggplot(dfpwr, aes(effect.size, power)) +
geom_point(size = 2, colour = "black") +
geom_line(size = 0.5, colour = "red") +
scale_y_continuous(labels = scales::percent) +
xlab("effect size") +
ylab(expression("test power =" ~ 1 - beta))
要绘制一条功率为 80% 的线并获得效果大小,首先pwr
通过线性插值从向量计算效果大小。
pwr80 <- approx(x = pwr, y = d_seq, xout = 0.8)
现在为它创建一个标签geom_text
并绘制它。
lbl80 <- paste("Power = 80%\n")
lbl80 <- paste(lbl80, "Effect size =", round(pwr80$y, 2))
ggplot(dfpwr, aes(effect.size, power)) +
geom_point(size = 2, colour = "black") +
geom_line(size = 0.5, colour = "red") +
geom_hline(yintercept = 0.8, linetype = "dotted") +
geom_text(x = pwr80$y, y = pwr80$x,
label = lbl80,
hjust = 1, vjust = -1) +
scale_y_continuous(labels = scales::percent) +
xlab("effect size") +
ylab(expression("test power =" ~ 1 - beta))
要绘制垂直线,请添加
geom_vline(xintercept = pwr80$y, linetype = "dotted")
推荐阅读
- node.js - 用户通过身份验证后使用 multer 上传文件
- boost - 禁用对齐时的 Eigen3 Boost MPFR 段错误
- javascript - Tilt.js 在移动设备上禁用
- logging - 如何在 azure iotedge 模块中使用 Microsoft.Extensions.Logging.Console 实现日志记录?在控制台中显示日志以及存储在文件中吗?
- abap - 输入一次后自定义字段未更新 - FPM_REFRESH 不起作用
- javascript - 如何在不知道时区的情况下将一个时间戳转换为另一个时区的时区
- python - 如何在 Django Admin 中为计算的模型属性实现排序而无需两次编写逻辑?
- php - 在 Symfony 4 中添加引导程序
- nuget - 如何将 nupkg 发布到“Microsoft Visual Studio 离线包”?
- prolog - 检查列表的所有成员