如何预测或扩展 ggplot2 中的回归线?

机器算法验证 预言 ggplot2
2022-01-24 06:08:08

我有一个包含两个时间序列的数据框:Emacs 和 Firefox 版本的日期和版本号。使用一个 ggplot2 命令很容易制作一个使用 loess 的图表(以一种看起来有点有趣的方式,我不介意)将点变成线。

我怎样才能将这些线路延伸到未来?我想确定 Emacs 和 Firefox 版本号将在何时何地交叉,如果有办法显示错误范围,那就更好了。

鉴于 ggplot2 正在绘制线条,它必须有一个模型,但我不知道如何告诉它扩展线条,或者将模型取出并对其进行处理。

> library(ggplot2)
> programs <- read.csv("http://www.miskatonic.org/files/se-program-versions.csv")
> programs$Date <- as.Date(programs$Date, format="%B %d, %Y")
> head(programs)
  Program Version       Date
1   Emacs    24.1 2012-06-10
2   Emacs    23.4 2012-01-29
3   Emacs    23.3 2011-03-10
4   Emacs    23.2 2010-05-08
5   Emacs    23.1 2009-07-29
6   Emacs    22.3 2008-09-05
> head(subset(programs, Program == "Firefox"))
   Program Version       Date
18 Firefox      16 2012-10-09
19 Firefox      15 2012-08-28
20 Firefox      14 2012-06-26
21 Firefox      13 2012-06-15
22 Firefox      12 2012-04-24
23 Firefox      11 2012-03-13
> ggplot(programs, aes(y = Version, x = Date, colour = Program)) + geom_point() + geom_smooth(span = 0.5, fill = NA)

按日期划分的 Emacs 和 Firefox 版本

(注意:我不得不捏造早期的 Firefox 版本并将 0.1 转换为 0.01 等,因为“点一”和“点十”在算术上是相等的。我知道 Firefox 现在每六周发布一次,但它们不存在然而,我对这个预测问题的一般答案很感兴趣。)

2个回答

正如@Glen 提到的,您必须使用一种stat_smooth支持外推的方法,而这种方法loess不支持。lm然而确实如此。您需要做的是使用fullrange参数stat_smooth并扩展 x 轴以包含您想要预测的范围。我没有您的数据,但这里有一个使用 mtcars 数据集的示例:

ggplot(mtcars,aes(x=disp,y=hp)) + geom_point() + xlim(0,700) +
stat_smooth(method="lm",fullrange=TRUE)

您必须预测 ggplot2 之外的未来观察值,然后绘制预测值,您还可以获得这些预测的置信区间。

看看 loess 函数,虽然我不确定它是否在您的数据范围之外进行预测,但我确信一些平滑函数确实可以。

但是,预测数据范围之外的值通常是不明智的。我不会太相信这些预测。

您可能希望使用时间序列模型研究预测值。