如何构建交互图

机器算法验证 回归 相互作用
2022-04-13 17:06:06

我正在与我的主管讨论如何构建交互图。

我们有一个包含 8 个自变量的数据集。我们试图分析 8 个自变量中的 2 个对因变量的影响。

我的主管建议绘制交互图,我们首先使用我们拥有的所有 8 个自变量拟合一个完整模型,并且对于我们特别感兴趣的 2 个自变量的水平的每种可能组合(我们称它们为var1var2),根据我们之前构建的完整模型计算它们的预测值。然而,在应用这种方法时,我遇到了一个问题,因为为了让我的统计软件进行预测,我必须为数据集中剩下的 8-2=6 个变量分配值,这些变量是未确定的。所以我向我的主管建议,不要依赖完整的模型来计算预测值,而是拟合一个像下面这样的模型:

y = var1 + var2 + var1*var2

(即代替y = var1 + var2+ var3 + var4 + var5 + var6 + var7 + var8 + var1*var2

然而,我的主管不同意我的观点,并告诉我继续使用 的平均值(var3, var4, var5, var6, var7, var8我可以从我们的原始数据集中计算得出)来进行预测。

我分析互动效果的方法有问题吗?我更喜欢我的方法,因为使用我的方法,交互图看起来要好得多。但是,如果我的方法在理论上是错误的,那么我想我必须坚持我的主管所说的话。

2个回答

我不确定我是否完全理解你的主管的建议,但我在选择如何创建图表时使用的原则是确保图表代表我在论文中报告的分析。基于这个原则,我会使用任何模型来创建你在论文中报告的图表。因此,如果您要报告以下模型:

y=var1+var2+var1var2

然后我会使用这个模型来获得你在图表上绘制的预测值。另一方面,如果您要报告以下模型:

y=var1+var2+var3+var4+var5+var6+var7+var8+var9+var1var2

然后我会绘制var1var2当您获得图形的预测值时,来自此模型的交互,均值居中 var3 到 var9。

假设带有控制变量的模型是您在论文中报告的模型,我已经包含了一些 R 代码模拟数据并使用下面的这些数据创建图表。您可能需要考虑绘制您的y为您的各种控制变量边缘化的点;如果您不知道如何执行此操作,我将在此处描述如何完成此操作

# Set the seed
set.seed(2314)

# Create the data
dat <- matrix(NA, nrow = 200, ncol = 9)
colnames(dat) <- paste0("var", 1:9)
dat <- data.frame(dat)
for(i in 1:9)
{
  dat[, paste0("var", i)] <- rnorm(200, sd = 1)
}
dat$y <- .5 * dat$var1 + .5 * dat$var2 + .5 * dat$var1 * dat$var2 + rnorm(200, sd = 1)

# Fit the model
mod <- lm(y ~ var1 * var2 + var3 + var4 + var5 + var6 + var7 + var8 + var9, data = dat)

# Create a matrix of desired predicted values for the model.  I am holding the control variables
# constant at their means
pX <- expand.grid(var1 = seq(min(dat$var1), max(dat$var1), by = .1), 
                  var2 = c(mean(dat$var2) - sd(dat$var2), mean(dat$var2) + sd(dat$var2)),
                  var3 = mean(dat$var3),
              var4 = mean(dat$var4),
                  var5 = mean(dat$var5),
              var6 = mean(dat$var6),
                  var7 = mean(dat$var7),
              var8 = mean(dat$var8),
                  var9 = mean(dat$var9)
                  )

# Get the predicted values
pY <- predict(mod, pX)

# Create a plotting space
plot(dat$var1, dat$y, frame = F, type = "n", xlab = "var1", ylab = "y")

# Plot the points.  Points for var1 below the median on var2 are plotted in red, 
# points for var1 above the median on var2 are plotted in blue
points(dat[dat$var2 < median(dat$var2), "var1"], dat[dat$var2 < median(dat$var2), "y"], pch = 16, cex = .5, col = "red")
points(dat[dat$var2 >= median(dat$var2), "var1"], dat[dat$var2 >= median(dat$var2), "y"], pch = 16, cex = .5, col = "blue")

# Plot the lines. Lines are colored to be consistent with the points
lines(pX[pX$var2 == mean(dat$var2) - sd(dat$var2), "var1"], pY[pX$var2 == mean(dat$var2) - sd(dat$var2)], col = "red", lwd = 2)
lines(pX[pX$var2 == mean(dat$var2) + sd(dat$var2), "var1"], pY[pX$var2 == mean(dat$var2) + sd(dat$var2)], col = "blue", lwd = 2)

在此处输入图像描述

可能值得明确说明您的提案有什么问题以及为什么您应该遵循@Patrick 回答中给出的建议:

首先,如果您使用的模型涉及交互中涉及的两个预测变量之外的其他预测变量,您显然需要为所有这些变量指定值才能使用模型进行预测。

其次,即使您只对显示预期响应的形式感兴趣EY针对两个预测器,x1&x2,考虑当完整模型是

EY=β0+β1x1+β2x2+β3x3++β8x8+β12x1x2

并且您适合简化模型

EY=β0+β1x1+β2x2+β12x1x2

β1=β1,β2=β2, &β12=β12?

回答:-

不是一般的——只有当你在实验设计中煞费苦心以确保正交性时。因此,这两个模型的交互图可能看起来完全不同。