在单个图中绘制多个回归线

时间:2014-07-29 12:01:17

标签: r plot linear-regression

如何在同一个地块上显示2条回归线? 以下是两种型号:

data(mtcars)
a <- lm(mpg~wt+hp)
b <- lm(mpg~wt+hp+wt*hp)

我在x轴上绘制wt,在y轴上绘制mpg,在hp上绘制颜色。 这是在基地R:

cr <- colorRamp(c("yellow", "red"))
with(mtcars, {
  plot(wt, mpg, col = rgb(cr(hp / max(hp)), max=255),
       xlab="Weight", ylab="Miles per Gallon", pch=20)
})

另外,请在ggplot2中说明如何完成此操作。 这是情节:

library(ggplot2)
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point(aes(col = hp))
p + scale_colour_gradientn(colours=c("green","black")) 

提前致谢!

3 个答案:

答案 0 :(得分:0)

geom_smooth的文档实际上告诉您如何执行此操作。

可以使用回归模型预测y的新值,然后使用geom_smooth()在同一图表上绘制这些值。

下面是ggplot2的代码,它产生我认为你想要的东西。两条线重叠得如此之多,看起来只有一条线被绘制,我将一条线型设置为虚线以证明这一点。 我不知道如何在基地R中实现这一目标。

data(mtcars)
library(ggplot2)

a <- lm(mpg~wt+hp, data = mtcars)
b <- lm(mpg~wt+hp+wt*hp, data = mtcars)

mtcars$pred.a <- predict(a)
mtcars$pred.b <- predict(b)

p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point(aes(col = hp)) +
  scale_colour_gradientn(colours=c("green","black")) + 
  geom_smooth(aes(x = wt, y = pred.a), method = "lm", colour = "black", fill = NA) +
  geom_smooth(aes(x = wt, y = pred.b), method = "lm", colour = "red", fill = NA, linetype = 4) 
p

答案 1 :(得分:0)

基础R解决方案:

a <- lm(mpg~wt+hp, data=mtcars)
b <- lm(mpg~wt+hp+wt*hp, data=mtcars)
wt <- mtcars[, "wt"]
idx <- sort(wt, index.return=TRUE)$ix

plot(mpg~wt, data=mtcars)
lines(wt[idx], predict(a)[idx], col="red")
lines(wt[idx], predict(b)[idx], col="blue")

然而,这不是最好的可视化设想。

答案 2 :(得分:0)

您正在询问如何添加回归线,但您的回归模型会生成回归平面和回归曲面,这两者都比线条更高。您可以通过调整所选的hp值来查找回归线,或者为不同的hp值显示多行。

使用基础图形,您可以使用TeachingDemos包中的Predict.Plot函数将预测线/曲线添加到拟合模型(或2)的图中。用于创建当前行的交互式TkPredict' function in the same package will let you interact with the plot to choose conditioning values, then will produce the call to Predict.Plot`。您可以组合生成的命令以将它们包含在同一个图上。

相关问题