Jak przewidzieć lub rozszerzyć linie regresji w ggplot2?

18

Mam ramkę danych, która zawiera dwie serie czasowe: daty i numery wersji wydań Emacs i Firefox. Za pomocą jednego polecenia ggplot2 łatwo jest utworzyć wykres, który używa less (w sposób, który wygląda nieco zabawnie, co nie mam nic przeciwko), aby zamieniać punkty w linie.

Jak mogę przedłużyć linie w przyszłości? Chcę ustalić, gdzie i kiedy przekroczą się numery wersji Emacsa i Firefoksa, a jeśli istnieje sposób na pokazanie zakresu błędów, tym lepiej.

Biorąc pod uwagę, że ggplot2 kreśli linie, musi mieć model, ale nie widzę, jak powiedzieć mu, aby przedłużył linie lub wyciągnął model i coś z nim zrobił.

> 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)

Wersje Emacs i Firefox według daty

(Uwaga: musiałem sfałszować wczesne wersje Firefoksa i zmienić 0,1 na 0,01 itd., Ponieważ „kropka pierwsza” i „kropka dziesiąta” są równe arytmetycznie. Wiem, że Firefox wypuszcza teraz co sześć tygodni, ale nie istnieją ale interesuje mnie ogólna odpowiedź na to pytanie dotyczące prognoz).

William Denton
źródło

Odpowiedzi:

22

Jak wspomina @Glen, musisz użyć stat_smoothmetody, która obsługuje ekstrapolacje, która loessnie. lmrobi to jednak. To, co musisz zrobić, to użyć fullrangeparametru stat_smoothi rozwinąć oś x, aby uwzględnić zakres, który chcesz przewidzieć. Nie mam twoich danych, ale oto przykład z wykorzystaniem zestawu danych mtcars:

ggplot(mtcars,aes(x=disp,y=hp)) + geom_point() + xlim(0,700) +
stat_smooth(method="lm",fullrange=TRUE)
James
źródło
1
Dzięki, to działa (pomijając niektóre dane, aby działała linia Firefox): ggplot (podzbiór (programy,! (Program == „Firefox” i wersja <4)), aes (y = wersja, x = data, 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
3

Będziesz musiał przewidzieć wartości dla przyszłych obserwacji poza ggplot2, a następnie wykreślić przewidywane wartości, możesz również uzyskać przedział ufności dla tych prognoz.

Spójrz na funkcję lessa, chociaż nie jestem pewien, czy wykonuje przewidywania poza zakresem danych, jestem pewien, że działa jakaś gładka funkcja.

Jednak zwykle nie jest rozsądne przewidywanie wartości poza zakresem danych. Nie ufałbym tym przewidywaniom.

Możesz sprawdzić wartości prognozowania przy użyciu modelu szeregów czasowych.

Dolina górska
źródło