5

我可以创建简单的图表。我想在同一张图上观察和预测值(来自线性回归)。我正在密谋说Yvariablevs Xvariable。只有 1 个预测变量和 1 个响应。我怎样才能将线性回归曲线添加到同一个图表中?

所以总结需要帮助:

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

2 回答 2

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)

适合我们的模型

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)

结果图应与此类似

在此处输入图像描述

为了得到观察数据的回归线,回归模型是一个简单的直线模型,根据我展示的模型,你可以绕过大部分,只需使用

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

假设你已经用插入符号完成了这个

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

于 2013-07-02T17:45:57.093 回答
3

另一种选择是使用panel.lmlineqfrom latticeExtra

library(latticeExtra)
set.seed(0)
xsim <- rnorm(50, mean = 3)
ysim <- (0 + 2 * xsim) * (1 + rnorm(50, sd = 0.3))

## basic use as a panel function
xyplot(ysim ~ xsim, panel = function(x, y, ...) {
  panel.xyplot(x, y, ...)
  panel.lmlineq(x, y, adj = c(1,0), lty = 1,xol.text='red',
                col.line = "blue", digits = 1,r.squared =TRUE)
})

在此处输入图像描述

于 2013-07-02T18:14:47.160 回答