Come prevedere o estendere le linee di regressione in ggplot2?


17

Ho un frame di dati che contiene due serie temporali: le date e i numeri di versione delle versioni di Emacs e Firefox. Usando un comando ggplot2 è facile creare un grafico che usa loess (in un modo che sembra un po 'divertente, che non mi dispiace) per trasformare i punti in linee.

Come posso estendere le linee nel futuro? Voglio determinare dove e quando verranno incrociati i numeri di versione di Emacs e Firefox e se c'è un modo per mostrare un intervallo di errori, tanto meglio.

Dato che ggplot2 sta disegnando le linee, deve avere un modello, ma non vedo come dirgli di estendere le linee o di far uscire il modello e fare qualcosa con esso.

> 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 e versioni di Firefox per data

(Nota: ho dovuto spostare le prime versioni di Firefox e passare da 0.1 a 0.01, ecc., Perché "punto uno" e "punto dieci" sono uguali aritmeticamente. So che Firefox viene rilasciato ogni sei settimane, ma non esistono e sono interessato a una risposta generale a questa domanda di previsione.)

Risposte:


21

Come menziona @Glen, devi usare un stat_smoothmetodo che supporti le estrapolazioni, che loessnon lo fa. lmlo fa comunque. Quello che devi fare è usare il fullrangeparametro stat_smoothed espandere l'asse x per includere l'intervallo su cui vuoi prevedere. Non ho i tuoi dati, ma ecco un esempio usando il set di dati mtcars:

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

1
Grazie, questo fa il lavoro (tralasciando alcuni dati affinché la linea di Firefox funzioni): ggplot (sottoinsieme (programmi,! (Programma == "Firefox" e versione <4)), aes (y = Versione, 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

Dovresti prevedere i valori per le osservazioni future al di fuori di ggplot2 e quindi tracciare i valori previsti, potresti anche ottenere un intervallo di confidenza per queste previsioni.

Guarda la funzione loess, anche se non sono sicuro che faccia previsioni al di fuori del tuo intervallo di dati, tuttavia sono sicuro che alcune funzioni regolari lo facciano.

Tuttavia, di solito non è saggio prevedere valori al di fuori dell'intervallo di dati. Non mi fiderei molto di queste previsioni.

È possibile che si desideri analizzare i valori di previsione utilizzando un modello di serie storiche.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.