0

我试图比较使用与不使用协变量的实验的功率增益。

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 改进的能力,我相信我的条件变量会带来.

4

0 回答 0