模拟数据以适应中介模型

机器算法验证 r 回归 模拟 随机生成 调解
2022-03-02 04:24:02

我有兴趣找到一种程序来模拟与指定中介模型一致的数据。根据Barron 和 Kenny (1986)首次概述并在其他地方如Judd、Yzerbyt 和 Muller (2013)描述的用于测试中介模型的一般线性结构方程模型框架,结果的中介模型Y, 调解员med, 和预测器X并由以下三个回归方程控制:

(1)Y=b11+b12X+e1(2)med=b21+b22X+e2(3)Y=b31+b32X+b32med+e3
间接效应或中介效应XY通过med可以定义为b22b32或者,等价地,作为b12b32. 在旧的调解测试框架下,调解是通过测试建立的b12在等式 1 中,b22在等式 2 中,和b32在等式 3 中。

到目前为止,我试图模拟medYrnorm与使用in的各种回归系数的值一致R,例如以下代码:

x   <- rep(c(-.5, .5), 50)
med <- 4 + .7 * x + rnorm(100, sd = 1) 

# Check the relationship between x and med
mod <- lm(med ~ x)
summary(mod)

y <- 2.5 + 0 * x + .4 * med + rnorm(100, sd = 1)

# Check the relationships between x, med, and y
mod <- lm(y ~ x + med)
summary(mod)

# Check the relationship between x and y -- not present
mod <- lm(y ~ x)
summary(mod)

但是,似乎顺序生成medY使用等式 2 和 3 是不够的,因为我之间没有任何关系XY在回归方程 1 中(它模拟了一个简单的二元关系XY) 使用这种方法。这很重要,因为间接(即中介)效应的一个定义是b12b32,正如我上面所描述的。

谁能帮我在R中找到一个生成变量的程序X,med, 和Y满足我使用方程 1、2 和 3 设置的约束?

2个回答

这很简单。你们之间没有关系的原因xy使用您的方法是因为代码:

y <- 2.5 + 0 * x + .4 * med + rnorm(100, sd = 1)

如果你想要一些关系xy即使当med包括在内(即,您需要部分调解),您只需使用非零值b32反而。例如,您可以将以下代码替换为上述代码:

y <- 2.5 + 3 * x + .4 * med + rnorm(100, sd = 1)

因此,b32已经从03. (当然,根据您的情况,我刚刚选择了其他一些特定值可能更相关3从我的头顶上掉下来。)


编辑:
关于边缘xy关系不显着,这只是统计能力的函数。由于因果力x完全通过med在您的原始设置中,您的功率低于其他设置。尽管如此,这种效果在某种意义上仍然是真实的。当我运行您的原始代码时(在将种子设置90为我再次从头顶挑选的值之后),我确实得到了显着的效果:

set.seed(90)
x <- rep(c(-.5, .5), 50)
med <- 4 + .7 * x + rnorm(100, sd = 1) 

# Check the relationship between x and med
mod <- lm(med ~ x)
summary(mod)

y <- 2.5 + 0 * x + .4 * med + rnorm(100, sd = 1)

# Check the relationships between x, med, and y
mod <- lm(y ~ x + med)
summary(mod)

# Check the relationship between x and y -- not present
mod <- lm(y ~ x)
summary(mod)

...
Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.8491     0.1151  33.431   <2e-16 ***
x             0.5315     0.2303   2.308   0.0231 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

...

为了获得更多的权力,你可以增加N您正在使用或使用较小的错误值(即,在调用中使用sd=小于默认值的值)。 1rnorm()

这是一篇关于如何在Caron & Valois (2018)中对简单中介进行建模的论文:R 代码是

  x <- rnorm(n)
  em <- sqrt(1-a^2)
  m <- a*x + em*rnorm(n)
  ey2 <- sqrt(ey)
  y <- cp*x + b*m + ey2*rnorm(n)
  data <- as.data.frame(cbind(x, m, y))

你只需要指定n(样本量),a,bc(直接影响)。这里的优点是您将对标准化系数进行建模,以便了解它们的影响大小。它们还包括非标准化代码,携带 Baron & Kenny、Sobel 和 Bca 引导程序。

参考

Caron, P.-O. 和 Valois, P. (2018)。简单中介分析的计算描述。心理学的定量方法,14, 147-158。doi:10.20982/tqmp.14.2.p147