尽管我的评论中的要点是,这是从 R 中的拟合模型为预测变量组合生成输出的规范方法。真的不清楚你想要显示什么情节,但对我来说有意义的是部分情节;其中一个变量在其范围内变化,同时将其他变量保持在某个共同值。在这里,我在保持变量常量时使用样本均值。
首先是一些虚拟数据,只有协变量,但这扩展到任何数字
set.seed(1)
dat <- data.frame(y = rnorm(100))
dat <- transform(dat,
x1 = 0.2 + (0.4 * y) + rnorm(100),
x2 = 2.4 + (2.3 * y) + rnorm(100))
拟合回归模型
mod <- lm(y ~ x1 + x2, data = dat)
接下来使用模型预测一些数据值。您可以在单个预测中执行所有变量,然后对结果对象进行子集化以仅绘制相关行。或者,更清楚(尽管更冗长),您可以分别处理每个变量。下面我创建了两个数据框,模型中的每个协变量一个。在一个数据框中,我在变化的协变量范围内生成 100 个值,并重复其他协变量的平均值。
pdatx1 <- with(dat, data.frame(x1 = seq(min(x1), max(x1), length = 100),
x2 = rep(mean(x2), 100)))
pdatx2 <- with(dat, data.frame(x1 = rep(mean(x1), 100),
x2 = seq(min(x2), max(x2), length = 100)))
在直线线性回归中,你真的不需要 100 个值——协变量范围的两个端点就可以了。但是,对于拟合函数不是线性的模型,您需要在更多位置进行预测。
接下来,使用模型在这些数据点进行预测
pdatx1 <- transform(pdatx1, yhat = predict(mod, pdatx1))
pdatx2 <- transform(pdatx2, yhat = predict(mod, pdatx2))
现在我们准备绘制部分图。首先计算y
轴的范围 - 这里主要是多余的,但是如果您要添加置信区间,则需要在下面包含它们的值,
ylim <- range(pdatx1$y, pdatx2$y, dat$y)
要绘图(这里将两个数字放在同一个绘图设备上),我们可以使用以下代码
layout(matrix(1:2, ncol = 2))
plot(y ~ x1, data = dat)
lines(yhat ~ x1, data = pdatx1, col = "red", lwd = 2)
plot(y ~ x2, data = dat)
lines(yhat ~ x2, data = pdatx2, col = "red", lwd = 2)
layout(1)
哪个生产