Як передбачити або розширити регресійні лінії в ggplot2?


18

У мене є кадр даних, який містить два часові ряди: дати та номери версій версій 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 випускається кожні шість тижнів, але вони не існують все ж, і мене цікавить загальна відповідь на це питання прогнозування.)

Відповіді:


22

Як згадує @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" та версія <4)), aes (y = версія, x = дата, color = Program)) + geom_point () + ylim (0,30) + xlim (as.Date ("1985-01-01"), as.Date ("2015-01-01")) + stat_smooth (метод = lm, fullrange = ІСТИНА)
Вільям Дентон,

3

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

Подивіться на функцію льосу, хоча я не впевнений, чи передбачає вона передбачення поза вашим діапазоном даних, але я впевнений, що деяка плавна функція все-таки працює.

Однак зазвичай не розумно передбачати значення поза діапазоном даних. Я б не довіряв цим прогнозам.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.