如何使用 R 在回归线上找到最低值和最高值?

How to find the lowest and highest values on a regression line with R?

我有类似的数据:

sample <- read.table(text =
                       "   value    date
                           -5.4     2017-03-01
                            -2.2    2017-03-05
                           -1.1    2017-03-10
                           4.9      2017-03-12
                           4.8      2017-03-22
                           5.6      2017-04-02
                           -0.3     2017-04-11
                           0.6      2017-04-16
                           3.3     2017-04-20
                           5.2      2017-04-22  ", header = T)
sample$date = as.Date(sample$date)

我用这些值绘制了线性回归趋势图:

plot(sample$date,sample$value)
abline(lm(sample$value ~ sample$date))

我想从回归线中找出最低和最高 'value' 之间的差异。我在图上用红色标记了这些点。

如何在 R 中做到这一点?

我的想法是以某种方式在回归线上制作一列值,对应于我数据集的每个日期,但我很难做到这一点。

它可以像这样简单(我已将您的数据框重命名为 SAMPLE 并从模型公式中删除 $):

fit <- lm(value ~ date, data = SAMPLE)
diff(range(fit$fitted))

My idea is to somehow make a column of values on the regression line corresponding each date of my dataset, but I struggle to do that.

你要的栏目叫做"fitted values"和lmreturns它。


备注1

上面的结果无论是上升线还是下降线总是一些正值,因为range returns minmax之前。您可以通过斜率的符号来调整它,使上升线为正,下降线为负。

diff(range(fit$fitted)) * sign(fit$coef[2])

备注2

正如 Maurits Evers 评论的那样,您还可以使用 predict(fit) 而不是 fit$fitted

library(tidyverse)
 fit <- lm(value ~ date, data = sample)

 sample%>%
   arrange(desc(date))%>%
   mutate(prd=map_dbl( sample$date,~predict (fit,newdata=data.frame(date=.x))))%>%
   summarise(max(prd)-min(prd))%>%as.numeric()

[1] 5.133998