Bagaimana cara ggplot menghitung interval kepercayaan untuk regresi?

15

Paket R plotting ggplot2 memiliki fungsi luar biasa yang disebut stat_smooth untuk memplot garis regresi (atau kurva) dengan pita kepercayaan terkait.

Namun saya mengalami kesulitan mencari tahu persis bagaimana pita kepercayaan ini dihasilkan, untuk setiap kali garis regresi (atau "metode"). Bagaimana saya dapat menemukan informasi ini?

static_rtti
sumber
2
Lihat bagian berjudul "Detail" di tautan Anda.
Stéphane Laurent
1
@ StéphaneLaurent: Saya sudah membaca bagian itu, tapi saya masih kesulitan menghubungkan titik-titik. Saya menggunakan metode "rlm" untuk memasang garis, bagaimana interval kepercayaan dihitung (secara matematis, persamaan / algoritma apa?)? Bagaimana saya dapat menemukan informasi itu?
static_rtti
1
Jadi saya pikir Anda harus mengajukan pertanyaan yang lebih tepat.
Stéphane Laurent
1
Saya pikir pertanyaan Anda cukup tepat ... tapi saya kira Anda tidak akan mendapat jawaban di sini. Anda mungkin lebih beruntung di grup google ggplot2: groups.google.com/forum/?fromgroups#!forum/ggplot2
russellpierce

Jawaban:

22

Dari Detailsbagian bantuan

Perhitungan dilakukan oleh fungsi generik predictdf (dan saat ini tidak berdokumen). Untuk sebagian besar metode batas kepercayaan dihitung menggunakan metode prediksi - pengecualiannya loess yang menggunakan pendekatan berbasis t, dan untuk glm di mana interval kepercayaan normal dibangun pada skala tautan, dan kemudian ditransformasikan kembali ke skala respons.

Jadi predictdf umumnya akan memanggil stats::predict, yang pada gilirannya akan memanggil predictmetode yang benar untuk metode smoothing. Fungsi lain yang melibatkan stat_smooth juga berguna untuk dipertimbangkan.

Sebagian besar fungsi pemasangan model akan memiliki predictmetode yang terkait dengan classmodel. Ini biasanya akan mengambil newdataobjek dan argumen se.fityang akan menunjukkan apakah kesalahan standar akan dipasang. (lihat ?predict) untuk perincian lebih lanjut.

se
menampilkan interval kepercayaan sekitar mulus? (BENAR secara default, lihat level untuk mengontrol

Ini diteruskan langsung ke metode prediksi untuk mengembalikan kesalahan standar yang sesuai (tergantung metode)

fullrange
haruskah fit span rentang penuh plot, atau hanya data

Ini mendefinisikan newdatanilai untuk xprediksi yang akan dievaluasi

level tingkat interval kepercayaan untuk digunakan (0,95 secara default)

Dilewatkan secara langsung ke metode prediksi sehingga interval kepercayaan dapat menentukan nilai kritis yang sesuai (misalnya predict.lmpenggunaan qt((1 - level)/2, df)untuk kesalahan standar yang akan dikalikan dengan

n jumlah poin untuk mengevaluasi lebih lancar di

Digunakan bersama dengan fullrangeuntuk mendefinisikan xnilai - nilai dalam newdataobjek.

Dalam panggilan ke stat_smoothAnda dapat menentukan semana yang sebagian cocok dengan se.fit(atau se), dan akan menentukan intervalargumen jika perlu. levelakan memberikan level interval kepercayaan (default 0.95).

The newdataobjek didefinisikan dalam pengolahan, tergantung pada pengaturan Anda fullrangeke urutan panjang ndalam berbagai plot atau data.

Dalam kasus Anda, menggunakan rlm, ini akan menggunakan predict.rlm, yang didefinisikan sebagai

predict.rlm <- function (object, newdata = NULL, scale = NULL, ...)
{
    ## problems with using predict.lm are the scale and
    ## the QR decomp which has been done on down-weighted values.
    object$qr <- qr(sqrt(object$weights) * object$x)
        predict.lm(object, newdata = newdata, scale = object$s, ...)
}

Jadi itu adalah panggilan internal predict.lmdengan skala yang sesuai dari qrdekomposisi dan scaleargumen.

mnel
sumber
... dan predict.rlm disembunyikan di dalam MASS ... dan panggilan ke predictdf meneruskan model, xseq, se, dan argumen level untuk predict.rlm ... tetapi dari mana nilai-nilai itu berasal? Yah, saya kira itu tergantung pada apa yang terjadi ketika argumen dilewatkan dari stat_smooth ke StatSmooth $ baru ... yang kemudian pada gilirannya panggilan ...
russellpierce
1
Maksud saya adalah, bahwa jawaban Anda adalah langkah ke arah yang benar, tetapi menjawab pertanyaan OPs sepenuhnya tidak sepele seperti yang pertama kali terlihat (walaupun orang mengharapkan kode akan berperilaku masuk akal ... seseorang tidak yakin kecuali seseorang melacaknya sepenuhnya )
russellpierce
2
Orang memang mengharapkan kode untuk berperilaku bijaksana, jika predictmetode ini telah diatur dalam cara standar. Saya telah mengedit jawaban saya untuk mengatasi masalah yang muncul dalam komentar pertama Anda.
mnel
@mnel: terima kasih banyak atas jawaban yang sangat terperinci dan bermanfaat ini!
static_rtti