Como prever ou estender linhas de regressão no ggplot2?

17

Eu tenho um quadro de dados que contém duas séries temporais: as datas e os números de versão dos lançamentos do Emacs e Firefox. Usando um comando ggplot2, é fácil criar um gráfico que use loess (de uma maneira que pareça um pouco divertida, o que não me importo) para transformar os pontos em linhas.

Como posso estender as linhas para o futuro? Quero determinar onde e quando os números de versão do Emacs e Firefox serão cruzados e, se houver uma maneira de mostrar um intervalo de erros, tanto melhor.

Dado que o ggplot2 está plotando as linhas, ele deve ter um modelo, mas não vejo como dizer para estender as linhas ou para obter o modelo e fazer algo com ele.

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

Versões do Emacs e Firefox por data

(Nota: eu tive que falsificar as versões anteriores do Firefox e transformar 0,1 em 0,01, etc., porque "ponto um" e "ponto dez" são iguais aritmeticamente. Eu sei que o Firefox está lançando a cada seis semanas agora, mas elas não existem ainda, e estou interessado em uma resposta geral para essa pergunta de previsão.)

William Denton
fonte

Respostas:

21

Como o @Glen menciona, você deve usar um stat_smoothmétodo que suporte extrapolações, o que loessnão. lmfaz no entanto. O que você precisa fazer é usar o fullrangeparâmetro stat_smoothe expandir o eixo x para incluir o intervalo que você deseja prever. Não tenho seus dados, mas aqui está um exemplo usando o conjunto de dados mtcars:

ggplot(mtcars,aes(x=disp,y=hp)) + geom_point() + xlim(0,700) +
stat_smooth(method="lm",fullrange=TRUE)
James
fonte
11
Obrigado, isso faz o trabalho (deixando de fora alguns dados para que a linha do Firefox funcione): ggplot (subconjunto (programas,! (Programa == "Firefox" e versão <4)), aes (y = Versão, x = Data, color = Program)) + geom_point () + ylim (0,30) + xlim (as.Date ("1985-01-01"), as.Date ("2015-01-01")) + stat_smooth (método = lm, fullrange = TRUE)
William Denton
3

Você precisaria prever os valores para futuras observações fora do ggplot2 e, em seguida, plotar os valores previstos, também poderia obter um intervalo de confiança para essas previsões.

Observe a função loess, embora não tenha certeza se faz previsões fora do seu intervalo de dados, tenho certeza de que alguma função suave faz isso.

No entanto, geralmente não é aconselhável prever valores fora do seu intervalo de dados. Eu não confiaria muito nessas previsões.

Você pode investigar a previsão de valores usando um modelo de série temporal.

Glen
fonte