Bagaimana cara menghitung interval prediksi untuk LOESS?

17

Saya memiliki beberapa data yang saya pas menggunakan model LOESS di R, memberi saya ini:

masukkan deskripsi gambar di sini

Data memiliki satu prediktor dan satu respons, dan bersifat heteroskedastik.

Saya juga menambahkan interval kepercayaan. Masalahnya adalah intervalnya adalah interval kepercayaan untuk garis, sedangkan saya tertarik pada interval prediksi. Misalnya, panel bawah lebih bervariasi daripada panel atas, tetapi ini tidak ditangkap dalam interval.

Pertanyaan ini sedikit terkait: Memahami pita kepercayaan dari regresi polinomial , terutama jawaban oleh @AndyW, namun dalam contohnya ia menggunakan interval="predict"argumen yang relatif langsung ada predict.lm, tetapi tidak ada predict.loess.

Jadi saya punya dua pertanyaan yang sangat terkait:

  1. Bagaimana cara mendapatkan interval prediksi pointwise untuk LOESS?
  2. Bagaimana saya bisa memprediksi nilai yang akan menangkap interval itu, yaitu menghasilkan sekelompok angka acak yang pada akhirnya akan tampak seperti data asli?

Mungkin saja saya tidak perlu LOESS dan harus menggunakan yang lain, tapi saya tidak terbiasa dengan pilihan saya. Pada dasarnya itu harus sesuai dengan garis menggunakan regresi lokal atau regresi linier berganda, memberi saya perkiraan kesalahan untuk garis, dan juga variasi yang berbeda untuk variabel penjelas yang berbeda, jadi saya dapat memprediksi distribusi variabel respons (y) pada nilai x tertentu .

Gimelist
sumber
Apakah ini interval prediksi yang tepat?
Glen_b -Reinstate Monica
Apa yang Anda maksud dengan ini"? Dan saya tidak yakin apakah itu searah atau tidak. Pertanyaan saya 2 adalah apa yang saya cari - sayangnya saya tidak akrab dengan nomenklaturnya.
Gimelist
Maksud saya adalah "hal yang ditanyakan dalam judul"
Glen_b -Reinstate Monica
Jadi saya tidak yakin - lihat komentar saya sebelumnya. Pada dasarnya saya sedang mencari interval yang akan menangkap varian aktual dalam poin data, seperti yang dijelaskan dalam pertanyaan saya.
Gimelist
1
Spread mungkin variabel (itu sebabnya saya memilih untuk regresi lokal di tempat pertama). Prediktor tunggal.
Gimelist

Jawaban:

12

Saya tidak tahu bagaimana melakukan band prediksi dengan loessfungsi asli tetapi ada fungsi loess.sddalam msirpaket yang melakukan hal itu! Hampir kata demi kata dari msirdokumentasi:

library(msir)
data(cars)
# Calculates and plots a 1.96 * SD prediction band, that is,
# a 95% prediction band
l <- loess.sd(cars, nsigma = 1.96)
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

masukkan deskripsi gambar di sini

Pertanyaan kedua Anda agak sulit karena loess.sdtidak datang dengan fungsi prediksi, tetapi Anda dapat meretasnya bersama-sama dengan secara linear menginterpolasi cara yang diprediksi dan SD yang Anda dapatkan loess.sd(menggunakan approx). Ini dapat, pada gilirannya, digunakan untuk mensimulasikan data menggunakan distribusi normal dengan cara yang diprediksi dan SD:

# Simulate x data uniformly and y data acording to the loess fit
sim_x <- runif(100, min(cars[,1]), max(cars[,1]))
pred_mean <- approx(l$x, l$y, xout = sim_x)$y
pred_sd <- approx(l$x, l$sd, xout = sim_x)$y
sim_y <- rnorm(100, pred_mean, pred_sd) 

# Plots 95% prediction bands with simulated data 
plot(cars, main = "loess.sd(cars)", col="red", pch=19)
points(sim_x, sim_y, col="blue")
lines(l$x, l$y)
lines(l$x, l$upper, lty=2)
lines(l$x, l$lower, lty=2)

masukkan deskripsi gambar di sini

Rasmus Bååth
sumber
Persis apa yang saya cari. Ketika melihat metode yang digunakannya dengan melihat kode loess.sd, itu tidak jauh berbeda dari apa yang disarankan @rnso dalam komentar untuk pertanyaan saya yang lain . Terima kasih!
Gimelist
Bootstrap untuk menghasilkan interval?
SmallChess