R
如何計算 LOESS 的預測區間?
我有一些數據是我在 R 中使用 LOESS 模型擬合的,給了我這個:
數據具有一個預測變量和一個響應變量,並且是異方差的。
我還添加了置信區間。問題是區間是線的置信區間,而我對預測區間感興趣。例如,底部面板比頂部面板更具可變性,但這並未在間隔中捕獲。
這個問題有點相關: 從多項式回歸中理解置信帶,尤其是@AndyW 的答案,但是在他的示例中,他使用了
interval="predict"
存在於 中的相對簡單的論點predict.lm
,但 中沒有predict.loess
。所以我有兩個非常相關的問題:
- 如何獲得 LOESS 的逐點預測區間?
- 如何預測將捕獲該間隔的值,即生成一堆最終看起來有點像原始數據的隨機數?
我可能不需要 LOESS,應該使用其他東西,但我不熟悉我的選擇。基本上它應該使用局部回歸或多元線性回歸擬合線,給我對線的誤差估計,此外還有不同解釋變量的不同方差,所以我可以預測響應變量 (y) 在某些 x 值處的分佈.
我不知道如何用原始
loess
函數做預測帶,但包loess.sd
中有一個函數可以做到這一點!從文檔中幾乎逐字記錄:msir
msir
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)
你的第二個問題有點棘手,因為
loess.sd
它沒有預測函數,但你可以通過線性插值預測的平均值和你得到的標準差loess.sd
(使用approx
)來破解它。反過來,這些可用於使用具有預測均值和 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)