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


17

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

我该如何将线延伸到未来?我想确定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现在每六周发布一次,但它们不存在但是,我对这个预测问题的一般回答感兴趣。)

Answers:


21

正如@Glen所提到的,您必须使用一种stat_smooth支持推断的方法,而该方法不支持loesslm但是。您需要做的是使用的fullrange参数stat_smooth并扩展x轴以包括您要预测的范围。我没有您的数据,但这是使用mtcars数据集的示例:

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

1
谢谢,这可以完成这项工作(省去了一些数据,以便Firefox行可以工作):ggplot(subset(programs,!(Program ==“ Firefox”&Version <4)),aes(y = Version,x = Date, color = Program))+ geom_point()+ ylim(0,30)+ xlim(as.Date(“ 1985-01-01”),as.Date(“ 2015-01-01”))+ stat_smooth(method = lm,fullrange = TRUE)
William Denton 2012年

3

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

看一下黄土函数,尽管我不确定它是否在数据范围之外进行预测,但是我确定有一些平滑函数可以。

但是,预测超出数据范围的值通常是不明智的。我不会对这些预测抱有太大的信任。

您可能要使用时间序列模型调查预测值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.