gpt4 book ai didi

r - 使用ggplot2绘制已经存在的线性模型

转载 作者:行者123 更新时间:2023-12-04 11:15:18 25 4
gpt4 key购买 nike

假设我有一些数据,并且已经创建了一个线性模型来拟合数据。然后,我使用ggplot2绘制数据,并想将线性模型添加到图中。据我所知,这是这样做的标准方法(使用内置的cars数据集):

library(ggplot2)
fit <- lm(dist ~ speed, data = cars)
summary(fit)
p <- ggplot(cars, aes(speed, dist))
p <- p + geom_point()
p <- p + geom_smooth(method='lm')
p

但是,以上内容违反了DRY原理(“不要重复自己”):它涉及在对 lm的调用中创建线性模型,然后在对 geom_smooth的调用中重新创建线性模型。这对我来说似乎很微不足道,并且还为错误提供了空间。例如,如果我更改了使用 lm创建的模型,但忘记更改了使用 geom_smooth创建的模型,则摘要和图解将不会属于同一模型。

有没有一种方法可以使用ggplot2绘制一个已经存在的线性模型,例如通过将 lm对象本身传递给geom_smooth函数?

最佳答案

一个人需要做的就是用旧的观察值加上模型的预测值创建一个新的数据框,然后使用ggplot2绘制该数据框。

library(ggplot2)

# create and summarise model
cars.model <- lm(dist ~ speed, data = cars)
summary(cars.model)

# add 'fit', 'lwr', and 'upr' columns to dataframe (generated by predict)
cars.predict <- cbind(cars, predict(cars.model, interval = 'confidence'))

# plot the points (actual observations), regression line, and confidence interval
p <- ggplot(cars.predict, aes(speed,dist))
p <- p + geom_point()
p <- p + geom_line(aes(speed, fit))
p <- p + geom_ribbon(aes(ymin=lwr,ymax=upr), alpha=0.3)
p

这样做的最大好处是,如果更改了模型(例如 cars.model <- lm(dist ~ poly(speed, 2), data = cars)),则绘图和摘要都会更改。

感谢Plamen Petrov使我意识到这里需要什么。正如他指出的那样,这种方法仅在为所讨论的模型定义了 predict时才有效;如果不是,则必须自己定义。

关于r - 使用ggplot2绘制已经存在的线性模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44865508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com