Как предсказать или расширить линии регрессии в 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 выпускает каждые шесть недель, но их нет пока, и меня интересует общий ответ на этот вопрос предсказания.)

Уильям Дентон
источник

Ответы:

21

Как упоминает @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)
Джеймс
источник
1
Спасибо, это делает работу (опуская некоторые данные, чтобы строка Firefox работала): ggplot (подмножество (программы,! (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)
Уильям Дентон
3

Вам нужно будет спрогнозировать значения для будущих наблюдений за пределами ggplot2, а затем построить прогнозные значения, вы также можете получить доверительный интервал для этих прогнозов.

Посмотрите на функцию loess, хотя я не уверен, что она делает прогнозы за пределами вашего диапазона данных, но я уверен, что какая-то плавная функция делает это.

Однако обычно нецелесообразно прогнозировать значения за пределами вашего диапазона данных. Я бы не стал сильно доверять этим прогнозам.

Вы можете исследовать значения прогнозирования, используя модель временных рядов.

лощина
источник