将 1000 条回归线添加到 ggplot 的最佳方法是啥? (基于模型的引导)
Posted
技术标签:
【中文标题】将 1000 条回归线添加到 ggplot 的最佳方法是啥? (基于模型的引导)【英文标题】:What is the best way to add 1000 regression lines to a ggplot? (Model-based bootstrapping)将 1000 条回归线添加到 ggplot 的最佳方法是什么? (基于模型的引导) 【发布时间】:2020-06-15 15:49:30 【问题描述】:从一个引导模型中,我有 1000 组用于该回归模型的系数:
y = b0 + b1x + b2(x^2)
如果我已经有了系数,绘制二次线的函数调用是什么?我不想将线性模型“拟合”到我的数据中。
我尝试通过 for 循环向我的 ggplot 对象添加行:
for (i in 1:1000)
reg_line <- stat_function(fun=function(x) quad$coefficients[1] +
quad$coefficients[i,2]*x + quad$coefficients[i,3]*(x**2))
reg_lines <- reg_lines + reg_line
这不起作用 - 它似乎只添加了循环中的最后一行。
我想在我的绘图中添加 1000 条回归线的原因是因为这是一个家庭作业问题 - 我很清楚这不是一个常见的用例。
【问题讨论】:
+ geom_abline(slope = , intercept = )
?
@Hugh 如何将二次项添加到 geom_abline?
对不起。太油嘴滑舌了。您将无法将geom_abline
用于二次,但是您是否可以使用它在您的绘图中添加 1000 条直线,或者它是否也只添加最后一条?为了获得更好的响应,您可能应该包含一个最小的可重现示例,以便当我们运行您的代码时,我们会得到相同的结果。现在你只摘录了一段。
也许这个(第二个答案):***.com/questions/15633714/…
【参考方案1】:
可能还有其他方法可以做到这一点,但希望这可以给你一些想法。我使用了 mtcars 数据集并生成了一些用于建模的引导样本。你可以跳过这一步。
library(ggplot2)
library(tidyr)
library(dplyr)
data(mtcars)
drat=seq(min(mtcars$drat), max(mtcars$drat), length.out=100)
# Bootstrap function
bs <- function()
df = mtcars[sample(1:nrow(mtcars), replace=TRUE),]
lm_fit <- lm(mpg ~ drat+I(drat^2), data=df)
data.frame(Model=predict(lm_fit, newdata=data.frame(drat))) # Replace with your own
foo <- replicate(10, bs()) # Simulate
您可以从这里开始,因为您应该已经拥有一个数据框或来自 1,000 个引导模型的预测值列表。将其重新整形为很长的形式,为geom_line
函数创建一个分组列。
foo_long <- data.frame(foo, drat) %>%
pivot_longer(cols=-drat, names_to="Model", values_to="mpg")
ggplot(data = mtcars, aes(x = drat, y = mpg)) +
geom_point(color='blue') +
geom_line(data = foo_long, aes(x=drat, y=mpg, group=Model, color=Model)) +
guides(color=FALSE)
【讨论】:
感谢您的详细解答。我认为这是这样做的方法。以上是关于将 1000 条回归线添加到 ggplot 的最佳方法是啥? (基于模型的引导)的主要内容,如果未能解决你的问题,请参考以下文章