我试图比较使用与不使用协变量的实验的功率增益。
library(tidyverse)
library(modelr)
library(pwr)
首先,我将模拟类似于我的实际实验的数据,其中参与者被随机分配到两个条件之一 (x_cond),我还收集了与结果 (y) 相关的协变量 (x_cond) 的实验前读数。
set.seed(52)
N <- 500
B_int <- 2.53
B_cond <- -0.45
B_cov <- 0.64
my_data <-
tibble(
x_int = 1,
x_cond = rbinom(n = N, size = 1, prob = .5),
x_cov = rnorm(n = N, mean = 6.77, sd = 1.87),
error = rnorm(n = N, mean = 0, sd = 1.68),
y = B_int*x_int + B_cond*x_cond + B_cov*x_cov + error
)
现在我为有和没有协变量的模型计算 F^2
F^2 对于我的没有协变量的模型
m_cond <- lm(y ~ x_cond, my_data)
summary(m_cond)
R2_cond <- rsquare(m_cond, my_data)
f_2 <- (R2_cond) / (1 - R2_cond)
f_2
pwr.f2.test(
u = 1, # degrees of freedom for numerator (i.e., number of predictor variables)
v = 498, # degrees of freedom for denominator N - u - 1
f2 = f_2 # effect size
)
我的线性模型仅将条件作为预测变量 ( m_cond
) 的功效为 0.36。
power.t.test()
下面返回 power = .37 并反映我之前对模型的 F^2 功率计算,仅将条件作为预测变量 ( m_cond
)
t.test(y ~ x_cond, my_data)
my_data %>%
group_by(x_cond) %>%
summarize(mean(y), sd(y))
power.t.test(
n = 250, # n is per cell in this power analysis, not pooled n as in pwr.f2.test
delta = -.293,
sd = 2
)
F^2 用于我的带有协变量的模型
# build model with condition and covariate(s) as predictors
m_full <- lm(y ~ x_cond + x_cov, my_data)
summary(m_full)
# build model with only covariate(s) as predictor(s)
m_cov <- lm(y ~ x_cov, my_data)
summary(m_cov)
# compute F^2 based on difference in R^2 of the above models
R2_cov <- rsquare(m_cov, my_data)
R2_full <- rsquare(m_full, my_data)
f_2 <- (R2_full - R2_cov) / (1 - R2_full)
f_2
pwr.f2.test(
u = 2, # degrees of freedom for numerator (i.e., number of predictor variables)
v = 497, # degrees of freedom for denominator N - u - 1
f2 = f_2 # effect size
)
具有条件和协变量的线性模型的功效为 0.81,这是一个重大改进。
我想用条件和协变量确认我对模型功率计算的解释。我只对检测条件的影响感兴趣。我的协变量只是用来减少方差。鉴于我的 F^2 是基于有和没有条件变量的模型之间 R^2 的差异,最终的功效计算告诉我我检测 R^2 改进的能力,我相信我的条件变量会带来.