我不确定我是否完全理解你的主管的建议,但我在选择如何创建图表时使用的原则是确保图表代表我在论文中报告的分析。基于这个原则,我会使用任何模型来创建你在论文中报告的图表。因此,如果您要报告以下模型:
y=var1+var2+var1∗var2
然后我会使用这个模型来获得你在图表上绘制的预测值。另一方面,如果您要报告以下模型:
y=var1+var2+var3+var4+var5+var6+var7+var8+var9+var1∗var2
然后我会绘制var1∗var2当您获得图形的预测值时,来自此模型的交互,均值居中 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)
