Bagaimana cara memprediksi atau memperluas garis regresi di ggplot2?

17

Saya memiliki kerangka data yang berisi dua seri waktu: tanggal dan nomor versi rilis Emacs dan Firefox. Menggunakan satu perintah ggplot2 mudah untuk membuat bagan yang menggunakan loess (dengan cara yang terlihat sedikit lucu, yang saya tidak keberatan) untuk mengubah poin menjadi garis.

Bagaimana saya bisa memperluas garis ke masa depan? Saya ingin menentukan di mana dan kapan nomor versi Emacs dan Firefox akan bersilangan, dan jika ada cara untuk menunjukkan rentang kesalahan, semakin baik.

Mengingat bahwa ggplot2 merencanakan garis, ia harus memiliki model, tetapi saya tidak tahu bagaimana cara mengatakannya untuk memperluas garis, atau untuk mengeluarkan model dan melakukan sesuatu dengannya.

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

Versi Emacs dan Firefox berdasarkan tanggal

(Catatan: Saya harus memalsukan versi Firefox awal dan mengubah 0,1 menjadi 0,01, dll., Karena "titik satu" dan "titik sepuluh" adalah sama secara hitung. Saya tahu Firefox merilis setiap enam minggu sekarang, tetapi mereka tidak ada namun, dan saya tertarik pada jawaban umum untuk pertanyaan prediksi ini.)

William Denton
sumber

Jawaban:

21

Sebagai @Glen menyebutkan Anda harus menggunakan stat_smoothmetode yang mendukung ekstrapolasi, yang loesstidak. lmNamun demikian. Yang perlu Anda lakukan adalah menggunakan fullrangeparameter stat_smoothdan perluas sumbu x untuk memasukkan rentang yang ingin Anda prediksi. Saya tidak memiliki data Anda, tetapi inilah contoh menggunakan dataset mtcars:

ggplot(mtcars,aes(x=disp,y=hp)) + geom_point() + xlim(0,700) +
stat_smooth(method="lm",fullrange=TRUE)
James
sumber
1
Terima kasih, ini berhasil (tidak menampilkan beberapa data sehingga jalur Firefox berfungsi): ggplot (subset (program,! (Program == "Firefox" & Versi <4)), aes (y = Versi, x = Tanggal, color = Program)) + geom_point () + ylim (0,30) + xlim (as.Date ("1985-01-01"), as.Date ("2015-01-01")) + stat_smooth (metode = lm, fullrange = TRUE)
William Denton
3

Anda harus memprediksi nilai untuk pengamatan di masa depan di luar ggplot2 dan kemudian memplot nilai yang diprediksi, Anda juga bisa mendapatkan interval kepercayaan untuk prediksi ini.

Lihatlah fungsi loess, meskipun saya tidak yakin apakah prediksi di luar rentang data Anda, saya yakin beberapa fungsi mulus tidak.

Namun biasanya tidak bijaksana untuk memprediksi nilai di luar rentang data Anda. Saya tidak akan menaruh banyak kepercayaan pada prediksi ini.

Anda mungkin ingin menyelidiki nilai prediksi menggunakan model deret waktu.

Lembah kecil
sumber