r - 使用lattice包中的xyplot()绘制线性回归的观测值和拟合值

标签 r lattice

我可以创建简单的图表。我希望在同一张图表上有观察值和预测值(来自线性回归)。我正在绘制 YvariableXvariable 的对比。只有 1 个预测变量和 1 个响应。我怎样才能将线性回归曲线添加到同一个图表中?

因此得出结论需要帮助:

  • 绘制实际值和预测值
  • 绘制回归线

最佳答案

这是将单个图中的观测值和预测值作为点的一个选项。在观察点上得到回归线更容易,我在第二个说明

首先是一些虚拟数据

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 组合成一个绘图对象

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)

结果图应该与此类似

enter image description here

要获得观测数据的回归线,并且回归模型是一个简单的直线模型(如我所示),那么您可以绕过其中的大部分内容并仅使用绘图

xyplot(y ~ x, data = dat, type = c("p","r"), col.line = "red")

(即您甚至不需要拟合模型或为绘图创建新数据)

结果图应如下所示

enter image description here

第一个示例的替代方法是编写您自己的面板函数,它可以与任何可以给出回归线系数的东西一起使用 - 并不像看起来那么可怕

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 中的图,但是是手工绘制的。

假设您已经使用插入符完成了此操作,那么

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 相同的图。

关于r - 使用lattice包中的xyplot()绘制线性回归的观测值和拟合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432142/

相关文章:

r - 组合由 R base、lattice 和 ggplot2 创建的图

r - 使嵌套循环更有效?

r - xyplot : repeated tick marks on all panels

r - 高级格子图形调用中的下标

r - Knitr 忽略 width 和 out.width 选项

r - 在 R-Studio 中使用 Lattice panel.identify

r - 如何在 lattice 中设置默认的 par.settings 主题

r - 如何使用 dplyr 管道重命名数据框中指定行之后的所有列

r - `agrep(..., fixed=F)` 的困难

r - 对空气质量数据进行子集化时选择了未定义的列