我可以创建简单的图形.我想在同一图表上观察和预测值(来自线性回归).我绘制说YvariableVS Xvariable.只有1个预测变量,只有1个响应.我怎样才能将线性回归曲线添加到同一图表中?
所以总结需要帮助:
Rei*_*son 14
以下是将单个图中的观测值和预测值作为点的一个选项.在观察到的点上获得回归线更容易,我将其说明
首先是一些虚拟数据
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)
Run Code Online (Sandbox Code Playgroud)
适合我们的模型
mod <- lm(y ~ x, data = dat)
Run Code Online (Sandbox Code Playgroud)
将模型输出和观察结果x合并为plott的单个对象
res <- stack(data.frame(Observed = dat$y, Predicted = fitted(mod)))
res <- cbind(res, x = rep(dat$x, 2))
head(res)
Run Code Online (Sandbox Code Playgroud)
加载晶格和图
require("lattice")
xyplot(values ~ x, data = res, group = ind, auto.key = TRUE)
Run Code Online (Sandbox Code Playgroud)
结果图应该与此类似

为了获得观察数据的回归线,回归模型是一个简单的直线模型,根据我展示的那个,你可以绕过大部分这个并且只是使用
xyplot(y ~ x, data = dat, type = c("p","r"), col.line = "red")
Run Code Online (Sandbox Code Playgroud)
(即您甚至不需要拟合模型或为绘图创建新数据)
结果图应该如下所示

第一个例子的替代品可以用于为回归线提供系数的任何东西,就是编写自己的面板函数 - 不像看起来那么可怕
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
}
)
Run Code Online (Sandbox Code Playgroud)
这给出了上图2中的图,但是手工制作.
假设你有这样做插入符号然后
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
}
)
Run Code Online (Sandbox Code Playgroud)
将产生与上面图2相同的图.