这是将单个图中的观察值和预测值作为点的一种选择。在观察点上更容易得到回归线,我第二个说明
首先是一些虚拟数据
set.seed(1)
x <- runif(50)
y <- 2.5 + (3 * x) + rnorm(50, mean = 2.5, sd = 2)
dat <- data.frame(x = x, y = y)
适合我们的模型
mod <- lm(y ~ x, data = dat)
将模型输出和观察到的x组合成一个单独的对象用于plott
res <- stack(data.frame(Observed = dat$y, Predicted = fitted(mod)))
res <- cbind(res, x = rep(dat$x, 2))
head(res)
加载点阵和绘图
require("lattice")
xyplot(values ~ x, data = res, group = ind, auto.key = TRUE)
生成的图应该与此类似
要获得观察数据的回归线,并且回归模型是一个简单的直线模型,根据我展示的模型,您可以规避其中的大部分内容并使用绘图
xyplot(y ~ x, data = dat, type = c("p","r"), col.line = "red")
(即您甚至不需要拟合模型或制作新数据进行绘图)
生成的图应如下所示
第一个示例的替代方法是编写您自己的面板函数,它可以与任何可以为回归线提供系数的东西一起使用 - 并不像看起来那么可怕
xyplot(y ~ x, data = dat, col.line = "red",
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.abline(coef = coef(mod), ...) ## using mod from earlier
}
)
上面的图 2 给出了一个绘图,但是是手工绘制的。
假设您已使用 caret 完成此操作,那么
mod <- train(y ~ x, data = dat, method = "lm",
trControl = trainControl(method = "cv"))
xyplot(y ~ x, data = dat, col.line = "red",
panel = function(x, y, ...) {
panel.xyplot(x, y, ...)
panel.abline(coef = coef(mod$finalModel), ...) ## using mod from caret
}
)
将生成与上面的图 2 相同的图。