如何在同一图表上绘制线性和二次模型?

时间:2017-10-07 00:50:48

标签: r statistics

所以我使用的数据集有2个模型:

> Bears1Fit1 <- lm(Weight ~ Neck.G)
> 
> Bears2Fit2 <- lm(Weight ~ Neck.G + I(Neck.G)^2)

我想在同一个散点图上绘制这两个模型。到目前为止我有这个:

> plot(Neck.G, Weight, pch = c(1), main = "Black Bears Data: Weight Vs Neck Girth", xlab = "Neck Girth (inches) ", ylab = "Weight (pounds)")
> abline(Bears1Fit1)

但是,我不确定如何将二次模型放在同一图表上。我希望能够在同一个图表上同时拥有这两行。

1 个答案:

答案 0 :(得分:3)

以下是汽车数据集的示例:

data(cars)

制作模特:

model_lm = lm(speed ~ dist, data = cars)
model_lm2= lm(speed ~ dist + I(dist^2), data = cars)

制作新数据:

new.data = data.frame(dist = seq(from = min(cars$dist),
                                 to = max(cars$dist), length.out = 200)

预测:

pred_lm <- predict(model_lm, newdata = new.data)
pred_lm2 <- predict(model_lm2, newdata = new.data)

情节:

plot(speed ~ dist, data = cars)
lines(pred_lm ~ new.data$dist, col = "red")
lines(pred_lm2 ~ new.data$dist, col = "blue")
legend("topleft", c("linear", "quadratic"), col = c("red", "blue"), lty = 1)

enter image description here

使用ggplot2

library(ggplot2)

将所有数据放在一个数据框中,然后使用melt中的reshape2转换为长格式

preds = data.frame(new.data, linear = pred_lm, quadratic =  pred_lm2)
preds = reshape2::melt(preds, id.vars = 1)

ggplot(data = preds)+
  geom_line(aes(x = dist, y = value, color = variable ))+
  geom_point(data = cars, aes(x = dist, y = speed))+
  theme_bw()

enter image description here